add filter by minVer

This commit is contained in:
Trent Palmer 2021-08-18 15:09:33 -07:00
parent 44b725f117
commit eec9cd95af
6 changed files with 121 additions and 13 deletions

View File

@ -17,6 +17,7 @@
<div id="selection-options-menu" style="display: none"> <div id="selection-options-menu" style="display: none">
<button type="button" id="button-for-showing-sort-option">SortBy</button> <button type="button" id="button-for-showing-sort-option">SortBy</button>
<button type="button" id="button-for-showing-columns">Show Columns</button> <button type="button" id="button-for-showing-columns">Show Columns</button>
<button type="button" id="button-for-filter-by-minver">Filter By MinVer</button>
<button type="button" id="button-for-filter-by-tags">Filter By Tags</button> <button type="button" id="button-for-filter-by-tags">Filter By Tags</button>
<button type="button" id="button-for-filter-by-features">Filter By Features</button> <button type="button" id="button-for-filter-by-features">Filter By Features</button>
<button type="button" id="button-for-filter-by-license">Filter By License</button> <button type="button" id="button-for-filter-by-license">Filter By License</button>
@ -30,13 +31,14 @@
var themes = {{ themes }}; var themes = {{ themes }};
{% include 'js/buildButton.js' %} {% include 'js/buildButton.js' %}
{% include 'js/buildSelectionInputs.js' %} {% include 'js/buildSelectionInputs.js' %}
{% include 'js/getAvailableTagsAndFeatures.js' %} {% include 'js/getAvailableTagsAndFeaturesAndLicenses.js' %}
{% include 'js/buildSortByDiv.js' %} {% include 'js/buildSortByDiv.js' %}
{% include 'js/buildSelectionHeadingRows.js' %} {% include 'js/buildSelectionHeadingRows.js' %}
{% include 'js/buildSelectionDivs.js' %} {% include 'js/buildSelectionDivs.js' %}
{% include 'js/getSortedThemes.js' %}
{% include 'js/minVersions.js' %}
{% include 'js/buildSelectionMenu.js' %} {% include 'js/buildSelectionMenu.js' %}
{% include 'js/buildThemeTableRow.js' %} {% include 'js/buildThemeTableRow.js' %}
{% include 'js/getSortedThemes.js' %}
{% include 'js/buildPage.js' %} {% include 'js/buildPage.js' %}
{% include 'js/selectionMenuCollapse.js' %} {% include 'js/selectionMenuCollapse.js' %}
</script> </script>

View File

