497d85f0a8f8ca48592955b0edd40468305a5be3 tdreszer Tue Sep 27 17:08:37 2011 -0700 Major rework of subCfg module to no longer rely upon removing name at initialization. diff --git src/hg/js/hui.js src/hg/js/hui.js index 26347e9..742a5b2 100644 --- src/hg/js/hui.js +++ src/hg/js/hui.js @@ -49,31 +49,31 @@ var classList = $( this ).attr("class").split(" "); classesAbcChecked.push( aryRemove(classList,["matCB","disabled","abc"]) ); }); // Walk through checked non-ABC matCBs and sheck related subCBs var subCBs = $("input.subCB").filter("."+view).not(":checked"); matCBs.not(".abc").each( function (i) { var classList = $( this ).attr("class").split(" "); classList = aryRemove(classList,["matCB","disabled"]); var subCBsMatching = objsFilterByClasses(subCBs,"and",classList); if (classesAbcChecked.length>0) subCBsMatching = objsFilterByClasses(subCBsMatching,"or",classesAbcChecked); // Check the subCBs that belong to this view and checked matCBs subCBsMatching.each( function (i) { this.checked = true; - matSubCBsetShadow(this); // will update "scm" if needed + matSubCBsetShadow(this); // will update "subCfg" if needed hideOrShowSubtrack(this); }); }); } // If no matrix, then enabling is all that was needed. // fix 3-way which may need to go from unchecked to .disabled var matCBs = $("input.matCB").not(".abc").not(".disabled").not(":checked"); if(matCBs.length > 0) { $( matCBs ).each( function (i) { matChkBoxNormalize( this, classesHidden ); }); } } } // fix 3-way matCBs which may need to go from disabled to checked or unchecked depending var matCBs = $("input.matCB").not(":checked").not(".disabled"); var matCBs = matCBsWhichAreComplete(false); @@ -99,32 +99,32 @@ var visDD = normed($("select.visDD")); // limit to hidden if (visDD != undefined) { if ($(visDD).attr('selectedIndex') == 0) { $(visDD).attr('selectedIndex',$(visDD).children('option').length - 1); $(visDD).change(); // triggers onchange code effecting inherited subtrack vis } } } function matSubCbClick(subCB) { // subCB:onclick When a subtrack checkbox is clicked, it may result in // Clicking/unclicking the corresponding matrix CB. Also the // subtrack may be hidden as a result. - // NOTE: if "scm" then 'change' event will update it - if (isFauxDisabled(subCB,false)) { // disabled subCB is still clickable when "scm" + // NOTE: if "subCfg" then 'change' event will update it + if (isFauxDisabled(subCB,false)) { // disabled subCB is still clickable when "subCfg" subCB.checked = true; fauxDisable(subCB,false,""); // enable and get rid of message } matSubCBsetShadow(subCB); hideOrShowSubtrack(subCB); // When subCBs are clicked, 3-state matCBs may need to be set var classes = matViewClasses('hidden'); classes = classes.concat( matAbcCBclasses(false) ); var matCB = matCbFindFromSubCb( subCB ); if( matCB != undefined ) { matChkBoxNormalize( matCB, classes ); } //var abcCB = matAbcCbFindFromSubCb( subCB ); //if( abcCB != undefined ) { // matChkBoxNormalize( abcCB, classes ); @@ -187,31 +187,31 @@ $( matCBs ).each( function (i) { this.checked = state; matCbComplete(this,true); }); var subCbs = $("input.subCB"); for(var vIx=1;vIx<arguments.length;vIx++) { subCbs = $( subCbs ).filter("."+arguments[vIx]); // Successively limit list by additional classes. } if(state) { // If clicking [+], further limit to only checked ABCs var classes = matAbcCBclasses(false); subCbs = objsFilterByClasses(subCbs,"not",classes); // remove unchecked abcCB classes } $( subCbs ).each( function (i) { if (this.checked != state) { this.checked = state; - $(this).change() // NOTE: if "scm" then 'change' event will update it + $(this).change() // NOTE: if "subCfg" then 'change' event will update it matSubCBsetShadow(this); } }); if(state) exposeAll(); // Unhide composite vis? showOrHideSelectedSubtracks(); matSubCBsSelected(); //jQuery(this).css('cursor', ''); var tbody = $( subCbs[0] ).parents('tbody.sorting'); if (tbody != undefined) $(tbody).removeClass('sorting'); return true; } function matSetMatrixCheckBoxes(state) @@ -280,73 +280,73 @@ { // Enables/Disables subtracks checkboxes. If additional arguments are passed in, the list of CBs will be narrowed by the classes var subCBs = $("input.subCB"); for(var vIx=1;vIx<arguments.length;vIx++) { if(arguments[vIx].length > 0) subCBs = subCBs.filter("."+arguments[vIx]); // Successively limit list by additional classes. } subCBs.each( function (i) { if(state) { fauxDisable(this,false,''); $(this).parent().attr('cursor',''); } else { fauxDisable(this,true, 'view is hidden'); $(this).parent().attr('cursor','pointer'); } - matSubCBsetShadow(this); // will update "scm" if needed + matSubCBsetShadow(this); // will update "subCfg" if needed hideOrShowSubtrack(this); }); return true; } function matSubCBcheckOne(subCB,state) { // setting a single subCB may cause it to appear/disappear if (subCB.checked != state) { subCB.checked = state; - $(subCB).change(); // NOTE: if "scm" then 'change' event will update it + $(subCB).change(); // NOTE: if "subCfg" then 'change' event will update it matSubCBsetShadow(subCB); hideOrShowSubtrack(subCB); } } function matSubCBsetShadow(subCB) { // Since CBs only get into cart when enabled/checked, the shadow control enables cart to know other states -// will update "scm" if needed +// will update "subCfg" if needed var shadowState = 0; if(subCB.checked) shadowState = 1; //if(subCB.disabled) if (isFauxDisabled(subCB,true)) shadowState -= 2; - var fourWay = normed($("input.fourWay#boolshad_-"+subCB.id)); + var fourWay = normed($("input.fourWay[name='boolshad\\."+subCB.name+"']")); if (fourWay == undefined && subCB.name != undefined) { - fourWay = normed($("input.fourWay[name='boolshad\\."+subCB.name+"']")); + fourWay = normed($("input.cbShadow#boolshad_-"+subCB.id)); // subCfg noname version specific if (fourWay == undefined) fourWay = normed($("#"+subCB.name+"_4way")); // FIXME: obsolete as soon as subCfg is working } if (fourWay == undefined) { warn("DEBUG: Failed to find fourWay shadow for '#"+subCB.id+"' ["+subCB.name+"]"); return; } if ($(fourWay).val() != shadowState.toString()) { $(fourWay).val(shadowState); - if (typeof(scm) !== "undefined") { - scm.enableCfg(subCB,null,(shadowState == 1)); - $(subCB).change(); // 'change' event will update "scm" + if (typeof(subCfg) !== "undefined") { + subCfg.enableCfg(subCB,null,(shadowState == 1)); + /////$(subCB).change(); // 'change' event will update "subCfg" // FIXME: Is this needed?? } } } function matChkBoxNormalize(matCB) { // Makes sure matCBs are in one of 3 states (checked,unchecked,indeterminate) based on matching set of subCBs var classList = $( matCB ).attr("class").split(" "); var isABC = (aryFind(classList,"abc") != -1); if(isABC) alert("ASSERT: matChkBoxNormalize() called for dim ABC!"); classList = aryRemove(classList,["matCB","disabled"]); var classes = '.' + classList.join(".");// created string filter of classes converting "matCB K562 H3K4me1" as ".K562.H3K4me1" var subCBs = $("input.subCB").filter(classes); // All subtrack CBs that match matrix CB @@ -482,32 +482,32 @@ var classList = $( this ).attr("class").split(" "); classList = aryRemove(classList,["matCB","abc"]); classes.push( classList[0] ); }); } else { // No abcCBs so look for filterBox classes return filterCompositeClasses(wantSelected); } return classes; } function matSubCBsSelected() { // Displays visible and checked track count var counter = $('.subCBcount'); if(counter != undefined) { - var subCBs = $("input.subCB"); - $(counter).text($(subCBs).filter(":enabled:checked").length + " of " +$(subCBs).length+ " selected"); + var subCBs = $("input.subCB"); // subCfg uses fauxDisabled + $(counter).text($(subCBs).filter(":enabled:checked").not('.disabled').length + " of " +$(subCBs).length+ " selected"); } } /////////////////// subtrack configuration support //////////////// function compositeCfgUpdateSubtrackCfgs(inp) { // Updates all subtrack configuration values when the composite cfg is changed // If view association then find it: var view = ""; var daddy = normed($(inp).parents(".blueBox")); if(daddy != undefined) { var classList = $(daddy).attr("class").split(" "); if(classList.length == 2) { view = classList[1]; } @@ -1107,31 +1107,31 @@ function tableSortAtButtonPress(anchor,tagId) { // Special ONLY for hgTrackUi sorting. Others use utils.js::tableSortOnButtonPress() var table = $( anchor ).parents("table.sortable"); if (table) { subtrackCfgHideAll(table); waitOnFunction( _tableSortOnButtonPressEncapsulated, anchor, tagId); } return false; // called by link so return false means don't try to go anywhere } function fauxDisable(obj,disable,title) {// Makes an obj appear disabled, but it isn't // span.disabled & input.disabled is opacity 0.5 // div.disabled is border-color: gray; color: gray; - if ($(obj).hasClass('subCB') == false || typeof(scm) !== "undefined") { + if ($(obj).hasClass('subCB') == false || typeof(subCfg) !== "undefined") { if(disable) { if ($.browser.msie) $(obj).css('opacity', '0.5'); $(obj).addClass('disabled'); } else { if ($.browser.msie) $(obj).css('opacity', '1'); // For some reason IE<9 accepts direct change but isn't happy with simply adding class! $(obj).removeClass('disabled'); } } else { obj.disabled = disable; } if (arguments.length > 2) $(obj).attr("title",title); } @@ -1140,32 +1140,32 @@ {// Is object [faux] disabled? if (orReallyDisabled && obj.disabled) return true; return ($(obj).hasClass('disabled')); } // The following js depends upon the jQuery library $(document).ready(function() { if (normed($('table.subtracks')) != undefined) { matInitializeMatrix(); // If divs with class 'subCfg' then initialize the subtrack cfg code // NOTE: must be before any ddcl setup - if (typeof(scm) !== "undefined" && normed($("div.subCfg")) != undefined) { - scm.initialize(); + if (typeof(subCfg) !== "undefined" && normed($("div.subCfg")) != undefined) { + subCfg.initialize(); } } // Initialize sortable tables $('table.sortable').each(function (ix) { sortTableInitialize(this,true,true); }); // Register tables with drag and drop $("table.tableWithDragAndDrop").each(function (ix) { tableDragAndDropRegister(this); }); // Put navigation links in top corner navigationLinksSetup();