hugo_themes_report/templates/js/buildSelectionMenu.js

184 lines
5.9 KiB
JavaScript
Raw Normal View History

2021-08-14 07:21:26 -07:00
function buildTagSelectionHeadingRow(selectionMenuDiv, tagSortBy, dState) {
2021-08-11 20:57:34 -07:00
let tagSelectionHeadingRow = document.createElement("div");
tagSelectionHeadingRow.id = "tagSelectionHeadingRow";
tagSelectionHeadingRow.style.maxWidth = "100%";
2021-08-14 07:21:26 -07:00
tagSelectionHeadingRow.style.display = dState.tagSelectionHeadingRow;
2021-08-11 20:57:34 -07:00
tagSelectionHeadingRow.style.justifyContent = "space-around";
2021-08-12 17:23:42 -07:00
tagSelectionHeadingRow.style.alignItems = "center";
2021-08-11 11:58:10 -07:00
2021-08-11 20:57:34 -07:00
let tagSelectionHeading = document.createElement("h2");
2021-08-11 11:58:10 -07:00
tagSelectionHeading.innerHTML = "Select Tags";
2021-08-12 17:23:42 -07:00
let tagSortByNameInputButton = buildRadioButton(
(inputID = "tagSortByName"),
(inputName = "tagSortBy"),
(inputValue = "tagSortByName"),
(sortedBy = tagSortBy),
(sortedBySelector = "name"),
(labelText = "Name")
);
2021-08-12 17:23:42 -07:00
let tagSortByNumThemesInputButton = buildRadioButton(
(inputID = "tagSortByNumThemes"),
(inputName = "tagSortBy"),
(inputValue = "tagSortByNumThemes"),
(sortedBy = tagSortBy),
(sortedBySelector = "numThemes"),
(labelText = "nThemes")
);
tagSelectionHeadingRow.appendChild(tagSelectionHeading);
2021-08-12 17:23:42 -07:00
tagSelectionHeadingRow.appendChild(tagSortByNameInputButton);
tagSelectionHeadingRow.appendChild(tagSortByNumThemesInputButton);
selectionMenuDiv.appendChild(tagSelectionHeadingRow);
2021-08-12 17:23:42 -07:00
let tagSortByNameInput = document.getElementById("tagSortByName");
tagSortByNameInputButton.onclick = function () {
if (!tagSortByNameInput.checked) {
tagSortByNameInput.checked = true;
buildResults();
}
};
let tagSortByNumThemesInput = document.getElementById("tagSortByNumThemes");
tagSortByNumThemesInputButton.onclick = function () {
if (!tagSortByNumThemesInput.checked) {
tagSortByNumThemesInput.checked = true;
buildResults();
}
};
}
2021-08-14 07:21:26 -07:00
function buildFeatureSelectionHeadingRow(
selectionMenuDiv,
featureSortBy,
dState
) {
2021-08-11 20:57:34 -07:00
let featureSelectionHeadingRow = document.createElement("div");
featureSelectionHeadingRow.id = "featureSelectionHeadingRow";
featureSelectionHeadingRow.style.maxWidth = "100%";
2021-08-14 07:21:26 -07:00
featureSelectionHeadingRow.style.display = dState.featureSelectionHeadingRow;
2021-08-11 20:57:34 -07:00
featureSelectionHeadingRow.style.justifyContent = "space-around";
2021-08-12 17:23:42 -07:00
featureSelectionHeadingRow.style.alignItems = "center";
2021-08-11 20:57:34 -07:00
let featureSelectionHeading = document.createElement("h2");
featureSelectionHeading.innerHTML = "Select Features";
2021-08-12 17:23:42 -07:00
let featureSortByNameInputButton = buildRadioButton(
(inputID = "featureSortByName"),
(inputName = "featureSortBy"),
(inputValue = "featureSortByName"),
(sortedBy = featureSortBy),
(sortedBySelector = "name"),
(labelText = "Name")
);
2021-08-12 17:23:42 -07:00
let featureSortByNumThemesInputButton = buildRadioButton(
(inputID = "featureSortByNumThemes"),
(inputName = "featureSortBy"),
(inputValue = "featureSortByNumThemes"),
(sortedBy = featureSortBy),
(sortedBySelector = "numThemes"),
(labelText = "nThemes")
);
featureSelectionHeadingRow.appendChild(featureSelectionHeading);
2021-08-12 17:23:42 -07:00
featureSelectionHeadingRow.appendChild(featureSortByNameInputButton);
featureSelectionHeadingRow.appendChild(featureSortByNumThemesInputButton);
selectionMenuDiv.appendChild(featureSelectionHeadingRow);
2021-08-12 17:23:42 -07:00
let featureSortByNameInput = document.getElementById("featureSortByName");
featureSortByNameInputButton.onclick = function () {
if (!featureSortByNameInput.checked) {
featureSortByNameInput.checked = true;
buildResults();
}
};
let featureSortByNumThemesInput = document.getElementById(
"featureSortByNumThemes"
);
featureSortByNumThemesInputButton.onclick = function () {
if (!featureSortByNumThemesInput.checked) {
featureSortByNumThemesInput.checked = true;
buildResults();
}
};
}
2021-08-14 07:21:26 -07:00
function buildTagSelectionDiv(selectedTags, availableTags, tagSortBy, dState) {
2021-08-11 20:57:34 -07:00
let selectionMenuDiv = document.getElementById("selection-menu");
2021-08-14 07:21:26 -07:00
buildTagSelectionHeadingRow(selectionMenuDiv, tagSortBy, dState);
2021-08-11 11:58:10 -07:00
2021-08-11 20:57:34 -07:00
let tagSelectionRow = document.createElement("div");
2021-08-14 07:21:26 -07:00
tagSelectionRow.id = "tagSelectionRow";
tagSelectionRow.style.display = dState.tagSelectionRow;
2021-08-11 20:57:34 -07:00
tagSelectionRow.style.flexWrap = "wrap";
tagSelectionRow.style.justifyContent = "space-around";
2021-08-11 11:58:10 -07:00
selectionMenuDiv.appendChild(tagSelectionRow);
availableTags
.filter((x) => selectedTags.includes(x.tag))
2021-08-11 20:57:34 -07:00
.forEach((y) => {
buildTagSelectionInput(y, true, tagSelectionRow);
});
2021-08-11 11:58:10 -07:00
availableTags
.filter((x) => !selectedTags.includes(x.tag))
2021-08-11 20:57:34 -07:00
.forEach((y) => {
buildTagSelectionInput(y, false, tagSelectionRow);
});
2021-08-11 11:58:10 -07:00
}
2021-08-11 20:57:34 -07:00
function buildFeatureSelectionDiv(
selectedFeatures,
availableFeatures,
2021-08-14 07:21:26 -07:00
featureSortBy,
dState
2021-08-11 20:57:34 -07:00
) {
let selectionMenuDiv = document.getElementById("selection-menu");
2021-08-14 07:21:26 -07:00
buildFeatureSelectionHeadingRow(selectionMenuDiv, featureSortBy, dState);
2021-08-11 11:58:10 -07:00
2021-08-11 20:57:34 -07:00
let featureSelectionRow = document.createElement("div");
2021-08-14 07:21:26 -07:00
featureSelectionRow.id = "featureSelectionRow";
featureSelectionRow.style.display = dState.featureSelectionRow;
2021-08-11 20:57:34 -07:00
featureSelectionRow.style.flexWrap = "wrap";
featureSelectionRow.style.justifyContent = "space-around";
2021-08-11 11:58:10 -07:00
selectionMenuDiv.appendChild(featureSelectionRow);
availableFeatures
.filter((x) => selectedFeatures.includes(x.feature))
2021-08-11 20:57:34 -07:00
.forEach((y) => {
buildFeatureSelectionInput(y, true, featureSelectionRow);
});
2021-08-11 11:58:10 -07:00
availableFeatures
.filter((x) => !selectedFeatures.includes(x.feature))
2021-08-11 20:57:34 -07:00
.forEach((y) => {
buildFeatureSelectionInput(y, false, featureSelectionRow);
});
2021-08-11 11:58:10 -07:00
}
2021-08-11 20:57:34 -07:00
function buildSelectionMenu(
sorted_themes,
sortedBy,
selectedTags,
2021-08-14 07:21:26 -07:00
selectedFeatures,
dState
2021-08-11 20:57:34 -07:00
) {
let tagSortBy = getTagSortBy();
let featureSortBy = getFeatureSortBy();
let availableTags = getAvailableTags(sorted_themes, tagSortBy);
let availableFeatures = getAvailableFeatures(sorted_themes, featureSortBy);
2021-08-14 07:21:26 -07:00
buildSortByDiv(sortedBy, dState.sortByRow);
buildTagSelectionDiv(selectedTags, availableTags, tagSortBy, dState);
buildFeatureSelectionDiv(
selectedFeatures,
availableFeatures,
featureSortBy,
dState
);
2021-08-11 11:58:10 -07:00
}