dcc1f38c219bbf48a1b99dc5d7e3f0df5a50eceb
jcasper
Thu Mar 26 04:19:23 2026 -0700
Removing dependence on URL parameters that aren't always present for the faceted composite UI, refs #36320
diff --git src/hg/js/facetedComposite.js src/hg/js/facetedComposite.js
index 932a5c954a0..3e4ecbaeacc 100644
--- src/hg/js/facetedComposite.js
+++ src/hg/js/facetedComposite.js
@@ -12,36 +12,40 @@
const CSS_URLS = [
"../style/dataTables-2.2.2.min.css", // dataTables CSS
"../style/dataTables.select-3.0.0.min.css", // dataTables Select CSS
"../style/facetedComposite.css", // Local metadata table CSS
];
const isValidColorMap = obj => // check the whole thing and ignore if invalid
typeof obj === "object" && obj !== null && !Array.isArray(obj) &&
Object.values(obj).every(x =>
typeof x === "object" && x !== null && !Array.isArray(x) &&
Object.values(x).every(value => typeof value === "string"));
// fetch file dynamically
const loadOptional = (url, hgsid, track) => { // load if possible otherwise carry on
if (!url) return Promise.resolve(null);
- const fetchUrl = `/cgi-bin/hgTrackUi?hgsid=${hgsid}&fileUrl=${url}&track=${track}`;
+ let fetchBody = `fileUrl=${url}&track=${track}`;
+ if (hgsid !== null) {
+ fetchBody = fetchBody + `&hgsid=${hgsid}`;
+ }
+ const fetchUrl = `/cgi-bin/hgTrackUi?${fetchBody}`;
const req = (fetchUrl.length > 2048 || embeddedData.udcTimeout) ?
fetch("/cgi-bin/hgTrackUi", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
- body: `hgsid=${hgsid}&fileUrl=${url}&track=${track}`,
+ body: fetchBody,
})
: fetch(fetchUrl, {
method: "GET",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
});
return req.then(r => r.ok ? r.json() : null).catch(() => null);
};
const loadIfMissing = (condition, url, callback) => // for missing plugins
condition ?
document.head.appendChild(Object.assign(
document.createElement("script"), { src: url, onload: callback }))
: callback();
const toTitleCase = str =>
@@ -73,34 +77,41 @@
`;
// Instead of appending to body, append into the placeholder div
document.getElementById("metadata-placeholder").appendChild(container);
}
function updateVisibilities(uriForUpdate, submitBtnEvent) {
// get query params from URL
const paramsFromUrl = new URLSearchParams(window.location.search);
const db = paramsFromUrl.get("db");
const hgsid = paramsFromUrl.get("hgsid");
+ let body = `${uriForUpdate}`;
+ if (db !== null) {
+ body = body + `&db=${db}`;
+ }
+ if (hgsid !== null) {
+ body = body + `&hgsid=${hgsid}`;
+ }
fetch("/cgi-bin/cartDump", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
- body: `hgsid=${hgsid}&db=${db}&${uriForUpdate}`,
+ body: body,
}).then(() => {
// 'disable' any CSS named elements here to them keep out of cart
const dtLength = submitBtnEvent.
target.form.querySelector("select[name$='_length']");
if (dtLength) {
dtLength.disabled = true;
}
submitBtnEvent.target.form.submit(); // release submit event
});
}
function initDataTypeSelector() {
// Skip if no dataTypes defined or empty object
if (!embeddedData.dataTypes || Object.keys(embeddedData.dataTypes).length === 0) {
return;
@@ -531,31 +542,31 @@
initFilters(table, dataForTable);
initSubmit(table);
}
function loadDataAndInit() { // load data and call init functions
const { mdid, primaryKey, metadataUrl, colorSettingsUrl, track } = embeddedData;
const paramsFromUrl = new URLSearchParams(window.location.search);
const hgsid = paramsFromUrl.get("hgsid");
let fetchBody = `fileUrl=${metadataUrl}&track=${track}`;
if (hgsid !== null) {
fetchBody = fetchBody + `&hgsid=${hgsid}`;
}
// fetch file dynamically
- let fetchUrl = "/cgi-bin/hgTrackUi?" + fetchBody;
+ const fetchUrl = "/cgi-bin/hgTrackUi?" + fetchBody;
const req = (fetchUrl.length > 2048 || embeddedData.udcTimeout) ?
fetch("/cgi-bin/hgTrackUi", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: fetchBody,
})
: fetch(fetchUrl, {
method: "GET",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
});
req.then(response => {
if (!response.ok) { // a 404 will look like plain text
throw new Error(`HTTP Status: ${response.status}`);
}
return response.text();