PageSourceSearch

https://website-cms-prod.fly.dev/modules/App/assets/vendor/kiss/components/toast/toast.js

js website-cms-prod.fly.dev collected 2026-10-03 08:28:36 UTC 2,382 bytes, 83 lines download raw bytes

1class Toast {
2    constructor() {
3        this.container = null;
4    }
5
6    getContainer() {
7
8        let container = document.querySelector('.kiss-toast-container');
9
10        if (!container) {
11            container = document.createElement('div');
12            container.classList.add('kiss-toast-container');
13            document.body.appendChild(container);
14        }
15
16        return container;
17    }
18
19    show(message, options = {}) {
20
21        const {
22            type = 'info',
23            timeout = 2500,
24            title = '',
25        } = options;
26
27        const container = this.getContainer();
28        const toast = document.createElement('div');
29        const contentDiv = document.createElement('div');
30        const messageElement = document.createElement('div');
31
32        toast.classList.add('kiss-toast');
33        toast.setAttribute('type', type);
34        toast.setAttribute('data-title', title ? 'true' : 'false');
35
36        contentDiv.classList.add('kiss-toast-content');
37
38        if (title) {
39            const titleElement = document.createElement('div');
40            titleElement.classList.add('kiss-toast-title');
41            titleElement.innerHTML = title;
42            contentDiv.appendChild(titleElement);
43        }
44
45        messageElement.classList.add('kiss-toast-message');
46        messageElement.innerHTML = message;
47        contentDiv.appendChild(messageElement);
48
49        const release = () => {
50            toast.removeAttribute('show');
51            setTimeout(() => {
52                container.removeChild(toast);
53            }, 300);
54        };
55
56        toast.appendChild(contentDiv);
57        container.insertBefore(toast, container.firstChild);
58
59        // Trigger reflow to enable transition
60        toast.offsetHeight;
61        toast.setAttribute('show', 'true');
62
63        toast.addEventListener('click', () => release());
64
65        if (timeout) {
66            const startReleaseTimer = () => {
67                toast.rtidle = setTimeout(() => {
68                    release();
69                }, timeout);
70            }
71
72            startReleaseTimer();
73            toast.addEventListener('mouseenter', () => clearTimeout(toast.rtidle));
74            toast.addEventListener('mouseleave', () => startReleaseTimer());
75        }
76    }
77}
78
79Toast.notify = function (message, options = {}) {
80    new Toast().show(message, options);
81}
82
83window.KissToast = Toast;

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.