a088ce68896304c2c6a343ffb2645576ffc996e9
larrym
  Tue Aug 31 13:51:39 2010 -0700
add getAllVars and objectToQueryString
diff --git src/hg/js/utils.js src/hg/js/utils.js
index a7c884b..514ed74 100644
--- src/hg/js/utils.js
+++ src/hg/js/utils.js
@@ -475,14 +475,18 @@
     }
 }
 
-function getAllVarsAsUrlData(obj)
+function cgiBooleanShadowPrefix()
+// Prefix for shadow variable set with boolean variables.
+// Exact copy of code in cheapcgi.c
 {
-// Returns a string in the form of var1=val1&var2=val2... for all inputs and selects in an obj
-// If obj is undefined then obj is document!
+    return "boolshad.";
+}
 
-    var urlData = "";
-    var names = [];
-    var values = [];
+function getAllVars(obj)
+{
+// Returns a hash for all inputs and selects in an obj.
+// If obj is undefined then obj is document!
+    var urlData = new Object();
     if($(obj) == undefined)
         obj = $('document');
     var inp = $(obj).find('input');
@@ -491,21 +495,44 @@
     $(inp).filter('[name]:enabled').each(function (i) {
         var name  = $(this).attr('name');
         var val = $(this).val();
+        if($(this).attr('type') == 'checkbox') {
+            name = cgiBooleanShadowPrefix() + name;
+            val = $(this).attr('checked') ? 1 : 0;
+        }
         if(name != undefined && name != "Submit" && val != undefined) {
-            urlData += "&"+name+"="+val;
+            urlData[name] = val;
         }
     });
     $(sel).filter('[name]:enabled').each(function (i) {
         var name  = $(this).attr('name');
         var val = $(this).val();
         if(name != undefined && val != undefined) {
-            urlData += "&"+name+"="+val;
+            urlData[name] = val;
         }
     });
-    if(urlData.length > 0) {
-        return urlData.substring(1); // chop off the first '&'
+    return urlData;
     }
-return "";
+
+function objectToQueryString(o)
+{
+// return a CGI QUERY_STRING for name/vals in given object
+    var retVal = "";
+    var count = 0;
+    for (var i in o) {
+        if(count++ > 0) {
+            retVal = retVal + "&"
+        }
+        // XXXX encode i and o[i]?
+        retVal = retVal + i + "=" + o[i];
+    }
+    return retVal;
+}
+
+function getAllVarsAsUrlData(obj)
+{
+// Returns a string in the form of var1=val1&var2=val2... for all inputs and selects in an obj
+// If obj is undefined then obj is document!
+    return objectToQueryString(getAllVars(obj));
 }
 
 /*