mirror of
https://github.com/TrentSPalmer/hugo_themes_report.git
synced 2025-04-07 15:47:06 -07:00
add filter by license
This commit is contained in:
parent
d40b8c218a
commit
44b725f117
@ -19,6 +19,7 @@
|
|||||||
<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-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-tags-and-features">Filter By Tags & Features</button>
|
<button type="button" id="button-for-filter-by-tags-and-features">Filter By Tags & Features</button>
|
||||||
</div>
|
</div>
|
||||||
<div id="selection-menu" style="margin-bottom: 1rem;">
|
<div id="selection-menu" style="margin-bottom: 1rem;">
|
||||||
@ -31,8 +32,8 @@ var themes = {{ themes }};
|
|||||||
{% include 'js/buildSelectionInputs.js' %}
|
{% include 'js/buildSelectionInputs.js' %}
|
||||||
{% include 'js/getAvailableTagsAndFeatures.js' %}
|
{% include 'js/getAvailableTagsAndFeatures.js' %}
|
||||||
{% include 'js/buildSortByDiv.js' %}
|
{% include 'js/buildSortByDiv.js' %}
|
||||||
{% include 'js/buildTagAndFeatureSelectionHeadingRows.js' %}
|
{% include 'js/buildSelectionHeadingRows.js' %}
|
||||||
{% include 'js/buildTagAndFeatureSelectionDivs.js' %}
|
{% include 'js/buildSelectionDivs.js' %}
|
||||||
{% include 'js/buildSelectionMenu.js' %}
|
{% include 'js/buildSelectionMenu.js' %}
|
||||||
{% include 'js/buildThemeTableRow.js' %}
|
{% include 'js/buildThemeTableRow.js' %}
|
||||||
{% include 'js/getSortedThemes.js' %}
|
{% include 'js/getSortedThemes.js' %}
|
||||||
|
@ -10,10 +10,12 @@ function getSortBy() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSelectedTags() {
|
function getSelected(filterCategory) {
|
||||||
let tagSelectionInputs = document.getElementsByClassName("tagSelectionInput");
|
let selectionInputs = document.getElementsByClassName(
|
||||||
if (tagSelectionInputs.length > 0) {
|
`${filterCategory}SelectionInput`
|
||||||
return [...tagSelectionInputs].filter((x) => x.checked).map((y) => y.value);
|
);
|
||||||
|
if (selectionInputs.length > 0) {
|
||||||
|
return [...selectionInputs].filter((x) => x.checked).map((y) => y.value);
|
||||||
} else {
|
} else {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
@ -35,20 +37,7 @@ function getSelectedColumns() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSelectedFeatures() {
|
function getTagAndFeatureFilteredThemes(selectedTags, selectedFeatures) {
|
||||||
let featureSelectionInputs = document.getElementsByClassName(
|
|
||||||
"featureSelectionInput"
|
|
||||||
);
|
|
||||||
if (featureSelectionInputs.length > 0) {
|
|
||||||
return [...featureSelectionInputs]
|
|
||||||
.filter((x) => x.checked)
|
|
||||||
.map((y) => y.value);
|
|
||||||
} else {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getFilteredThemes(selectedTags, selectedFeatures) {
|
|
||||||
if (selectedTags.length === 0 && selectedFeatures.length === 0) {
|
if (selectedTags.length === 0 && selectedFeatures.length === 0) {
|
||||||
return themes;
|
return themes;
|
||||||
} else {
|
} else {
|
||||||
@ -58,6 +47,16 @@ function getFilteredThemes(selectedTags, selectedFeatures) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getFilteredThemes(tagAndFeatureFilteredThemes, selectedLicenses) {
|
||||||
|
if (selectedLicenses.length === 0) {
|
||||||
|
return tagAndFeatureFilteredThemes;
|
||||||
|
} else {
|
||||||
|
return tagAndFeatureFilteredThemes.filter((x) =>
|
||||||
|
selectedLicenses.includes(x.license)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function getDState(x) {
|
function getDState(x) {
|
||||||
let e = document.getElementById(x);
|
let e = document.getElementById(x);
|
||||||
return e !== null ? e.style.display : "none";
|
return e !== null ? e.style.display : "none";
|
||||||
@ -69,6 +68,8 @@ function getDiplayState() {
|
|||||||
"sortByRow",
|
"sortByRow",
|
||||||
"columnSelectionHeadingRow",
|
"columnSelectionHeadingRow",
|
||||||
"columnSelectionRow",
|
"columnSelectionRow",
|
||||||
|
"licenseSelectionHeadingRow",
|
||||||
|
"licenseSelectionRow",
|
||||||
"tagSelectionHeadingRow",
|
"tagSelectionHeadingRow",
|
||||||
"tagSelectionRow",
|
"tagSelectionRow",
|
||||||
"featureSelectionHeadingRow",
|
"featureSelectionHeadingRow",
|
||||||
@ -110,22 +111,31 @@ function buildResults() {
|
|||||||
resultsTableHeadRow.appendChild(xTH);
|
resultsTableHeadRow.appendChild(xTH);
|
||||||
});
|
});
|
||||||
|
|
||||||
let selectedTags = getSelectedTags();
|
let selectedTags = getSelected("tag");
|
||||||
let selectedFeatures = getSelectedFeatures();
|
let selectedFeatures = getSelected("feature");
|
||||||
|
let selectedLicenses = getSelected("license");
|
||||||
let sortedBy = getSortBy();
|
let sortedBy = getSortBy();
|
||||||
// let filtered_themes = getFilteredThemes(selectedTags, selectedFeatures);
|
let tagAndFeatureFilteredThemes = getTagAndFeatureFilteredThemes(
|
||||||
let sorted_themes = getFilteredThemes(selectedTags, selectedFeatures);
|
selectedTags,
|
||||||
sortThemes(sorted_themes, sortedBy);
|
selectedFeatures
|
||||||
sorted_themes.forEach((theme) => addThemeTableRow(theme, selectedColumns));
|
);
|
||||||
|
let filtered_themes = getFilteredThemes(
|
||||||
|
tagAndFeatureFilteredThemes,
|
||||||
|
selectedLicenses
|
||||||
|
);
|
||||||
|
sortThemes(filtered_themes, sortedBy);
|
||||||
|
filtered_themes.forEach((theme) => addThemeTableRow(theme, selectedColumns));
|
||||||
|
|
||||||
// from buildSelectionMenu.js
|
// from buildSelectionMenu.js
|
||||||
buildSelectionMenu(
|
buildSelectionMenu(
|
||||||
(sorted_themes = sorted_themes),
|
tagAndFeatureFilteredThemes,
|
||||||
(sortBy = sortedBy),
|
filtered_themes,
|
||||||
(selectedTags = selectedTags),
|
sortedBy,
|
||||||
(selectedFeatures = selectedFeatures),
|
selectedTags,
|
||||||
(selectedColumns = selectedColumns),
|
selectedFeatures,
|
||||||
(dState = getDiplayState())
|
selectedLicenses,
|
||||||
|
selectedColumns,
|
||||||
|
getDiplayState()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
40
templates/js/buildSelectionDivs.js
Normal file
40
templates/js/buildSelectionDivs.js
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
// called from buildSelectionMenu.js
|
||||||
|
function buildSelectionDiv(
|
||||||
|
selectedItems,
|
||||||
|
availableItems,
|
||||||
|
sortBy,
|
||||||
|
dStateSelectionRow,
|
||||||
|
dStateSelectionHeadingRow,
|
||||||
|
eParent,
|
||||||
|
menuSection
|
||||||
|
) {
|
||||||
|
// from buildSelectionHeadingRows.js
|
||||||
|
buildSelectionHeadingRow(
|
||||||
|
eParent,
|
||||||
|
sortBy,
|
||||||
|
dStateSelectionHeadingRow,
|
||||||
|
menuSection
|
||||||
|
);
|
||||||
|
|
||||||
|
let selectionRow = document.createElement("div");
|
||||||
|
selectionRow.id = `${menuSection}SelectionRow`;
|
||||||
|
selectionRow.style.display = dStateSelectionRow;
|
||||||
|
selectionRow.style.flexWrap = "wrap";
|
||||||
|
selectionRow.style.justifyContent = "space-around";
|
||||||
|
|
||||||
|
eParent.appendChild(selectionRow);
|
||||||
|
|
||||||
|
availableItems
|
||||||
|
.filter((x) => selectedItems.includes(x[menuSection]))
|
||||||
|
.forEach((y) => {
|
||||||
|
// from buildSelectionInputs.js
|
||||||
|
buildInput(y, true, selectionRow);
|
||||||
|
});
|
||||||
|
|
||||||
|
availableItems
|
||||||
|
.filter((x) => !selectedItems.includes(x[menuSection]))
|
||||||
|
.forEach((y) => {
|
||||||
|
// from buildSelectionInputs.js
|
||||||
|
buildInput(y, false, selectionRow);
|
||||||
|
});
|
||||||
|
}
|
58
templates/js/buildSelectionHeadingRows.js
Normal file
58
templates/js/buildSelectionHeadingRows.js
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
// called from buildTagAndFeatureSelectionDivs.js
|
||||||
|
function buildSelectionHeadingRow(
|
||||||
|
eParent,
|
||||||
|
sortBy,
|
||||||
|
dStateSelectionHeadingRow,
|
||||||
|
menuSection
|
||||||
|
) {
|
||||||
|
let selectionHeadingRow = document.createElement("div");
|
||||||
|
selectionHeadingRow.id = `${menuSection}SelectionHeadingRow`;
|
||||||
|
selectionHeadingRow.style.maxWidth = "100%";
|
||||||
|
selectionHeadingRow.style.display = dStateSelectionHeadingRow;
|
||||||
|
selectionHeadingRow.style.justifyContent = "space-around";
|
||||||
|
selectionHeadingRow.style.alignItems = "center";
|
||||||
|
|
||||||
|
let selectionHeading = document.createElement("h2");
|
||||||
|
selectionHeading.innerHTML = `Select ${menuSection}s`;
|
||||||
|
|
||||||
|
let sortByNameInputButton = buildRadioButton(
|
||||||
|
`${menuSection}SortByName`,
|
||||||
|
`${menuSection}SortBy`,
|
||||||
|
`${menuSection}SortByName`,
|
||||||
|
sortBy,
|
||||||
|
"name",
|
||||||
|
"Name"
|
||||||
|
);
|
||||||
|
|
||||||
|
let sortByNumThemesInputButton = buildRadioButton(
|
||||||
|
`${menuSection}SortByNumThemes`,
|
||||||
|
`${menuSection}SortBy`,
|
||||||
|
`${menuSection}SortByNumThemes`,
|
||||||
|
sortBy,
|
||||||
|
"numThemes",
|
||||||
|
"nThemes"
|
||||||
|
);
|
||||||
|
|
||||||
|
selectionHeadingRow.appendChild(selectionHeading);
|
||||||
|
selectionHeadingRow.appendChild(sortByNameInputButton);
|
||||||
|
selectionHeadingRow.appendChild(sortByNumThemesInputButton);
|
||||||
|
eParent.appendChild(selectionHeadingRow);
|
||||||
|
|
||||||
|
let sortByNameInput = document.getElementById(`${menuSection}SortByName`);
|
||||||
|
sortByNameInputButton.onclick = function () {
|
||||||
|
if (!sortByNameInput.checked) {
|
||||||
|
sortByNameInput.checked = true;
|
||||||
|
buildResults();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let sortByNumThemesInput = document.getElementById(
|
||||||
|
`${menuSection}SortByNumThemes`
|
||||||
|
);
|
||||||
|
sortByNumThemesInputButton.onclick = function () {
|
||||||
|
if (!sortByNumThemesInput.checked) {
|
||||||
|
sortByNumThemesInput.checked = true;
|
||||||
|
buildResults();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
@ -33,6 +33,11 @@ function buildInput(item, selected, inpParent) {
|
|||||||
inputSelectionButton.style.width = "12rem";
|
inputSelectionButton.style.width = "12rem";
|
||||||
selectionInputLabel.innerHTML = `${item.tag} (${item.num_themes})`;
|
selectionInputLabel.innerHTML = `${item.tag} (${item.num_themes})`;
|
||||||
selectionInput.classList.add("tagSelectionInput");
|
selectionInput.classList.add("tagSelectionInput");
|
||||||
|
} else if ("license" in item) {
|
||||||
|
selectionInput.value = item.license;
|
||||||
|
inputSelectionButton.style.width = "15rem";
|
||||||
|
selectionInputLabel.innerHTML = `${item.license} (${item.num_themes})`;
|
||||||
|
selectionInput.classList.add("licenseSelectionInput");
|
||||||
} else if ("headingName" in item) {
|
} else if ("headingName" in item) {
|
||||||
selectionInput.value = `${item.headingName}-column`;
|
selectionInput.value = `${item.headingName}-column`;
|
||||||
selectionInputLabel.innerHTML = item.headingText;
|
selectionInputLabel.innerHTML = item.headingText;
|
||||||
|
@ -1,20 +1,11 @@
|
|||||||
function getTagSortBy() {
|
function getMenuSortBy(sortBySelector) {
|
||||||
let tagSortByNumThemes = document.getElementById("tagSortByNumThemes");
|
let sortByNumThemes = document.getElementById(
|
||||||
if (tagSortByNumThemes === null) {
|
`${sortBySelector}SortByNumThemes`
|
||||||
return "numThemes";
|
|
||||||
} else {
|
|
||||||
return tagSortByNumThemes.checked ? "numThemes" : "name";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getFeatureSortBy() {
|
|
||||||
let featureSortByNumThemes = document.getElementById(
|
|
||||||
"featureSortByNumThemes"
|
|
||||||
);
|
);
|
||||||
if (featureSortByNumThemes === null) {
|
if (sortByNumThemes === null) {
|
||||||
return "numThemes";
|
return "numThemes";
|
||||||
} else {
|
} else {
|
||||||
return featureSortByNumThemes.checked ? "numThemes" : "name";
|
return sortByNumThemes.checked ? "numThemes" : "name";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,46 +47,65 @@ function buildColumnSelectionDiv(selectedColumns, dState, eParent) {
|
|||||||
|
|
||||||
// called from buildPage.js
|
// called from buildPage.js
|
||||||
function buildSelectionMenu(
|
function buildSelectionMenu(
|
||||||
|
tagAndFeatureFilteredThemes,
|
||||||
sorted_themes,
|
sorted_themes,
|
||||||
sortBy,
|
sortBy,
|
||||||
selectedTags,
|
selectedTags,
|
||||||
selectedFeatures,
|
selectedFeatures,
|
||||||
|
selectedLicenses,
|
||||||
selectedColumns,
|
selectedColumns,
|
||||||
dState
|
dState
|
||||||
) {
|
) {
|
||||||
let tagSortBy = getTagSortBy();
|
let tagSortBy = getMenuSortBy("tag");
|
||||||
let featureSortBy = getFeatureSortBy();
|
let featureSortBy = getMenuSortBy("feature");
|
||||||
|
let licenseSortBy = getMenuSortBy("license");
|
||||||
let selectionMenuDiv = document.getElementById("selection-menu");
|
let selectionMenuDiv = document.getElementById("selection-menu");
|
||||||
|
|
||||||
// from getAvailableTagsAndFeatures.js
|
// from getAvailableTagsAndFeatures.js
|
||||||
let availableTags = getAvailableTags(sorted_themes, tagSortBy);
|
let availableTags = getAvailableTags(sorted_themes, tagSortBy);
|
||||||
// from getAvailableTagsAndFeatures.js
|
// from getAvailableTagsAndFeatures.js
|
||||||
let availableFeatures = getAvailableFeatures(sorted_themes, featureSortBy);
|
let availableFeatures = getAvailableFeatures(sorted_themes, featureSortBy);
|
||||||
|
// from getAvailableTagsAndFeatures.js
|
||||||
|
let availableLicences = getAvailableLicenses(
|
||||||
|
tagAndFeatureFilteredThemes,
|
||||||
|
licenseSortBy
|
||||||
|
);
|
||||||
|
|
||||||
// from buildSortByDiv.js
|
// from buildSortByDiv.js
|
||||||
buildSortByDiv((sortedBy = sortBy), (sortByRowDisplay = dState.sortByRow));
|
buildSortByDiv(sortBy, dState.sortByRow);
|
||||||
|
|
||||||
buildColumnSelectionDiv(
|
buildColumnSelectionDiv(selectedColumns, dState, selectionMenuDiv);
|
||||||
(selectedColumns = selectedColumns),
|
|
||||||
(dState = dState),
|
// from buildSelectionDivs.js
|
||||||
(eParent = selectionMenuDiv)
|
buildSelectionDiv(
|
||||||
|
selectedLicenses,
|
||||||
|
availableLicences,
|
||||||
|
licenseSortBy,
|
||||||
|
dState.licenseSelectionRow,
|
||||||
|
dState.licenseSelectionHeadingRow,
|
||||||
|
selectionMenuDiv,
|
||||||
|
"license"
|
||||||
);
|
);
|
||||||
|
|
||||||
// from buildTagAndFeatureSelectionDivs.js
|
// from buildSelectionDivs.js
|
||||||
buildTagSelectionDiv(
|
buildSelectionDiv(
|
||||||
(selectedTags = selectedTags),
|
selectedTags,
|
||||||
(availableTags = availableTags),
|
availableTags,
|
||||||
(tagSortBy = tagSortBy),
|
tagSortBy,
|
||||||
(dState = dState),
|
dState.tagSelectionRow,
|
||||||
(eParent = selectionMenuDiv)
|
dState.tagSelectionHeadingRow,
|
||||||
|
selectionMenuDiv,
|
||||||
|
"tag"
|
||||||
);
|
);
|
||||||
|
|
||||||
// from buildTagAndFeatureSelectionDivs.js
|
// from buildSelectionDivs.js
|
||||||
buildFeatureSelectionDiv(
|
buildSelectionDiv(
|
||||||
(selectedFeatures = selectedFeatures),
|
selectedFeatures,
|
||||||
(availableFeatures = availableFeatures),
|
availableFeatures,
|
||||||
(featureSortBy = featureSortBy),
|
featureSortBy,
|
||||||
(dState = dState),
|
dState.featureSelectionRow,
|
||||||
(eParent = selectionMenuDiv)
|
dState.featureSelectionHeadingRow,
|
||||||
|
selectionMenuDiv,
|
||||||
|
"feature"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -21,52 +21,52 @@ function buildSortByDiv(sortBy, sortByRowDisplay) {
|
|||||||
|
|
||||||
// from buildButton.js
|
// from buildButton.js
|
||||||
let sortByStarsButton = buildRadioButton(
|
let sortByStarsButton = buildRadioButton(
|
||||||
(inputID = "sortByStars"),
|
"sortByStars",
|
||||||
(inputName = "sortBy"),
|
"sortBy",
|
||||||
(inputValue = "stars"),
|
"stars",
|
||||||
(sortedBy = sortBy[0]),
|
sortBy[0],
|
||||||
(sortedBySelector = "stars"),
|
"stars",
|
||||||
(labelText = "Stars")
|
"Stars"
|
||||||
);
|
);
|
||||||
|
|
||||||
// from buildButton.js
|
// from buildButton.js
|
||||||
let sortByLastCommitButton = buildRadioButton(
|
let sortByLastCommitButton = buildRadioButton(
|
||||||
(inputID = "sortByDate"),
|
"sortByDate",
|
||||||
(inputName = "sortBy"),
|
"sortBy",
|
||||||
(inputValue = "date"),
|
"date",
|
||||||
(sortedBy = sortBy[0]),
|
sortBy[0],
|
||||||
(sortedBySelector = "date"),
|
"date",
|
||||||
(labelText = "Latest Commit Date")
|
"Latest Commit Date"
|
||||||
);
|
);
|
||||||
|
|
||||||
// from buildButton.js
|
// from buildButton.js
|
||||||
let sortByMinVerButton = buildRadioButton(
|
let sortByMinVerButton = buildRadioButton(
|
||||||
(inputID = "sortByMinVer"),
|
"sortByMinVer",
|
||||||
(inputName = "sortBy"),
|
"sortBy",
|
||||||
(inputValue = "minVer"),
|
"minVer",
|
||||||
(sortedBy = sortBy[0]),
|
sortBy[0],
|
||||||
(sortedBySelector = "minVer"),
|
"minVer",
|
||||||
(labelText = "Min Hugo Version")
|
"Min Hugo Version"
|
||||||
);
|
);
|
||||||
|
|
||||||
// from buildButton.js
|
// from buildButton.js
|
||||||
let sortByLicenseButton = buildRadioButton(
|
let sortByLicenseButton = buildRadioButton(
|
||||||
(inputID = "sortByLicense"),
|
"sortByLicense",
|
||||||
(inputName = "sortBy"),
|
"sortBy",
|
||||||
(inputValue = "license"),
|
"license",
|
||||||
(sortedBy = sortBy[0]),
|
sortBy[0],
|
||||||
(sortedBySelector = "license"),
|
"license",
|
||||||
(labelText = "License")
|
"License"
|
||||||
);
|
);
|
||||||
|
|
||||||
// from buildButton.js
|
// from buildButton.js
|
||||||
let sortByNameButton = buildRadioButton(
|
let sortByNameButton = buildRadioButton(
|
||||||
(inputID = "sortByName"),
|
"sortByName",
|
||||||
(inputName = "sortBy"),
|
"sortBy",
|
||||||
(inputValue = "name"),
|
"name",
|
||||||
(sortedBy = sortBy[0]),
|
sortBy[0],
|
||||||
(sortedBySelector = "name"),
|
"name",
|
||||||
(labelText = "Name")
|
"Name"
|
||||||
);
|
);
|
||||||
|
|
||||||
sortBy.forEach((x) => {
|
sortBy.forEach((x) => {
|
||||||
|
@ -1,67 +0,0 @@
|
|||||||
// called from buildSelectionMenu.js
|
|
||||||
function buildTagSelectionDiv(
|
|
||||||
selectedTags,
|
|
||||||
availableTags,
|
|
||||||
tagSortBy,
|
|
||||||
dState,
|
|
||||||
eParent
|
|
||||||
) {
|
|
||||||
// from buildTagAndFeatureSelectionHeadingRows.js
|
|
||||||
buildTagSelectionHeadingRow(eParent, tagSortBy, dState);
|
|
||||||
|
|
||||||
let tagSelectionRow = document.createElement("div");
|
|
||||||
tagSelectionRow.id = "tagSelectionRow";
|
|
||||||
tagSelectionRow.style.display = dState.tagSelectionRow;
|
|
||||||
tagSelectionRow.style.flexWrap = "wrap";
|
|
||||||
tagSelectionRow.style.justifyContent = "space-around";
|
|
||||||
|
|
||||||
eParent.appendChild(tagSelectionRow);
|
|
||||||
|
|
||||||
availableTags
|
|
||||||
.filter((x) => selectedTags.includes(x.tag))
|
|
||||||
.forEach((y) => {
|
|
||||||
// from buildSelectionInputs.js
|
|
||||||
buildInput(y, true, tagSelectionRow);
|
|
||||||
});
|
|
||||||
|
|
||||||
availableTags
|
|
||||||
.filter((x) => !selectedTags.includes(x.tag))
|
|
||||||
.forEach((y) => {
|
|
||||||
// from buildSelectionInputs.js
|
|
||||||
buildInput(y, false, tagSelectionRow);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// called from buildSelectionMenu.js
|
|
||||||
function buildFeatureSelectionDiv(
|
|
||||||
selectedFeatures,
|
|
||||||
availableFeatures,
|
|
||||||
featureSortBy,
|
|
||||||
dState,
|
|
||||||
eParent
|
|
||||||
) {
|
|
||||||
// from buildTagAndFeatureSelectionHeadingRows.js
|
|
||||||
buildFeatureSelectionHeadingRow(eParent, featureSortBy, dState);
|
|
||||||
|
|
||||||
let featureSelectionRow = document.createElement("div");
|
|
||||||
featureSelectionRow.id = "featureSelectionRow";
|
|
||||||
featureSelectionRow.style.display = dState.featureSelectionRow;
|
|
||||||
featureSelectionRow.style.flexWrap = "wrap";
|
|
||||||
featureSelectionRow.style.justifyContent = "space-around";
|
|
||||||
|
|
||||||
eParent.appendChild(featureSelectionRow);
|
|
||||||
|
|
||||||
availableFeatures
|
|
||||||
.filter((x) => selectedFeatures.includes(x.feature))
|
|
||||||
.forEach((y) => {
|
|
||||||
// from buildSelectionInputs.js
|
|
||||||
buildInput(y, true, featureSelectionRow);
|
|
||||||
});
|
|
||||||
|
|
||||||
availableFeatures
|
|
||||||
.filter((x) => !selectedFeatures.includes(x.feature))
|
|
||||||
.forEach((y) => {
|
|
||||||
// from buildSelectionInputs.js
|
|
||||||
buildInput(y, false, featureSelectionRow);
|
|
||||||
});
|
|
||||||
}
|
|
@ -1,105 +0,0 @@
|
|||||||
// called from buildTagAndFeatureSelectionDivs.js
|
|
||||||
function buildTagSelectionHeadingRow(eParent, tagSortBy, dState) {
|
|
||||||
let tagSelectionHeadingRow = document.createElement("div");
|
|
||||||
tagSelectionHeadingRow.id = "tagSelectionHeadingRow";
|
|
||||||
tagSelectionHeadingRow.style.maxWidth = "100%";
|
|
||||||
tagSelectionHeadingRow.style.display = dState.tagSelectionHeadingRow;
|
|
||||||
tagSelectionHeadingRow.style.justifyContent = "space-around";
|
|
||||||
tagSelectionHeadingRow.style.alignItems = "center";
|
|
||||||
|
|
||||||
let tagSelectionHeading = document.createElement("h2");
|
|
||||||
tagSelectionHeading.innerHTML = "Select Tags";
|
|
||||||
|
|
||||||
let tagSortByNameInputButton = buildRadioButton(
|
|
||||||
(inputID = "tagSortByName"),
|
|
||||||
(inputName = "tagSortBy"),
|
|
||||||
(inputValue = "tagSortByName"),
|
|
||||||
(sortedBy = tagSortBy),
|
|
||||||
(sortedBySelector = "name"),
|
|
||||||
(labelText = "Name")
|
|
||||||
);
|
|
||||||
|
|
||||||
let tagSortByNumThemesInputButton = buildRadioButton(
|
|
||||||
(inputID = "tagSortByNumThemes"),
|
|
||||||
(inputName = "tagSortBy"),
|
|
||||||
(inputValue = "tagSortByNumThemes"),
|
|
||||||
(sortedBy = tagSortBy),
|
|
||||||
(sortedBySelector = "numThemes"),
|
|
||||||
(labelText = "nThemes")
|
|
||||||
);
|
|
||||||
|
|
||||||
tagSelectionHeadingRow.appendChild(tagSelectionHeading);
|
|
||||||
tagSelectionHeadingRow.appendChild(tagSortByNameInputButton);
|
|
||||||
tagSelectionHeadingRow.appendChild(tagSortByNumThemesInputButton);
|
|
||||||
eParent.appendChild(tagSelectionHeadingRow);
|
|
||||||
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// called from buildTagAndFeatureSelectionDivs.js
|
|
||||||
function buildFeatureSelectionHeadingRow(eParent, featureSortBy, dState) {
|
|
||||||
let featureSelectionHeadingRow = document.createElement("div");
|
|
||||||
featureSelectionHeadingRow.id = "featureSelectionHeadingRow";
|
|
||||||
featureSelectionHeadingRow.style.maxWidth = "100%";
|
|
||||||
featureSelectionHeadingRow.style.display = dState.featureSelectionHeadingRow;
|
|
||||||
featureSelectionHeadingRow.style.justifyContent = "space-around";
|
|
||||||
featureSelectionHeadingRow.style.alignItems = "center";
|
|
||||||
|
|
||||||
let featureSelectionHeading = document.createElement("h2");
|
|
||||||
featureSelectionHeading.innerHTML = "Select Features";
|
|
||||||
|
|
||||||
let featureSortByNameInputButton = buildRadioButton(
|
|
||||||
(inputID = "featureSortByName"),
|
|
||||||
(inputName = "featureSortBy"),
|
|
||||||
(inputValue = "featureSortByName"),
|
|
||||||
(sortedBy = featureSortBy),
|
|
||||||
(sortedBySelector = "name"),
|
|
||||||
(labelText = "Name")
|
|
||||||
);
|
|
||||||
|
|
||||||
let featureSortByNumThemesInputButton = buildRadioButton(
|
|
||||||
(inputID = "featureSortByNumThemes"),
|
|
||||||
(inputName = "featureSortBy"),
|
|
||||||
(inputValue = "featureSortByNumThemes"),
|
|
||||||
(sortedBy = featureSortBy),
|
|
||||||
(sortedBySelector = "numThemes"),
|
|
||||||
(labelText = "nThemes")
|
|
||||||
);
|
|
||||||
|
|
||||||
featureSelectionHeadingRow.appendChild(featureSelectionHeading);
|
|
||||||
featureSelectionHeadingRow.appendChild(featureSortByNameInputButton);
|
|
||||||
featureSelectionHeadingRow.appendChild(featureSortByNumThemesInputButton);
|
|
||||||
eParent.appendChild(featureSelectionHeadingRow);
|
|
||||||
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
@ -28,6 +28,32 @@ function getAvailableFeatures(sorted_themes, featureSortBy) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// called from buildSelectionMenu.js
|
||||||
|
function getAvailableLicenses(tagAndFeatureFilteredThemes, licenseSortBy) {
|
||||||
|
let availableLicences = [];
|
||||||
|
tagAndFeatureFilteredThemes.forEach((x) => {
|
||||||
|
if (!availableLicences.includes(x.license)) {
|
||||||
|
availableLicences.push(x.license);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let availableLicencesMap = availableLicences.map((x) => {
|
||||||
|
return {
|
||||||
|
license: x,
|
||||||
|
num_themes: tagAndFeatureFilteredThemes.filter((y) => y.license === x)
|
||||||
|
.length,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
if (licenseSortBy === "numThemes") {
|
||||||
|
return availableLicencesMap
|
||||||
|
.sort((a, b) => a.license.localeCompare(b.license))
|
||||||
|
.sort((a, b) => b.num_themes - a.num_themes);
|
||||||
|
} else {
|
||||||
|
return availableLicencesMap.sort((a, b) =>
|
||||||
|
a.license.localeCompare(b.license)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// called from buildSelectionMenu.js
|
// called from buildSelectionMenu.js
|
||||||
function getAvailableTags(sorted_themes, tagSortBy) {
|
function getAvailableTags(sorted_themes, tagSortBy) {
|
||||||
let result = [];
|
let result = [];
|
||||||
|
@ -4,12 +4,15 @@ 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-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"));
|
||||||
}
|
}
|
||||||
|
|
||||||
let closeableMenus = [
|
let closeableMenus = [
|
||||||
"sortByRow",
|
"sortByRow",
|
||||||
|
"licenseSelectionHeadingRow",
|
||||||
|
"licenseSelectionRow",
|
||||||
"columnSelectionHeadingRow",
|
"columnSelectionHeadingRow",
|
||||||
"columnSelectionRow",
|
"columnSelectionRow",
|
||||||
"tagSelectionHeadingRow",
|
"tagSelectionHeadingRow",
|
||||||
@ -85,6 +88,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-license").onclick = function () {
|
||||||
|
closeMenus();
|
||||||
|
showSelectionOptionsButtons();
|
||||||
|
this.style.display = "none";
|
||||||
|
document.getElementById("licenseSelectionHeadingRow").style.display = "flex";
|
||||||
|
document.getElementById("licenseSelectionRow").style.display = "flex";
|
||||||
|
};
|
||||||
|
|
||||||
document.getElementById("button-for-filter-by-tags-and-features").onclick =
|
document.getElementById("button-for-filter-by-tags-and-features").onclick =
|
||||||
function () {
|
function () {
|
||||||
closeMenus();
|
closeMenus();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user