forked from tools/debreviator
59 lines
2.0 KiB
JavaScript
59 lines
2.0 KiB
JavaScript
|
// noinspection JSUnresolvedVariable
|
||
|
const {$, doAfterLoad, footer, header, nav} = window.fwdekker;
|
||
|
|
||
|
|
||
|
function toUppercaseAt(string, index) {
|
||
|
return string.slice(0, index) + string.charAt(index).toUpperCase() + string.slice(index + 1);
|
||
|
}
|
||
|
|
||
|
|
||
|
doAfterLoad(() => {
|
||
|
$("#nav").appendChild(nav("/Tools/Debreviator/"));
|
||
|
$("#header").appendChild(header({
|
||
|
title: "Debreviator",
|
||
|
description: "Creates meaning by undoing your abbreviation"
|
||
|
}));
|
||
|
$("#footer").appendChild(footer({
|
||
|
vcsURL: "https://git.fwdekker.com/FWDekker/debreviator/",
|
||
|
version: "v%%VERSION_NUMBER%%"
|
||
|
}));
|
||
|
$("main").classList.remove("hidden");
|
||
|
$("[autofocus]").focus();
|
||
|
});
|
||
|
|
||
|
doAfterLoad(() => {
|
||
|
const debreviate = () => {
|
||
|
const abbreviation = $("#abbreviation").value.trim();
|
||
|
if (abbreviation === "") return;
|
||
|
|
||
|
const regex = new RegExp(abbreviation.split("").join(".*"));
|
||
|
|
||
|
fetch("words.txt")
|
||
|
.then(it => it.text())
|
||
|
.then(text => text.split("\n").filter(it => !it.startsWith("#")).map(it => it.toLowerCase()))
|
||
|
.then(words => words.filter(it => regex.test(it)))
|
||
|
.then(matches =>
|
||
|
matches.map(match =>
|
||
|
abbreviation
|
||
|
.split("")
|
||
|
.reduce(
|
||
|
(acc, letter) => {
|
||
|
const letterIndex = acc[0].indexOf(letter, acc[1]);
|
||
|
return [toUppercaseAt(acc[0], letterIndex), letterIndex];
|
||
|
},
|
||
|
[match, 0]
|
||
|
)[0]
|
||
|
)
|
||
|
)
|
||
|
.then(matches => $("#debreviations").value = matches.join("\n"));
|
||
|
};
|
||
|
|
||
|
$("#debreviate").addEventListener("click", debreviate);
|
||
|
$("#abbreviation").addEventListener("keypress", event => {
|
||
|
if (event.key === "Enter") {
|
||
|
debreviate();
|
||
|
event.preventDefault();
|
||
|
}
|
||
|
});
|
||
|
});
|