2b30b55d6a5b71648296873b570b9d68b4901b6a galt Wed Feb 15 02:21:56 2017 -0800 CSP code cleanup. Using jsInlineF where needed for compact and efficient code, not using fixed-size local javascript strings which could overflow. diff --git src/hg/hgPublicSessions/hgPublicSessions.c src/hg/hgPublicSessions/hgPublicSessions.c index f512133..767d0b8 100644 --- src/hg/hgPublicSessions/hgPublicSessions.c +++ src/hg/hgPublicSessions/hgPublicSessions.c @@ -130,32 +130,31 @@ } sqlFreeResult(&sr); hDisconnectCentral(&conn); return galList; } void galleryDisplay(struct galleryEntry *galList) /* Print a table containing the gallery data from galList */ { struct galleryEntry *thisSession = galList; /* Hide the orderable columns and disable ordering on the visible columns * https://datatables.net/reference/option/columnDefs for more info. * Then set up the ordering drop-down menu */ -struct dyString *javascript = newDyString(1024); -dyStringPrintf(javascript, +jsInlineF( "$(document).ready(function () {\n" " $('#sessionTable').DataTable({\"columnDefs\": [{\"visible\":false, \"targets\":[2,3]},\n" " {\"orderable\":false, \"targets\":[0,1]}\n" " ],\n" " \"dom\":\"lftip\",\n" " \"stateSave\":true,\n" " \"stateSaveCallback\": %s,\n" " \"stateLoadCallback\": %s,\n" " });\n" /* Recover previous sorting choice from the cart settings, if available */ " var startOrder = $('#sessionTable').DataTable().order();\n" " if (startOrder[0][0] == 3) {\n" " if (startOrder[0][1] == \"asc\") {\n" " $('#sortMethod').val(\"useAsc\");\n" " } else {\n" @@ -163,32 +162,30 @@ " }\n" " } else {\n" " if (startOrder[0][0] == 2) {\n" " if (startOrder[0][1] == \"asc\") {\n" " $('#sortMethod').val(\"dateAsc\");\n" " } else {\n" " $('#sortMethod').val(\"dateDesc\");\n" " }\n" " } else {\n" " $('#sessionTable').DataTable().order([3,'desc']).draw();\n" " $('#sortMethod').val(\"useDesc\");\n" " }\n" " }\n" "});\n", jsDataTableStateSave(hgPublicSessionsPrefix), jsDataTableStateLoad(hgPublicSessionsPrefix, cart)); -jsInline(javascript->string); -dyStringFree(&javascript); jsInline( "function changeSort() {\n" " var newSort = document.getElementById('sortMethod').value;\n" " var theTable = $('#sessionTable').DataTable();\n" " if (newSort == \"useDesc\") {theTable.order([3,'desc']).draw(); }\n" " if (newSort == \"useAsc\") {theTable.order([3,'asc']).draw(); }\n" " if (newSort == \"dateDesc\") {theTable.order([2,'desc']).draw(); }\n" " if (newSort == \"dateAsc\") {theTable.order([2,'asc']).draw(); }\n" "}\n"); printf ("<p>\n"); printf ("<b>Sort by:</b> <select id=\"sortMethod\">\n"); printf ("\t\t<option value=\"useDesc\">Popularity (descending)</option>\n"); printf ("\t\t<option value=\"useAsc\">Popularity (ascending)</option>\n"); @@ -259,34 +256,31 @@ void showGalleryTab () /* Rather boring now, but a placeholder against the day that there's also a "favorites" tab */ { struct galleryEntry *galList = galleryFetch(); galleryDisplay(galList); } void doMiddle(struct cart *theCart) /* Set up globals and make web page */ { cart = theCart; char *db = cartUsualString(cart, "db", hDefaultDb()); cartWebStart(cart, db, "Public Sessions"); /* Not in a form; can't use cartSaveSession() to set up an hgsid input */ -char javascript[1024]; -safef(javascript, sizeof javascript, -"var common = {hgsid:\"%s\"};\n", cartSessionId(cart)); -jsInline(javascript); +jsInlineF("var common = {hgsid:\"%s\"};\n", cartSessionId(cart)); jsIncludeDataTablesLibs(); printf("<p>Sessions allow users to save snapshots of the Genome Browser " "and its current configuration, including displayed tracks, position, " "and custom track data. The Public Sessions tool allows users to easily " "share those sessions that they deem interesting with the rest of the " "world's researchers. You can add your own sessions to this list by " "checking the appropriate box on the " "<a href=\"../cgi-bin/hgSession?%s\">Session Management</a> page.</p>\n" "<p>See the " "<a href=\"../goldenPath/help/hgSessionHelp.html\">Sessions User's Guide</a> " "for more information.\n</p>", cartSidUrlString(cart)); showGalleryTab();