function getSortBy() { let sortByLastCommitInput = document.getElementById('sortByDate'); if (sortByLastCommitInput === null) { return 'date'; } else { return sortByLastCommitInput.checked ? 'date' : 'stars'; } } function getTagSortBy() { let tagSortByNumThemes = document.getElementById('tagSortByNumThemes'); if (tagSortByNumThemes === null) { return 'numThemes'; } else { return tagSortByNumThemes.checked ? 'numThemes' : 'name'; } } function getFeatureSortBy() { let featureSortByNumThemes = document.getElementById('featureSortByNumThemes'); if (featureSortByNumThemes === null) { return 'numThemes'; } else { return featureSortByNumThemes.checked ? 'numThemes' : 'name'; } } function getSortedThemes(themeList, sortedBy) { if (sortedBy === 'date') { return themeList.sort((a, b) => b.date_in_seconds - a.date_in_seconds); } else { return themeList.sort((a, b) => b.num_stars - a.num_stars); } } function getSelectedTags() { let tagSelectionInputs = document.getElementsByClassName('tagSelectionInput'); if (tagSelectionInputs.length > 0) { return [...tagSelectionInputs].filter((x) => x.checked).map((y) => y.value); } else { return []; } } function getSelectedFeatures() { 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) { return themes; } else { return themes .filter((x) => selectedTags.every((y) => x.tags.includes(y)) ) .filter((z) => selectedFeatures.every((w) => z.features.includes(w)) ); } } function buildResults() { let resultsDiv = document.getElementById('results'); resultsDiv.innerHTML = ''; let resultsTable = document.createElement("table"); resultsTable.id = 'resultsTable'; resultsTable.style.border = '1px solid black'; resultsTable.style.fontSize = '.9rem'; let resultsTableHeadRow = document.createElement("tr"); resultsDiv.appendChild(resultsTable); resultsTable.appendChild(resultsTableHeadRow); let themeTH = document.createElement("th"); themeTH.innerHTML = "theme"; resultsTableHeadRow.appendChild(themeTH); let dateTH = document.createElement("th"); dateTH.innerHTML = "date"; resultsTableHeadRow.appendChild(dateTH); let starsTH = document.createElement("th"); starsTH.innerHTML = "stars"; resultsTableHeadRow.appendChild(starsTH); let commitTH = document.createElement("th"); commitTH.innerHTML = "commit"; resultsTableHeadRow.appendChild(commitTH); let selectedTags = getSelectedTags(); let selectedFeatures = getSelectedFeatures(); let sortedBy = getSortBy(); let filtered_themes = getFilteredThemes(selectedTags, selectedFeatures); let sorted_themes = getSortedThemes(filtered_themes, sortedBy); sorted_themes.forEach(theme => addThemeTableRow(theme)); buildSelectionMenu(sorted_themes, sortedBy, selectedTags, selectedFeatures); }; buildResults();