extract frame window listener from main
This commit is contained in:
parent
827847a321
commit
6078dbb479
3 changed files with 117 additions and 79 deletions
1
app.js
1
app.js
|
|
@ -378,6 +378,7 @@ const script = {
|
||||||
"kiri/init",
|
"kiri/init",
|
||||||
"kiri/export",
|
"kiri/export",
|
||||||
"kiri/tools",
|
"kiri/tools",
|
||||||
|
"kiri/frame",
|
||||||
"@devices",
|
"@devices",
|
||||||
"@icons"
|
"@icons"
|
||||||
],
|
],
|
||||||
|
|
|
||||||
116
src/kiri/frame.js
Normal file
116
src/kiri/frame.js
Normal file
|
|
@ -0,0 +1,116 @@
|
||||||
|
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
|
||||||
|
// add frame message api listener
|
||||||
|
window.addEventListener('message', msg => {
|
||||||
|
const { kiri, moto } = self;
|
||||||
|
const { api, newWidget } = kiri;
|
||||||
|
const { conf, event, feature, platform, settings, show } = api;
|
||||||
|
|
||||||
|
if (!feature.frame) return;
|
||||||
|
|
||||||
|
const { origin, source, target, data } = msg;
|
||||||
|
|
||||||
|
if (source.window === target.window) return;
|
||||||
|
|
||||||
|
const 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) {
|
||||||
|
const cb = data.callback ? (output) => {
|
||||||
|
send({event:`${data.function}.done`, data: output});
|
||||||
|
} : undefined;
|
||||||
|
api.function[data.function.toLowerCase()](cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.event) {
|
||||||
|
event.on(data.event, (evd) => {
|
||||||
|
send({event: data.event, data: evd});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.emit) {
|
||||||
|
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);
|
||||||
|
conf.save();
|
||||||
|
break;
|
||||||
|
case "process":
|
||||||
|
Object.assign(settings.proc(), data.options);
|
||||||
|
conf.save();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.parse) {
|
||||||
|
let bin = data.parse;
|
||||||
|
let widget;
|
||||||
|
switch ((data.type || 'stl').toLowerCase()) {
|
||||||
|
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) {
|
||||||
|
platform.load(data.load, (verts, widget) => {
|
||||||
|
send({event: "loaded", data: [ widget.id ]});
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
if (data.clear) {
|
||||||
|
platform.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.alert) {
|
||||||
|
show.alert(data.alert, data.time);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.progress >= 0) {
|
||||||
|
show.progress(data.progress, data.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
@ -233,85 +233,6 @@
|
||||||
}, 1000);
|
}, 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
|
// update version and init count
|
||||||
let inits = parseInt(SDB.getItem('kiri-init') || stats.get('init') || 0) + 1;
|
let inits = parseInt(SDB.getItem('kiri-init') || stats.get('init') || 0) + 1;
|
||||||
SDB.setItem('kiri-init', inits);
|
SDB.setItem('kiri-init', inits);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue