neuralyzer-flash
Version:
π₯ MIB-style flash effect to forget all frontend errors
61 lines (52 loc) β’ 1.57 kB
text/typescript
export type NeuralyzerLang = 'en' | 'ru';
export interface NeuralyzerConfig {
message: string;
duration: number; // in ms
cssClass: string;
log: boolean;
lang: NeuralyzerLang;
}
const MESSAGES: Record<NeuralyzerLang, string> = {
en: 'There was no error.',
ru: 'ΠΠ΅ Π±ΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ.',
};
const PHRASES: Record<NeuralyzerLang, string> = {
en: `
π₯ *FLASH*
π Please remove your glasses.
π§ `,
ru: `
π₯ *ΠΠ‘ΠΠ«Π¨ΠΠ*
π Π‘Π½ΠΈΠΌΠΈΡΠ΅ ΠΎΡΠΊΠΈ.
π§ `,
};
export class Neuralyzer {
private static config: Required<Partial<NeuralyzerConfig>> = {
message: MESSAGES.en,
duration: 1000,
cssClass: 'neuralyzer-flash',
log: true,
lang: 'en',
};
static configure(config: Partial<NeuralyzerConfig>) {
// Use default message for lang if no message explicitly passed
const lang = config.lang ?? this.config.lang;
this.config = {
...this.config,
...config,
message: config.message ?? MESSAGES[lang],
};
}
static flash(customMessage?: string) {
const { message, duration, cssClass, log, lang } = this.config;
const flashEl: HTMLDivElement = document.createElement('div');
flashEl.classList.add(cssClass);
document.body.appendChild(flashEl);
setTimeout(() => {
flashEl.remove();
if (log) {
console.debug(`${PHRASES[lang]}${customMessage || message}`);
}
}, duration);
}
}