95433400da33b5bae4c4c8475f1305fc08510f66
jcasper
Sat Jun 11 14:25:14 2016 -0700
Store the sort/filter state of jQuery-DataTables-enabled tables in hgSession and hgPublicSessions to the cart, without including that state in saved sessions. Block IE versions before 11 from seeing the DataTables table version, due to checkbox issues. Bonus: fix for a minor session deletion bug. refs #15312, #17509
diff --git src/hg/lib/jsHelper.c src/hg/lib/jsHelper.c
index a1a6980..4ae2fbc 100644
--- src/hg/lib/jsHelper.c
+++ src/hg/lib/jsHelper.c
@@ -256,30 +256,74 @@
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
puts("");
}
+void jsIncludeDataTablesLibs()
+/* Prints out ");
+puts("");
+}
+
+char *jsDataTableStateSave (char *cartPrefix)
+/* Prints out a javascript function to save the state of a DataTables jQuery plugin-enabled
+ * table to the cart, using the specified cart prefix to help name the variable. */
+{
+static char saveFunction[4096];
+safef(saveFunction, sizeof(saveFunction),
+ "function saveTableState (settings, data) { "
+ "var cartVarName = \"%s\".concat(\"%s\"); "
+ "var stateString = JSON.stringify(data); "
+ "setCartVar(cartVarName, encodeURIComponent(stateString)); "
+ "}"
+ , cartPrefix, dataTableStateName);
+return saveFunction;
+}
+
+char *jsDataTableStateLoad (char *cartPrefix, struct cart *cart)
+/* Prints out a javascript function to load the state of a DataTables jQuery plugin-enabled
+ * table from the cart variable whose prefix is specified in the first argument */
+{
+ char *stateVariable = catTwoStrings(cartPrefix, "DataTableState");
+ char *stateString = cartUsualString(cart, stateVariable, "{}");
+ static char loadFunction [4096];
+ safef(loadFunction, sizeof(loadFunction),
+ "function loadTableState (settings) { "
+ "var stateString = decodeURIComponent(\"%s\"); "
+ "var data = JSON.parse(stateString); "
+ "return data; "
+ "}"
+ , stateString);
+ return loadFunction;
+}
+
char *jsCheckAllOnClickHandler(char *idPrefix, boolean state)
/* Returns javascript for use as an onclick attribute value to check all/uncheck all
* all checkboxes with given idPrefix.
* state parameter determines whether to "check all" or "uncheck all" (TRUE means "check all"). */
{
static char buf[512];
jsIncludeFile("utils.js", NULL);
safef(buf, sizeof(buf), "setCheckBoxesWithPrefix(this, '%s', %s); return false", idPrefix, state ? "true" : "false");
return buf;
}
/* cgiMakeCheckAllSubmitButton really belongs in cheapcgi.c, but that is compiled without access to jsHelper.h */
void cgiMakeCheckAllSubmitButton(char *name, char *value, char *id, char *idPrefix, boolean state)
/* Make submit button which uses javascript to apply check all or uncheck all to all