jsketcher/web/app/cad/craft/enginesPlugin.js
2018-04-29 22:58:36 -07:00

58 lines
No EOL
1.4 KiB
JavaScript

import {STORAGE_GLOBAL_PREFIX} from '../projectPlugin';
const ENGINES_STORAGE_PREFIX = `${STORAGE_GLOBAL_PREFIX}.CraftEngines`;
let engines = [];
export function activate({services}) {
let enginesStr = services.storage.get(ENGINES_STORAGE_PREFIX);
if (enginesStr) {
engines = JSON.parse(enginesStr);
}
function registerEngine(id, url){
engines.push({id, url});
services.storage.set(ENGINES_STORAGE_PREFIX, JSON.stringify(engines));
startEngine(engines[engines.length - 1]);
}
function engineReady(id, handler) {
let engine = engines.find(e => e.id === id);
if (!engine) {
console.warn(`engine "${id}" not registered`);
} else {
engine.handler = handler;
console.info(`engine "${id}" is ready`);
}
services.lifecycle.loadProjectRequest();
}
function allEnginesReady() {
for (let e of engines) {
if (e.handler === NO_OP_HANDLER) {
return false;
}
}
return true;
}
services.craftEngines = {
registerEngine,
getRegisteredEngines: () => engines,
engineReady,
allEnginesReady
};
engines.forEach(e => e.handler = NO_OP_HANDLER);
engines.forEach(startEngine);
}
function startEngine({id, url}) {
console.info(`starting engine "${id}"...`);
let engineScript = document.createElement('script');
engineScript.setAttribute('src', url);
document.head.appendChild(engineScript);
}
const NO_OP_HANDLER = () => null;