diff --git a/Packages/viewerbase/lib/displayReferenceLines.js b/Packages/viewerbase/lib/displayReferenceLines.js index 7c9c80a2c..1c6ead6dc 100644 --- a/Packages/viewerbase/lib/displayReferenceLines.js +++ b/Packages/viewerbase/lib/displayReferenceLines.js @@ -7,13 +7,13 @@ import { OHIF } from 'meteor/ohif:core'; * * @param element {node} DOM Node representing the viewport element */ -displayReferenceLines = function(element) { +displayReferenceLines = element => { log.info("imageViewerViewport displayReferenceLines"); // Check if image plane (orientation / loction) data is present for the current image - var enabledElement = cornerstone.getEnabledElement(element); - var imageId = enabledElement.image.imageId; - var imagePlane = cornerstoneTools.metaData.get('imagePlane', imageId); + const enabledElement = cornerstone.getEnabledElement(element); + const imageId = enabledElement.image.imageId; + const imagePlane = cornerstoneTools.metaData.get('imagePlane', imageId); if (!OHIF.viewer.refLinesEnabled || !imagePlane || !imagePlane.frameOfReferenceUID) { return; @@ -23,19 +23,21 @@ displayReferenceLines = function(element) { cornerstoneTools.referenceLines.tool.disable(element); // Loop through all other viewport elements and enable reference lines - $('.imageViewerViewport').not(element).each(function(index, element) { - var imageId; - try { - var enabledElement = cornerstone.getEnabledElement(element); - imageId = enabledElement.image.imageId; - } catch(error) { - return; - } + $('.imageViewerViewport').not(element).each((index, viewportElement) => { + let imageId; + if($(viewportElement).find('canvas').length) { + try { + const enabledElement = cornerstone.getEnabledElement(viewportElement); + imageId = enabledElement.image.imageId; + } catch(error) { + return; + } - if (!imageId || !$(this).find('canvas').length) { - return; - } + if (!imageId) { + return; + } - cornerstoneTools.referenceLines.tool.enable(element, OHIF.viewer.updateImageSynchronizer); + cornerstoneTools.referenceLines.tool.enable(viewportElement, OHIF.viewer.updateImageSynchronizer); + } }); }; diff --git a/Packages/viewerbase/lib/enablePrefetchOnElement.js b/Packages/viewerbase/lib/enablePrefetchOnElement.js index 2e0f172d8..1742ad1e2 100644 --- a/Packages/viewerbase/lib/enablePrefetchOnElement.js +++ b/Packages/viewerbase/lib/enablePrefetchOnElement.js @@ -16,7 +16,7 @@ enablePrefetchOnElement = function(element) { }); // Make sure there is a stack to fetch - var stack = cornerstoneTools.getToolState(element, 'stack'); + const stack = cornerstoneTools.getToolState(element, 'stack'); if (stack && stack.data.length && stack.data[0].imageIds.length > 1) { cornerstoneTools.stackPrefetch.enable(element); } diff --git a/Packages/viewerbase/lib/setActiveViewport.js b/Packages/viewerbase/lib/setActiveViewport.js index 8463818bc..0b2dfdadd 100644 --- a/Packages/viewerbase/lib/setActiveViewport.js +++ b/Packages/viewerbase/lib/setActiveViewport.js @@ -1,9 +1,10 @@ -setActiveViewport = function(element) { +setActiveViewport = element => { if (!element) { return; } - var viewportIndex = $('.imageViewerViewport').index(element); + const viewportIndex = $('.imageViewerViewport').index(element); + const jQueryElement = $(element); // When an ActivateViewport event is fired, update the Meteor Session // with the viewport index that it was fired from. @@ -14,15 +15,21 @@ setActiveViewport = function(element) { // Add the 'active' class to the parent container to highlight the active viewport $('#imageViewerViewports .viewportContainer').removeClass('active'); - $(element).parents('.viewportContainer').addClass('active'); + jQueryElement.parents('.viewportContainer').addClass('active'); // Finally, enable stack prefetching and hide the reference lines from - // the newly activated viewport - enablePrefetchOnElement(element); - displayReferenceLines(element); + // the newly activated viewport that has a canvas + + if (jQueryElement.find('canvas').length) { + // Cornerstone Tools compare DOM elements (check getEnabledElement cornerstone function) + // so we can't pass a jQuery object as an argument, otherwise it throws an excepetion + const domElement = jQueryElement.get(0); + enablePrefetchOnElement(domElement); + displayReferenceLines(domElement); + } // Set the div to focused, so keypress events are handled //$(element).focus(); //.focus() event breaks in FF&IE - $(element).triggerHandler('focus'); + jQueryElement.triggerHandler('focus'); }; diff --git a/Packages/viewerbase/lib/viewportFunctions.js b/Packages/viewerbase/lib/viewportFunctions.js index 1a98c811a..3633c1952 100644 --- a/Packages/viewerbase/lib/viewportFunctions.js +++ b/Packages/viewerbase/lib/viewportFunctions.js @@ -145,7 +145,8 @@ isPlaying = () => { // Get the viewport element and its current playClip tool state const element = getActiveViewportElement(); - if (!element) { + // Empty Elements throws cornerstore exception + if (!element || !$(element).find('canvas').length) { return; }