extract frame window listener from main

This commit is contained in:
Stewart Allen 2022-02-19 13:27:16 -05:00
commit 6078dbb479
3 changed files with 117 additions and 79 deletions

View file

@ -233,85 +233,6 @@
}, 1000);
}
// frame message api
WIN.addEventListener('message', msg => {
if (!feature.frame) return;
let { origin, source, target, data } = msg;
if (source.window === target.window) return;
let send = source.window.postMessage;
if (data.mode) { api.mode.set(data.mode.toUpperCase()) }
if (data.view) { api.view.set(VIEWS[data.view.toUpperCase()]) }
if (data.function) {
let cb = data.callback ? (output) => {
send({event:`${data.function}.done`, data: output});
} : undefined;
api.function[data.function.toLowerCase()](cb);
}
if (data.event) {
api.event.on(data.event, (evd) => {
send({event: data.event, data: evd});
});
}
if (data.emit) api.event.emit(data.emit, data.message)
if (data.get) switch (data.get) {
case "mode": send({mode: settings.mode()}); break;
case "device": send({device: settings.dev()}); break;
case "process": send({process: settings.proc()}); break;
default: send({all: settings}); break;
}
if (data.set) switch (data.set) {
case "features":
Object.assign(feature, data.features);
break;
case "device":
Object.assign(settings.dev(), data.options);
api.conf.save();
break;
case "process":
Object.assign(settings.proc(), data.options);
api.conf.save();
break;
}
if (data.parse) {
let type = (data.type || 'stl').toLowerCase();
let bin = data.parse;
let widget;
switch (type) {
case 'stl':
if (!bin.buffer) bin = new Float32Array(bin).buffer;
new load.STL().parse(bin, vertices => {
platform.add(widget = newWidget().loadVertices(vertices));
send({event: "parsed", data: [ widget.id ]});
});
break;
case 'obj':
// todo
break;
case '3mf':
// todo
break;
case 'svg':
let wid = [];
for (let svg of load.SVG.parse(bin)) {
if (!(svg && svg.length)) continue;
platform.add(widget = newWidget().loadVertices(svg.toFloat32()));
wid.push(widget.id);
}
send({event: "parsed", data: wid});
break;
}
}
if (data.load) {
api.platform.load(data.load, (verts, widget) => {
send({event: "loaded", data: [ widget.id ]});
})
};
if (data.clear) platform.clear();
if (data.alert) alert2(data.alert, data.time);
if (data.progress >= 0) setProgress(data.progress, data.message);
});
// update version and init count
let inits = parseInt(SDB.getItem('kiri-init') || stats.get('init') || 0) + 1;
SDB.setItem('kiri-init', inits);