extract alerts from main

This commit is contained in:
Stewart Allen 2022-02-19 13:44:15 -05:00
commit 792a58ac54
3 changed files with 81 additions and 62 deletions

1
app.js
View file

@ -365,6 +365,7 @@ const script = {
"kiri-mode/cam/tool", "kiri-mode/cam/tool",
"kiri-mode/cam/animate", "kiri-mode/cam/animate",
"kiri-mode/laser/driver", "kiri-mode/laser/driver",
"kiri/alerts",
"kiri/stack", "kiri/stack",
"kiri/stacks", "kiri/stacks",
"kiri/widget", "kiri/widget",

75
src/kiri/alerts.js Normal file
View file

@ -0,0 +1,75 @@
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict";
(function () {
const { kiri } = self;
const { api } = kiri;
let alerts = [];
function show(message, time) {
if (message === undefined || message === null) {
return update(true);
}
let rec = [message, Date.now(), time, true];
if (api.feature.alert_event) {
api.event.emit('alert', rec);
} else {
alerts.push(rec);
update();
}
return rec;
}
function hide(rec, recs) {
if (Array.isArray(recs)) {
for (let r of recs) {
hide(r);
}
return;
}
if (api.feature.alert_event) {
api.event.emit('alert.cancel', rec);
return;
}
if (Array.isArray(rec)) {
rec[3] = false;
update();
}
}
function update(clear) {
if (clear) {
alerts = [];
}
const now = Date.now();
const { ui } = api;
// filter out by age and active flag
alerts = alerts.filter(alert => {
return alert[3] && (now - alert[1]) < ((alert[2] || 5) * 1000);
});
// limit to 5 showing
while (alerts.length > 5) {
alerts.shift();
}
// return if called before UI configured
if (!ui.alert) {
return;
}
if (alerts.length > 0) {
ui.alert.text.innerHTML = alerts.map(v => ['<p>',v[0],'</p>'].join('')).join('');
ui.alert.dialog.style.display = 'flex';
} else {
ui.alert.dialog.style.display = 'none';
}
}
api.alerts = {
hide,
show,
update
};
})();

View file

@ -34,7 +34,6 @@
local = SETUP.local, local = SETUP.local,
busy = 0, busy = 0,
showFavorites = SDB.getItem('dev-favorites') === 'true', showFavorites = SDB.getItem('dev-favorites') === 'true',
alerts = [],
saveTimer = null, saveTimer = null,
version = kiri.version = gapp.version; version = kiri.version = gapp.version;
@ -85,8 +84,8 @@
on(t,l) { return EVENT.on(t,l) }, on(t,l) { return EVENT.on(t,l) },
emit(t,m,o) { return EVENT.publish(t,m,o) }, emit(t,m,o) { return EVENT.publish(t,m,o) },
bind(t,m,o) { return EVENT.bind(t,m,o) }, bind(t,m,o) { return EVENT.bind(t,m,o) },
alerts() { api.alerts.update() },
import: loadFile, import: loadFile,
alerts: updateAlerts,
settings: triggerSettingsEvent settings: triggerSettingsEvent
}, },
group: { group: {
@ -94,7 +93,7 @@
split: groupSplit, split: groupSplit,
}, },
hide: { hide: {
alert(rec,recs) { alert2cancel(rec,recs) }, alert(rec, recs) { api.alerts.hide(...arguments) },
import: noop, import: noop,
slider: hideSlider slider: hideSlider
}, },
@ -130,7 +129,7 @@
get: currentProcessName get: currentProcessName
}, },
show: { show: {
alert: alert2, alert() { return api.alerts.show(...arguments) },
devices: noop, // set during init devices: noop, // set during init
progress: setProgress, progress: setProgress,
controls: setControlsVisible, controls: setControlsVisible,
@ -250,62 +249,6 @@
return api.mode.is_cam() && settings.ctrl().units === 'in' ? 25.4 : 1; return api.mode.is_cam() && settings.ctrl().units === 'in' ? 25.4 : 1;
} }
function alert2(message, time) {
if (message === undefined || message === null) {
return updateAlerts(true);
}
let rec = [message, Date.now(), time, true];
if (feature.alert_event) {
api.event.emit('alert', rec);
} else {
alerts.push(rec);
updateAlerts();
}
return rec;
}
function alert2cancel(rec,recs) {
if (Array.isArray(recs)) {
for (let r of recs) {
alert2cancel(r);
}
return;
}
if (feature.alert_event) {
api.event.emit('alert.cancel', rec);
return;
}
if (Array.isArray(rec)) {
rec[3] = false;
updateAlerts();
}
}
function updateAlerts(clear) {
if (clear) {
alerts = [];
}
let now = Date.now();
// filter out by age and active flag
alerts = alerts.filter(alert => {
return alert[3] && (now - alert[1]) < ((alert[2] || 5) * 1000);
});
// limit to 5 showing
while (alerts.length > 5) {
alerts.shift();
}
// return if called before UI configured
if (!UI.alert) {
return;
}
if (alerts.length > 0) {
UI.alert.text.innerHTML = alerts.map(v => ['<p>',v[0],'</p>'].join('')).join('');
UI.alert.dialog.style.display = 'flex';
} else {
UI.alert.dialog.style.display = 'none';
}
}
function getShowFavorites(bool) { function getShowFavorites(bool) {
if (bool !== undefined) { if (bool !== undefined) {
SDB.setItem('dev-favorites', bool); SDB.setItem('dev-favorites', bool);
@ -561,7 +504,7 @@
api.platform.load_files(event.target.files); api.platform.load_files(event.target.files);
}; };
$('load-file').click(); $('load-file').click();
// alert2("drag/drop STL files onto platform to import\nreload page to return to last saved state"); // api.show.alert("drag/drop STL files onto platform to import\nreload page to return to last saved state");
} }
function saveWorkspace(quiet) { function saveWorkspace(quiet) {
@ -584,7 +527,7 @@
// eliminate dangling saved widgets // eliminate dangling saved widgets
FILES.deleteFilter(key => newWidgets.indexOf(key.substring(8)) < 0, "ws-save-", "ws-savf"); FILES.deleteFilter(key => newWidgets.indexOf(key.substring(8)) < 0, "ws-save-", "ws-savf");
if (!quiet) { if (!quiet) {
alert2("workspace saved", 1); api.show.alert("workspace saved", 1);
} }
} }