29cda3bb2fb4fa07a300e12de17ba83377706a65 tdreszer Fri Jul 29 17:54:52 2011 -0700 More incremental changes before i most switch back to the master brqanch diff --git src/hg/js/hui.js src/hg/js/hui.js index b5b43a0..4f274b0 100644 --- src/hg/js/hui.js +++ src/hg/js/hui.js @@ -112,37 +112,31 @@ // 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 ); //} if(subCB.checked) exposeAll(); // Unhide composite vis? - var subtrackName = subCB.name; - if (subtrackName == undefined || subtrackName.length == 0) - subtrackName = subCB.id; - if (subtrackName != undefined && subtrackName.length > 0) { - subtrackName = subtrackName.substring(0,subtrackName.length - 4); // '_sel'.length - scm.enableCfg(subCB,subtrackName,subCB.checked); - } + scm.enableCfg(subCB,null,subCB.checked); matSubCBsSelected(); } function matCbClick(matCB) { // matCB:onclick When a matrix CB is clicked, the set of subtracks checked may change // Also called indirectly by matButton:onclick via matSetMatrixCheckBoxes var classList = $( matCB ).attr("class").split(" "); var isABC = (aryFind(classList,"abc") != -1); classList = aryRemove(classList,"matCB","halfVis","abc"); if(classList.length == 0 ) matSubCBsCheck(matCB.checked); else if(classList.length == 1 ) @@ -287,30 +281,31 @@ $(this).parent().attr('title','view is hidden'); $(this).parent().attr('cursor','pointer'); } this.disabled = !state; matSubCBsetShadow(this); hideOrShowSubtrack(this); }); return true; } function matSubCBcheckOne(subCB,state) { // setting a single subCB may cause it to appear/disappear subCB.checked = state; + scm.enableCfg(subCB,null,state); 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 var shadowState = 0; if(subCB.checked) shadowState = 1; if(subCB.disabled) shadowState -= 2; $("#"+subCB.name+"_4way").val(shadowState); } @@ -1431,31 +1426,31 @@ } }); } } return myParents; }, childrenFind: function (parentObj) { // returns array of all currently populated child controls related to this parent control // parentObj could be composite level or view level // parent object could be for vis which has special rules var isComposite = false; var isVis = false; var suffix = scm.objSuffixGet(parentObj); - isVis = (suffix != undefined && suffix == 'vis'); + isVis = (suffix != undefined && suffix == 'vis'); // vis inside of subCfg var viewId = undefined; if (isVis) { // This is a view control isComposite = (suffix == undefined); suffix = undefined; if (!isComposite) { var classList = $( parentObj ).attr("class").split(" "); classList = aryRemove(classList,"viewDD","normalText"); if (classList.length != 1) { warn("Unexpected view vis class list:"+classList); return []; } viewId = classList[0]; } @@ -1488,30 +1483,55 @@ allChildren = viewChildren; else allChildren = jQuery.merge( allChildren, viewChildren ); } } return allChildren; } else { // if no views then just get them all return scm.childObjsFind(undefined,suffix); } } else { return scm.childObjsFind(viewId,suffix); } }, + visChildrenFind: function (parentObj) + { // returns array of all currently faux and populated vis child controls (which are not in subCfg div) + // parentObj could be composite level or view level + + var isVis = false; + var suffix = scm.objSuffixGet(parentObj); + isVis = (suffix == undefined || suffix == 'vis'); + var isComposite = (suffix == undefined); + + var subVis = $('.subVisDD'); // select:vis or faux:div + if (isComposite) { + + return subVis; + + } else { + var classList = $( parentObj ).attr("class").split(" "); + classList = aryRemove(classList,"viewDD","normalText"); + if (classList.length != 1) { + warn("Unexpected view vis class list:"+classList); + return []; + } + return $(subVis).filter('.' + classList[0]); + } + }, + propagateSetting: function (parentObj) { // propagate composite/view level setting to subtrack children var children = scm.childrenFind(parentObj); if(parentObj.type.indexOf("checkbox") == 0) { var parentChecked = parentObj.checked; $(children).each(function (i) { // Note checkbox and boolshad are children. if (this.type != 'hidden') this.checked = parentObj.checked; scm.clearChange(this); }); // deal with hidden boolshads! //var parentIdSafe = parentObj.id.replace(/\./g,"\\."); //var boolshad = $('input#boolshad\\.'+parentIdSafe); var boolshad = $('input#boolshad_-'+parentObj.id); @@ -1535,59 +1555,100 @@ var parentVal = $(parentObj).val(); var updateDdcl = ($(parentObj).hasClass('filterBy') || $(parentObj).hasClass('filterComp')); $(children).each(function (i) { $(this).val(parentVal); scm.clearChange(this); if (updateDdcl) ddcl.onComplete(this); }); } scm.markChange(parentObj); }, propagateViewVis: function (viewObj,compositeVis) { // propagate vis from a view limiting with compositeVis var limitedVis = Math.min (compositeVis,viewObj.selectedIndex); - var children = scm.childrenFind(viewObj); + var visText = 'hide'; + if (limitedVis == 1) + visText = 'dense'; + else if (limitedVis == 2) + visText = 'squish'; + else if (limitedVis == 3) + visText = 'pack'; + else if (limitedVis == 4) + visText = 'full'; + // vis outside of subCfg + var children = scm.visChildrenFind(viewObj); $(children).each(function (i) { - // TODO: only set if selected? + if ($(this).hasClass('fauxInput')) { + $(this).text(visText); + } else { $(this).attr('selectedIndex',limitedVis); scm.clearChange(this); + } }); + // vis inside of subCfg + //var children = scm.childrenFind(viewObj); + //$(children).each(function (i) { + // // TODO: only set if selected? + // $(this).attr('selectedIndex',limitedVis); + // scm.clearChange(this); + //}); }, + propagateVis: function (parentObj,viewId) { // propagate vis settings to subtrack children if (viewId == null) { // Walk through views and set with this var parentVis = parentObj.selectedIndex; if (scm.viewIds.length > 0) { - for (ix=0;ix<scm.viewIds;ix++) { - var viewObj = scm.viewObjFind(viewIds[ix],undefined); + for (var ix=0;ix<scm.viewIds.length;ix++) { + var viewObj = scm.viewObjFind(scm.viewIds[ix]);//,undefined); if (viewObj != undefined) scm.propagateViewVis(viewObj,parentVis); } } else { // No view so, simple - var children = scm.childrenFind(parentObj); + // vis outside of subCfg + var visText = 'hide'; + if (parentVis == 1) + visText = 'dense'; + else if (parentVis == 2) + visText = 'squish'; + else if (parentVis == 3) + visText = 'pack'; + else if (parentVis == 4) + visText = 'full'; + var children = scm.visChildrenFind(parentObj); $(children).each(function (i) { - var subCb = scm.subCbFind(this); - if (subCb != undefined) { - if (subCb.disabled != true && subCb.checked) { // TODO: Integrate with things that enable/check! + if ($(this).hasClass('fauxInput')) { + $(this).text(visText); + } else { $(this).attr('selectedIndex',parentVis); scm.clearChange(this); } - } }); + // vis inside of subCfg + //var children = scm.childrenFind(parentObj); + //$(children).each(function (i) { + // var subCb = scm.subCbFind(this); + // if (subCb != undefined) { + // if (subCb.disabled != true && subCb.checked) { // TODO: Integrate with things that enable/check! + // $(this).attr('selectedIndex',parentVis); + // scm.clearChange(this); + // } + // } + //}); } } else { // First get composite vis to limit with var compObj = scm.compositeObjFind(undefined); if (compObj == undefined) { warn('Could not find composite vis object!'); return false; } scm.propagateViewVis(parentObj,compObj.selectedIndex); } }, inheritSetting: function (childObj) { // update value if parents values override child values. var myParents = scm.parentsFind(childObj); @@ -1779,103 +1840,107 @@ url: "../cgi-bin/hgTrackUi?ajax=1&g=" + subtrack + "&hgsid=" + getHgsid() + "&db=" + getDb(), dataType: "html", trueSuccess: scm.cfgFill, success: catchErrorOrDispatch, error: errorHandler, cmd: "cfg", cache: false }); }, replaceWithVis: function (obj,subtrack,open) { // Replaces the current fauxVis object with a true visibility selector if ($(obj).hasClass('disabled')) return; - var selectHtml = "<SELECT id='"+subtrack+"' class='normalText subVisDD' style='width: 70px'>"; + var classList = $( obj ).attr("class").split(" "); + var view = classList[classList.length - 1]; + var classList = $(obj).attr('class').split(' '); // This relies on view being the last class!!! + var selectHtml = "<SELECT id='"+subtrack+"' class='normalText subVisDD "+view+"' style='width: 70px'>"; var selected = $(obj).text(); if (selected == 'hide') selectHtml += "<OPTION SELECTED>hide</OPTION><OPTION>dense</OPTION><OPTION>squish</OPTION><OPTION>pack</OPTION><OPTION>full</OPTION>"; else if (selected == 'dense') selectHtml += "<OPTION>hide</OPTION><OPTION SELECTED>dense</OPTION><OPTION>squish</OPTION><OPTION>pack</OPTION><OPTION>full</OPTION>"; else if (selected == 'squish') selectHtml += "<OPTION>hide</OPTION><OPTION>dense</OPTION><OPTION SELECTED>squish</OPTION><OPTION>pack</OPTION><OPTION>full</OPTION>"; else if (selected == 'full') selectHtml += "<OPTION>hide</OPTION><OPTION>dense</OPTION><OPTION>squish</OPTION><OPTION>pack</OPTION><OPTION SELECTED>full</OPTION>"; else selectHtml += "<OPTION>hide</OPTION><OPTION>dense</OPTION><OPTION>squish</OPTION><OPTION>pack</OPTION><OPTION>full</OPTION>"; selectHtml += "</SELECT>"; $(obj).replaceWith(selectHtml); if (open) { var newObj = $('select#'+subtrack); $(newObj).attr('size',5) $(newObj).one('blur',function (e) { $(this).attr('size',1); $(this).unbind() }); $(newObj).one('change',function (e) { $(this).attr('size',1); }); // Doesn't work! //$(newObj).parents('td').first().attr('valign','top'); $(newObj).focus(); } }, - enableCfg: function (cb,subtrack,setTo) + enableCfg: function (subCb,subtrack,setTo) { // Enables or disables subVis and wrench - if (cb == null || cb == undefined) { + if (subCb == null || subCb == undefined) { if (subtrack == null || subtrack.length == 0) { warn("scm.enableCfg() called without CB or subtrack."); return false; } - cb = $("input[name='"+subtrack+"'_sel]"); - if (cb == undefined || cb.length == 0) { + subCb = $("input[name='"+subtrack+"'_sel]"); + if (subCb == undefined || subCb.length == 0) { warn("scm.enableCfg() could not find CB for subtrack: "+subtrack); return false; } } - if (cb.length == 1) - cb = cb[0]; + if (subCb.length == 1) + subCb = subCb[0]; - var td = $(cb).parent('td'); + var td = $(subCb).parent('td'); if (td == undefined || td.length == 0) { - warn("scm.enableCfg() could not TD for CB: "+cb.name); + warn("scm.enableCfg() could not find TD for CB: "+subCb.name); return false; } if (td.length == 1) td = td[0]; var subFaux = $(td).find('div.subVisDD'); if (subFaux != undefined && subFaux.length > 0) { if (setTo == true) $(subFaux).removeClass('disabled'); else $(subFaux).addClass('disabled'); } else { var subVis = $(td).find('select.subVisDD'); if (subVis != undefined && subVis.length > 0) { $(subVis).attr('disable',!setTo); } } var wrench = $(td).find('span.clickable'); // TODO tighten this if (wrench != undefined && wrench.length > 0) { if (setTo == true) $(wrench).removeClass('halfVis'); else $(wrench).addClass('halfVis'); } }, + cfgToggle: function (wrench,subtrack) { // Opens/closes subtrack cfg dialog, populating if empty var cfg = $("div#div_cfg_"+subtrack); if (cfg == undefined || cfg.length == 0) { warn("Can't find div_cfg_"+subtrack); return false; } if (cfg.length == 1) cfg = cfg[0]; if ($(cfg).css('display') == 'none') { if ($(wrench).hasClass('halfVis')) return; // Don't allow if this composite is not enabled! // find the cb