87a833f995f6bfc6879c95f4c882da0ae0feaa72
tdreszer
  Thu Sep 2 13:23:32 2010 -0700
After changing cartDump to encode vars and vals, I decided to make it all ajaxy
diff --git src/hg/lib/cart.c src/hg/lib/cart.c
index 658b33c..39ef5f7 100644
--- src/hg/lib/cart.c
+++ src/hg/lib/cart.c
@@ -1106,27 +1106,41 @@
 cgiMakeHiddenVar(sessionVar, buf);
 }
 
-static void cartDumpItem(struct hashEl *hel)
+static void cartDumpItem(struct hashEl *hel,boolean asTable)
 /* Dump one item in cart hash */
 {
-struct dyString *dy = NULL;
-char *val = (char *)(hel->val);
-stripChar(val, '\r');
-dy = dyStringSub(val, "\n", "\\n");
-printf("%s %s\n", hel->name, dy->string);
-dyStringFree(&dy);
+char *var = htmlEncode(hel->name);
+char *val = htmlEncode((char *)(hel->val));
+if (asTable)
+    {
+    printf("<TR><TD>%s</TD><TD>", var);
+    int width=(strlen(val)+1)*8;
+    if(width<100)
+        width = 100;
+    cgiMakeTextVarWithExtraHtml(hel->name, val, width, "onchange='setCartVar(this.name,this.value);'");
+    printf("</TD></TR>\n");
+    }
+else
+    printf("%s %s\n", var, val);
+
+freeMem(var);
+freeMem(val);
 }
 
-void cartDumpList(struct hashEl *elList)
-/* Dump list of cart variables. */
+void cartDumpList(struct hashEl *elList,boolean asTable)
+/* Dump list of cart variables optionally as a table with ajax update support. */
 {
 struct hashEl *el;
 
 if (elList == NULL)
     return;
 slSort(&elList, hashElCmp);
+if (asTable)
+    printf("<table>\n");
 for (el = elList; el != NULL; el = el->next)
-    cartDumpItem(el);
+    cartDumpItem(el,asTable);
+if (asTable)
+    printf("</table>\n");
 hashElFreeList(&elList);
 }
 
@@ -1134,21 +1148,21 @@
 /* Dump contents of cart. */
 {
 struct hashEl *elList = hashElListHash(cart->hash);
-cartDumpList(elList);
+cartDumpList(elList,cartVarExists(cart,CART_DUMP_AS_TABLE));
 }
 
 void cartDumpPrefix(struct cart *cart, char *prefix)
 /* Dump all cart variables with prefix */
 {
 struct hashEl *elList = cartFindPrefix(cart, prefix);
-cartDumpList(elList);
+cartDumpList(elList,cartVarExists(cart,CART_DUMP_AS_TABLE));
 }
 
 void cartDumpLike(struct cart *cart, char *wildcard)
 /* Dump all cart variables matching wildcard */
 {
 struct hashEl *elList = cartFindLike(cart, wildcard);
-cartDumpList(elList);
+cartDumpList(elList,cartVarExists(cart,CART_DUMP_AS_TABLE));
 }
 
 char *cartFindFirstLike(struct cart *cart, char *wildCard)