5f99b76015eefbb14a2ac75ddcb56f8c1e17ca65 jcasper Wed Jan 21 00:01:19 2026 -0800 Changes provided by Andrew Smith to tidy up the new composite UI, refs #36320 diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c index c1c21d0ac0e..e40cd0e0547 100644 --- src/hg/hgTrackUi/hgTrackUi.c +++ src/hg/hgTrackUi/hgTrackUi.c @@ -2983,30 +2983,31 @@ // --- Get data from 'settings' field in 'trackDb' entry --- // required const char *metaDataUrl = trackDbSetting(tdb, "metaDataUrl"); const char *primaryKey = trackDbSetting(tdb, "primaryKey"); struct slName *dataTypes = parseDataTypes(tdb); if (!dataTypes) errAbort("Failed to parse data types from faceted composite settings for: %s", tdb->track); // optional const char *colorSettingsUrl = (const char *)hashFindVal(tdb->settingsHash, "colorSettingsUrl"); const char *maxCheckboxes = (const char *)hashFindVal(tdb->settingsHash, "maxCheckboxes"); // --- done parsing values from trackDb.settings --- const char *metaDataId = tdb->track; +const int metaDataIdLen = strlen(metaDataId); char queryFmt[] = "SELECT contents FROM sessionDb WHERE id='%d' AND sessionKey='%s';"; char query[query_buff_size]; sqlSafef(query, query_buff_size, queryFmt, id, sessionKey); struct sqlConnection *conn = hConnectCentral(); const char *contents = sqlQuickString(conn, query); struct cgiParsedVars *varList = cgiParsedVarsNew((char *)contents); printf(pageStyle); // css printf(placeholderDiv); // placholder /* --- START embedded JSON data --- */ printf(openJSON); printf(openDataTypesJSON); @@ -3024,45 +3025,41 @@ printf("%s\"%s\": %d", COMMA_IF(not_first), thisType->name, dataTypeSel ? 1 : 0); anySelDataType = dataTypeSel ? thisType : anySelDataType; } printf(closeDataTypesJSON); printf(","); // add separator // find selected data sets printf(openDataElementsJSON); not_first = 0; if (anySelDataType != NULL) { char suffix[token_size]; safef(suffix, token_size, "_%s_sel", anySelDataType->name); for (struct cgiVar *le = varList->list; le; le = le->next) if (startsWith(metaDataId, le->name) && endsWith(le->name, suffix)) { - const char *nameStart = strchr(le->name+strlen(metaDataId), '_'); - if (nameStart) - { - ++nameStart; // move past '_' + const char *nameStart = le->name + metaDataIdLen + 1; const char *nameEnd = strchr(nameStart, '_'); if (nameEnd && nameEnd > nameStart) { const int nameLen = nameEnd - nameStart; printf("%s\"%.*s\"", COMMA_IF(not_first), nameLen, nameStart); } } } - } printf(closeDataElementsJSON); -printf(",\"mdid\": \"%s\"", tdb->track); // metadata id is track name +printf(",\"mdid\": \"%s\"", metaDataId); printf(",\"primaryKey\": \"%s\"", primaryKey); // must exist if (maxCheckboxes) // only if present in trackDb.settings entry printf(",\"maxCheckboxes\": \"%s\"", maxCheckboxes); if (colorSettingsUrl) // only if present in trackDb.settings entry printf(",\"colorSettingsUrl\": \"%s\"", colorSettingsUrl); printf(",\"metadataUrl\": \"%s\"", metaDataUrl); printf(closeJSON); /* --- END embedded JSON data --- */ printf(metadataTableScriptElement); // cleanup slFreeList(&dataTypes); cgiParsedVarsFreeList(&varList); hDisconnectCentral(&conn);