b8b56383b460baeded0eb044c5c50998564f4b9d jcasper Sun Jan 25 22:35:48 2026 -0800 Initial pass at making data types optional for the new faceted composite UI. refs #36320 diff --git src/hg/cartDump/cartDump.c src/hg/cartDump/cartDump.c index 186ca36adc9..c74cc4544ea 100644 --- src/hg/cartDump/cartDump.c +++ src/hg/cartDump/cartDump.c @@ -66,42 +66,59 @@ if (cgiVarExists(mName)) { char *mdid = cgiOptionalString(mName); char mdid_de[1024], mdid_dt[1024]; safef(mdid_de, sizeof(mdid_de), "%s.de", mdid); safef(mdid_dt, sizeof(mdid_dt), "%s.dt", mdid); struct slName *de_list = cgiStringList(mdid_de); struct slName *dt_list = cgiStringList(mdid_dt); // This component should change. Erasing settings doesn't preserve any user selections // (like bigWig display changes) and doesn't work at all for tracks that are on by default. char wc_mdid[1024]; safef(wc_mdid, sizeof(wc_mdid), "*_%s", mdid); cartRemoveLike(cart, wc_mdid); cartRemovePrefix(cart, mdid); + + // Check for empty-string sentinel: means no data type suffix + boolean noDataTypes = (dt_list != NULL && + dt_list->name[0] == '\0' && + dt_list->next == NULL); + char subtrackSetting[1024]; for (struct slName *de_itr = de_list; de_itr; de_itr = de_itr->next) + { + if (noDataTypes) + { + // No data type suffix - use simpler track names + safef(subtrackSetting, sizeof(subtrackSetting), "%s_%s_sel", mdid, de_itr->name); + cartSetString(cart, subtrackSetting, "1"); + safef(subtrackSetting, sizeof(subtrackSetting), "%s_%s", mdid, de_itr->name); + cartSetString(cart, subtrackSetting, "1"); + } + else { struct slName *dt_itr = NULL; for (dt_itr = dt_list; dt_itr; dt_itr = dt_itr->next) { safef(subtrackSetting, sizeof(subtrackSetting), "%s_%s_%s_sel", mdid, de_itr->name, dt_itr->name); cartSetString(cart, subtrackSetting, "1"); safef(subtrackSetting, sizeof(subtrackSetting), "%s_%s_%s", mdid, de_itr->name, dt_itr->name); cartSetString(cart, subtrackSetting, "1"); } } + } cartRemove(cart, mName); cartRemove(cart, mdid_de); cartRemove(cart, mdid_dt); } return; } // To discourage hacking, call bottleneck if (issueBotWarning) { char *ip = getenv("REMOTE_ADDR"); botDelayMessage(ip, botDelayMillis); }