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.