mirror of
https://github.com/cse110-fa22-group29/cse110-fa22-group29.git
synced 2025-09-10 08:27:20 +00:00
@@ -1,5 +1,5 @@
|
||||
// main.js
|
||||
import {getIDsByTag, getIDsFromStorage, getReviewFromStorage, getTopIDsFromStorage} from "./localStorage.js";
|
||||
import { getIDsByTag, getIDsFromStorage, getReviewFromStorage, getTopIDsFromStorage } from "./localStorage.js";
|
||||
|
||||
// Run the init() function when the page has loaded
|
||||
window.addEventListener("DOMContentLoaded", init);
|
||||
@@ -11,25 +11,22 @@ function init() {
|
||||
initFormHandler();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param {Array<Object>} reviews An array of reviews
|
||||
*/
|
||||
function addReviewsToDocument(reviews) {
|
||||
let reviewBox = document.getElementById("review-container");
|
||||
reviews.forEach(review => {
|
||||
reviews.forEach((review) => {
|
||||
let newReview = document.createElement("review-card");
|
||||
newReview.data = review;
|
||||
reviewBox.append(newReview);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the necessary event handlers to search-btn and sort
|
||||
*/
|
||||
function initFormHandler() {
|
||||
|
||||
//grabbing search field
|
||||
let searchField = document.getElementById("search-bar");
|
||||
let searchBtn = document.getElementById("search-btn");
|
||||
@@ -37,14 +34,14 @@ function initFormHandler() {
|
||||
//adding search functionality
|
||||
//TODO: Add ability to enter without refresh of search bar
|
||||
//filter by selected tag when button clicked
|
||||
searchBtn.addEventListener("click", function(){
|
||||
searchBtn.addEventListener("click", function () {
|
||||
searchTag = searchField.value;
|
||||
sortAndFilter(searchTag);
|
||||
});
|
||||
|
||||
//for clearing tag filter
|
||||
let clearSearchBtn = document.getElementById("clear-search");
|
||||
clearSearchBtn.addEventListener("click", function(){
|
||||
clearSearchBtn.addEventListener("click", function () {
|
||||
searchTag = null;
|
||||
searchField.value = "";
|
||||
sortAndFilter(searchTag);
|
||||
@@ -52,45 +49,43 @@ function initFormHandler() {
|
||||
|
||||
//sort by selected method
|
||||
let sortMethod = document.getElementById("sort");
|
||||
sortMethod.addEventListener("input", function(){
|
||||
sortMethod.addEventListener("input", function () {
|
||||
sortAndFilter(searchTag);
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Deciphers sort and filter to populate the review-container
|
||||
* @param {string} searchTag tag name to filter by
|
||||
*/
|
||||
function sortAndFilter(searchTag){
|
||||
function sortAndFilter(searchTag) {
|
||||
let reviewBox = document.getElementById("review-container");
|
||||
let sortMethod = document.getElementById("sort");
|
||||
//clear review container
|
||||
while(reviewBox.firstChild){
|
||||
while (reviewBox.firstChild) {
|
||||
reviewBox.removeChild(reviewBox.firstChild);
|
||||
}
|
||||
let reviewIDs = [];
|
||||
//sort method: most recent
|
||||
if(sortMethod.value == "recent"){
|
||||
if (sortMethod.value == "recent") {
|
||||
//tag filtered most recent
|
||||
if(searchTag){
|
||||
if (searchTag) {
|
||||
reviewIDs = getIDsByTag(searchTag);
|
||||
}
|
||||
}
|
||||
//most recent
|
||||
else {
|
||||
reviewIDs = getIDsFromStorage();
|
||||
}
|
||||
//reversed for recency
|
||||
loadReviews(0, reviewIDs);
|
||||
}
|
||||
}
|
||||
//sort method: top rated
|
||||
else if (sortMethod.value == "top"){
|
||||
else if (sortMethod.value == "top") {
|
||||
//tag filtered top rated
|
||||
if(searchTag){
|
||||
if (searchTag) {
|
||||
//intersection of top ids list and ids by tag in top ids order
|
||||
reviewIDs = getTopIDsFromStorage().filter(x => getIDsByTag(searchTag).includes(x));
|
||||
}
|
||||
reviewIDs = getTopIDsFromStorage().filter((x) => getIDsByTag(searchTag).includes(x));
|
||||
}
|
||||
//top rated
|
||||
else {
|
||||
reviewIDs = getTopIDsFromStorage();
|
||||
@@ -104,36 +99,36 @@ function sortAndFilter(searchTag){
|
||||
* @param {number} index review index to begin with
|
||||
* @param {number[]} reviewIDs ordered array of reviews
|
||||
*/
|
||||
function loadReviews(index, reviewIDs){
|
||||
function loadReviews(index, reviewIDs) {
|
||||
let reviewBox = document.getElementById("review-container");
|
||||
// label if there are no reviews to display
|
||||
if(reviewIDs.length == 0){
|
||||
if (reviewIDs.length == 0) {
|
||||
let emptyLabel = document.createElement("label");
|
||||
emptyLabel.setAttribute("id", "empty");
|
||||
emptyLabel.innerText = "No Reviews To Display";
|
||||
reviewBox.append(emptyLabel);
|
||||
} else {
|
||||
let emptyLabel = document.getElementById("empty");
|
||||
if(emptyLabel){
|
||||
if (emptyLabel) {
|
||||
reviewBox.removeChild(emptyLabel);
|
||||
}
|
||||
}
|
||||
let moreBtn = document.getElementById("more-btn");
|
||||
//delete load more button if exists
|
||||
if(moreBtn){
|
||||
if (moreBtn) {
|
||||
reviewBox.removeChild(moreBtn);
|
||||
}
|
||||
let reviewArr = [];
|
||||
//check if there are more than 9 reviews left
|
||||
if(index + 9 > reviewIDs.length - 1){
|
||||
if (index + 9 > reviewIDs.length - 1) {
|
||||
//add remaining reviews to review container
|
||||
for(let i = index; i < reviewIDs.length; i++){
|
||||
for (let i = index; i < reviewIDs.length; i++) {
|
||||
reviewArr.push(getReviewFromStorage(reviewIDs[i]));
|
||||
}
|
||||
addReviewsToDocument(reviewArr);
|
||||
} else {
|
||||
//add 9 more reviews to container
|
||||
for(let i = index; i < index + 9; i++){
|
||||
for (let i = index; i < index + 9; i++) {
|
||||
reviewArr.push(getReviewFromStorage(reviewIDs[i]));
|
||||
}
|
||||
addReviewsToDocument(reviewArr);
|
||||
@@ -142,19 +137,20 @@ function loadReviews(index, reviewIDs){
|
||||
moreBtn.setAttribute("id", "more-btn");
|
||||
moreBtn.innerText = "Load More";
|
||||
//if load more clicked, load 9 more
|
||||
moreBtn.addEventListener("click", function(){loadReviews(index + 9, reviewIDs);});
|
||||
moreBtn.addEventListener("click", function () {
|
||||
loadReviews(index + 9, reviewIDs);
|
||||
});
|
||||
reviewBox.append(moreBtn);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const registerServiceWorker = async () => {
|
||||
if ("serviceWorker" in navigator) {
|
||||
try {
|
||||
await navigator.serviceWorker.register("./sw.js", {scope: "./"});
|
||||
await navigator.serviceWorker.register("./sw.js", { scope: "./" });
|
||||
} catch (error) {
|
||||
console.error(`Registration failed with ${error}`);
|
||||
}
|
||||
}
|
||||
};
|
||||
registerServiceWorker();
|
||||
registerServiceWorker();
|
||||
|
Reference in New Issue
Block a user