src/hg/js/hui.js 1.20

1.20 2009/02/26 03:56:15 tdreszer
Fixed some less efficient jQuery calls.
Index: src/hg/js/hui.js
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/js/hui.js,v
retrieving revision 1.19
retrieving revision 1.20
diff -b -B -U 4 -r1.19 -r1.20
--- src/hg/js/hui.js	9 Feb 2009 19:46:15 -0000	1.19
+++ src/hg/js/hui.js	26 Feb 2009 03:56:15 -0000	1.20
@@ -7,8 +7,17 @@
 //var viewDDtoMatCB = true; //true;
 //var matCBwithViewDD = true;
 //var subCBtoMatCB = true;
 //var matCBtoSubCB = true; // Always
+//var now = new Date();
+//var start = now.getTime();
+//$(window).load(function () {
+//    if(start != null) {
+//        now = new Date();
+//        alert("Loading took "+(now.getTime() - start)+" msecs.");
+//    }
+//});
+
 
 // The 'mat*' functions are especially designed to support subtrack configuration by 2D matrix of controls
 
 function matSelectViewForSubTracks(obj,view)
@@ -18,9 +27,9 @@
     if( obj.selectedIndex == 0) { // hide
         if(viewDDtoSubCBhide) {
             matSetSubtrackCheckBoxes(false,view);
             //if(viewDDtoMatCB)
-            //    $(":checkbox").filter(".matrixCB").filter(":checked").each( function (i) { matChkBoxNormalize(this); } );
+            //    $("input.matrixCB").filter(":checked").each( function (i) { matChkBoxNormalize(this); } );
         }
         matEnableSubtrackCheckBoxes(false,view);
     } else {
         // Make main display dropdown show full if currently hide
@@ -39,15 +48,15 @@
                 displayDD[0].selectedIndex = maxVis;
         }
         // if matrix used then: essentially reclick all 'checked' matrix checkboxes
         if(viewDDtoSubCB) {
-            var CBs = $(":checkbox").filter(".matrixCB").filter(":checked");
+            var CBs = $("input.matrixCB").filter(":checked");
             if(CBs.length > 0) {
                 var classSets = new Array();
                 CBs.each( function (i) { classSets.push( $(this).attr("class") ); } );
                 if(classSets.length > 0) {
                     // Now it would be good to create a list of all subtrack CBs that match view,unchecked, and a class set (pair or triplet!)
-                    CBs = $(":checkbox").filter(".subtrackCB").filter("."+view).not(":checked");
+                    CBs = $("input.subtrackCB").filter("."+view).not(":checked");
                     if(CBs.length > 0) {
                         while(classSets.length > 0) {
                             var OneOrMoreClasses = classSets.pop();
                             var JustTheseCBs = CBs;
@@ -67,9 +76,9 @@
             matSetSubtrackCheckBoxes(true,view);
         }
         //if(viewDDtoMatCB)
         //    matChkBoxesNormalized();
-        //    //$(":checkbox").filter(".matrixCB").not(":checked").each( function (i) { matChkBoxNormalize(this); } );
+        //    //$("input.matrixCB").not(":checked").each( function (i) { matChkBoxNormalize(this); } );
         matEnableSubtrackCheckBoxes(true,view);
     }
 }
 
@@ -77,21 +86,21 @@
 {
 // Set all Matrix checkboxes to state.  If additional arguments are passed in, the list of CBs will be narrowed by the classes
     var CBs;
     if(state)
-        CBs = $(":checkbox").filter(".matrixCB").not(":checked");
+        CBs = $("input.matrixCB").not(":checked");
     else
-        CBs = $(":checkbox").filter(".matrixCB").filter(":checked");
+        CBs = $("input.matrixCB").filter(":checked");
     for(var vIx=1;vIx<arguments.length;vIx++) {
         CBs = CBs.filter("."+arguments[vIx]);  // Successively limit list by additional classes.
     }
     CBs.each( function (i) { this.checked = state;} )
     //CBs.each( function (i) { if(this.checked != state) this.click();} )
 
     if(state)
-        CBs = $(":checkbox").filter(".subtrackCB").not(":checked");
+        CBs = $("input.subtrackCB").not(":checked");
     else
-        CBs = $(":checkbox").filter(".subtrackCB").filter(":checked");
+        CBs = $("input.subtrackCB").filter(":checked");
     for(var vIx=1;vIx<arguments.length;vIx++) {
         CBs = CBs.filter("."+arguments[vIx]);  // Successively limit list by additional classes.
     }
     //if(matCBwithViewDD) {
@@ -109,9 +118,9 @@
 
 function matSetSubtrackCheckBoxes(state)
 {
 // Set all subtrack checkboxes to state.  If additional arguments are passed in, the list of CBs will be narrowed by the classes
-    var CBs = $(":checkbox").filter(".subtrackCB");
+    var CBs = $("input.subtrackCB");
     for(var vIx=1;vIx<arguments.length;vIx++) {
         CBs = CBs.filter("."+arguments[vIx]);  // Successively limit list by additional classes.
     }
     //if(matCBwithViewDD) {
@@ -129,9 +138,9 @@
 
 function matEnableSubtrackCheckBoxes(state)
 {
 // Enables/Disables subtracks checkboxes.  If additional arguments are passed in, the list of CBs will be narrowed by the classes
-    var CBs = $(":checkbox").filter(".subtrackCB");
+    var CBs = $("input.subtrackCB");
     for(var vIx=1;vIx<arguments.length;vIx++) {
         CBs = CBs.filter("."+arguments[vIx]);  // Successively limit list by additional classes.
     }
     //if(matCBwithViewDD) {
@@ -615,27 +624,31 @@
 
 function matChkBoxNormalize(matCb)
 {
     var classes =  $( matCb ).attr("class").split(" ");
-    var CBs = $(":checkbox").filter(".subtrackCB");
+    var CBs = $("input.subtrackCB");
+    if(CBs.length > 0) {
     while(classes.length > 0) {
         var thisClass = classes.pop();
         if(thisClass != "matrixCB")
             CBs = CBs.filter("."+thisClass);  // Filter subtrack CBs with only matrixCB's classes (Must redefine CBs each time)
     }
+    }
+    if(CBs.length > 0) {
     var CBsChecked = CBs.filter(":checked");
     if(CBsChecked.length == CBs.length)
         matCb.checked=true;
     else if(CBsChecked.length == 0)
         matCb.checked=false;
+    }
 }
 // Obsolete because viewDDtoMatCB=false and subCBtoMatCB=false
 //function matChkBoxNormalizeMatching(subCb)
 //{
 //// check/unchecks a matrix checkbox based upon subtrack checkboxes
 //// the matrix cb is the one that matches the subtrack cb provided
 //    var classes =  $( subCb ).attr("class").split(" ");
-//    var CBs = $(":checkbox").filter(".matrixCB");
+//    var CBs = $("input.matrixCB");
 //    for (var ix=1;ix<classes.length - 1;ix++) {// 1st one should be "subtrackCB"; one should be view
 //        if(ix < 3)
 //            CBs = CBs.filter("."+classes[ix]);  // If there is a non-view 3rd class then it is the Z dimension
 //    }
@@ -643,9 +656,9 @@
 //    for (var ix=0;ix<CBs.length;ix++) {
 //        matChkBoxNormalize(CBs[ix]);
 //    }
 //    if(classes.length > 4) { // Must have a Z dimension
-//        CBs = $(":checkbox").filter(".matrixCB").filter("."+classes[3]);
+//        CBs = $("input.matrixCB").filter("."+classes[3]);
 //        // There should be only one!
 //        for (var ix=0;ix<CBs.length;ix++) {
 //            matChkBoxNormalize(CBs[ix]);
 //        }
@@ -654,18 +667,14 @@
 
 function matChkBoxesNormalized()
 {
 // check/unchecks matrix checkboxes based upon subtrack checkboxes
-    $(":checkbox").filter(".matrixCB").each( function (i) { matChkBoxNormalize(this); } );
+    $("input.matrixCB").each( function (i) { matChkBoxNormalize(this); } );
 
-    var views = getViewsSelected("_dd_",false); // get views (strings) that are off
-    for(var vIx=0;vIx<views.length;vIx++) {
-        matEnableSubtrackCheckBoxes(false,views[vIx]);
-    }
-    //views = getViewsSelected("_dd_",true); // get views (strings) that are on
-    //for(var vIx=0;vIx<views.length;vIx++) {
-    //    matEnableSubtrackCheckBoxes(true,views[vIx]);
-    //}
+    // For each viewDD not selected, disable associated subtracks
+    $('select.viewDd').not('[@selectedIndex]').each( function (i) {
+        var viewClass = this.name.substring(this.name.lastIndexOf("_") + 1);
+        matEnableSubtrackCheckBoxes(false,viewClass); } );
 }
 
 function showOrHideSelectedSubtracks(inp)
 {
@@ -673,18 +682,17 @@
     var showHide;
     if(arguments.length > 0)
         showHide=inp;
     else {
-        var onlySelected = inputArrayThatMatches("radio","name","displaySubtracks","");
+        var onlySelected = $("input[name='displaySubtracks']");
         if(onlySelected.length > 0)
             showHide = onlySelected[0].checked;
         else
             return;
     }
     showSubTrackCheckBoxes(showHide);
-    var list = document.getElementsByTagName('table');
+    var list = $("table.tableSortable")
     for(var ix=0;ix<list.length;ix++) {
-        if(list[ix].id.lastIndexOf(".sortable") == list[ix].id.length - 9) {
             var columns = new sortColumnsGetFromTable(list[ix]);
             var tbody = list[ix].getElementsByTagName('tbody');
             if(columns.tags.length>1) {
                 if(columns.tags.length==2)
@@ -694,9 +702,8 @@
                 else
                     trAlternateColors(tbody[0],columns.cellIxs[0],columns.cellIxs[1],columns.cellIxs[2]);
             }
         }
-    }
 }
 
 ///// Following functions called on page load
 function matInitializeMatrix()