initial commit
This commit is contained in:
118
main.js
Normal file
118
main.js
Normal file
@@ -0,0 +1,118 @@
|
||||
let json = null;
|
||||
|
||||
let searchDictionary = {};
|
||||
|
||||
let header = null;
|
||||
let main = null;
|
||||
|
||||
function animateHeader(inout = false) {
|
||||
//todo: debounce this
|
||||
if (inout) {
|
||||
header.classList.add("header-animation-reverse");
|
||||
header.classList.remove("header-animation");
|
||||
setTimeout(() => {
|
||||
header.classList.add("fullscreen");
|
||||
},500);
|
||||
setTimeout(() => {
|
||||
header.classList.remove("header-animation-reverse");
|
||||
},1000);
|
||||
} else {
|
||||
header.classList.add("header-animation");
|
||||
header.classList.remove("header-animation-reverse");
|
||||
setTimeout(() => {
|
||||
header.classList.remove("fullscreen");
|
||||
},500);
|
||||
setTimeout(() => {
|
||||
header.classList.remove("header-animation");
|
||||
},1000);
|
||||
}
|
||||
//somewhere here we animate in the actual page too, but it.. doesnt exist yet
|
||||
}
|
||||
|
||||
// on space animateHeader()
|
||||
document.addEventListener("keydown", (e) => {
|
||||
//on / key press
|
||||
if (e.keyCode === 191) {
|
||||
e.preventDefault();
|
||||
header.querySelector("input").focus();
|
||||
}
|
||||
if (e.keyCode === 27) {
|
||||
//if search box not focused, and if we're not on the home page, go back to home page
|
||||
if (!header.querySelector("input").matches(":focus") && !header.classList.contains("fullscreen")) {
|
||||
e.preventDefault();
|
||||
animateHeader(true);
|
||||
}
|
||||
}
|
||||
if (e.keyCode === 13) {
|
||||
if (header.querySelector("input").matches(":focus")) {
|
||||
//search
|
||||
e.preventDefault();
|
||||
animateHeader(); //just in case
|
||||
doSearch();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function stripWord(word) {
|
||||
return word.replace(/[^a-zA-Z]/g, "");
|
||||
}
|
||||
|
||||
function loadDictionary() {
|
||||
fetch("/wordlist.json").then((e) => {
|
||||
if (e.status === 200) {
|
||||
//convert to json lmao
|
||||
e.json().then((e) => {
|
||||
json = e;
|
||||
|
||||
let values = Object.values(json);
|
||||
let keys = Object.keys(json);
|
||||
//prepare search. maybe async this if we're loading a specific word?
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
//create array
|
||||
searchDictionary[keys[i]] = [];
|
||||
|
||||
//add: base word (obvious, will always exist)
|
||||
searchDictionary[keys[i]].push(stripWord(keys[i]));
|
||||
//add: base word, but in heonian (todo, needs translator)
|
||||
|
||||
//add: translation (will always exist, i hope)
|
||||
searchDictionary[keys[i]].push(stripWord(values[i].translation));
|
||||
}
|
||||
|
||||
//ok, we're all ready!
|
||||
document.querySelector("header input").placeholder = "search";
|
||||
});
|
||||
} else {
|
||||
alert("yeah something went horribly wrong loading the wordlist so uh,,, certified ike moment");
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function search(word) {
|
||||
word = stripWord(word);
|
||||
let result = [];
|
||||
for (let key in searchDictionary) {
|
||||
for (let value in searchDictionary[key]) {
|
||||
if (searchDictionary[key][value].includes(word)) {
|
||||
result.push(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function doSearch() {
|
||||
let results = search(header.querySelector("input").value);
|
||||
if (results.length == 0) {
|
||||
main.innerHTML = "no results lulw";
|
||||
} else {
|
||||
//actually render results or w/e
|
||||
}
|
||||
}
|
||||
|
||||
window.onload = () => {
|
||||
header = document.querySelector("header");
|
||||
main = document.querySelector("main");
|
||||
loadDictionary();
|
||||
}
|
||||
Reference in New Issue
Block a user