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();