feb380e4c526092d9793e1d70f8a484cca2ae338 galt Tue Oct 20 01:18:28 2020 -0700 Fix speed of javascript in View, Facets, and Subtracks for hgTrackUi. fixes #26381 diff --git src/lib/cheapcgi.c src/lib/cheapcgi.c index 51e1071..7d71148 100644 --- src/lib/cheapcgi.c +++ src/lib/cheapcgi.c @@ -1742,50 +1742,53 @@ cgiMakeCheckBox2Bool(name,checked,TRUE,NULL,moreHtml); } void cgiMakeCheckBoxIdAndMore(char *name, boolean checked, char *id, char *moreHtml) /* Make check box with ID and extra (non-javascript) html. */ { cgiMakeCheckBox2Bool(name,checked,TRUE,id,moreHtml); } void cgiMakeCheckBoxFourWay(char *name, boolean checked, boolean enabled, char *id, char *classes, char *moreHtml) /* Make check box - with fourWay functionality (checked/unchecked by enabled/disabled) * Also makes a shadow hidden variable that supports the 2 boolean states. */ { char shadName[256]; +char shadId[256]; printf("<INPUT TYPE=CHECKBOX NAME='%s'", name); if (id) printf(" id='%s'", id); if (checked) printf(" CHECKED"); if (!enabled) { if (findWordByDelimiter("disabled",' ', classes) == NULL) // fauxDisabled ? printf(" DISABLED"); } if (classes) printf(" class='%s'",classes); if (moreHtml) printf(" %s",moreHtml); printf(">"); // The hidden var needs to hold the 4way state safef(shadName, sizeof(shadName), "%s%s", cgiBooleanShadowPrefix(), name); -cgiMakeHiddenVarWithExtra(shadName, ( enabled ? "0" : (checked ? "-1" : "-2")),BOOLSHAD_EXTRA); +if (id) + safef(shadId, sizeof(shadId), "%s%s", cgiBooleanShadowPrefix(), id); +cgiMakeHiddenVarWithIdExtra(shadName, id ? shadId : NULL, ( enabled ? "0" : (checked ? "-1" : "-2")),BOOLSHAD_EXTRA); } void cgiMakeHiddenBoolean(char *name, boolean on) /* Make hidden boolean variable. Also make a shadow hidden variable so we * can distinguish between variable not present and * variable set to false. */ { char buf[256]; cgiMakeHiddenVar(name, on ? "on" : "off"); safef(buf, sizeof(buf), "%s%s", cgiBooleanShadowPrefix(), name); cgiMakeHiddenVarWithExtra(buf, "1",BOOLSHAD_EXTRA); } void cgiMakeTextArea(char *varName, char *initialVal, int rowCount, int columnCount) @@ -2322,45 +2325,46 @@ printf(" NAME='%s'", name); if (extra) printf("%s", extra); printf(">\n"); for (i=0; i<count; ++i) { if (sameWord(values[i], selected)) selString = " SELECTED"; else selString = ""; printf("<OPTION%s value='%s'>%s</OPTION>\n", selString, values[i], text[i]); } printf("</SELECT>\n"); } -void cgiMakeHiddenVarWithExtra(char *varName, char *string,char *extra) +void cgiMakeHiddenVarWithIdExtra(char *varName, char *id, char *string,char *extra) /* Store string in hidden input for next time around. */ { -printf("<INPUT TYPE=HIDDEN NAME='%s' VALUE='%s'", varName, string); +printf("<INPUT TYPE=HIDDEN NAME='%s'", varName); +if (id) + printf(" ID='%s'", id); if (extra) - printf(" %s>\n",extra); -else - puts(">"); + printf(" %s",extra); +printf(" VALUE='%s'>\n", string); } void cgiContinueHiddenVar(char *varName) /* Write CGI var back to hidden input for next time around. */ { if (cgiVarExists(varName)) - cgiMakeHiddenVar(varName, cgiString(varName)); + cgiMakeHiddenVarWithIdExtra(varName, varName, cgiString(varName), NULL); } void cgiVarExclude(char *varName) /* If varName exists, remove it. */ { if (cgiVarExists(varName)) { struct cgiVar *cv = hashRemove(inputHash, varName); slRemoveEl(&inputList, cv); } } void cgiVarExcludeExcept(char **varNames) /* Exclude all variables except for those in NULL * terminated array varNames. varNames may be NULL