diff --git a/Packages/ohif-viewerbase/client/components/viewer/viewerMain/viewerMain.js b/Packages/ohif-viewerbase/client/components/viewer/viewerMain/viewerMain.js index 368eaf4a4..0f151fc67 100644 --- a/Packages/ohif-viewerbase/client/components/viewer/viewerMain/viewerMain.js +++ b/Packages/ohif-viewerbase/client/components/viewer/viewerMain/viewerMain.js @@ -20,7 +20,7 @@ Template.viewerMain.onCreated(() => { // and change it to jQuery._data(window, 'events')['resize']. // Otherwise this function will be probably overrided. // See cineDialog instance.setResizeHandler function - window.addEventListener('resize', window.ResizeViewportManager.handleResize.bind(window.ResizeViewportManager)); + window.addEventListener('resize', window.ResizeViewportManager.getResizeHandler()); // Add beforeUnload event handler to check for unsaved changes window.addEventListener('beforeunload', unloadHandlers.beforeUnload); @@ -113,7 +113,7 @@ Template.viewerMain.onDestroyed(() => { OHIF.log.info('viewerMain onDestroyed'); // Remove the Window resize listener - window.removeEventListener('resize', window.ResizeViewportManager.handleResize.bind(window.ResizeViewportManager)); + window.removeEventListener('resize', window.ResizeViewportManager.getResizeHandler()); // Remove beforeUnload event handler... window.removeEventListener('beforeunload', unloadHandlers.beforeUnload); diff --git a/Packages/ohif-viewerbase/client/index.js b/Packages/ohif-viewerbase/client/index.js index 398f39815..3f4e3a7a4 100644 --- a/Packages/ohif-viewerbase/client/index.js +++ b/Packages/ohif-viewerbase/client/index.js @@ -176,6 +176,10 @@ Viewerbase.dicomTagDescriptions = dicomTagDescriptions; import { ImageSet } from './lib/classes/ImageSet'; Viewerbase.ImageSet = ImageSet; +// LayoutManager +import { LayoutManager } from './lib/classes/LayoutManager'; +Viewerbase.LayoutManager = LayoutManager; + // ResizeViewportManager import { ResizeViewportManager } from './lib/classes/ResizeViewportManager'; Viewerbase.ResizeViewportManager = ResizeViewportManager; diff --git a/Packages/ohif-viewerbase/client/lib/classes/ResizeViewportManager.js b/Packages/ohif-viewerbase/client/lib/classes/ResizeViewportManager.js index e703fa6a7..06ab1062e 100644 --- a/Packages/ohif-viewerbase/client/lib/classes/ResizeViewportManager.js +++ b/Packages/ohif-viewerbase/client/lib/classes/ResizeViewportManager.js @@ -6,6 +6,7 @@ import { getInstanceClassDefaultViewport } from '../instanceClassSpecificViewpor // Manage resizing viewports triggered by window resize export class ResizeViewportManager { constructor() { + this._resizeHandler = null; OHIF.log.info('ResizeViewportManager'); } @@ -150,4 +151,18 @@ export class ResizeViewportManager { this.resizeViewportElements(); }, 100); } + + /** + * Returns a unique event handler function associated with a given instance using lazy assignment. + * @return {function} Returns a unique copy of the event handler of this class. + */ + getResizeHandler() { + let resizeHandler = this._resizeHandler; + if (resizeHandler === null) { + resizeHandler = this.handleResize.bind(this); + this._resizeHandler = resizeHandler; + } + return resizeHandler; + } + } diff --git a/StandaloneViewer/StandaloneViewer/.meteor/packages b/StandaloneViewer/StandaloneViewer/.meteor/packages index 0efc94efe..ef0be5dea 100644 --- a/StandaloneViewer/StandaloneViewer/.meteor/packages +++ b/StandaloneViewer/StandaloneViewer/.meteor/packages @@ -19,10 +19,11 @@ ecmascript@0.6.1 # Enable ECMAScript2015+ syntax in app code shell-server@0.2.1 # Server-side component of the `meteor shell` command # OHIF Packages -design ohif:core +ohif:design ohif:cornerstone ohif:viewerbase +ohif:metadata ohif:study-list ohif:dicom-services ohif:hanging-protocols @@ -31,7 +32,7 @@ ohif:hanging-protocols aldeed:template-extension aldeed:simple-schema@1.5.3 stylus@2.513.8 -clinical:router +iron:router session@1.1.7 practicalmeteor:loglevel reactive-dict@1.1.8 diff --git a/StandaloneViewer/StandaloneViewer/.meteor/versions b/StandaloneViewer/StandaloneViewer/.meteor/versions index 55ae3f25a..5dbeb0fed 100644 --- a/StandaloneViewer/StandaloneViewer/.meteor/versions +++ b/StandaloneViewer/StandaloneViewer/.meteor/versions @@ -19,10 +19,6 @@ caching-compiler@1.1.9 caching-html-compiler@1.0.7 callback-hook@1.0.10 check@1.2.4 -clinical:router@2.0.19 -clinical:router-location@2.1.0 -clinical:router-middleware-stack@2.1.2 -clinical:router-url@2.1.0 coffeescript@1.11.1_4 ddp@1.2.5 ddp-client@1.3.2 @@ -30,7 +26,6 @@ ddp-common@1.2.8 ddp-rate-limiter@1.0.6 ddp-server@1.3.12 deps@1.0.12 -design@0.0.1 diff-sequence@1.0.7 ecmascript@0.6.1 ecmascript-runtime@0.3.15 @@ -49,6 +44,10 @@ iron:controller@1.0.12 iron:core@1.0.11 iron:dynamic-template@1.0.12 iron:layout@1.0.12 +iron:location@1.0.11 +iron:middleware-stack@1.1.0 +iron:router@1.0.13 +iron:url@1.0.11 jquery@1.11.10 launch-screen@1.1.0 livedata@1.0.18 @@ -74,9 +73,11 @@ npm-mongo@2.2.11_2 observe-sequence@1.0.14 ohif:core@0.0.1 ohif:cornerstone@0.0.1 +ohif:design@0.0.1 ohif:dicom-services@0.0.1 ohif:hanging-protocols@0.0.1 ohif:log@0.0.1 +ohif:metadata@0.0.1 ohif:study-list@0.0.1 ohif:viewerbase@0.0.1 ohif:wadoproxy@0.0.1 diff --git a/StandaloneViewer/StandaloneViewer/client/components/flexboxLayout/flexboxLayout.js b/StandaloneViewer/StandaloneViewer/client/components/flexboxLayout/flexboxLayout.js index 0cc5e7441..243885966 100644 --- a/StandaloneViewer/StandaloneViewer/client/components/flexboxLayout/flexboxLayout.js +++ b/StandaloneViewer/StandaloneViewer/client/components/flexboxLayout/flexboxLayout.js @@ -1,10 +1,10 @@ Template.flexboxLayout.events({ 'transitionend .sidebarMenu'(event) { if (!event.target.classList.contains('sidebarMenu')) { - return; + return; } - handleResize(); + window.ResizeViewportManager.handleResize(); } }); diff --git a/StandaloneViewer/StandaloneViewer/client/components/standaloneViewerMain/standaloneViewerMain.js b/StandaloneViewer/StandaloneViewer/client/components/standaloneViewerMain/standaloneViewerMain.js index b31a5c782..d74da00db 100644 --- a/StandaloneViewer/StandaloneViewer/client/components/standaloneViewerMain/standaloneViewerMain.js +++ b/StandaloneViewer/StandaloneViewer/client/components/standaloneViewerMain/standaloneViewerMain.js @@ -1,16 +1,21 @@ import { OHIF } from 'meteor/ohif:core'; +import 'meteor/ohif:viewerbase'; + +Meteor.startup(() => { + window.ResizeViewportManager = window.ResizeViewportManager || new OHIF.viewerbase.ResizeViewportManager(); +}); Template.standaloneViewerMain.onCreated(() => { // Attach the Window resize listener - - // TODO: Check why this seems to need to be in a defer clause - // here, but not in the other viewers... - Meteor.defer(() => { - $(window).on('resize', handleResize); - }); + window.addEventListener('resize', window.ResizeViewportManager.getResizeHandler()); // Create the synchronizer used to update reference lines OHIF.viewer.updateImageSynchronizer = new cornerstoneTools.Synchronizer('CornerstoneNewImage', cornerstoneTools.updateImageSynchronizer); + + OHIF.viewer.metadataProvider = OHIF.cornerstone.metadataProvider; + // Metadata configuration + const metadataProvider = OHIF.viewer.metadataProvider; + cornerstoneTools.metaData.addProvider(metadataProvider.provider.bind(metadataProvider)); }); Template.standaloneViewerMain.onRendered(() => { @@ -18,19 +23,20 @@ Template.standaloneViewerMain.onRendered(() => { const studies = instance.data.studies; const parentElement = instance.$('#layoutManagerTarget').get(0); - window.layoutManager = new LayoutManager(parentElement, studies); - window.layoutManager.updateViewports(); - + OHIF.viewerbase.layoutManager = new OHIF.viewerbase.LayoutManager(parentElement, studies); + OHIF.viewerbase.layoutManager.updateViewports(); + // Enable hotkeys - enableHotkeys(); + OHIF.viewerbase.hotkeyUtils.enableHotkeys(); }); -Template.standaloneViewerMain.onDestroyed(() => { +Template.standaloneViewerMain.onDestroyed(() => { + // Remove the Window resize listener - $(window).off('resize', handleResize); + window.removeEventListener('resize', window.ResizeViewportManager.getResizeHandler()); // Destroy the synchronizer used to update reference lines OHIF.viewer.updateImageSynchronizer.destroy(); - delete window.layoutManager; + delete OHIF.viewerbase.layoutManager; }); diff --git a/StandaloneViewer/StandaloneViewer/client/components/toolbarSection/toolbarSection.js b/StandaloneViewer/StandaloneViewer/client/components/toolbarSection/toolbarSection.js index 4e2066c6a..312d997f7 100644 --- a/StandaloneViewer/StandaloneViewer/client/components/toolbarSection/toolbarSection.js +++ b/StandaloneViewer/StandaloneViewer/client/components/toolbarSection/toolbarSection.js @@ -1,4 +1,5 @@ import { OHIF } from 'meteor/ohif:core'; +import 'meteor/ohif:viewerbase'; Template.toolbarSection.helpers({ leftSidebarToggleButtonData() { @@ -182,7 +183,7 @@ Template.toolbarSection.onRendered(function() { instance.$('#layout').dropdown(); // Set disabled/enabled tool buttons that are set in toolManager - const states = toolManager.getToolDefaultStates(); + const states = OHIF.viewerbase.toolManager.getToolDefaultStates(); const disabledToolButtons = states.disabledToolButtons; const allToolbarButtons = $('#toolbar').find('button'); if (disabledToolButtons && disabledToolButtons.length > 0) { diff --git a/StandaloneViewer/StandaloneViewer/client/components/viewer/viewer.js b/StandaloneViewer/StandaloneViewer/client/components/viewer/viewer.js index 422166a59..afcb94dc1 100644 --- a/StandaloneViewer/StandaloneViewer/client/components/viewer/viewer.js +++ b/StandaloneViewer/StandaloneViewer/client/components/viewer/viewer.js @@ -1,14 +1,16 @@ import { OHIF } from 'meteor/ohif:core'; import 'meteor/ohif:viewerbase'; +import 'meteor/ohif:metadata'; OHIF.viewer = OHIF.viewer || {}; +const viewportUtils = OHIF.viewerbase.viewportUtils; OHIF.viewer.functionList = { - toggleCineDialog: toggleCineDialog, - toggleCinePlay: toggleCinePlay, - clearTools: clearTools, - resetViewport: resetViewport, - invert: invert + toggleCineDialog: viewportUtils.toggleCineDialog, + toggleCinePlay: viewportUtils.toggleCinePlay, + clearTools: viewportUtils.clearTools, + resetViewport: viewportUtils.resetViewport, + invert: viewportUtils.invert }; Session.set('activeContentId', 'standalone'); @@ -50,7 +52,8 @@ Template.viewer.onCreated(() => { ViewerData[contentId].studyInstanceUids = []; instance.data.studies.forEach(study => { study.selected = true; - study.displaySets = createStacks(study); + const studyMetadata = new OHIF.metadata.StudyMetadata(study); + study.displaySets = OHIF.viewerbase.sortingManager.getDisplaySets(studyMetadata); OHIF.viewer.Studies.insert(study); ViewerData[contentId].studyInstanceUids.push(study.studyInstanceUid); }); diff --git a/StandaloneViewer/StandaloneViewer/routes.js b/StandaloneViewer/StandaloneViewer/routes.js index f22a68133..d7cecc83e 100644 --- a/StandaloneViewer/StandaloneViewer/routes.js +++ b/StandaloneViewer/StandaloneViewer/routes.js @@ -65,6 +65,7 @@ if (Meteor.isClient) { // Fire the request the server oReq.send(); + this.next(); } }); }