253 lines
8.4 KiB
JavaScript
253 lines
8.4 KiB
JavaScript
let words = {}
|
|
|
|
let currentFont = "r";
|
|
|
|
let timeout = "";
|
|
|
|
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 = {
|
|
"formal1": {
|
|
"name": "Formal",
|
|
"description": "This word is used in formal or sincere settings.",
|
|
"color": badge_register,
|
|
"type": "Register",
|
|
"bending": "-lfur"
|
|
},
|
|
"formal2": {
|
|
"name": "Formal",
|
|
"description": "This word is used in formal or sincere settings.",
|
|
"color": badge_register,
|
|
"type": "Register",
|
|
"bending": "-lafura"
|
|
},
|
|
"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"
|
|
},
|
|
"plural": {
|
|
"name": "Plural",
|
|
"description": "This word is denoted as more than one",
|
|
"color": badge_number,
|
|
"type": "Number",
|
|
"bending": "n"
|
|
},
|
|
"present-tense": {
|
|
"name": "Present",
|
|
"description": "This word is in the present tense.",
|
|
"color": badge_tense,
|
|
"type": "Tense",
|
|
"bending": "ku → ka'nya"
|
|
},
|
|
"past-tense": {
|
|
"name": "Past",
|
|
"description": "This word is in the past tense.",
|
|
"color": badge_tense,
|
|
"type": "Tense",
|
|
"bending": "ku → kome"
|
|
},
|
|
"volitional-mood": {
|
|
"name": "Feeling",
|
|
"description": "This word expresses a feeling or craving mood.",
|
|
"color": badge_mood,
|
|
"type": "Mood",
|
|
"bending": "-pash"
|
|
},
|
|
"imperative-mood": {
|
|
"name": "Imperative",
|
|
"description": "This word expresses a imperative mood.",
|
|
"color": badge_mood,
|
|
"type": "Mood",
|
|
"bending": "-dash"
|
|
},
|
|
"shy-mood": {
|
|
"name": "Shy",
|
|
"description": "This word expresses a shy mood..",
|
|
"color": badge_mood,
|
|
"type": "Mood",
|
|
"bending": "-bash"
|
|
},
|
|
"threat-mood": {
|
|
"name": "Threat",
|
|
"description": "This word expresses a threatening mood..",
|
|
"color": badge_mood,
|
|
"type": "Mood",
|
|
"bending": "-tash"
|
|
},
|
|
"negated": {
|
|
"name": "Negative",
|
|
"description": "The word is expressing a negated meaning.",
|
|
"color": badge_negation,
|
|
"type": "Negation",
|
|
"bending": "-fa-"
|
|
},
|
|
"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 = words[word]["romanizationProper"];
|
|
p.querySelector("#popup-heo").innerText = words[word]["heonian"];
|
|
p.querySelector("h1").style.fontFamily = "var(--font-normal)";
|
|
} else {
|
|
p.querySelector("h1").innerText = words[word]["heonian"];
|
|
p.querySelector("#popup-heo").innerText = 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-quirks-container").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("h1").innerText = quirkBadges[quirk]["name"];
|
|
p.querySelector("#popup-meaning").innerText = quirkBadges[quirk]["description"];
|
|
p.querySelector("#popup-type").innerText = quirkBadges[quirk]["type"];
|
|
p.querySelector("#popup-quirks-container").style.display = "none";
|
|
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);
|
|
});
|
|
} else {
|
|
p.querySelector("#popup-quirks-container").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();
|
|
} |