heonian-conversation/main.js

419 lines
13 KiB
JavaScript

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"
},
"marker": {
"name": "marker",
"description": "This word accomplishes some syntactic purpose in the sentence.",
"color": badge_type,
"type": "Type",
"bending": ""
},
"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
"dual": {
"name": "Dual",
"description": "This word is denoted as refering to exactly two entities.",
"color": badge_number,
"type": "Number",
"bending": ""
},
"plural": {
"name": "Plural",
"description": "This word is denoted as refering to at least more than one entity.",
"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();
}