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