feat(plugins) Add first pass OHIFPlugin class for experimentation

This commit is contained in:
Erik Ziegler 2018-07-17 10:05:22 +02:00
parent 7849699a0d
commit 92408d4c86
2 changed files with 59 additions and 0 deletions

View File

@ -227,6 +227,9 @@ import { InstanceMetadata } from './lib/classes/metadata/InstanceMetadata';
import { StudySummary } from './lib/classes/metadata/StudySummary';
Viewerbase.metadata = { StudyMetadata, SeriesMetadata, InstanceMetadata, StudySummary };
import { OHIFPlugin } from './lib/classes/OHIFPlugin';
Viewerbase.OHIFPlugin = OHIFPlugin;
// TypeSafeCollection
import { TypeSafeCollection } from './lib/classes/TypeSafeCollection';
Viewerbase.TypeSafeCollection = TypeSafeCollection;

View File

@ -0,0 +1,56 @@
// TODO: Add plugin reloader
class OHIFPlugin {
// TODO: this class is still under development and will
// likely change in the near future
constructor () {
this.name = "Unnamed plugin";
this.description = "No description available";
}
// load an individual script URL
static loadScript(scriptURL) {
const script = document.createElement("script");
script.src = scriptURL;
script.type = "text/javascript";
script.async = false;
const head = document.getElementsByTagName("head")[0];
head.appendChild(script);
head.removeChild(script);
return script;
}
// reload all the dependency scripts and also
// the main plugin script url.
static reloadPlugin(plugin) {
plugin.scriptURLs = plugin.scriptURLs || {};
plugin.scriptURLs.forEach(scriptURL => {
this.loadScript(scriptURL).onload = function() {}
});
let scriptURL = plugin.url;
if (plugin.allowCaching === false) {
scriptURL += "?" + performance.now();
}
this.loadScript(scriptURL).onload = function() {
if (OHIFPlugin.entryPoints[plugin.name]) {
OHIFPlugin.entryPoints[plugin.name]();
}
}
}
}
// each plugin registers an entry point function to be called
// when the loading is complete (called above in reloadPlugin).
// TODO: Move to OHIF.plugins.entryPoints?
OHIFPlugin.entryPoints = {};
export { OHIFPlugin };
// TODO: Should we remove this? Authors should be able to use new 'OHIF.viewerbase.OHIFPlugin()'
window.OHIFPlugin = OHIFPlugin;