c746ba4328021a2d5245b77790f5262b7814fbbd
jcasper
Wed Feb 4 21:13:22 2026 -0800
UI tweaks for faceted composites, refs #36320
diff --git src/hg/js/facetedComposite.js src/hg/js/facetedComposite.js
index 859669f32fb..45eb5485348 100644
--- src/hg/js/facetedComposite.js
+++ src/hg/js/facetedComposite.js
@@ -84,31 +84,31 @@
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;
}
const selector = document.getElementById("dataTypeSelector");
selector.appendChild(Object.assign(document.createElement("label"), {
- innerHTML: "Data type",
+ innerHTML: "Subtrack types enabled:",
}));
Object.keys(embeddedData.dataTypes).forEach(name => {
const label = document.createElement("label");
const dataType = embeddedData.dataTypes[name];
label.innerHTML = `
${dataType.title}`;
selector.appendChild(label);
});
const selectedDataTypes = new Set( // get dataTypes selected initially
Object.entries(embeddedData.dataTypes).filter(([_, val]) => val.active === 1)
.map(([key]) => key)
);
// initialize data type checkboxes (using class instead of 'name')
document.querySelectorAll("input.cbgroup")
.forEach(cb => { cb.checked = selectedDataTypes.has(cb.value); });
@@ -125,39 +125,43 @@
title: toTitleCase(key),
}));
const checkboxColumn = {
data: null,
orderable: false,
className: "select-checkbox",
defaultContent: "",
title: `
`,
// no render function needed
};
const columns = [checkboxColumn, ...ordinaryColumns];
+ const hasDataTypes = embeddedData.dataTypes &&
+ Object.keys(embeddedData.dataTypes).length > 0;
+ const itemLabel = hasDataTypes ? "samples" : "tracks";
const table = $("#theMetaDataTable").DataTable({
data: metadata,
deferRender: true, // seems faster
columns: columns,
responsive: true,
// autoWidth: true, // might help columns shrink to fit content
order: [[1, "asc"]], // sort by the first data column, not checkbox
pageLength: 50, // show 50 rows per page by default
lengthMenu: [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]],
+ language: { lengthMenu: `Show _MENU_ ${itemLabel}`, },
select: { style: "multi", selector: "td:first-child" },
initComplete: function() { // Check appropriate boxes
const api = this.api();
embeddedData.dataElements.forEach(rowName => {
const rowIndex = rowToIdx[rowName];
if (rowIndex !== undefined) {
api.row(rowIndex).select();
}
});
// Capture initial data element state
initialState.dataElements = new Set(embeddedData.dataElements);
},
drawCallback: function() { // Reset header "select all" checkbox
$("#select-all")
.prop("checked", false)