f1a5c6783582c33961b05d700690fbd1cae20363
larrym
  Thu Jul 7 17:25:06 2011 -0700
add jsPrintHash and related routines
diff --git src/hg/lib/jsHelper.c src/hg/lib/jsHelper.c
index 5dc100a..87d41d4 100644
--- src/hg/lib/jsHelper.c
+++ src/hg/lib/jsHelper.c
@@ -475,15 +475,65 @@
        "onclick=\"return setTableRowVisibility(this, '%s', '%s.section', 'section', true);\" "
        "id='%s_button' src='%s' alt='%s' title='%s this section' class='bigBlue'"
        " style='cursor:pointer;'>\n",
        section, track,
        section, buttonImage, (isOpen ? "-" : "+"), (isOpen ? "Collapse": "Expand"));
 printf("<B style='font-size:larger;'>&nbsp;%s</B></TD></TR>\n", sectionTitle);
 printf("<TR %sid='%s-%d'><TD colspan=2>", isOpen ? "" : "style='display: none' ", section, 1);
 }
 
 void jsEndCollapsibleSection()
 /* End the collapsible <TR id=...>. */
 {
 puts("</TD></TR>");
 }
 
+void jsAddString(struct hash *h, char *name, char *val)
+{
+// Add a string to a hash which will be used to print a javascript object;
+// existing values are replaced.
+char *str = needMem(strlen(val) + 3);
+val = javaScriptLiteralEncode(val);
+sprintf(str, "'%s'", val);
+freez(&val);
+hashReplace(h, name, str);
+}
+
+void jsAddNumber(struct hash *h, char *name, long val)
+{
+// Add a number to a hash which will be used to print a javascript object;
+// existing values are replaced.
+char buf[256];
+safef(buf, sizeof(buf), "%ld", val);
+hashReplace(h, name, cloneString(buf));
+}
+
+void jsAddBoolean(struct hash *h, char *name, boolean val)
+{
+// Add a boolean to a hash which will be used to print a javascript object;
+// existing values are replaced.
+hashReplace(h, name, cloneString(val ? "true" : "false"));
+}
+
+void jsPrintHash(struct hash *hash, char *name, int indentLevel)
+{
+// prints a hash as a javascript variable
+
+int i;
+char *indentBuf;
+indentBuf = needMem(indentLevel + 1);
+for (i = 0; i < indentLevel; i++)
+    indentBuf[i] = '\t';
+indentBuf[i] = 0;
+if(hashNumEntries(hash))
+    {
+    struct hashEl *el, *list = hashElListHash(hash);
+    slSort(&list, hashElCmp);
+    hPrintf("%svar %s = {\n", indentBuf, name);
+    for (el = list; el != NULL; el = el->next)
+        {
+        hPrintf("%s\t%s: %s%s\n", indentBuf, el->name, (char *) el->val, el->next == NULL ? "" : ",");
+        }
+    hPrintf("%s};\n", indentBuf);
+    hashElFreeList(&list);
+    }
+}