73 lines
3.4 KiB
JavaScript
73 lines
3.4 KiB
JavaScript
/*
|
|
* Logo da sidebar (`#sidebar-brand-link`, presente em todo shell) — link de
|
|
* verdade pra `portal.html` (tela Principal). Fora de qualquer tema sazonal:
|
|
* os olhos do ícone piscam antes de navegar (`.pid-icon-eye`/`pidIconBlink`
|
|
* em base.css, 200ms), navegação adiada só o suficiente pra a piscada
|
|
* terminar de tocar. Durante o Halloween (`pidIsHalloweenActive()`,
|
|
* seasonal-theme.js): o ícone/assinatura viram o vampiro
|
|
* (`pidApplyVampireIcon`/`pidApplyVampireFull`) e o clique dispara a
|
|
* animação de "susto" (`pidTriggerVampireScare`, `.is-scaring` em base.css)
|
|
* em vez da piscada, com a navegação adiada o suficiente pra ela ser vista.
|
|
* Durante o Aniversário (`pidIsAniversarioActive()`, só 15/10): o
|
|
* ícone/assinatura ganham os balões (`pidApplyAniversarioIcon`/`Full`) e o
|
|
* clique dispara o "clique de festa" (`pidTriggerAniversarioParty`, pula +
|
|
* joga confete + língua-de-sogra) ALÉM da piscada normal — a cara de
|
|
* repouso não muda nesse tema, então a piscada continua fazendo sentido
|
|
* (os dois efeitos convivem, ver base.css). As duas janelas nunca coincidem
|
|
* (15 vs 16-31/10), por isso Halloween é checado primeiro e ganha
|
|
* prioridade só por clareza de código, não porque possa colidir de verdade.
|
|
* ctrl/cmd/shift/clique do meio continuam abrindo em nova aba normalmente
|
|
* (não intercepta esses casos).
|
|
*/
|
|
document.addEventListener("DOMContentLoaded", () => {
|
|
const brand = document.getElementById("sidebar-brand-link");
|
|
if (!brand) return;
|
|
|
|
const halloween = typeof pidIsHalloweenActive === "function" && pidIsHalloweenActive();
|
|
const aniversario = !halloween && typeof pidIsAniversarioActive === "function" && pidIsAniversarioActive();
|
|
|
|
if (halloween) {
|
|
pidApplyVampireIcon(brand.querySelector(".sidebar__logo--icon"));
|
|
pidApplyVampireFull(brand.querySelector(".sidebar__logo--full"));
|
|
if (typeof pidApplySeasonalFavicon === "function") pidApplySeasonalFavicon("pid-halloween-icone-escuro.svg");
|
|
// Containers só existem em portal.html — no-op nos demais shells.
|
|
if (typeof pidApplyHalloweenCobwebs === "function") pidApplyHalloweenCobwebs("pw-cobwebs-portal");
|
|
} else if (aniversario) {
|
|
pidApplyAniversarioIcon(brand.querySelector(".sidebar__logo--icon"));
|
|
pidApplyAniversarioFull(brand.querySelector(".sidebar__logo--full"));
|
|
if (typeof pidApplySeasonalFavicon === "function") pidApplySeasonalFavicon("pid-aniversario-icone-escuro.svg");
|
|
// Container só existe em portal.html (#pid-aniv-cake) — no-op nos demais shells.
|
|
if (typeof pidApplyAniversarioCake === "function") pidApplyAniversarioCake("pid-aniv-cake");
|
|
}
|
|
|
|
brand.addEventListener("click", (event) => {
|
|
if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
|
|
event.preventDefault();
|
|
|
|
if (halloween) {
|
|
pidTriggerVampireScare(brand);
|
|
setTimeout(() => {
|
|
window.location.href = brand.getAttribute("href");
|
|
}, PID_HALLOWEEN_SCARE_MS - 100);
|
|
return;
|
|
}
|
|
|
|
if (aniversario) {
|
|
pidTriggerAniversarioParty(brand);
|
|
}
|
|
|
|
brand.querySelectorAll(".pid-icon-eye").forEach((eye) => {
|
|
eye.classList.remove("is-blinking");
|
|
void eye.getBoundingClientRect();
|
|
eye.classList.add("is-blinking");
|
|
});
|
|
|
|
setTimeout(
|
|
() => {
|
|
window.location.href = brand.getAttribute("href");
|
|
},
|
|
aniversario ? PID_ANIVERSARIO_PARTY_MS - 100 : 260
|
|
);
|
|
});
|
|
});
|