UNPKG

5.7 kBJavaScriptView Raw
1const CDN_BASE = 'https://unpkg.com/@code_monk/falert@latest/dist/';
2class Falert {
3 static instances = new Set();
4 static settings = {
5 insertionNode: document.body,
6 audio: {
7 volume: 0.25
8 },
9 sounds: {}
10 };
11 static {
12 // preload audio
13 let sounds = {
14 fatal: CDN_BASE + 'assets/sounds/dramatic.mp3',
15 warning: CDN_BASE + 'assets/sounds/concerning.mp3',
16 notice: CDN_BASE + 'assets/sounds/noteworthy.mp3'
17 };
18 for (const [k, url] of Object.entries(sounds)) {
19 const a = new Audio();
20 a.addEventListener("error", console.error);
21 a.volume = Falert.settings.audio.volume;
22 a.src = url;
23 Falert.settings.sounds[k] = a;
24 }
25 }
26 ;
27 static html = `
28 <div class="falert container flyin">
29 <div class="falert body breathing">
30 <h2>Alert!</h2>
31 <p>You can't put your finger in the socket</p>
32 </div>
33 </div>
34 `;
35 constructor(head, body, type = "notice") {
36 const t = document.createElement('template');
37 t.innerHTML = Falert.html.trim();
38 const domNode = t.content.firstChild;
39 domNode.style.zIndex = (Falert.getHighestZindex() + 1).toString(10);
40 // get a new "top" value to push this node down the page
41 let newTop = 35;
42 for (let i of Falert.instances) {
43 newTop += i.offsetHeight;
44 }
45 domNode.style.top = newTop + 'px';
46 domNode.querySelector('.body').classList.add(type);
47 domNode.addEventListener("animationend", ev => {
48 domNode.classList.remove('flyin');
49 domNode.classList.add('swaying');
50 });
51 domNode.addEventListener('click', ev => {
52 Falert.instances.delete(domNode);
53 domNode.remove();
54 });
55 domNode.querySelector('.body h2').innerHTML = head;
56 domNode.querySelector('.body p').innerHTML = body;
57 domNode.classList.add(type);
58 document.body.appendChild(domNode);
59 Falert.instances.add(domNode);
60 Falert.settings.sounds[type].play();
61 }
62 static getHighestZindex() {
63 let z = 0;
64 for (let f of Falert.instances) {
65 let i = Number(f.style.zIndex);
66 if (i > z) {
67 z = i;
68 }
69 }
70 return z;
71 }
72}
73export { Falert };
74//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFsZXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RzL2ZhbGVydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFFBQVEsR0FBRyxrREFBa0QsQ0FBQztBQUVwRSxNQUFNLE1BQU07SUFDWCxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFDMUMsTUFBTSxDQUFDLFFBQVEsR0FBRztRQUNqQixhQUFhLEVBQUUsUUFBUSxDQUFDLElBQUk7UUFDNUIsS0FBSyxFQUFFO1lBQ04sTUFBTSxFQUFFLElBQUk7U0FDWjtRQUNELE1BQU0sRUFBRSxFQUFFO0tBQ1YsQ0FBQztJQUNGO1FBQ0MsZ0JBQWdCO1FBQ2hCLElBQUksTUFBTSxHQUFHO1lBQ1osS0FBSyxFQUFFLFFBQVEsR0FBRyw0QkFBNEI7WUFDOUMsT0FBTyxFQUFFLFFBQVEsR0FBRyw4QkFBOEI7WUFDbEQsTUFBTSxFQUFFLFFBQVEsR0FBRyw4QkFBOEI7U0FDakQsQ0FBQztRQUNGLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzlDLE1BQU0sQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdEIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDeEMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFDWixNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUI7SUFDRixDQUFDO0lBQUEsQ0FBQztJQUNGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7Ozs7Ozs7RUFPYixDQUFDO0lBRUYsWUFBWSxJ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
\No newline at end of file