@ -37,17 +37,35 @@ function getSelectedColumns() {
} }
} }
function getTagAndFeatureFilteredThemes(selectedTags, selectedFeatures) { function getTagAndFeatureFilteredThemes(
minVerFilteredThemes,
selectedTags,
selectedFeatures
) {
if (selectedTags.length === 0 && selectedFeatures.length === 0) { if (selectedTags.length === 0 && selectedFeatures.length === 0) {
return themes; return minVerFilteredThemes;
} else { } else {
return themes return minVerFilteredThemes
.filter((x) => selectedTags.every((y) => x.tags.includes(y))) .filter((x) => selectedTags.every((y) => x.tags.includes(y)))
.filter((z) => selectedFeatures.every((w) => z.features.includes(w))); .filter((z) => selectedFeatures.every((w) => z.features.includes(w)));
} }
} }
function getFilteredThemes(tagAndFeatureFilteredThemes, selectedLicenses) { function getMinVerFilteredThemes(selectedMinVer) {
if (selectedMinVer.length === 0 || selectedMinVer[0] === "none") {
return themes;
} else {
// return licenseFilteredThemes;
return themes
.filter((x) => x.min_ver !== "")
.filter((x) => semVerCompare(x.min_ver, selectedMinVer[0]) > -1);
}
}
function getLicenseFilteredThemes(
tagAndFeatureFilteredThemes,
selectedLicenses
) {
if (selectedLicenses.length === 0) { if (selectedLicenses.length === 0) {
return tagAndFeatureFilteredThemes; return tagAndFeatureFilteredThemes;
} else { } else {
@ -70,10 +88,14 @@ function getDiplayState() {
"columnSelectionRow", "columnSelectionRow",
"licenseSelectionHeadingRow", "licenseSelectionHeadingRow",
"licenseSelectionRow", "licenseSelectionRow",
"minVerSelectionHeadingRow",
"minVerSelectionRow",
"tagSelectionHeadingRow", "tagSelectionHeadingRow",
"tagSelectionRow", "tagSelectionRow",
"featureSelectionHeadingRow", "featureSelectionHeadingRow",
"featureSelectionRow", "featureSelectionRow",
"minVerSelectionHeadingRow",
"minVerSelectionRow",
].forEach((x) => (dState[x] = getDState(x))); ].forEach((x) => (dState[x] = getDState(x)));
return dState; return dState;
} }
@ -114,27 +136,31 @@ function buildResults() {
let selectedTags = getSelected("tag"); let selectedTags = getSelected("tag");
let selectedFeatures = getSelected("feature"); let selectedFeatures = getSelected("feature");
let selectedLicenses = getSelected("license"); let selectedLicenses = getSelected("license");
let selectedMinVer = getSelected("minVerRadioButton");
let sortedBy = getSortBy(); let sortedBy = getSortBy();
let minVerFilteredThemes = getMinVerFilteredThemes(selectedMinVer);
let tagAndFeatureFilteredThemes = getTagAndFeatureFilteredThemes( let tagAndFeatureFilteredThemes = getTagAndFeatureFilteredThemes(
minVerFilteredThemes,
selectedTags, selectedTags,
selectedFeatures selectedFeatures
); );
let filtered_themes = getFilteredThemes( let filteredThemes = getLicenseFilteredThemes(
tagAndFeatureFilteredThemes, tagAndFeatureFilteredThemes,
selectedLicenses selectedLicenses
); );
sortThemes(filtered_themes, sortedBy); sortThemes(filteredThemes, sortedBy);
filtered_themes.forEach((theme) => addThemeTableRow(theme, selectedColumns)); filteredThemes.forEach((theme) => addThemeTableRow(theme, selectedColumns));
// from buildSelectionMenu.js // from buildSelectionMenu.js
buildSelectionMenu( buildSelectionMenu(
tagAndFeatureFilteredThemes, tagAndFeatureFilteredThemes,
filtered_themes, filteredThemes,
sortedBy, sortedBy,
selectedTags, selectedTags,
selectedFeatures, selectedFeatures,
selectedLicenses, selectedLicenses,
selectedColumns, selectedColumns,
selectedMinVer,
getDiplayState() getDiplayState()
); );
} }

View File

