Modrinth/static/js/search.js
2020-05-12 22:27:31 -07:00

81 lines
2.2 KiB
JavaScript

let input = document.getElementById("search-input");
let category_inputs = {
"technology": false,
"adventure": false,
"magic": false,
"utility": false,
"decoration": false,
"library": false,
"worldgen": false,
"cursed": false,
"forge": false,
"fabric": false,
}
let resultContainer = document.getElementById("results");
window.onload = function () {
let categories = document.getElementsByClassName("category-badge");
for (let category of categories) {
let ghost = document.createElement('div');
ghost.className = "category-ghost";
ghost.id = category.id + "-ghost";
category.appendChild(ghost);
}
}
function activateCategory(element) {
category_inputs[element.id] = !category_inputs[element.id]
if (category_inputs[element.id]) {
element.style.width = "155px";
element.style.boxShadow = "10px 0 " + element.style.color;
document.getElementById(element.id + "-ghost").className = "";
} else {
element.style.width = "165px";
element.style.boxShadow = "0 0";
document.getElementById(element.id + "-ghost").className = "category-ghost";
}
handleSearch();
}
function handleSearch() {
let safeName = encodeURIComponent(input.value).replace(/%20/g,'+');
let queryString = "search?q=" + safeName;
let filterString = "";
for (let key in category_inputs) {
if (category_inputs.hasOwnProperty(key)) {
if(category_inputs[key])
filterString += key + " AND keywords=";
}
}
let takeOffLength = " AND keywords=".length;
if(filterString.length > takeOffLength) {
filterString = filterString.substring(0, filterString.length - takeOffLength)
queryString += "&f=" + encodeURIComponent( "keywords=" + filterString).replace(/%20/g,'+');
}
let xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
resultContainer.innerHTML = xmlHttp.responseText;
}
}
xmlHttp.open("POST", queryString, true);
xmlHttp.send(null);
window.history.pushState('Search', 'Search', queryString);
}