src/hg/js/hui.js 1.32

1.32 2009/09/08 21:11:48 tdreszer
Cleaned up more non-jquery syntax and made multi-selects work with subtrack cfg updating
Index: src/hg/js/hui.js
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/js/hui.js,v
retrieving revision 1.31
retrieving revision 1.32
diff -b -B -U 4 -r1.31 -r1.32
--- src/hg/js/hui.js	5 Sep 2009 01:20:14 -0000	1.31
+++ src/hg/js/hui.js	8 Sep 2009 21:11:48 -0000	1.32
@@ -244,34 +244,48 @@
 
 function compositeCfgUpdateSubtrackCfgs(inp)
 {
 // Updates all subtrack configuration values when the composite cfg is changed
-    var suffix = inp.name.substring(inp.name.indexOf("."));
+    var suffix = inp.name.substring(inp.name.indexOf("."));  // Includes '.'
     //if(suffix.length==0)
     //    suffix = inp.name.substring(inp.name.indexOf("_"));
     if(suffix.length==0) {
-        //alert("Unable to parse '"+inp.name+"'");
+        alert("Unable to parse '"+inp.name+"'");
         return true;
     }
-    var list = $("input[name$='"+suffix+"']");
+    var list = $("input[name$='"+suffix+"']").not("[name='"+inp.name+"']"); // Exclude self from list
     if($(list).length>0)
         $(list).val(inp.value);
     else {
-        list = $("select[name$='"+suffix+"']");
-        if($(list).length>0)
+        list = $("select[name$='"+suffix+"']").not("[name='"+inp.name+"']"); // Exclude self from list
+        if($(list).length>0) {
+            if(inp.multiple != true)
             $(list).attr('selectedIndex',inp.selectedIndex);
+            else {
+                $(list).each(function() {  // for all dependent (subtrack) multi-selects
+                    sel = this;
+                    $(this).children('option').each(function() {  // for all options of dependent mult-selects
+                        $(this).attr('selected',$(inp).children('option:eq('+this.index+')').attr('selected')); // set selected state to independent (parent) selected state
+                    });
+                    $(this).attr('size',$(inp).attr('size'));
+                });
+            }
+        } else {
+            alert("Unsupported type of multi-level cfg setting type='"+inp.type+"'");
+            return false;
+        }
     }
     return true;
 }
 
 function compositeCfgRegisterOnchangeAction(prefix)
 {
 // After composite level cfg settings written to HTML it is necessary to go back and
 // make sure that each time they change, any matching subtrack level cfg setting are changed.
-    var list = $("input[name^='"+prefix+"']").not("[name$='.vis']");
+    var list = $("input[name^='"+prefix+".']").not("[name$='.vis']");
     $(list).change(function(){compositeCfgUpdateSubtrackCfgs(this);});
 
-    var list = $("select[name^='"+prefix+"']").not("[name$='.vis']");
+    var list = $("select[name^='"+prefix+".']").not("[name$='.vis']");
     $(list).change(function(){compositeCfgUpdateSubtrackCfgs(this);});
 }
 
 
@@ -830,15 +844,15 @@
 }
 
 function multiSelectBlur(obj)
 {
-    if(obj.value == undefined || obj.value == "") {
-        obj.value = "All";
-        obj.selectedIndex = 0;
+    if($(obj).val() == undefined || $(obj).val() == "") {
+        $(obj).val("All");
+        $(obj).attr('selectedIndex',0);
     }
     //if(obj.value == "All") // Close if selected index is 1
-    if(obj.selectedIndex == 0) // Close if selected index is 1
-        obj.size=1;
+    if($(obj).attr('selectedIndex') == 0) // Close if selected index is 1
+        $(obj).attr('size',1);
     /*else if($.browser.msie == false && $(obj).children('option[selected]').length==1) {
         var ix;
         for(ix=0;ix<obj.options.length;ix++) {
             if(obj.options[ix].value == obj.value) {
@@ -853,12 +867,12 @@
 }
 
 function multiSelectClick(obj,sizeWhenOpen)
 {
-    if(obj.size == 1)
-        obj.size=sizeWhenOpen;
-    else if(obj.selectedIndex == 0)
-        obj.size=1;
+    if($(obj).attr('size') == 1)
+        $(obj).attr('size',sizeWhenOpen);
+    else if($(obj).attr('selectedIndex') == 0)
+        $(obj).attr('size',1);
 }
 
 // The following js depends upon the jQuery library
 $(document).ready(function()