let words = {} let currentFont = "r"; let timeout = ""; let badge_type = "#696969" let badge_generic = "#393939" let badge_register= "#fed100" let badge_number = "#420690" let badge_case = "#690420" let badge_tense = "#00dd00" let badge_mood = "#dd00dd" let badge_negation = "#133337" let quirkBadges = { // TYPES "verb": { "name": "Verb", "description": "This word expresses an action that the subject of the sentence performs.", "color": badge_type, "type": "Type", "bending": "-ku" }, "noun": { "name": "Noun", "description": "This word refers to a concept.", "color": badge_type, "type": "Type", "bending": "" }, "pronoun": { "name": "Pronoun", "description": "This word occupies the place of a noun.", "color": badge_type, "type": "Type", "bending": "" }, "modifier": { "name": "Modifier", "description": "This word modifies another word to specify meaning.", "color": badge_type, "type": "Type", "bending": "" }, "expression": { "name": "Expression", "description": "This is an idiomatic expression.", "color": badge_type, "type": "Type", "bending": "" }, // FORMAL REGISTER "formal-n1": { "name": "Formal", "description": "This word is used in formal or sincere settings.", "color": badge_register, "type": "Register", "bending": "-lfur" }, "formal-n2": { "name": "Formal", "description": "This word is used in formal or sincere settings.", "color": badge_register, "type": "Register", "bending": "-lafura" }, "formal-v1": { "name": "Formal", "description": "This word is used in formal or sincere settings.", "color": badge_register, "type": "Register", "bending": "ku -> kanya" }, "formal-v2": { "name": "Formal", "description": "This word is used in formal or sincere settings.", "color": badge_register, "type": "Register", "bending": "ku -> kome" }, // INFORMAL REGISTER "informal-v1": { "name": "Informal", "description": "This word is NOT used in formal or sincere settings.", "color": badge_register, "type": "Register", "bending": "ku -> nya" }, "informal-v2": { "name": "Informal", "description": "This word is NOT used in formal or sincere settings.", "color": badge_register, "type": "Register", "bending": "ku -> me" }, // POSSESIVES "genitive": { "name": "Generic Possesive", "description": "This word is describing a generic possesive relationship.", "color": badge_case, "type": "Case", "bending": "-lan" }, "possesive": { "name": "Specific Possesive", "description": "This word is describing a specific possesive relationship.", "color": badge_case, "type": "Case", "bending": "-la" }, // NUMBER "plural": { "name": "Plural", "description": "This word is denoted as more than one", "color": badge_number, "type": "Number", "bending": "-n" }, // PRESENT TENSE "present-tense-formal": { "name": "Present", "description": "This word is in the present tense.", "color": badge_tense, "type": "Tense", "bending": "ku → ka'nya" }, "present-tense-informal": { "name": "Present", "description": "This word is in the present tense.", "color": badge_tense, "type": "Tense", "bending": "ku → nya" }, // PAST TENSE "past-tense-formal": { "name": "Past", "description": "This word is in the past tense.", "color": badge_tense, "type": "Tense", "bending": "ku → kome" }, "past-tense-informal": { "name": "Past", "description": "This word is in the past tense.", "color": badge_tense, "type": "Tense", "bending": "ku → me" }, // VOLITIONAL "volitional-mood": { "name": "Feeling", "description": "This word expresses a feeling or craving mood.", "color": badge_mood, "type": "Mood", "bending": "-pash" }, "volitional-mood-negated": { "name": "Negated Feeling", "description": "This word denies feeling or craving mood.", "color": badge_mood, "type": "Mood", "bending": "-fapash" }, // IMPERATIVE "imperative-mood": { "name": "Imperative", "description": "This word expresses a imperative mood.", "color": badge_mood, "type": "Mood", "bending": "-dash" }, "imperative-mood-negated": { "name": "Negated Imperative", "description": "This word denies a imperative mood.", "color": badge_mood, "type": "Mood", "bending": "-fadash" }, // SHY "shy-mood": { "name": "Shy", "description": "This word expresses a shy mood.", "color": badge_mood, "type": "Mood", "bending": "-bash" }, "shy-mood-negated": { "name": "Negated Shy", "description": "This word denies a shy mood.", "color": badge_mood, "type": "Mood", "bending": "-fabash" }, // THREAT "threat-mood": { "name": "Threat", "description": "This word expresses a threatening mood.", "color": badge_mood, "type": "Mood", "bending": "-tash" }, "threat-mood-negated": { "name": "Negated Threat", "description": "This word denies a threatening mood.", "color": badge_mood, "type": "Mood", "bending": "-fatash" }, // COMF "comfy-mood": { "name": "Comfort", "description": "This word expresses a comfortable mood.", "color": badge_mood, "type": "Mood", "bending": "-shu" }, "comfy-mood-negated": { "name": "Negated Comfort", "description": "This word denies a comfortable mood.", "color": badge_mood, "type": "Mood", "bending": "-fashu" }, // EXCITEMENT "excited-mood": { "name": "Excitement", "description": "This word expresses a excited mood.", "color": badge_mood, "type": "Mood", "bending": "-ha" }, "excited-mood-negated": { "name": "Negated Excitement", "description": "This word denies a excited mood.", "color": badge_mood, "type": "Mood", "bending": "-faha" }, // NEGATION "negated": { "name": "Negative", "description": "The word is expressing a negated meaning.", "color": badge_negation, "type": "Negation", "bending": "fa-" }, // UNKNOWN "unknown-tag": { "name": "Unknown tag", "color": "#393939", } } function init() { createWordList(); document.querySelector("#popup-container").addEventListener("click", (e) => { if (e.target.id == "popup-container") { document.querySelector("#popup-container").style.opacity = 0; document.querySelector("#popup-container").style.pointerEvents = "none"; } }); document.querySelector("#font-button").addEventListener("click", () => {fontButton();}); } function cleanWord(word) { //only a-z, lowercase, stripped return word.replace(/[^a-zA-Z]/g, "").toLowerCase(); } function showPopup(ogword, word, quirks = "") { try { clearHover(); //same shit as in smolpopup //todo: make all of this less sphagetti LOL let p = document.querySelector("#popup"); let c = document.querySelector("#popup-container"); word = cleanWord(word); if (currentFont == "r") { p.querySelector("h1").innerText = ogword; p.querySelector("#popup-heo").innerText = words[word]["romanizationProper"] + " | " + words[word]["heonian"]; p.querySelector("h1").style.fontFamily = "var(--font-normal)"; } else { p.querySelector("h1").innerText = ogword; p.querySelector("#popup-heo").innerText = words[word]["heonian"] + " | " + words[word]["romanizationProper"]; p.querySelector("h1").style.fontFamily = "var(--font-heonian)"; } //p.querySelector("#popup-type").innerText = words[word]["type"]; p.querySelector("#popup-meaning").innerText = words[word]["meaning"]; p.querySelector("#popup-quirks").innerHTML = ""; if (quirks.trim() != "") { p.querySelector("#popup-middle").style.display = "block"; let qyuirks = quirks.split(" "); qyuirks.forEach(quirk => { let badge = document.createElement("div"); badge.classList.add("badge"); try { badge.style.backgroundColor = quirkBadges[quirk]["color"]; badge.style.boxShadow = "0px 0px 4px " + quirkBadges[quirk]["color"] + "cc"; badge.innerText = quirkBadges[quirk]["name"]; badge.onclick = () => { p.querySelector("#spacerhide").style.display = "none"; p.querySelector("#popup-middle").style.display = "none"; p.querySelector("h1").innerText = quirkBadges[quirk]["name"]; p.querySelector("#popup-meaning").innerText = quirkBadges[quirk]["description"]; //p.querySelector("#popup-type").innerText = quirkBadges[quirk]["type"]; p.querySelector("#popup-heo").innerText = quirkBadges[quirk]["bending"]; } } catch (e) { badge.style.backgroundColor = quirkBadges["unknown-tag"]["color"]; badge.style.boxShadow = "0px 0px 4px #" + quirkBadges["unknown-tag"]["color"] + "cc"; badge.innerText = quirkBadges["unknown-tag"]["name"]; } p.querySelector("#popup-quirks").appendChild(badge); p.querySelector("#spacerhide").style.display = "block"; }); } else { p.querySelector("#spacerhide").style.display = "none"; p.querySelector("#popup-middle").style.display = "none"; } c.style.opacity = 1; c.style.pointerEvents = "all"; } catch (e) { console.log(e); //eya //failure is expected, //but mightaswell print less RED ERRORs to the console } } function showSmolPopup(ogword, word, self, quirks) { let p = document.querySelector("#smol-popup"); word = cleanWord(word); if (currentFont == "r") { p.querySelector("h1").innerText = words[word]["romanizationProper"]; p.querySelector("h1").style.fontFamily = "var(--font-normal)"; } else { p.querySelector("h1").innerText = words[word]["heonian"]; p.querySelector("h1").style.fontFamily = "var(--font-heonian)"; } p.querySelector("#smol-meaning").innerText = words[word]["meaning"]; p.style.opacity = 1; p.style.pointerEvents = "all"; // set position to cursor position (but we dont have the event) let rect = self.getBoundingClientRect(); let x = rect.left+rect.width/2; let y = rect.top; p.style.left = x - 100 + "px"; p.style.top = y + 25 + "px"; } function checkHover(ogword, word, self, quirks = "") { if (timeout != "") { clearTimeout(timeout); } timeout = setTimeout(() => { try { showSmolPopup(ogword, word, self, quirks); } catch (e) { console.log(e); //i fucking love error handling } }, 450); } function clearHover() { if (timeout != "") { clearTimeout(timeout); } let p = document.querySelector("#smol-popup"); p.style.opacity = 0; p.style.pointerEvents = "none"; } function createWordList() { //sometimes i really dislike javascript.. let t = document.querySelector("tbody"); t.querySelectorAll("tr").forEach(element => { if (element.querySelector("td")) { let e = element.querySelectorAll("td"); let n = cleanWord(e[1].innerText); words[n] = {}; words[n]["heonian"] = e[0].innerText; words[n]["romanization"] = e[1].innerText.replace(". ", ""); words[n]["romanizationProper"] = e[1].innerText; //words[n]["type"] = e[2].innerText; words[n]["meaning"] = e[3].innerText; } }); } function fontButton() { if (currentFont == "r") { document.querySelector("#style-heonian").disabled = false; document.querySelector("#style-roman").disabled = true; currentFont = "h"; } else { document.querySelector("#style-heonian").disabled = true; document.querySelector("#style-roman").disabled = false; currentFont = "r"; } } window.onload = () => { init(); }