a9d9e14bc6e3d70d01824d06e0d0c1730306155e tdreszer Thu Aug 12 17:17:40 2010 -0700 Needed to change 'sel' and 'vis' logic extensively to make findTracks play nice with composites and non-subtracks diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js index cf383ef..c46e7bc 100644 --- src/hg/js/hgTracks.js +++ src/hg/js/hgTracks.js @@ -1939,36 +1939,71 @@ ///////////////////////////////////////////////////// // findTracks functions + +function findTracksChangeVis(seenVis) +{ + var trackName = $(seenVis).attr('id'); + hiddenVis = $("input[name='"+trackName+"']"); + $(hiddenVis).attr('disabled',false); + $(hiddenVis).val($(seenVis).val()); +} + function findTracksClickedOne(selCb,justClicked) -{ // When a found track CB is clicked, do this - var name = $(selCb).attr('name'); - var trackName = name.substring(0,name.length - "_sel".length) - var vis = $('select[name="'+trackName+'"]'); - if($(selCb).attr('checked')) { - $(vis).attr('disabled', false); - if($(vis).attr('selectedIndex') == 0) - $(vis).attr('selectedIndex',1); - } else { - $(vis).attr('disabled', true); +{ + var selName = $(selCb).attr('id'); + var trackName = selName.substring(0,selName.length - "_sel".length) + hiddenSel = $("input[name='"+selName+"']"); + var seenVis = $('select#' + trackName); + hiddenVis = $("input[name='"+trackName+"']"); + var tr = $(selCb).parents('tr.found'); + var subtrack = $(tr).hasClass('subtrack'); + var canPack = $(tr).hasClass('canPack'); + var checked = $(selCb).attr('checked'); + + // First deal with seenVis control + if(checked) { + $(seenVis).attr('disabled', false); + if($(seenVis).attr('selectedIndex') == 0) { + if(canPack) + $(seenVis).attr('selectedIndex',3); // packed // FIXME: Must be a better way to select pack/full + else + $(seenVis).attr('selectedIndex',2); // full + } + } else + $(seenVis).attr('disabled', true ); + if(justClicked) { - // should ajax over the removal of this cart setting just to be sure. - setCartVar(trackName,"n/a"); + // Deal with hiddenSel so that submit does the right thing + if(subtrack) { + $(hiddenSel).attr('disabled',false); + if(checked) + $(hiddenSel).val('on'); + else + $(hiddenSel).val('[]'); + } + + // Deal with hiddenVis so that submit does the right thing + if(checked) { + findTracksChangeVis(seenVis); + //$(hiddenVis).val('value',seenVisVal); + } else { + $(hiddenVis).attr('disabled',false); + $(hiddenVis).val('[]'); } } // The "view in browser" button should be enabled/disabled if(justClicked) { - var selCbsChecked = $('input.selCb:checked'); - //$('input.viewBtn').attr('disabled', ($(selCbsChecked).length == 0) ); - if($(selCbsChecked).length > 0) + if(checked) $('input.viewBtn').val('View in Browser'); - else + else if($('input.selCb:checked').length == 0) $('input.viewBtn').val('Return to Browser'); } findTracksCounts(); } + function findTracksNormalizeFound() { // Normalize the page based upon current state of all found tracks var selCbs = $('input.selCb'); @@ -1989,33 +2024,26 @@ function findTracksCheckAll(check) { + // NOTE: Difficulties with "_sel" and "vis" controls: + // 1) subtracks need both "sel" and "vis", but non-subtracks need only "vis" + // 2) Submit of form instead of ajax is nice (because it allows cancelling changes), but do not want to set any vars, unless specifically changed on form + // 3) When unchecked, need to delete vars instead of set them + // Solution to "sel", "vis" difficulties + // 1) findTracks remains a submit but: + // 2) 'sel' and 'vis' input are not named (won't be submitted) + // 3) hidden disabled and named 'sel' and 'vis' vars exist + // 4a) check subtrack: enable hidden 'sel' and 'vis' track, set to 'on' and pack/full + // 4b) check non-track: enable hidden 'vis', set to pack/full + // 5a) uncheck subtrack: enable hidden 'sel' and 'vis' track, set to '[]' and '[]' + // 5b) uncheck non-track: enable hidden 'vis', set to '[]' + // 6) Change vis: enable hidden 'vis', set to non-hidden vis + var selCbs = $('input.selCb'); $(selCbs).attr('checked',check); // All should have their vis enabled/disabled appropriately (false means don't update cart) $(selCbs).each( function(i) { findTracksClickedOne(this,false); }); - if(check == false) { - // make a single ajax call to remove all vis vars - // FIXME: I think we have now changed the paradigm for subtrack vis: - // There must be a {trackName}_sel to have subtrack level vis override. - // This means rightClick must make a {trackName}_sel, which is needed for hgTrackUi conformity anyway - // AND hgTracks.c should now be keyed off the "_sel" for subtrack without composite. - // THIS would make these ajax calls to clean up vis uneeded. - // ONE MORE COMPLICATION: non-subtracks do not currently have a "_sel" setting! - // Distinguish here? Only subtracks get "_sel" CB set here? Control by "name" of CB? - var vars = []; - var vals = []; - $(selCbs).each(function(i) { - var name = $(this).attr('name'); - vars.push(name.substring(0,name.length - "_sel".length)); - vals.push("n/a"); - }); - if(vars.length > 0) - setCartVars(vars,vals); - } - - //$('input.viewBtn').attr('disabled',(check == false)); if(check) $('input.viewBtn').val('View in Browser'); else