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("<script src=\"../js/react-with-addons-0.12.2.min.js\"></script>"); puts("<script src=\"../js/immutable.3.7.4.min.js\"></script>"); puts("<script src=\"../js/jquery.bifrost.1.0.1.min.js\"></script>"); puts("<script src=\"../js/BackboneExtend.js\"></script>"); puts("<script src=\"../js/cart.js\"></script>"); puts("<script src=\"../js/ImModel.js\"></script>"); puts("<script src=\"../js/CladeOrgDbMixin.js\"></script>"); puts("<script src=\"../js/PositionSearchMixin.js\"></script>"); puts("<script src=\"../js/UserRegionsMixin.js\"></script>"); puts("<script src=\"../js/PathUpdate.js\"></script>"); puts("<script src=\"../js/PathUpdateOptional.js\"></script>"); puts("<script src=\"../js/ImmutableUpdate.js\"></script>"); puts("<script src=\"../js/reactLibBundle.js\"></script>"); } +void jsIncludeDataTablesLibs() +/* Prints out <script src="..."> tags for external libraries: jQuery 1.12.3, the jQuery DataTables + * plugin (version 1.10.12), and the accompanying standard CSS file for DataTables. */ +{ +puts("<link rel=\"stylesheet\" type=\"text/css\" " + "href=\"https://cdn.datatables.net/1.10.12/css/jquery.dataTables.min.css\">\n"); +puts("<script type=\"text/javascript\" " + "src=\"https://code.jquery.com/jquery-1.12.3.min.js\"\"></script>"); +puts("<script type=\"text/javascript\" " + "src=\"https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js\"\"></script>"); +} + +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