mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-16 21:43:08 +01:00
58 lines
No EOL
1.4 KiB
JavaScript
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; |