From 92408d4c869a7ca1c63f8653d2770cd73852edb2 Mon Sep 17 00:00:00 2001 From: Erik Ziegler Date: Tue, 17 Jul 2018 10:05:22 +0200 Subject: [PATCH] feat(plugins) Add first pass OHIFPlugin class for experimentation --- Packages/ohif-viewerbase/client/index.js | 3 + .../client/lib/classes/OHIFPlugin.js | 56 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 Packages/ohif-viewerbase/client/lib/classes/OHIFPlugin.js diff --git a/Packages/ohif-viewerbase/client/index.js b/Packages/ohif-viewerbase/client/index.js index 3b75c1baf..158841d63 100644 --- a/Packages/ohif-viewerbase/client/index.js +++ b/Packages/ohif-viewerbase/client/index.js @@ -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; diff --git a/Packages/ohif-viewerbase/client/lib/classes/OHIFPlugin.js b/Packages/ohif-viewerbase/client/lib/classes/OHIFPlugin.js new file mode 100644 index 000000000..ff96a8d53 --- /dev/null +++ b/Packages/ohif-viewerbase/client/lib/classes/OHIFPlugin.js @@ -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;