diff --git a/Packages/ohif-viewerbase/client/components/viewer/ImageScrollbar/ImageScrollbar.js b/Packages/ohif-viewerbase/client/components/viewer/ImageScrollbar/ImageScrollbar.js
deleted file mode 100644
index a7a74dab0..000000000
--- a/Packages/ohif-viewerbase/client/components/viewer/ImageScrollbar/ImageScrollbar.js
+++ /dev/null
@@ -1,68 +0,0 @@
-import { Component } from 'react';
-import React from 'react';
-import PropTypes from 'prop-types';
-import './ImageScrollbar.styl';
-
-class ImageScrollbar extends Component {
- constructor(props) {
- super(props);
-
- this.onChange = this.onChange.bind(this);
- this.onKeyDown = this.onKeyDown.bind(this);
- }
-
- render() {
- this.style = {
- width: `${this.props.height}`
- };
-
- return (
-
- );
- }
-
- onChange(event) {
- const intValue = parseInt(event.target.value, 10);
- this.props.onInputCallback(intValue);
- }
-
- onKeyDown(event) {
- // We don't allow direct keyboard up/down input on the
- // image sliders since the natural direction is reversed (0 is at the top)
-
- // Store the KeyCodes in an object for readability
- const keys = {
- DOWN: 40,
- UP: 38
- };
-
- if (event.which === keys.DOWN) {
- OHIF.commands.run('scrollDown');
- event.preventDefault();
- } else if (event.which === keys.UP) {
- OHIF.commands.run('scrollUp');
- event.preventDefault();
- }
- }
-}
-
-ImageScrollbar.propTypes = {
- value: PropTypes.number.isRequired,
- onInputCallback: PropTypes.func.isRequired
-};
-
-export default ImageScrollbar;
diff --git a/Packages/ohif-viewerbase/client/components/viewer/ImageScrollbar/ImageScrollbar.styl b/Packages/ohif-viewerbase/client/components/viewer/ImageScrollbar/ImageScrollbar.styl
deleted file mode 100644
index 460cff602..000000000
--- a/Packages/ohif-viewerbase/client/components/viewer/ImageScrollbar/ImageScrollbar.styl
+++ /dev/null
@@ -1,123 +0,0 @@
-@import "{ohif:design}/app"
-
-$imageSliderBorderRadius = 57px
-$imageSliderTrackColor = rgba(0,0,0,0)
-$imageSliderBorder = none
-
-// Note that these are backwards due to the magic needed to make a cross-browser vertical slider
-$imageSliderWidth = 12px
-$imageSliderHeight = 39px
-
-.scroll
- height: 100%
- padding: 5px
- position: absolute
- right: 0
- top: 0
-
- .scroll-holder
- height: calc(100% - 20px)
- margin-top: 5px
- position: relative
- width: 12px
-
- .imageSlider
- height: $imageSliderWidth
- left: 12px
- padding: 0
- position: absolute
- top: 0
-
- vendorize(transform, rotate(90deg))
- vendorize(transform-origin, top left)
-
- -webkit-appearance: none
- background-color: $imageSliderTrackColor
-
- // Remove focus highlights on range input
- &:focus
- outline: none
- vendorize(box-shadow, none)
-
- // Remove focus border in Firefox
- &::-moz-focus-outer
- border: none
-
- // --- Style the range track --- //
- &::-webkit-slider-runnable-track
- background-color: $imageSliderTrackColor
- border: none
- cursor: pointer
- height: 5px
- z-index: 6
-
- &::-moz-range-track
- background-color: $imageSliderTrackColor
- border: none
- cursor: pointer
- height: 2px
- z-index: 6
-
- &::-ms-track
- animate: 0.2s
- background: transparent
- border: none
- border-width: 15px 0
- color: $imageSliderTrackColor
- cursor: pointer
- height: $imageSliderWidth
- width: 100%
-
- // Hide any fill IE tries to add
- &::-ms-fill-lower
- background: $imageSliderTrackColor
-
- &::-ms-fill-upper
- background: $imageSliderTrackColor
-
- // --- Style the range thumb --- //
- &::-webkit-slider-thumb
- -webkit-appearance: none !important
- theme('background-color', '$imageSliderColor')
- border: $imageSliderBorder
- border-radius: $imageSliderBorderRadius
- cursor: -webkit-grab
- height: $imageSliderWidth
- margin-top: -4px
- width: $imageSliderHeight
-
- &:active
- theme('background-color', '$activeColor')
- cursor: -webkit-grabbing
-
- &::-moz-range-thumb
- theme('background-color', '$imageSliderColor')
- border: $imageSliderBorder
- border-radius: $imageSliderBorderRadius
- cursor: -moz-grab
- height: $imageSliderWidth
- width: $imageSliderHeight
- z-index: 7
-
- &:active
- theme('background-color', '$activeColor')
- cursor: -moz-grabbing
-
- &::-ms-thumb
- theme('background-color', '$imageSliderColor')
- border: $imageSliderBorder
- border-radius: $imageSliderBorderRadius
- cursor: ns-resize
- height: $imageSliderWidth
- width: $imageSliderHeight
-
- &:active
- theme('background-color', '$activeColor')
-
- &::-ms-tooltip
- display: none
-
-// Set left position in IE, border-width attribute breaks left position of imageSlider
-@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)
- .imageSlider
- left: 50px
diff --git a/Packages/ohif-viewerbase/client/components/viewer/LoadingIndicator/LoadingIndicator.js b/Packages/ohif-viewerbase/client/components/viewer/LoadingIndicator/LoadingIndicator.js
deleted file mode 100644
index 97b27d768..000000000
--- a/Packages/ohif-viewerbase/client/components/viewer/LoadingIndicator/LoadingIndicator.js
+++ /dev/null
@@ -1,110 +0,0 @@
-import { Meteor } from 'meteor/meteor';
-import { $ } from 'meteor/jquery';
-import { OHIF } from 'meteor/ohif:core';
-
-import { Component } from 'react';
-import React from 'react';
-import PropTypes from 'prop-types';
-import './LoadingIndicator.styl';
-
-Meteor.startup(() => {
- // This checking is necessary because cornerstoneTools may not have some tools available.
- // Example: when an app defines its own cornerstone's lib versions, so it
- // uses only ohif-viewerbase and not ohif-cornerstone and those libs are added later.
- if (cornerstoneTools.loadHandlerManager) {
- cornerstoneTools.loadHandlerManager.setStartLoadHandler(startLoadingHandler);
- cornerstoneTools.loadHandlerManager.setEndLoadHandler(doneLoadingHandler);
- cornerstoneTools.loadHandlerManager.setErrorLoadingHandler(errorLoadingHandler);
- }
-});
-
-let loadHandlerTimeout;
-
-const startLoadingHandler = element => {
- clearTimeout(loadHandlerTimeout);
- loadHandlerTimeout = setTimeout(() => {
- console.log('startLoading');
- const elem = $(element);
- elem.siblings('.imageViewerErrorLoadingIndicator').css('display', 'none');
- elem.find('canvas').not('.magnifyTool').addClass('faded');
- elem.siblings('.imageViewerLoadingIndicator').css('display', 'block');
- }, OHIF.viewer.loadIndicatorDelay);
-};
-
-const doneLoadingHandler = element => {
- clearTimeout(loadHandlerTimeout);
- const elem = $(element);
- elem.siblings('.imageViewerErrorLoadingIndicator').css('display', 'none');
- elem.find('canvas').not('.magnifyTool').removeClass('faded');
- elem.siblings('.imageViewerLoadingIndicator').css('display', 'none');
-};
-
-const errorLoadingHandler = (element, imageId, error, source) => {
- clearTimeout(loadHandlerTimeout);
- const elem = $(element);
-
- // Could probably chain all of these, but this is more readable
- elem.find('canvas').not('.magnifyTool').removeClass('faded');
- elem.siblings('.imageViewerLoadingIndicator').css('display', 'none');
-
- // Don't display errors from the stackPrefetch tool
- if (source === 'stackPrefetch') {
- return;
- }
-
- const errorLoadingIndicator = elem.siblings('.imageViewerErrorLoadingIndicator');
- errorLoadingIndicator.css('display', 'block');
-
- // This is just used to expand upon some error messages that are sent
- // when things fail. An example is a network error throwing the error
- // which is only described as "network".
- const errorDetails = {
- network: 'A network error has occurred'
- // We need to expand this further when we see more obscure error messages
- };
-
- if (errorDetails.hasOwnProperty(error)) {
- error = errorDetails[error];
- }
-
- errorLoadingIndicator.find('.description').text(`An error has occurred while loading image: ${imageId}`);
- if (error) {
- errorLoadingIndicator.find('.details').text(`Details: ${error}`);
- }
-};
-
-class LoadingIndicator extends Component {
- constructor(props) {
- super(props);
- }
-
- render() {
- // TODO[react]: Pass this in as a prop reactively
- //const percentComplete = Session.get('CornerstoneLoadProgress' + this.viewportIndex);
- let percComplete;
- if (this.props.percentComplete && this.props.percentComplete !== 100) {
- percComplete = `${this.props.percentComplete}%`;
- }
-
- return (<>
-
-
-
Loading... {percComplete}
-
-
-
-
-
Error Loading Image
-
An error has occurred.
-
-
-
- >);
- }
-}
-
-LoadingIndicator.propTypes = {
- percentComplete: PropTypes.number
-};
-
-export default LoadingIndicator;
diff --git a/Packages/ohif-viewerbase/client/components/viewer/LoadingIndicator/LoadingIndicator.styl b/Packages/ohif-viewerbase/client/components/viewer/LoadingIndicator/LoadingIndicator.styl
deleted file mode 100644
index 190d139c1..000000000
--- a/Packages/ohif-viewerbase/client/components/viewer/LoadingIndicator/LoadingIndicator.styl
+++ /dev/null
@@ -1,39 +0,0 @@
-@import "{ohif:design}/app"
-
-.imageViewerLoadingIndicator
- theme('color', '$textSecondaryColor')
-
-.faded
- opacity: 0.5
-
-.imageViewerErrorLoadingIndicator
- theme('color', '$uiYellow')
-
- p, h4
- padding: 4px 0
- text-align: center
- word-wrap: break-word
-
- p
- font-size: 11pt
-
-.loadingIndicator
- background-color: rgba(0,0,0,0.75)
- display: none
- font-size: 18px
- height: 100%
- overflow: hidden
- pointer-events: none // Necessary for click-through to cornerstone element below
- position: absolute
- top: 0
- width: 100%
- z-index: 1
-
- .indicatorContents
- font-size: 30px
- font-weight: 300
- position: absolute
- text-align: center
- top: 50%
- transform(translateY(-50%))
- width: 100%
diff --git a/Packages/ohif-viewerbase/client/components/viewer/ViewportOrientationMarkers/ViewportOrientationMarkers.js b/Packages/ohif-viewerbase/client/components/viewer/ViewportOrientationMarkers/ViewportOrientationMarkers.js
deleted file mode 100644
index f4ca06ef3..000000000
--- a/Packages/ohif-viewerbase/client/components/viewer/ViewportOrientationMarkers/ViewportOrientationMarkers.js
+++ /dev/null
@@ -1,87 +0,0 @@
-import { Component } from 'react';
-import React from 'react';
-import PropTypes from 'prop-types';
-import './ViewportOrientationMarkers.styl';
-
-/**
- * Computes the orientation labels on a Cornerstone-enabled Viewport element
- * when the viewport settings change (e.g. when a horizontal flip or a rotation occurs)
- *
- * @param imageId The Cornerstone ImageId
- * @param viewport The current viewport
- */
-export function getOrientationMarkers(imageId, viewport) {
- const imagePlane = cornerstone.metaData.get('imagePlane', imageId);
- if (!imagePlane || !imagePlane.rowCosines || !imagePlane.columnCosines) {
- return;
- }
-
- const rowString = cornerstoneTools.orientation.getOrientationString(imagePlane.rowCosines);
- const columnString = cornerstoneTools.orientation.getOrientationString(imagePlane.columnCosines);
- const oppositeRowString = cornerstoneTools.orientation.invertOrientationString(rowString);
- const oppositeColumnString = cornerstoneTools.orientation.invertOrientationString(columnString);
-
- const markers = {
- top: oppositeColumnString,
- left: oppositeRowString
- };
-
- // If any vertical or horizontal flips are applied, change the orientation strings ahead of
- // the rotation applications
- if (viewport.vflip) {
- markers.top = cornerstoneTools.orientation.invertOrientationString(markers.top);
- }
-
- if (viewport.hflip) {
- markers.left = cornerstoneTools.orientation.invertOrientationString(markers.left);
- }
-
- // Swap the labels accordingly if the viewport has been rotated
- // This could be done in a more complex way for intermediate rotation values (e.g. 45 degrees)
- if (viewport.rotation === 90 || viewport.rotation === -270) {
- return {
- top: markers.left,
- left: cornerstoneTools.orientation.invertOrientationString(markers.top)
- };
- } else if (viewport.rotation === -90 || viewport.rotation === 270) {
- return {
- top: cornerstoneTools.orientation.invertOrientationString(markers.left),
- left: markers.top
- };
- } else if (viewport.rotation === 180 || viewport.rotation === -180) {
- return {
- top: cornerstoneTools.orientation.invertOrientationString(markers.top),
- left: cornerstoneTools.orientation.invertOrientationString(markers.left)
- };
- }
-
- return markers;
-}
-
-class ViewportOrientationMarkers extends Component {
- render() {
- const { imageId, viewport } = this.props;
- const markers = getOrientationMarkers(imageId, viewport);
- if (!markers) {
- return '';
- }
-
- return (
-
-
- {markers.top}
-
-
- {markers.left}
-
-
- );
- }
-};
-
-ViewportOrientationMarkers.propTypes = {
- imageId: PropTypes.string.isRequired,
- viewport: PropTypes.object.isRequired
-};
-
-export default ViewportOrientationMarkers;
diff --git a/Packages/ohif-viewerbase/client/components/viewer/ViewportOrientationMarkers/ViewportOrientationMarkers.styl b/Packages/ohif-viewerbase/client/components/viewer/ViewportOrientationMarkers/ViewportOrientationMarkers.styl
deleted file mode 100644
index cf6dc5a2d..000000000
--- a/Packages/ohif-viewerbase/client/components/viewer/ViewportOrientationMarkers/ViewportOrientationMarkers.styl
+++ /dev/null
@@ -1,17 +0,0 @@
-.ViewportOrientationMarkers
- pointer-events: none // Necessary for click-through to cornerstone element below
-
- font-size: 15px
- color: rgb(204, 204, 204)
- line-height: 18px
-
- .orientation-marker
- position: absolute
-
- .top-mid
- top: 5px
- left: 50%
-
- .left-mid
- top: 47%
- left: 5px
diff --git a/Packages/ohif-viewerbase/client/components/viewer/ViewportOverlay/ViewportOverlay.js b/Packages/ohif-viewerbase/client/components/viewer/ViewportOverlay/ViewportOverlay.js
deleted file mode 100644
index 34c7c9a68..000000000
--- a/Packages/ohif-viewerbase/client/components/viewer/ViewportOverlay/ViewportOverlay.js
+++ /dev/null
@@ -1,139 +0,0 @@
-import { Component } from 'react';
-import React from 'react';
-import PropTypes from 'prop-types';
-import './ViewportOverlay.styl';
-import { viewportOverlayUtils } from '../../../lib/viewportOverlayUtils';
-import { helpers } from '../../../lib/helpers/index.js';
-const { formatPN, formatDA, formatNumberPrecision, formatTM, isValidNumber} = helpers;
-
-function getCompression(imageId) {
- const instance = cornerstone.metaData.get('instance', imageId);
- if (!instance) {
- return '';
- }
-
- if (instance.lossyImageCompression === '01' &&
- instance.lossyImageCompressionRatio !== '') {
- const compressionMethod = instance.lossyImageCompressionMethod || 'Lossy: ';
- const compressionRatio = formatNumberPrecision(instance.lossyImageCompressionRatio, 2);
- return compressionMethod + compressionRatio + ' : 1';
- }
-
- return 'Lossless / Uncompressed';
-}
-
-function getImageDimensions(imageId) {
- const instance = cornerstone.metaData.get('instance', imageId)
- if (!instance) {
- return '';
- }
-
- return `${instance.columns} x ${instance.rows}`;
-}
-
-class ViewportOverlay extends Component {
- render() {
- const zoom = this.props.viewport.scale * 100;
- const imageId = this.props.imageId;
-
- const patientMetadata = cornerstone.metaData.get('patient', imageId);
- const studyMetadata = cornerstone.metaData.get('study', imageId);
- const seriesMetadata = cornerstone.metaData.get('series', imageId);
- const instanceMetadata = cornerstone.metaData.get('instance', imageId);
-
- const patientName = patientMetadata.name;
- const patientId = patientMetadata.id;;
- const { studyDate, studyTime, studyDescription } = studyMetadata;
- const { seriesNumber, seriesDescription } = seriesMetadata;
- const { instanceNumber, frameTime, thickness, spacingBetweenSlices, sliceLocation } = instanceMetadata;
- const frameRate = formatNumberPrecision(1000 / frameTime, 1);
- const compression = getCompression(imageId);
- const windowWidth = this.props.viewport.voi.windowWidth || 0;
- const windowCenter = this.props.viewport.voi.windowCenter || 0;
- const wwwc = `W: ${windowWidth.toFixed(0)} L: ${windowCenter.toFixed(0)}`;
- const imageIndex = this.props.stack.imageIds.indexOf(this.props.imageId) + 1;
- const numImages = this.props.stack.imageIds.length;
- const imageDimensions = getImageDimensions(imageId);
-
- const normal = (<>
-
-
{formatPN(patientName)}
-
{patientId}
-
-
-
{studyDescription}
-
{formatDA(studyDate)} {formatTM(studyTime)}
-
-
-
Zoom: {formatNumberPrecision(zoom,0)}%
-
{compression}
-
{wwwc}
-
-
-
{seriesNumber >= 0 ? `Ser: ${seriesNumber}` : ''}
-
{numImages > 1 ? `Img: ${instanceNumber} ${imageIndex}/${numImages}` : ''}
-
{frameRate >= 0 ? `${formatNumberPrecision(frameRate, 2)} FPS` : ''}
-
{imageDimensions}
-
- {isValidNumber(sliceLocation) ? `Loc: ${formatNumberPrecision(sliceLocation, 2)} mm` : ''}
- {thickness ? `Thick: ${formatNumberPrecision(thickness, 2)} mm` : ''}
- {spacingBetweenSlices ? `Spacing: ${formatNumberPrecision(spacingBetweenSlices, 2)} mm` : ''}
-
-
{seriesDescription}
-
-
- >);
-
- const rightOnly = (<>
-
-
{formatPN(patientName)}
-
{patientId}
-
{studyDescription}
-
{formatDA(studyDate)} {formatTM(studyTime)}
-
-
-
{seriesNumber >= 0 ? `Ser: ${seriesNumber}` : ''}
-
{numImages > 1 ? `Img: ${instanceNumber} ${imageIndex}/${numImages}` : ''}
-
{frameRate >= 0 ? `${formatNumberPrecision(frameRate, 2)} FPS` : ''}
-
{imageDimensions}
-
{seriesDescription}
-
Zoom: ${formatNumberPrecision(zoom, 0)}%
-
{compression}
-
{wwwc}
-
- >);
-
- const leftOnly = (<>
-
-
{formatPN(patientName)}
-
{patientId}
-
{studyDescription}
-
{formatDA(studyDate)} {formatTM(studyTime)}
-
-
-
{seriesNumber >= 0 ? `Ser: ${seriesNumber}` : ''}
-
{numImages > 1 ? `Img: ${instanceNumber} ${imageIndex}/${numImages}` : ''}
-
{frameRate >= 0 ? `${formatNumberPrecision(frameRate, 2)} FPS` : ''}
-
{imageDimensions}
-
{seriesDescription}
-
Zoom: ${formatNumberPrecision(zoom, 0)}%
-
{compression}
-
{wwwc}
-
- >);
-
- return (
-
- {normal}
-
- );
- }
-}
-
-ViewportOverlay.propTypes = {
- viewport: PropTypes.object.isRequired,
- imageId: PropTypes.string.isRequired,
- stack: PropTypes.object.isRequired
-};
-
-export default ViewportOverlay;
diff --git a/Packages/ohif-viewerbase/client/components/viewer/ViewportOverlay/ViewportOverlay.styl b/Packages/ohif-viewerbase/client/components/viewer/ViewportOverlay/ViewportOverlay.styl
deleted file mode 100644
index eb87fa6ee..000000000
--- a/Packages/ohif-viewerbase/client/components/viewer/ViewportOverlay/ViewportOverlay.styl
+++ /dev/null
@@ -1,52 +0,0 @@
-@import "{ohif:design}/app"
-
-$viewportTagPadding = 20px
-
-.imageViewerViewport.empty ~ .ViewportOverlay
- display: none
-
-.ViewportOverlay
- theme('color', '$textSecondaryColor')
-
- .overlay-element
- position: absolute
- font-weight: 400
- text-shadow: 1px 1px black
- pointer-events: none
-
- .top-left
- top: $viewportTagPadding
- left: $viewportTagPadding
-
- .top-center
- top: $viewportTagPadding
- padding-top: $viewportTagPadding
- width: 100%
- text-align: center
-
- .top-right
- top: $viewportTagPadding
- right: $viewportTagPadding
- text-align: right
-
- .bottom-left
- bottom: $viewportTagPadding
- left: $viewportTagPadding
-
- .bottom-right
- bottom: $viewportTagPadding
- right: $viewportTagPadding
- text-align: right
-
- &.controlsVisible
- .topright, .bottomright
- right: "calc(%s + 19px)" % $viewportTagPadding
-
- svg
- theme('color', '$defaultColor')
- theme('fill', '$defaultColor')
- theme('stroke', '$defaultColor')
- background-color: transparent
- margin: 2px
- width: 18px
- height: 18px
diff --git a/Packages/ohif-viewerbase/client/components/viewer/ViewportOverlay/viewportOverlay-blz.js b/Packages/ohif-viewerbase/client/components/viewer/ViewportOverlay/viewportOverlay-blz.js
deleted file mode 100644
index f80cfe136..000000000
--- a/Packages/ohif-viewerbase/client/components/viewer/ViewportOverlay/viewportOverlay-blz.js
+++ /dev/null
@@ -1,245 +0,0 @@
-import { Template } from 'meteor/templating';
-import { Session } from 'meteor/session';
-import { _ } from 'meteor/underscore';
-import { OHIF } from 'meteor/ohif:core';
-import { cornerstone } from 'meteor/ohif:cornerstone';
-import { viewportOverlayUtils } from '../../../lib/viewportOverlayUtils';
-import { getElementIfNotEmpty } from '../../../lib/getElementIfNotEmpty';
-import { getStackDataIfNotEmpty } from '../../../lib/getStackDataIfNotEmpty';
-
-Template.viewportOverlay.onCreated(() => {
- const instance = Template.instance();
-
- instance.getImageIndex = () => {
- const stack = getStackDataIfNotEmpty(instance.data.viewportIndex);
- if (!stack || stack.currentImageIdIndex === undefined) return;
-
- return stack.currentImageIdIndex;
- };
-});
-
-Template.viewportOverlay.helpers({
- wwwc() {
- Session.get('CornerstoneImageRendered' + this.viewportIndex);
-
- const element = getElementIfNotEmpty(this.viewportIndex);
- if (!element) {
- return '';
- }
-
- const viewport = cornerstone.getViewport(element);
- if (!viewport) {
- return '';
- }
-
- return 'W ' + viewport.voi.windowWidth.toFixed(0) + ' L ' + viewport.voi.windowCenter.toFixed(0);
- },
-
- zoom() {
- Session.get('CornerstoneImageRendered' + this.viewportIndex);
-
- const element = getElementIfNotEmpty(this.viewportIndex);
- if (!element) {
- return;
- }
-
- const viewport = cornerstone.getViewport(element);
- if (!viewport) {
- return;
- }
-
- return (viewport.scale * 100.0);
- },
-
- imageDimensions() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- const image = viewportOverlayUtils.getImage(this.viewportIndex);
- if (!image) {
- return '';
- }
-
- return image.width + ' x ' + image.height;
- },
-
- patientName() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getPatient.call(this, 'name');
- },
-
- patientId() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getPatient.call(this, 'id');
- },
-
- patientBirthDate() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getPatient.call(this, 'birthDate');
- },
-
- patientSex() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getPatient.call(this, 'sex');
- },
-
- studyDate() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getStudy.call(this, 'studyDate');
- },
-
- studyTime() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getStudy.call(this, 'studyTime');
- },
-
- studyDescription() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getStudy.call(this, 'studyDescription');
- },
-
- seriesDescription() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getSeries.call(this, 'seriesDescription');
- },
-
- frameRate() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- const frameTime = viewportOverlayUtils.getInstance.call(this, 'frameTime');
- if (!frameTime) {
- return;
- }
-
- const frameRate = 1000 / frameTime;
- return frameRate.toFixed(1);
- },
-
- seriesNumber() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getSeries.call(this, 'seriesNumber');
- },
-
- instanceNumber() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getInstance.call(this, 'instanceNumber');
- },
-
- thickness() {
- // Displays Slice Thickness (0018,0050)
-
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getInstance.call(this, 'sliceThickness');
- },
-
- location() {
- // Displays Slice Location (0020,1041), if present.
- // - Otherwise, displays Table Position (0018,9327)
- // - TODO: Otherwise, displays a value derived from Image Position (Patient) (0020,0032)
-
- Session.get('CornerstoneNewImage' + this.viewportIndex);
- const sliceLocation = viewportOverlayUtils.getInstance.call(this, 'sliceLocation');
- if (sliceLocation !== '') {
- return sliceLocation;
- }
-
- const tablePosition = viewportOverlayUtils.getInstance.call(this, 'tablePosition');
- if (tablePosition !== '') {
- return tablePosition;
- }
-
- return viewportOverlayUtils.getInstance.call(this, 'imagePositionPatient');
- },
-
- spacingBetweenSlices() {
- // Displays Spacing Between Slices (0018,0088), if present.
-
- // TODO: Otherwise, displays a value derived from successive values
- // of Image Position (Patient) (0020,0032) perpendicular to
- // the Image Orientation (Patient) (0020,0037)
-
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getInstance.call(this, 'spacingBetweenSlices');
- },
-
- compression() {
- // Displays whether or not lossy compression has been applied:
- //
- // - Checks Lossy Image Compression (0028,2110)
- // - If so, displays the value of Lossy Image Compression Ratio (0028,2112)
- // and Lossy Image Compression Method (0028,2114)
-
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- if (!this.imageId) {
- return false;
- }
-
- const instance = cornerstone.metaData.get('instance', this.imageId);
- if (!instance) {
- return '';
- }
-
- if (instance.lossyImageCompression === '01' &&
- instance.lossyImageCompressionRatio !== '') {
- const compressionMethod = instance.lossyImageCompressionMethod || 'Lossy: ';
- const compressionRatio = parseFloat(instance.lossyImageCompressionRatio).toFixed(2);
- return compressionMethod + compressionRatio + ' : 1';
- }
-
- return 'Lossless / Uncompressed';
- },
-
- tagDisplayLeftOnly() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getTagDisplay.call(this, 'side') === 'L';
- },
-
- tagDisplayRightOnly() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getTagDisplay.call(this, 'side') === 'R';
- },
-
- tagDisplaySpecified() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getTagDisplay.call(this, 'side');
- },
-
- imageNumber() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- return viewportOverlayUtils.getInstance.call(this, 'number');
- },
-
- imageIndex() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- const imageIndex = Template.instance().getImageIndex();
- return _.isUndefined(imageIndex) ? 0 : imageIndex + 1;
- },
-
- numImages() {
- Session.get('CornerstoneNewImage' + this.viewportIndex);
-
- const stack = getStackDataIfNotEmpty(this.viewportIndex);
- if (!stack || !stack.imageIds) {
- return;
- }
-
- return stack.imageIds.length;
- },
-});
diff --git a/Packages/ohif-viewerbase/client/components/viewer/ViewportOverlay/viewportOverlay.html b/Packages/ohif-viewerbase/client/components/viewer/ViewportOverlay/viewportOverlay.html
deleted file mode 100644
index 67e7c5377..000000000
--- a/Packages/ohif-viewerbase/client/components/viewer/ViewportOverlay/viewportOverlay.html
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
- {{#unless tagDisplaySpecified}}
-
-
{{formatPN patientName}}
-
{{patientId}}
-
-
-
{{studyDescription}}
-
{{formatDA studyDate}} {{formatTM studyTime}}
-
-
-
{{#if zoom}}Zoom: {{formatNumberPrecision zoom 0}}%{{/if}}
-
{{compression}}
-
{{wwwc}}
-
-
-
{{#if seriesNumber}}Ser: {{seriesNumber}}{{/if}}
-
{{#if gt numImages 1}}Img: {{instanceNumber}} ({{imageIndex}}/{{numImages}}){{/if}}
-
{{#if frameRate}}{{formatNumberPrecision frameRate 2}} FPS{{/if}}
-
{{imageDimensions}}
-
- {{#if isValidNumber location}}Loc: {{formatNumberPrecision location 2}} mm{{/if}}
- {{#if thickness}}Thick: {{formatNumberPrecision thickness 2}} mm{{/if}}
- {{#if spacingBetweenSlices}}Spacing: {{formatNumberPrecision spacingBetweenSlices 2}} mm{{/if}}
-
-
{{seriesDescription}}
-
- {{/unless}}
-
- {{#if tagDisplayRightOnly}}
-
-
{{formatPN patientName}}
-
{{patientId}}
-
{{studyDescription}}
-
{{formatDA studyDate}} {{formatTM studyTime}}
-
-
-
{{#if seriesNumber}}Ser: {{seriesNumber}}{{/if}}
-
{{#if gt numImages 1}}Img: {{instanceNumber}} ({{imageIndex}}/{{numImages}}){{/if}}
-
{{#if frameRate}}{{formatNumberPrecision frameRate 2}} FPS{{/if}}
-
{{imageDimensions}}
-
{{seriesDescription}}
-
{{#if zoom}}Zoom: {{formatNumberPrecision zoom 0}}%{{/if}}
-
{{compression}}
-
{{wwwc}}
-
- {{/if}}
-
- {{#if tagDisplayLeftOnly}}
-
-
{{formatPN patientName}}
-
{{patientId}}
-
{{studyDescription}}
-
{{formatDA studyDate}} {{formatTM studyTime}}
-
-
-
{{#if seriesNumber}}Ser: {{seriesNumber}}{{/if}}
-
{{#if gt numImages 1}}Img: {{instanceNumber}} ({{imageIndex}}/{{numImages}}){{/if}}
-
{{#if frameRate}}{{formatNumberPrecision frameRate 2}} FPS{{/if}}
-
{{imageDimensions}}
-
{{seriesDescription}}
-
{{#if zoom}}Zoom: {{formatNumberPrecision zoom 0}}%{{/if}}
-
{{compression}}
-
{{wwwc}}
-
- {{/if}}
-
- {{#if gt numImages 1}}
- {{>imageControls imageIndex=imageIndex numImages=numImages}}
- {{/if}}
-
-
diff --git a/Packages/ohif-viewerbase/client/components/viewer/index.js b/Packages/ohif-viewerbase/client/components/viewer/index.js
index 8b2211e01..2fb47d21a 100644
--- a/Packages/ohif-viewerbase/client/components/viewer/index.js
+++ b/Packages/ohif-viewerbase/client/components/viewer/index.js
@@ -1,20 +1,11 @@
import ViewerMain from './ViewerMain/ViewerMain.js';
import GridLayout from './GridLayout/GridLayout.js';
-import LoadingIndicator from './LoadingIndicator/LoadingIndicator.js';
-import CornerstoneViewport from './CornerstoneViewport/CornerstoneViewport.js';
-import ImageScrollbar from './ImageScrollbar/ImageScrollbar.js';
import ToolContextMenu from './ToolContextMenu/ToolContextMenu.js';
-import ViewportOverlay from './ViewportOverlay/ViewportOverlay.js';
-import ViewportOrientationMarkers from './ViewportOrientationMarkers/ViewportOrientationMarkers.js';
const viewer = {
ViewerMain,
GridLayout,
- LoadingIndicator,
- CornerstoneViewport,
- ImageScrollbar,
ToolContextMenu,
- ViewportOverlay,
};
export default viewer;
diff --git a/Packages/ohif-viewerbase/client/lib/StackManager.js b/Packages/ohif-viewerbase/client/lib/StackManager.js
index 21b0245cb..a40e7475b 100644
--- a/Packages/ohif-viewerbase/client/lib/StackManager.js
+++ b/Packages/ohif-viewerbase/client/lib/StackManager.js
@@ -146,3 +146,4 @@ const StackManager = {
};
export { StackManager };
+export default StackManager;
diff --git a/Packages/ohif-viewerbase/package.js b/Packages/ohif-viewerbase/package.js
index b70e5c3cd..7bb47ffda 100644
--- a/Packages/ohif-viewerbase/package.js
+++ b/Packages/ohif-viewerbase/package.js
@@ -4,6 +4,16 @@ Package.describe({
version: '0.0.1'
});
+Npm.depends({
+ 'react-cornerstone-viewport': 'git://github.com:cornerstonejs/react-cornerstone-viewport.git',
+ hammerjs: '2.0.8',
+ 'cornerstone-core': '2.2.8',
+ 'cornerstone-tools': '3.0.0-b.1471',
+ 'cornerstone-math': '0.1.7',
+ 'dicom-parser': '1.8.3',
+ 'cornerstone-wado-image-loader': '2.2.3',
+});
+
Package.onUse(function(api) {
api.versionsFrom('1.7');
diff --git a/package-lock.json b/package-lock.json
index 5688b2b54..851cb319a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,445 +1,5 @@
{
"name": "ohif-viewers-meta",
"version": "0.0.1",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "bcrypt": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-2.0.1.tgz",
- "integrity": "sha512-DwB7WgJPdskbR+9Y3OTJtwRq09Lmm7Na6b+4ewvXjkD0nfNRi1OozxljHm5ETlDCBq9DTy04lQz+rj+T2ztIJg==",
- "requires": {
- "nan": "2.10.0",
- "node-pre-gyp": "0.9.1"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.0.1",
- "bundled": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true
- },
- "debug": {
- "version": "2.6.9",
- "bundled": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "deep-extend": {
- "version": "0.4.2",
- "bundled": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true
- },
- "fs-minipass": {
- "version": "1.2.5",
- "bundled": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.2",
- "bundled": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true
- },
- "iconv-lite": {
- "version": "0.4.21",
- "bundled": true,
- "requires": {
- "safer-buffer": "^2.1.0"
- }
- },
- "ignore-walk": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true
- },
- "minipass": {
- "version": "2.2.4",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.0"
- },
- "dependencies": {
- "yallist": {
- "version": "3.0.2",
- "bundled": true
- }
- }
- },
- "minizlib": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.0.0",
- "bundled": true
- },
- "needle": {
- "version": "2.2.0",
- "bundled": true,
- "requires": {
- "debug": "^2.1.2",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.9.1",
- "bundled": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.0",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.1.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.0.3",
- "bundled": true
- },
- "npm-packlist": {
- "version": "1.1.10",
- "bundled": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true
- },
- "rc": {
- "version": "1.2.6",
- "bundled": true,
- "requires": {
- "deep-extend": "~0.4.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.5",
- "bundled": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.0.3",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.6.2",
- "bundled": true,
- "requires": {
- "glob": "^7.0.5"
- }
- },
- "safe-buffer": {
- "version": "5.1.1",
- "bundled": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true
- },
- "semver": {
- "version": "5.5.0",
- "bundled": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true
- },
- "tar": {
- "version": "4.4.1",
- "bundled": true,
- "requires": {
- "chownr": "^1.0.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.2.4",
- "minizlib": "^1.1.0",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.2"
- },
- "dependencies": {
- "yallist": {
- "version": "3.0.2",
- "bundled": true
- }
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true
- },
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
- "requires": {
- "string-width": "^1.0.2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true
- }
- }
- },
- "gitbook-plugin-edit-link": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/gitbook-plugin-edit-link/-/gitbook-plugin-edit-link-2.0.2.tgz",
- "integrity": "sha1-2PzZJ+ztgeemYqctWdtgnq/X5y8="
- },
- "gitbook-plugin-github": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/gitbook-plugin-github/-/gitbook-plugin-github-3.0.0.tgz",
- "integrity": "sha1-Z0V9+YpX6o75slGLiDQNs3ClMXs="
- },
- "nan": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
- "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA=="
- }
- }
+ "lockfileVersion": 1
}