af730d9e24c0642fe39657f890bc117ed015ccbf galt Wed Feb 15 01:12:26 2017 -0800 CSP code cleanup. Using new var-args versions of functions jsInlineF and jsOnEventByIdF to avoid using lots of fixed-size local javascript strings. diff --git src/hg/lib/jsHelper.c src/hg/lib/jsHelper.c index b2e42c7..0c2e34f 100644 --- src/hg/lib/jsHelper.c +++ src/hg/lib/jsHelper.c @@ -94,63 +94,57 @@ "var %s='%s';\n", jsVar, val); jsInline(javascript); } void jsMakeTrackingRadioButtonExtraHtml(char *cgiVar, char *jsVar, char *val, char *selVal, char *extraHtml) /* Make a radio button with extra HTML attributes that also sets tracking variable * in javascript. */ { char id[256]; safef(id, sizeof id, "%s_%s", cgiVar, val); hPrintf("<INPUT TYPE=RADIO NAME='%s' ID='%s'", cgiVar, id); hPrintf(" VALUE=\"%s\"", val); if (isNotEmpty(extraHtml)) hPrintf(" %s", extraHtml); -char javascript[1024]; -safef(javascript, sizeof javascript, "%s='%s';", jsVar, val); -jsOnEventById("click", id, javascript); +jsOnEventByIdF("click", id, "%s='%s';", jsVar, val); if (sameString(val, selVal)) hPrintf(" CHECKED"); hPrintf(">"); } void jsMakeTrackingRadioButton(char *cgiVar, char *jsVar, char *val, char *selVal) /* Make a radio button that also sets tracking variable * in javascript. */ { jsMakeTrackingRadioButtonExtraHtml(cgiVar, jsVar, val, selVal, NULL); } void jsMakeTrackingCheckBox(struct cart *cart, char *cgiVar, char *jsVar, boolean usualVal) /* Make a check box filling in with existing value and * putting a javascript tracking variable on it. */ { char buf[256]; boolean oldVal = cartUsualBoolean(cart, cgiVar, usualVal); -char javascript[1024]; -safef(javascript, sizeof javascript, - "var %s=%d;", jsVar, oldVal); -jsInline(javascript); +jsInlineF("var %s=%d;", jsVar, oldVal); hPrintf("<INPUT TYPE=CHECKBOX NAME='%s' ID='%s' VALUE=1", cgiVar, cgiVar); if (oldVal) hPrintf(" CHECKED"); -safef(javascript, sizeof javascript, "%s=(%s+1)%%2;", jsVar, jsVar); -jsOnEventById("click", cgiVar, javascript); hPrintf(">"); +jsOnEventByIdF("click", cgiVar, "%s=(%s+1)%%2;", jsVar, jsVar); safef(buf, sizeof(buf), "%s%s", cgiBooleanShadowPrefix(), cgiVar); cgiMakeHiddenVar(buf, "0"); } void jsTrackedVarCarryOver(struct dyString *dy, char *cgiVar, char *jsVar) /* Carry over tracked variable (radio button?) to hidden form. */ { dyStringPrintf(dy, "document.hiddenForm.%s.value=%s; ", cgiVar, jsVar); } char *jsRadioUpdate(char *cgiVar, char *jsVar, char *val) /* Make a little javascript to check and uncheck radio buttons * according to new value. To use this you must have called * jsInit somewhere, and also must use jsMakeTrackingRadioButton * to make the buttons. */ @@ -416,39 +410,37 @@ char collapseGroupVar[512]; safef(collapseGroupVar, sizeof(collapseGroupVar), "%s.section_%s_close", track, section); boolean isOpen = !cartUsualBoolean(cart, collapseGroupVar, !isOpenDefault); // Both plus button and title are now in same <TD> // but still colspan=2 because we are lib code and callers own the table. puts("<TR"); if (oldStyle) puts(" class='subheadingBar'"); puts (">"); printf("<TD colspan=2 style='text-align:left;'>\n"); printf("<input type='hidden' name='%s' id='%s' value='%s'>\n", collapseGroupVar, collapseGroupVar, isOpen ? "0" : "1"); char *buttonImage = (isOpen ? "../images/remove_sm.gif" : "../images/add_sm.gif"); char id[256]; -char javascript[1024]; safef(id, sizeof id, "%s_button", section); -safef(javascript, sizeof javascript, "return setTableRowVisibility(this, '%s', '%s.section', 'section', true);", - section, track); printf("<IMG height='18' width='18' " "id='%s' src='%s' alt='%s' title='%s this section' class='bigBlue'" " style='cursor:pointer;'>\n", id, buttonImage, (isOpen ? "-" : "+"), (isOpen ? "Collapse": "Expand")); -jsOnEventById("click", id, javascript); +jsOnEventByIdF("click", id, "return setTableRowVisibility(this, '%s', '%s.section', 'section', true);", + section, track); if (oldStyle || fontSize == NULL) printf(" %s</TD></TR>\n", sectionTitle); else printf("<B style='font-size:%s;'> %s</B>", fontSize, sectionTitle); puts("</TD></TR>\n"); printf("<TR %s id='%s-%d'><TD colspan=2>", isOpen ? "" : "style='display: none' ", section, 1); } void jsBeginCollapsibleSectionOldStyle(struct cart *cart, char *track, char *section, char *sectionTitle, boolean isOpenDefault) /* Make the hidden input, collapse/expand button and <TR id=...> needed for utils.js's * setTableRowVisibility(). Caller needs to have already created a <TABLE> and <FORM>. * With support for varying font size */ { jsBeginCollapsibleSectionFull(cart, track, section, sectionTitle, isOpenDefault, NULL, TRUE);