@ -35,12 +35,14 @@ function buildColumnSelectionDiv(selectedColumns, dState, eParent) {
tableColumns tableColumns
.filter((x) => selectedColumns.includes(x.headingName)) .filter((x) => selectedColumns.includes(x.headingName))
.forEach((y) => { .forEach((y) => {
// from buildSelectionInput.js
buildInput(y, true, columnSelectionRow); buildInput(y, true, columnSelectionRow);
}); });
tableColumns tableColumns
.filter((x) => !selectedColumns.includes(x.headingName)) .filter((x) => !selectedColumns.includes(x.headingName))
.forEach((y) => { .forEach((y) => {
// from buildSelectionInput.js
buildInput(y, false, columnSelectionRow); buildInput(y, false, columnSelectionRow);
}); });
} }
@ -54,6 +56,7 @@ function buildSelectionMenu(
selectedFeatures, selectedFeatures,
selectedLicenses, selectedLicenses,
selectedColumns, selectedColumns,
selectedMinVer,
dState dState
) { ) {
let tagSortBy = getMenuSortBy("tag"); let tagSortBy = getMenuSortBy("tag");
@ -61,11 +64,11 @@ function buildSelectionMenu(
let licenseSortBy = getMenuSortBy("license"); let licenseSortBy = getMenuSortBy("license");
let selectionMenuDiv = document.getElementById("selection-menu"); let selectionMenuDiv = document.getElementById("selection-menu");
// from getAvailableTagsAndFeatures.js // from getAvailableTagsAndFeaturesAndLicenses.js
let availableTags = getAvailableTags(sorted_themes, tagSortBy); let availableTags = getAvailableTags(sorted_themes, tagSortBy);
// from getAvailableTagsAndFeatures.js // from getAvailableTagsAndFeaturesAndLicenses.js
let availableFeatures = getAvailableFeatures(sorted_themes, featureSortBy); let availableFeatures = getAvailableFeatures(sorted_themes, featureSortBy);
// from getAvailableTagsAndFeatures.js // from getAvailableTagsAndFeaturesAndLicenses.js
let availableLicences = getAvailableLicenses( let availableLicences = getAvailableLicenses(
tagAndFeatureFilteredThemes, tagAndFeatureFilteredThemes,
licenseSortBy licenseSortBy
@ -76,6 +79,8 @@ function buildSelectionMenu(
buildColumnSelectionDiv(selectedColumns, dState, selectionMenuDiv); buildColumnSelectionDiv(selectedColumns, dState, selectionMenuDiv);
buildMinVerSelectionDiv(selectedMinVer, dState, selectionMenuDiv);
// from buildSelectionDivs.js // from buildSelectionDivs.js
buildSelectionDiv( buildSelectionDiv(
selectedLicenses, selectedLicenses,

View File

@ -0,0 +1,64 @@
function getAvailableMinVersions() {
let availableMinVersions = [];
themes.forEach((x) => {
if (x.min_ver !== "") {
if (!availableMinVersions.includes(x.min_ver)) {
availableMinVersions.push(x.min_ver);
}
}
});
// semVerCompare comes from getSortedThemes.js
return availableMinVersions
.sort((a, b) => semVerCompare(a, b))
.map((x) => x.toLowerCase().replace(/[\s*]/g, "-"));
}
function buildMinVerSelectionHeadingRow(eParent, dState) {
let minVerSelectionHeadingRow = document.createElement("div");
minVerSelectionHeadingRow.id = "minVerSelectionHeadingRow";
minVerSelectionHeadingRow.style.maxWidth = "100%";
minVerSelectionHeadingRow.style.display = dState.minVerSelectionHeadingRow;
// minVerSelectionHeadingRow.style.display = "flex";
minVerSelectionHeadingRow.style.alignItems = "center";
let minVerSelectionHeading = document.createElement("h2");
minVerSelectionHeading.innerHTML = "MinVersion";
minVerSelectionHeadingRow.appendChild(minVerSelectionHeading);
eParent.appendChild(minVerSelectionHeadingRow);
}
function buildMinVerSelectionDiv(selectedMinVer, dState, eParent) {
buildMinVerSelectionHeadingRow(eParent, dState);
let minVerSelectionRow = document.createElement("div");
minVerSelectionRow.id = "minVerSelectionRow";
minVerSelectionRow.style.display = dState.minVerSelectionRow;
// minVerSelectionRow.style.display = "flex";
minVerSelectionRow.style.flexWrap = "wrap";
minVerSelectionRow.style.justifyContent = "space-around";
eParent.appendChild(minVerSelectionRow);
let availableMinVersions = getAvailableMinVersions();
availableMinVersions.push("none");
let selMinVer = selectedMinVer.length === 0 ? "none" : selectedMinVer[0];
availableMinVersions.forEach((x) => {
let inputID = `${x}-select-minver-radio-button-input`;
let rButton = buildRadioButton(
inputID,
"minVerRadioButtonSelectionInput",
x,
selMinVer,
x,
x
);
minVerSelectionRow.appendChild(rButton);
let filterByMinVerInput = document.getElementById(inputID);
rButton.onclick = function () {
if (!filterByMinVerInput.checked) {
filterByMinVerInput.checked = true;
buildResults();
}
};
});
}

View File

@ -4,6 +4,7 @@ function showSelectionOptionsButtons() {
"button-for-showing-columns", "button-for-showing-columns",
"button-for-filter-by-tags", "button-for-filter-by-tags",
"button-for-filter-by-features", "button-for-filter-by-features",
"button-for-filter-by-minver",
"button-for-filter-by-license", "button-for-filter-by-license",
"button-for-filter-by-tags-and-features", "button-for-filter-by-tags-and-features",
].forEach((x) => (document.getElementById(x).style.display = "inline-block")); ].forEach((x) => (document.getElementById(x).style.display = "inline-block"));
@ -19,6 +20,8 @@ let closeableMenus = [
"tagSelectionRow", "tagSelectionRow",
"featureSelectionHeadingRow", "featureSelectionHeadingRow",
"featureSelectionRow", "featureSelectionRow",
"minVerSelectionHeadingRow",
"minVerSelectionRow",
]; ];
let areAnyCloseAbleMenusOpen = () => let areAnyCloseAbleMenusOpen = () =>
@ -88,6 +91,14 @@ document.getElementById("button-for-filter-by-features").onclick = function () {
document.getElementById("featureSelectionRow").style.display = "flex"; document.getElementById("featureSelectionRow").style.display = "flex";
}; };
document.getElementById("button-for-filter-by-minver").onclick = function () {
closeMenus();
showSelectionOptionsButtons();
this.style.display = "none";
document.getElementById("minVerSelectionHeadingRow").style.display = "flex";
document.getElementById("minVerSelectionRow").style.display = "flex";
};
document.getElementById("button-for-filter-by-license").onclick = function () { document.getElementById("button-for-filter-by-license").onclick = function () {
closeMenus(); closeMenus();
showSelectionOptionsButtons(); showSelectionOptionsButtons();