jQuery(document).ready(function($) { // get URL parameters urlParams = new URLSearchParams(window.location.search); paramYear = (urlParams.get('years') == null ? urlParams.getAll('year') : urlParams.getAll('years')); paramMonth = (urlParams.get('months') == null ? urlParams.getAll('month') : urlParams.getAll('months')); paramDimension = (urlParams.get('dimensions') == null ? urlParams.getAll('dimension') : urlParams.getAll('dimensions')); paramTheme = (urlParams.get('themes') == null ? urlParams.getAll('theme') : urlParams.getAll('themes')); paramCategory = (urlParams.get('categories') == null ? urlParams.getAll('category') : urlParams.getAll('categories')); paramPlace = (urlParams.get('places') == null ? urlParams.getAll('place') : urlParams.getAll('places')); paramTag = (urlParams.get('tags') == null ? urlParams.getAll('tag') : urlParams.getAll('tags')); paramPhoto = (urlParams.get('photos') == null ? urlParams.getAll('photo') : urlParams.getAll('photos')); paramHelp = (urlParams.get('helps') == null ? urlParams.getAll('help') : urlParams.getAll('helps')); $.getJSON("data.json", function(data) { /**********/ /** MENU **/ /**********/ var dimensions = []; var themes = []; var categories = []; var places = []; var tags = []; function generateMenu() { for (i of data) { if (dimensions.indexOf(i.dimension) === -1 && i.dimension != "" && i.dimension != "—") dimensions.push(i.dimension); if (themes.indexOf(i.theme) === -1 && i.theme != "" && i.theme != "—") themes.push(i.theme); if (categories.indexOf(i.category) === -1 && i.category != "" && i.category != "—") categories.push(i.category); if (places.indexOf(i.place) === -1 && i.place != "" && i.place != "—") places.push(i.place); if (tags.indexOf(i.tags) === -1 && i.tags != "" && i.tags != "—") { splitTags = i.tags.split(", "); for (splitTag of splitTags) { if (tags.indexOf(splitTag) === -1) { tags.push(splitTag); } } } } dimensions.sort(); themes.sort(); categories.sort(); places.sort(); tags.sort(); for (dimension of dimensions) { html = '\n'; html += ''; $(".box.dimensions .item-cont").append(html); } for (theme of themes) { html = '\n'; html += ''; $(".box.themes .item-cont").append(html); } for (category of categories) { html = '\n'; html += ''; $(".box.categories .item-cont").append(html); } for (place of places) { html = '\n'; html += ''; $(".box.places .item-cont").append(html); } for (tag of tags) { html = '\n'; html += ''; $(".box.tags .item-cont").append(html); } // populate checkboxes depending on URL function checkBoxSelector(names, name, urlParam) { if (urlParam == "all") { $('input[name="'+names+'"]').prop("checked", true); $('input[name="'+name+'"]').prop("disabled", true); $('input[name="'+name+'"]').prop("checked", true); } else { for (a of urlParam) { $('input[id="'+a+'"]').prop("checked", true); } } } checkBoxSelector("years", "year", paramYear) checkBoxSelector("months", "month", paramMonth); checkBoxSelector("dimensions", "dimension", paramDimension); checkBoxSelector("themes", "theme", paramTheme); checkBoxSelector("categories", "category", paramCategory); checkBoxSelector("places", "place", paramPlace); checkBoxSelector("tags", "tag", paramTag); checkBoxSelector("photos", "photo", paramPhoto); checkBoxSelector("helps", "help", paramHelp); } // if "all" is selected, check all other options and disable them function AllCheckBoxSelector(names, name) { $('input[id="' + names + '"]').click(function() { if ($(this).prop("checked") == true) { $('input[name="' + name + '"]').prop("checked", true); $('input[name="' + name + '"]').prop("disabled", true); } else if ($(this).prop("checked") == false) { $('input[name="' + name + '"]').prop("checked", false); $('input[name="' + name + '"]').prop("disabled", false); } }); } $("input").prop("checked", false); // by default, uncheck all options AllCheckBoxSelector("years", "year"); AllCheckBoxSelector("months", "month"); AllCheckBoxSelector("dimensions", "dimension"); AllCheckBoxSelector("themes", "theme"); AllCheckBoxSelector("categories", "category"); AllCheckBoxSelector("places", "place"); AllCheckBoxSelector("tags", "tag"); AllCheckBoxSelector("photos", "photo"); AllCheckBoxSelector("helps", "help"); // menu configurer show / hide $("article.explorer h2").click(function() { if ($(this).hasClass("active")) { $(this).removeClass("active"); $("form").slideUp(200); } else { $(this).addClass("active"); $("form").slideDown(200); } }); // menu configurer child on mobile show/hide if ($(window).width() <= 600) { $("article.explorer .box h3").click(function() { if ($(this).parent().hasClass("active")) { $(this).parent().removeClass("active"); $(this).parent().children(".item-cont").slideUp(200); } else { $(this).parent().addClass("active"); $(this).parent().children(".item-cont").slideDown(200); } }); } /***********/ /** TABLE **/ /***********/ function generateTable() { function checkYear(year) { if (paramYear == "all") return true; if (paramYear.includes("50s") && year >= 1950 && year <= 1959) return true; if (paramYear.includes("60s") && year >= 1960 && year <= 1969) return true; if (paramYear.includes("70s") && year >= 1970 && year <= 1979) return true; if (paramYear.includes("80s") && year >= 1980 && year <= 1989) return true; if (paramYear.includes("90s") && year >= 1990 && year <= 1999) return true; if (paramYear.includes("00s") && year >= 2000 && year <= 2009) return true; if (paramYear.includes("10s") && year >= 2010 && year <= 2020) return true; return false; } function checkMonth(month) { if (paramMonth == "all") return true; if (paramMonth.includes("01") && month == "janvier") return true; if (paramMonth.includes("02") && month == "février") return true; if (paramMonth.includes("03") && month == "mars") return true; if (paramMonth.includes("04") && month == "avril") return true; if (paramMonth.includes("05") && month == "mai") return true; if (paramMonth.includes("06") && month == "juin") return true; if (paramMonth.includes("07") && month == "juillet") return true; if (paramMonth.includes("08") && month == "août") return true; if (paramMonth.includes("09") && month == "septembre") return true; if (paramMonth.includes("10") && month == "octobre") return true; if (paramMonth.includes("11") && month == "novembre") return true; if (paramMonth.includes("12") && month == "décembre") return true; return false; } function checkDimension(dimension) { if (paramDimension == "all") return true; if (paramDimension.includes(dimension)) return true; return false; } function checkTheme(theme) { if (paramTheme == "all") return true; if (paramTheme.includes(theme)) return true; return false; } function checkCategory(category) { if (paramCategory == "all") return true; if (paramCategory.includes(category)) return true; return false; } function checkPlace(place) { if (paramPlace == "all") return true; if (paramPlace.includes(place)) return true; return false; } function checkTag(tag) { if (paramTag == "all") return true; console.log("tag: " + tag); console.log("paramTag: " + paramTag); splitTag = tag.split(", "); console.log(splitTag); for (t of splitTag) { if (paramTag.includes(t)) return true; } return false; } function checkPhoto(photo) { if (paramPhoto == "all") return true; if (paramPhoto.includes("none") && photo == "none") return true; if (paramPhoto.includes("bad") && photo == "bad") return true; if (paramPhoto.includes("ok") && photo == "ok") return true; if (paramPhoto.includes("good") && photo == "good") return true; return false; } function checkHelp(help) { if (paramHelp == "all") return true; if (paramHelp.includes("no") && help == "no") return true; if (paramHelp.includes("yes") && help == "yes") return true; return false; } hasResult = false; for (i of data) { if (urlParams.toString() === "") // no parameter in URL res = false; else res = true; // check URL parameters and compute result if (paramYear != "") res &&= checkYear(i.year); if (paramMonth != "") res &&= checkMonth(i.month); if (paramDimension != "") res &&= checkDimension(i.dimension); if (paramTheme != "") res &&= checkTheme(i.theme); if (paramCategory != "") res &&= checkCategory(i.category); if (paramPlace != "") res &&= checkPlace(i.place); if (paramTag != "") res &&= checkTag(i.tags); if (paramPhoto != "") res &&= checkPhoto(i.photo); if (paramHelp != "") res &&= checkHelp(i.help); if (!res) continue; hasResult = true; $("table").css("display", "block"); result = ""; result += "" + i.number + ""; result += "" + i.title + ""; result += "" + i.year + ""; result += "" + i.dimension + ""; result += "" + i.theme + ""; result += "" + i.category + ""; result += "" + i.place + ""; result += "" + i.tags + ""; if (i.photo == "good") result += '★★★'; else if (i.photo == "ok") result += '★★'; else if (i.photo == "bad") result += '★'; else if (i.photo == "none") result += '☆'; if (i.help == "yes") result += '‼︎' else result += ' ' result += ''; result += ""; $("table").append(result); } return hasResult; } generateMenu(); var res = generateTable(); // display table or no result depending of computed result if (res) { $("article.explorer h2").removeClass("active") $("form").slideUp(200); } else $("article.explorer p.no-result").css("display", "block"); // on mobile, show only the first item slided down if ($(window).width() <= 600) { console.log($(window).width()); $("article.explorer .container .box").each(function() { console.log("hi"); if (!$(this).hasClass('active')) { $(this).children(".item-cont").slideUp(200); } }); } }); });