const toggleFold = square => () => {
let pile = square.parentElement.parentElement;
if (pile.hasAttribute("unfolded")) {
pile.removeAttribute("unfolded");
square.innerText = "+";
} else {
pile.setAttribute("unfolded", "true");
square.innerText = "-";
}
};
const sloganTimeline = (latin, local) => {
const halfDiff = Math.abs(latin.length - local.length) / 2;
if (latin.length > local.length) {
local =
" ".repeat(Math.floor(halfDiff)) +
local +
" ".repeat(Math.ceil(halfDiff));
} else if (local.length > latin.length) {
latin =
" ".repeat(Math.floor(halfDiff)) +
latin +
" ".repeat(Math.ceil(halfDiff));
}
const localLetters = local
.split("")
.map((text, index) => ({
text: text,
index: index,
shuffle: Math.random()
}))
.sort((a, b) => a.shuffle - b.shuffle);
let stages = [latin];
for (const letter of localLetters) {
const lastStage = stages[stages.length - 1];
stages.push(
lastStage.slice(0, letter.index) +
letter.text +
lastStage.slice(letter.index + 1)
);
}
return stages;
};
documentReady(() => {
for (let button of $$("button.square")) {
button.on("click", toggleFold(button));
}
let header = $(".site-header-slogan");
header.dataset.stage = 0;
const isHovered = el => el.parentElement.$(":hover") === el;
let stages = sloganTimeline(header.dataset.latin, header.dataset.local);
let sloganInterval = undefined;
const updateSlogan = () => {
const nextStage = +header.dataset.stage + (isHovered(header) ? 1 : -1);
if (nextStage >= stages.length) {
return;
}
if (nextStage < 0) {
return clearInterval(sloganInterval);
}
header.innerText = stages[nextStage];
header.dataset.stage = nextStage;
};
header.on("mouseover", () => {
if (+header.dataset.stage === 0) {
stages = sloganTimeline(header.dataset.latin, header.dataset.local);
sloganInterval = setInterval(updateSlogan, 25);
}
});
});