diff options
author | jakob.stendahl <jakob.stendahl@infomedia.dk> | 2023-01-15 22:35:42 +0100 |
---|---|---|
committer | Jakob Stendahl <jakob.stendahl@outlook.com> | 2023-01-15 22:35:42 +0100 |
commit | 3df1a8049dc693fb1a8835d2aafdd57b74aac407 (patch) | |
tree | 82b34456f34224a92f36591be908c69a4fddb3eb /src/js/notification.js | |
parent | 216e1259c32c4775768da915b6fea9b8adc5c35f (diff) | |
download | microbit-gamepad-3df1a8049dc693fb1a8835d2aafdd57b74aac407.tar.gz microbit-gamepad-3df1a8049dc693fb1a8835d2aafdd57b74aac407.zip |
Initial commit
Diffstat (limited to 'src/js/notification.js')
-rw-r--r-- | src/js/notification.js | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/js/notification.js b/src/js/notification.js new file mode 100644 index 0000000..07163a5 --- /dev/null +++ b/src/js/notification.js @@ -0,0 +1,102 @@ +let waiting_timer = undefined; +let notif_queue = []; + +function notif(notif_c) { + let notification_area = document.querySelector(".statusline .notification-area"); + + if ((notification_area.querySelector(".notification") === null) && (waiting_timer === undefined)) { + // This is just so no notifications will be played and disappears while the full screen landscape warning is in the way. + if( (screen.availHeight > screen.availWidth) && (!document.body.classList.contains("ignore-landscape-warning"))){ + waiting_timer = setInterval(() => { + if( (screen.availHeight < screen.availWidth) || (document.body.classList.contains("ignore-landscape-warning"))){ + clearInterval(waiting_timer); + waiting_timer = undefined; + notif(notif_queue.pop()); + } + }, 1000); + notif_queue.push(notif_c); + return; + } + + let notif_elem = document.createElement("div"); + notif_elem.className = "notification"; + notif_elem.appendChild(notif_c[0]); + notif_elem.appendChild(notif_c[1]); + + notification_area.appendChild(notif_elem); + + notification_area.classList.add("show"); + setTimeout(() => { + notification_area.classList.remove("show"); + notif_elem.querySelector("p").style.opacity = "0"; + setTimeout(() => { + notification_area.removeChild(notif_elem); + if (notif_queue.length > 0) { + notif(notif_queue.pop()); + } + }, 1000); + }, 10000); + } else { + notif_queue.push(notif_c); + } +} + +export function notif_alert(alert_str) { + let div = document.createElement("div"); + div.className = "notification-content"; + + let text = document.createElement("p"); + text.innerHTML = alert_str; + div.appendChild(text); + + let icon = document.createElement("i"); + icon.className = "alert fas fa-exclamation-triangle"; + div.appendChild(icon); + + notif([icon, div]); +} + +export function notif_warn(alert_str) { + let div = document.createElement("div"); + div.className = "notification-content"; + + let text = document.createElement("p"); + text.innerHTML = alert_str; + div.appendChild(text); + + let icon = document.createElement("i"); + icon.className = "warning fas fa-exclamation-triangle"; + div.appendChild(icon); + + notif([icon, div]); +} + +export function notif_info(info_str) { + let div = document.createElement("div"); + div.className = "notification-content"; + + let text = document.createElement("p"); + text.innerHTML = info_str; + div.appendChild(text); + + let icon = document.createElement("i"); + icon.className = "info fas fa-info-circle"; + div.appendChild(icon); + + notif([icon, div]); +} + +export function notif_success(success_str) { + let div = document.createElement("div"); + div.className = "notification-content"; + + let text = document.createElement("p"); + text.innerHTML = success_str; + div.appendChild(text); + + let icon = document.createElement("i"); + icon.className = "success fas fa-check-circle"; + div.appendChild(icon); + + notif([icon, div]); +} |