42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
/*
|
|
APP — shared chrome for every page: footer API label, toast notifications.
|
|
(Settings moved to its own page: settings.html)
|
|
*/
|
|
(function () {
|
|
'use strict';
|
|
|
|
function initChrome() {
|
|
const label = document.getElementById('apiBaseLabel');
|
|
if (label) {
|
|
const base = SR.config.getBase();
|
|
label.textContent = base;
|
|
label.href = base;
|
|
}
|
|
}
|
|
|
|
let toastTimer = null;
|
|
|
|
function toast(message, isError) {
|
|
let el = document.getElementById('toast');
|
|
if (!el) {
|
|
el = document.createElement('div');
|
|
el.id = 'toast';
|
|
el.className = 'toast';
|
|
el.setAttribute('role', 'status');
|
|
document.body.appendChild(el);
|
|
}
|
|
el.textContent = message;
|
|
el.classList.toggle('toast--error', !!isError);
|
|
el.classList.add('toast--show');
|
|
clearTimeout(toastTimer);
|
|
toastTimer = setTimeout(() => el.classList.remove('toast--show'), 4500);
|
|
}
|
|
|
|
function showError(err, fallback) {
|
|
toast(err && err.message ? err.message : fallback || 'Something went wrong', true);
|
|
}
|
|
|
|
window.SR = window.SR || {};
|
|
SR.app = { initChrome, toast, showError };
|
|
})();
|