diff --git a/OHIFViewer/.meteor/packages b/OHIFViewer/.meteor/packages index 297b3e8c9..36a0d13ea 100644 --- a/OHIFViewer/.meteor/packages +++ b/OHIFViewer/.meteor/packages @@ -31,7 +31,6 @@ ohif:cornerstone ohif:viewerbase ohif:study-list ohif:hanging-protocols -ohif:user-oidc ohif:measurement-table fortawesome:fontawesome diff --git a/OHIFViewer/.meteor/versions b/OHIFViewer/.meteor/versions index 074318113..91d6d56eb 100644 --- a/OHIFViewer/.meteor/versions +++ b/OHIFViewer/.meteor/versions @@ -68,11 +68,9 @@ ohif:cornerstone@0.0.1 ohif:hanging-protocols@0.0.1 ohif:measurement-table@0.0.1 ohif:measurements@0.0.1 -ohif:studies@0.0.1 ohif:study-list@0.0.1 ohif:themes@0.0.1 ohif:themes-common@0.0.1 -ohif:user-oidc@0.0.1 ohif:viewerbase@0.0.1 ordered-dict@1.1.0 promise@0.11.2 diff --git a/OHIFViewer/client/components/App.js b/OHIFViewer/client/components/App.js index e2cc1ddb8..5f05a2bcc 100644 --- a/OHIFViewer/client/components/App.js +++ b/OHIFViewer/client/components/App.js @@ -2,7 +2,8 @@ import React, { Component } from 'react'; import { withRouter } from 'react-router'; import { Route, Switch } from 'react-router-dom'; import { OHIF } from 'meteor/ohif:core'; -import Viewer from "./viewer/viewer"; +import ViewerRouting from "./ViewerRouting.js"; +import IHEInvokeImageDisplay from './IHEInvokeImageDisplay.js'; import './App.css'; const reload = () => window.location.reload(); @@ -46,12 +47,24 @@ class App extends Component { store={this.props.store} /> + + + {/* */} diff --git a/OHIFViewer/client/components/IHEInvokeImageDisplay.js b/OHIFViewer/client/components/IHEInvokeImageDisplay.js new file mode 100644 index 000000000..010ba3c11 --- /dev/null +++ b/OHIFViewer/client/components/IHEInvokeImageDisplay.js @@ -0,0 +1,32 @@ +import React, { Component } from "react"; +import PropTypes from "prop-types"; +import Viewer from "./viewer/viewer.js"; + +function IHEInvokeImageDisplay({ match }) { + const requestType = match.params.query.requestType; + + let studyInstanceUids; + let displayStudyList = false; + if (requestType === "STUDY") { + studyInstanceUids = match.params.query.studyUID.split(';'); + } else if (requestType === "STUDYBASE64") { + const uids = this.params.query.studyUID; + const decodedData = window.atob(uids); + studyInstanceUids = decodedData.split(';'); + } else if (requestType === "PATIENT") { + const patientUids = this.params.query.patientID.split(';'); + displayStudyList = true + } else { + displayStudyList = true + } + + if (displayStudyList) { + return (); + } + + return ( + + ); +} + +export default IHEInvokeImageDisplay; diff --git a/OHIFViewer/client/components/ViewerFromStudyData.js b/OHIFViewer/client/components/ViewerFromStudyData.js new file mode 100644 index 000000000..191a4ac4b --- /dev/null +++ b/OHIFViewer/client/components/ViewerFromStudyData.js @@ -0,0 +1,57 @@ +import React, {Component} from "react"; +import PropTypes from "prop-types"; +import Viewer from "./viewer/viewer.js"; +import { OHIF } from 'meteor/ohif:core'; + +class ViewerFromStudyData extends Component { + constructor(props) { + super(props); + + this.state = { + studies: null, + error: null + }; + } + + componentDidMount() { + // TODO: Avoid using timepoints here + //const params = { studyInstanceUids, seriesInstanceUids, timepointId, timepointsFilter={} }; + const params = { + studyInstanceUids: this.props.studyInstanceUids, + seriesInstanceUids: this.props.seriesInstanceUids, + } + const promise = OHIF.viewerbase.prepareViewerData(params); + + // Render the viewer when the data is ready + promise.then(({ studies, viewerData }) => { + OHIF.viewer.data = viewerData; + this.setState({ + studies, + }); + }).catch(error => { + this.setState({ + error, + }); + }); + + } + + render() { + if (this.state.error) { + return (
Error: {JSON.stringify(this.state.error)}
); + } else if (!this.state.studies) { + return (
Loading...
); + } + + return ( + + ); + } +} + +ViewerFromStudyData.propTypes = { + studyInstanceUids: PropTypes.array, + seriesInstanceUids: PropTypes.array +}; + +export default ViewerFromStudyData; diff --git a/OHIFViewer/client/components/ViewerRouting.js b/OHIFViewer/client/components/ViewerRouting.js new file mode 100644 index 000000000..76e59b3d4 --- /dev/null +++ b/OHIFViewer/client/components/ViewerRouting.js @@ -0,0 +1,23 @@ +import React, {Component} from "react"; +import PropTypes from "prop-types"; +import ViewerFromStudyData from "./ViewerFromStudyData.js"; + +function ViewerRouting({ match }) { + const { studyInstanceUids, seriesInstanceUids } = match.params; + + let studyUIDs; + let seriesUIDs; + + if (studyInstanceUids && !seriesInstanceUids) { + studyUIDs = studyInstanceUids.split(';'); + } else if (studyInstanceUids && seriesInstanceUids) { + studyUIDs = [match.params.studyInstanceUid]; + seriesUIDs = match.params.seriesInstanceUids.split(';'); + } + + return ( + + ); +} + +export default ViewerRouting; diff --git a/OHIFViewer/client/components/flexboxLayout/flexboxLayout.js b/OHIFViewer/client/components/flexboxLayout/flexboxLayout.js index 72303c14d..a481873ed 100644 --- a/OHIFViewer/client/components/flexboxLayout/flexboxLayout.js +++ b/OHIFViewer/client/components/flexboxLayout/flexboxLayout.js @@ -1,7 +1,6 @@ -import { Component } from 'react'; -import React from 'react'; +import React, { Component } from 'react'; import PropTypes from 'prop-types'; - +import { OHIF } from 'meteor/ohif:core'; import { Viewerbase } from 'meteor/ohif:viewerbase'; import { StudyBrowser } from 'react-viewerbase'; diff --git a/OHIFViewer/client/components/viewer/viewer.js b/OHIFViewer/client/components/viewer/viewer.js index cfb4e66e6..b57b8bdfe 100644 --- a/OHIFViewer/client/components/viewer/viewer.js +++ b/OHIFViewer/client/components/viewer/viewer.js @@ -91,7 +91,7 @@ class Viewer extends Component { OHIF.viewer.StudyMetadataList.removeAll(); OHIF.viewer.data.studyInstanceUids = []; - + const studies = this.props.studies; studies.forEach(study => { const studyMetadata = new OHIF.metadata.StudyMetadata(study, study.studyInstanceUid); diff --git a/Packages/ohif-core/client/classes.js b/Packages/ohif-core/client/classes.js new file mode 100644 index 000000000..df100b2df --- /dev/null +++ b/Packages/ohif-core/client/classes.js @@ -0,0 +1,6 @@ +import { OHIF } from 'meteor/ohif:core'; +import classes from './classes/'; + +OHIF.classes = classes; + +export default classes; diff --git a/Packages/ohif-viewerbase/client/lib/classes/ImageSet.js b/Packages/ohif-core/client/classes/ImageSet.js similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/ImageSet.js rename to Packages/ohif-core/client/classes/ImageSet.js diff --git a/Packages/ohif-viewerbase/client/lib/classes/OHIFError.js b/Packages/ohif-core/client/classes/OHIFError.js similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/OHIFError.js rename to Packages/ohif-core/client/classes/OHIFError.js diff --git a/Packages/ohif-studies/imports/client/lib/classes/OHIFStudyMetadataSource.js b/Packages/ohif-core/client/classes/OHIFStudyMetadataSource.js similarity index 98% rename from Packages/ohif-studies/imports/client/lib/classes/OHIFStudyMetadataSource.js rename to Packages/ohif-core/client/classes/OHIFStudyMetadataSource.js index 6decedc16..0767e5af5 100644 --- a/Packages/ohif-studies/imports/client/lib/classes/OHIFStudyMetadataSource.js +++ b/Packages/ohif-core/client/classes/OHIFStudyMetadataSource.js @@ -1,5 +1,4 @@ import { OHIF } from 'meteor/ohif:core'; -import 'meteor/ohif:viewerbase'; // Important metadata classes const { OHIFError, metadata } = OHIF.viewerbase; diff --git a/Packages/ohif-studies/imports/client/lib/classes/OHIFStudySummary.js b/Packages/ohif-core/client/classes/OHIFStudySummary.js similarity index 100% rename from Packages/ohif-studies/imports/client/lib/classes/OHIFStudySummary.js rename to Packages/ohif-core/client/classes/OHIFStudySummary.js diff --git a/Packages/ohif-viewerbase/client/lib/classes/README.md b/Packages/ohif-core/client/classes/README.md similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/README.md rename to Packages/ohif-core/client/classes/README.md diff --git a/Packages/ohif-viewerbase/client/lib/classes/ResizeViewportManager.js b/Packages/ohif-core/client/classes/ResizeViewportManager.js similarity index 97% rename from Packages/ohif-viewerbase/client/lib/classes/ResizeViewportManager.js rename to Packages/ohif-core/client/classes/ResizeViewportManager.js index 4d9b9aac1..a0e93c415 100644 --- a/Packages/ohif-viewerbase/client/lib/classes/ResizeViewportManager.js +++ b/Packages/ohif-core/client/classes/ResizeViewportManager.js @@ -1,7 +1,7 @@ import { Session } from 'meteor/session'; import $ from 'jquery'; import { OHIF } from 'meteor/ohif:core'; -import { getInstanceClassDefaultViewport } from '../instanceClassSpecificViewport'; +//import { getInstanceClassDefaultViewport } from '../instanceClassSpecificViewport'; // Manage resizing viewports triggered by window resize export class ResizeViewportManager { @@ -96,12 +96,12 @@ export class ResizeViewportManager { cornerstone.resize(element, fitToWindow); - if (enabledElement.fitToWindow === false) { + /*if (enabledElement.fitToWindow === false) { const imageId = enabledElement.image.imageId; const instance = cornerstone.metaData.get('instance', imageId); const instanceClassViewport = getInstanceClassDefaultViewport(instance, enabledElement, imageId); cornerstone.setViewport(element, instanceClassViewport); - } + }*/ } // Resize each viewport element diff --git a/Packages/ohif-viewerbase/client/lib/classes/StackImagePositionOffsetSynchronizer.js b/Packages/ohif-core/client/classes/StackImagePositionOffsetSynchronizer.js similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/StackImagePositionOffsetSynchronizer.js rename to Packages/ohif-core/client/classes/StackImagePositionOffsetSynchronizer.js diff --git a/Packages/ohif-viewerbase/client/lib/classes/StudyLoadingListener.js b/Packages/ohif-core/client/classes/StudyLoadingListener.js similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/StudyLoadingListener.js rename to Packages/ohif-core/client/classes/StudyLoadingListener.js diff --git a/Packages/ohif-viewerbase/client/lib/classes/StudyMetadataSource.js b/Packages/ohif-core/client/classes/StudyMetadataSource.js similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/StudyMetadataSource.js rename to Packages/ohif-core/client/classes/StudyMetadataSource.js diff --git a/Packages/ohif-viewerbase/client/lib/classes/StudyPrefetcher.js b/Packages/ohif-core/client/classes/StudyPrefetcher.js similarity index 98% rename from Packages/ohif-viewerbase/client/lib/classes/StudyPrefetcher.js rename to Packages/ohif-core/client/classes/StudyPrefetcher.js index f89d79617..e0095743a 100644 --- a/Packages/ohif-viewerbase/client/lib/classes/StudyPrefetcher.js +++ b/Packages/ohif-core/client/classes/StudyPrefetcher.js @@ -4,8 +4,7 @@ import $ from 'jquery'; import _ from 'underscore'; import { OHIF } from 'meteor/ohif:core'; import { OHIFError } from './OHIFError'; -import { StackManager } from '../StackManager.js'; -import { getImageId } from '../getImageId.js'; +//import { getImageId } from '../getImageId.js'; export class StudyPrefetcher { @@ -89,6 +88,8 @@ export class StudyPrefetcher { const activeViewportIndex = window.store.getState().viewports.activeViewport; const displaySetInstanceUid = OHIF.viewer.data.loadedSeriesData[activeViewportIndex].displaySetInstanceUid; + const { StackManager } = OHIF.viewerbase; + const stack = StackManager.findStack(displaySetInstanceUid); if (!stack) { @@ -295,7 +296,7 @@ export class StudyPrefetcher { getImageIdsFromDisplaySet(displaySet) { const imageIds = []; - displaySet.images.forEach(image => { + /*displaySet.images.forEach(image => { const numFrames = image.numFrames; if (numFrames > 1) { for (let i = 0; i < numFrames; i++) { @@ -306,9 +307,9 @@ export class StudyPrefetcher { let imageId = getImageId(image); imageIds.push(imageId); } - }); + });*/ - return imageIds; + return [];//imageIds; } filterCachedImageIds(imageIds) { diff --git a/Packages/ohif-viewerbase/client/lib/classes/TypeSafeCollection.js b/Packages/ohif-core/client/classes/TypeSafeCollection.js similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/TypeSafeCollection.js rename to Packages/ohif-core/client/classes/TypeSafeCollection.js diff --git a/Packages/ohif-core/client/classes/index.js b/Packages/ohif-core/client/classes/index.js index 0e64b976a..511a80265 100644 --- a/Packages/ohif-core/client/classes/index.js +++ b/Packages/ohif-core/client/classes/index.js @@ -2,10 +2,68 @@ import MetadataProvider from './MetadataProvider.js'; import CommandsManager from './CommandsManager.js'; import HotkeysContext from './HotkeysContext.js'; import HotkeysManager from './HotkeysManager.js'; +import { ImageSet } from './ImageSet'; +import { StudyPrefetcher } from './StudyPrefetcher'; +import { ResizeViewportManager } from './ResizeViewportManager'; +import { StudyLoadingListener } from './StudyLoadingListener'; +import { StackLoadingListener } from './StudyLoadingListener'; +import { DICOMFileLoadingListener } from './StudyLoadingListener'; +import { StudyMetadata } from './metadata/StudyMetadata'; +import { SeriesMetadata } from './metadata/SeriesMetadata'; +import { InstanceMetadata } from './metadata/InstanceMetadata'; +//import { StudySummary } from './metadata/StudySummary'; +import { plugins } from './plugins/'; +import { TypeSafeCollection } from './TypeSafeCollection'; +import { OHIFError } from './OHIFError.js'; +//import { StackImagePositionOffsetSynchronizer } from './StackImagePositionOffsetSynchronizer'; +import { StudyMetadataSource } from './StudyMetadataSource'; export { MetadataProvider, CommandsManager, HotkeysContext, - HotkeysManager + HotkeysManager, + ImageSet, + StudyPrefetcher, + ResizeViewportManager, + StudyLoadingListener, + StackLoadingListener, + DICOMFileLoadingListener, + StudyMetadata, + SeriesMetadata, + InstanceMetadata, + //StudySummary, + TypeSafeCollection, + OHIFError, + //StackImagePositionOffsetSynchronizer, + StudyMetadataSource }; + +const classes = { + MetadataProvider, + CommandsManager, + HotkeysContext, + HotkeysManager, + ImageSet, + StudyPrefetcher, + ResizeViewportManager, + StudyLoadingListener, + StackLoadingListener, + DICOMFileLoadingListener, + StudyMetadata, + SeriesMetadata, + InstanceMetadata, + //StudySummary, + TypeSafeCollection, + OHIFError, + //StackImagePositionOffsetSynchronizer, + StudyMetadataSource +}; + +export default classes; + +//Viewerbase.metadata = { StudyMetadata, SeriesMetadata, InstanceMetadata, StudySummary }; +//Viewerbase.plugins = plugins; + +// TypeSafeCollection +//Viewerbase.TypeSafeCollection = TypeSafeCollection; diff --git a/Packages/ohif-viewerbase/client/lib/classes/metadata/InstanceMetadata.js b/Packages/ohif-core/client/classes/metadata/InstanceMetadata.js similarity index 98% rename from Packages/ohif-viewerbase/client/lib/classes/metadata/InstanceMetadata.js rename to Packages/ohif-core/client/classes/metadata/InstanceMetadata.js index c1e424a85..781d6e9e4 100644 --- a/Packages/ohif-viewerbase/client/lib/classes/metadata/InstanceMetadata.js +++ b/Packages/ohif-core/client/classes/metadata/InstanceMetadata.js @@ -1,5 +1,5 @@ import { Metadata } from './Metadata'; -import { OHIFError } from '../OHIFError'; +import { OHIFError } from '../OHIFError.js'; /** * ATTENTION! This class should never depend on StudyMetadata or SeriesMetadata classes as this could @@ -93,7 +93,7 @@ export class InstanceMetadata extends Metadata { let value = this.getTagValue(tagOrProperty, defaultValue); if (typeof value !== STRING && typeof value !== UNDEFINED) { - value = value.toString(); + value = value.toString(); } return InstanceMetadata.getIndexedValue(value, index, defaultValue); @@ -108,7 +108,7 @@ export class InstanceMetadata extends Metadata { value.forEach( (val, idx) => { value[idx] = parseFloat(val); }); - + return value; } @@ -195,7 +195,7 @@ export class InstanceMetadata extends Metadata { * Get an value based that can be index based. This function is called by all getters. See above functions. * - If value is a String and has indexes: * - If undefined index: returns an array of the split values. - * - If defined index: + * - If defined index: * - If invalid: returns defaultValue * - If valid: returns the indexed value * - If value is not a String, returns default value. diff --git a/Packages/ohif-viewerbase/client/lib/classes/metadata/Metadata.js b/Packages/ohif-core/client/classes/metadata/Metadata.js similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/metadata/Metadata.js rename to Packages/ohif-core/client/classes/metadata/Metadata.js diff --git a/Packages/ohif-core/client/classes/metadata/OHIFInstanceMetadata.js b/Packages/ohif-core/client/classes/metadata/OHIFInstanceMetadata.js index cc73cca70..c6306b333 100644 --- a/Packages/ohif-core/client/classes/metadata/OHIFInstanceMetadata.js +++ b/Packages/ohif-core/client/classes/metadata/OHIFInstanceMetadata.js @@ -1,7 +1,5 @@ -import { Viewerbase } from 'meteor/ohif:viewerbase'; - -const InstanceMetadata = Viewerbase.metadata.InstanceMetadata; -const DICOMTagDescriptions = Viewerbase.DICOMTagDescriptions; +import { InstanceMetadata } from './InstanceMetadata'; +import { DICOMTagDescriptions } from '../../lib/DICOMTagDescriptions.js'; export class OHIFInstanceMetadata extends InstanceMetadata { diff --git a/Packages/ohif-core/client/classes/metadata/OHIFSeriesMetadata.js b/Packages/ohif-core/client/classes/metadata/OHIFSeriesMetadata.js index 8028815fa..a8e05b917 100644 --- a/Packages/ohif-core/client/classes/metadata/OHIFSeriesMetadata.js +++ b/Packages/ohif-core/client/classes/metadata/OHIFSeriesMetadata.js @@ -1,7 +1,7 @@ -import { Viewerbase } from 'meteor/ohif:viewerbase'; +import { SeriesMetadata } from './SeriesMetadata'; import { OHIFInstanceMetadata } from './OHIFInstanceMetadata'; -export class OHIFSeriesMetadata extends Viewerbase.metadata.SeriesMetadata { +export class OHIFSeriesMetadata extends SeriesMetadata { /** * @param {Object} Series object. diff --git a/Packages/ohif-core/client/classes/metadata/OHIFStudyMetadata.js b/Packages/ohif-core/client/classes/metadata/OHIFStudyMetadata.js index 4c0894633..9f523793e 100644 --- a/Packages/ohif-core/client/classes/metadata/OHIFStudyMetadata.js +++ b/Packages/ohif-core/client/classes/metadata/OHIFStudyMetadata.js @@ -1,7 +1,7 @@ -import { Viewerbase } from 'meteor/ohif:viewerbase'; +import { StudyMetadata } from './StudyMetadata'; import { OHIFSeriesMetadata } from './OHIFSeriesMetadata'; -export class OHIFStudyMetadata extends Viewerbase.metadata.StudyMetadata { +export class OHIFStudyMetadata extends StudyMetadata { /** * @param {Object} Study object. diff --git a/Packages/ohif-viewerbase/client/lib/classes/metadata/README.md b/Packages/ohif-core/client/classes/metadata/README.md similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/metadata/README.md rename to Packages/ohif-core/client/classes/metadata/README.md diff --git a/Packages/ohif-viewerbase/client/lib/classes/metadata/SeriesMetadata.js b/Packages/ohif-core/client/classes/metadata/SeriesMetadata.js similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/metadata/SeriesMetadata.js rename to Packages/ohif-core/client/classes/metadata/SeriesMetadata.js diff --git a/Packages/ohif-viewerbase/client/lib/classes/metadata/StudyMetadata.js b/Packages/ohif-core/client/classes/metadata/StudyMetadata.js similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/metadata/StudyMetadata.js rename to Packages/ohif-core/client/classes/metadata/StudyMetadata.js diff --git a/Packages/ohif-viewerbase/client/lib/classes/metadata/StudySummary.js b/Packages/ohif-core/client/classes/metadata/StudySummary.js similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/metadata/StudySummary.js rename to Packages/ohif-core/client/classes/metadata/StudySummary.js diff --git a/Packages/ohif-viewerbase/client/lib/classes/metadata/WadoRsMetaDataBuilder.js b/Packages/ohif-core/client/classes/metadata/WadoRsMetaDataBuilder.js similarity index 97% rename from Packages/ohif-viewerbase/client/lib/classes/metadata/WadoRsMetaDataBuilder.js rename to Packages/ohif-core/client/classes/metadata/WadoRsMetaDataBuilder.js index 98d158b2e..87a23d118 100644 --- a/Packages/ohif-viewerbase/client/lib/classes/metadata/WadoRsMetaDataBuilder.js +++ b/Packages/ohif-core/client/classes/metadata/WadoRsMetaDataBuilder.js @@ -1,3 +1,5 @@ +import _ from 'underscore'; + export class WadoRsMetaDataBuilder { constructor() { this.tags = {}; diff --git a/Packages/ohif-core/client/classes/metadata/index.js b/Packages/ohif-core/client/classes/metadata/index.js index b366f6dc0..e4cfe38dd 100644 --- a/Packages/ohif-core/client/classes/metadata/index.js +++ b/Packages/ohif-core/client/classes/metadata/index.js @@ -1,8 +1,18 @@ +import { StudyMetadata } from './StudyMetadata'; +import { SeriesMetadata } from './SeriesMetadata'; +import { InstanceMetadata } from './InstanceMetadata'; import { OHIFStudyMetadata } from './OHIFStudyMetadata'; import { OHIFSeriesMetadata } from './OHIFSeriesMetadata'; import { OHIFInstanceMetadata } from './OHIFInstanceMetadata'; +import { Metadata } from './Metadata'; +import { WadoRsMetaDataBuilder } from './WadoRsMetaDataBuilder'; const metadata = { + Metadata, + WadoRsMetaDataBuilder, + StudyMetadata, + SeriesMetadata, + InstanceMetadata, OHIFStudyMetadata, OHIFSeriesMetadata, OHIFInstanceMetadata diff --git a/Packages/ohif-viewerbase/client/lib/classes/plugins/OHIFPlugin.js b/Packages/ohif-core/client/classes/plugins/OHIFPlugin.js similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/plugins/OHIFPlugin.js rename to Packages/ohif-core/client/classes/plugins/OHIFPlugin.js diff --git a/Packages/ohif-viewerbase/client/lib/classes/plugins/ViewportPlugin.js b/Packages/ohif-core/client/classes/plugins/ViewportPlugin.js similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/plugins/ViewportPlugin.js rename to Packages/ohif-core/client/classes/plugins/ViewportPlugin.js diff --git a/Packages/ohif-viewerbase/client/lib/classes/plugins/index.js b/Packages/ohif-core/client/classes/plugins/index.js similarity index 100% rename from Packages/ohif-viewerbase/client/lib/classes/plugins/index.js rename to Packages/ohif-core/client/classes/plugins/index.js diff --git a/Packages/ohif-core/client/index.js b/Packages/ohif-core/client/index.js index de1950466..de0ac5ddb 100644 --- a/Packages/ohif-core/client/index.js +++ b/Packages/ohif-core/client/index.js @@ -1,3 +1,4 @@ +import './studies.js'; import './lib'; import './helpers'; import './commands'; @@ -7,6 +8,8 @@ import './ui'; import './header.js'; import './schema.js'; import './utils/'; +import './metadata.js'; import './startup.js'; import './classes/'; import './cornerstone.js'; +import './classes.js'; diff --git a/Packages/ohif-viewerbase/client/lib/DICOMTagDescriptions.js b/Packages/ohif-core/client/lib/DICOMTagDescriptions.js similarity index 99% rename from Packages/ohif-viewerbase/client/lib/DICOMTagDescriptions.js rename to Packages/ohif-core/client/lib/DICOMTagDescriptions.js index 507b109b6..d76965e25 100644 --- a/Packages/ohif-viewerbase/client/lib/DICOMTagDescriptions.js +++ b/Packages/ohif-core/client/lib/DICOMTagDescriptions.js @@ -1,4 +1,4 @@ - +// TODO: Deprecate since we have the same thing in dcmjs? const NUMBER = 'number'; const STRING = 'string'; const REGEX_TAG = /^x[0-9a-fx]{8}$/; diff --git a/Packages/ohif-studies/imports/client/lib/getStudyBoxData.js b/Packages/ohif-core/client/lib/getStudyBoxData.js similarity index 100% rename from Packages/ohif-studies/imports/client/lib/getStudyBoxData.js rename to Packages/ohif-core/client/lib/getStudyBoxData.js diff --git a/Packages/ohif-core/client/lib/index.js b/Packages/ohif-core/client/lib/index.js index 7bec94e0b..b89563d02 100644 --- a/Packages/ohif-core/client/lib/index.js +++ b/Packages/ohif-core/client/lib/index.js @@ -8,3 +8,11 @@ import './user.js'; import './object.js'; import './DICOMWeb/'; import './getCurrentServer.js'; +import './DICOMTagDescriptions.js'; +import './getStudyBoxData'; +import './loadStudy'; +import './retrieveStudiesMetadata'; +import './retrieveStudyMetadata'; +import './searchStudies'; +import './parseFloatArray'; + diff --git a/Packages/ohif-studies/imports/client/lib/loadStudy.js b/Packages/ohif-core/client/lib/loadStudy.js similarity index 100% rename from Packages/ohif-studies/imports/client/lib/loadStudy.js rename to Packages/ohif-core/client/lib/loadStudy.js diff --git a/Packages/ohif-studies/imports/client/lib/parseFloatArray.js b/Packages/ohif-core/client/lib/parseFloatArray.js similarity index 100% rename from Packages/ohif-studies/imports/client/lib/parseFloatArray.js rename to Packages/ohif-core/client/lib/parseFloatArray.js diff --git a/Packages/ohif-studies/imports/client/lib/retrieveStudiesMetadata.js b/Packages/ohif-core/client/lib/retrieveStudiesMetadata.js similarity index 100% rename from Packages/ohif-studies/imports/client/lib/retrieveStudiesMetadata.js rename to Packages/ohif-core/client/lib/retrieveStudiesMetadata.js diff --git a/Packages/ohif-studies/imports/client/lib/retrieveStudyMetadata.js b/Packages/ohif-core/client/lib/retrieveStudyMetadata.js similarity index 98% rename from Packages/ohif-studies/imports/client/lib/retrieveStudyMetadata.js rename to Packages/ohif-core/client/lib/retrieveStudyMetadata.js index fe7869c68..4d691abd5 100644 --- a/Packages/ohif-studies/imports/client/lib/retrieveStudyMetadata.js +++ b/Packages/ohif-core/client/lib/retrieveStudyMetadata.js @@ -1,6 +1,5 @@ import { Meteor } from 'meteor/meteor'; import { OHIF } from 'meteor/ohif:core'; -import 'meteor/ohif:viewerbase'; // Define the StudyMetaDataPromises object. This is used as a cache to store study meta data // promises and prevent unnecessary subsequent calls to the server diff --git a/Packages/ohif-studies/imports/client/lib/searchStudies.js b/Packages/ohif-core/client/lib/searchStudies.js similarity index 100% rename from Packages/ohif-studies/imports/client/lib/searchStudies.js rename to Packages/ohif-core/client/lib/searchStudies.js diff --git a/Packages/ohif-core/client/metadata.js b/Packages/ohif-core/client/metadata.js index 6ecd79323..4e402cdaf 100644 --- a/Packages/ohif-core/client/metadata.js +++ b/Packages/ohif-core/client/metadata.js @@ -1,5 +1,5 @@ import { OHIF } from 'meteor/ohif:core'; -import { metadata } from '/client/classes/metadata/'; +import metadata from './classes/metadata/'; /** * Append Metadata namespace to OHIF namespace... diff --git a/Packages/ohif-core/client/services/index.js b/Packages/ohif-core/client/services/index.js new file mode 100644 index 000000000..7b42f9006 --- /dev/null +++ b/Packages/ohif-core/client/services/index.js @@ -0,0 +1,15 @@ +// DICOMWeb instance, study, and metadata retrieval +import Instances from './qido/instances.js'; +import Studies from './qido/studies.js'; +import RetrieveMetadata from './wado/retrieveMetadata.js'; + +const WADO = { + RetrieveMetadata +}; + +const QIDO = { + Studies, + Instances +}; + +export { QIDO, WADO }; diff --git a/Packages/ohif-studies/imports/client/services/qido/instances.js b/Packages/ohif-core/client/services/qido/instances.js similarity index 97% rename from Packages/ohif-studies/imports/client/services/qido/instances.js rename to Packages/ohif-core/client/services/qido/instances.js index aadf5db91..86d977d32 100644 --- a/Packages/ohif-studies/imports/client/services/qido/instances.js +++ b/Packages/ohif-core/client/services/qido/instances.js @@ -13,6 +13,8 @@ const { DICOMWeb } = OHIF; * @returns {Array} Series List */ function resultDataToStudyMetadata(server, studyInstanceUid, resultData) { + const { DICOMWeb } = OHIF; + var seriesMap = {}; var seriesList = []; @@ -67,7 +69,7 @@ function resultDataToStudyMetadata(server, studyInstanceUid, resultData) { * @throws ECONNREFUSED * @returns {{wadoUriRoot: String, studyInstanceUid: String, seriesList: Array}} */ -OHIF.studies.services.QIDO.Instances = function(server, studyInstanceUid) { +export default function Instances(server, studyInstanceUid) { // TODO: Are we using this function anywhere?? Can we remove it? const config = { diff --git a/Packages/ohif-studies/imports/client/services/qido/studies.js b/Packages/ohif-core/client/services/qido/studies.js similarity index 98% rename from Packages/ohif-studies/imports/client/services/qido/studies.js rename to Packages/ohif-core/client/services/qido/studies.js index 830bd9302..09bb61fd9 100644 --- a/Packages/ohif-studies/imports/client/services/qido/studies.js +++ b/Packages/ohif-core/client/services/qido/studies.js @@ -88,6 +88,8 @@ function getQIDOQueryParams(filter, serverSupportsQIDOIncludeField) { * @returns {Array} An array of Study MetaData objects */ function resultDataToStudies(resultData) { + const { DICOMWeb } = OHIF; + const studies = []; if (!resultData || !resultData.length) return; @@ -116,7 +118,7 @@ function resultDataToStudies(resultData) { return studies; } -OHIF.studies.services.QIDO.Studies = (server, filter) => { +export default function Studies(server, filter) { const config = { url: server.qidoRoot, headers: OHIF.DICOMWeb.getAuthorizationHeader() diff --git a/Packages/ohif-studies/imports/client/services/wado/retrieveMetadata.js b/Packages/ohif-core/client/services/wado/retrieveMetadata.js similarity index 97% rename from Packages/ohif-studies/imports/client/services/wado/retrieveMetadata.js rename to Packages/ohif-core/client/services/wado/retrieveMetadata.js index a4c9f8904..5c777c555 100644 --- a/Packages/ohif-studies/imports/client/services/wado/retrieveMetadata.js +++ b/Packages/ohif-core/client/services/wado/retrieveMetadata.js @@ -3,7 +3,12 @@ import DICOMwebClient from 'dicomweb-client'; import { parseFloatArray } from '../../lib/parseFloatArray'; -const { DICOMWeb } = OHIF; +WADOProxy = { + convertURL: (url, server) => { + // TODO: Remove all WADOProxy stuff from this file + return url; + } +} /** * Simple cache schema for retrieved color palettes. @@ -146,6 +151,8 @@ function getPaletteColor(server, instance, tag, lutDescriptor) { * @returns {String} The ReferenceSOPInstanceUID */ async function getPaletteColors(server, instance, lutDescriptor) { + const { DICOMWeb } = OHIF; + let paletteUID = DICOMWeb.getString(instance['00281199']); return new Promise((resolve, reject) => { @@ -195,6 +202,8 @@ function getFrameIncrementPointer(element) { } function getRadiopharmaceuticalInfo(instance) { + const { DICOMWeb } = OHIF; + const modality = DICOMWeb.getString(instance['00080060']); if (modality !== 'PT') { @@ -225,6 +234,8 @@ function getRadiopharmaceuticalInfo(instance) { * @returns {{seriesList: Array, patientName: *, patientId: *, accessionNumber: *, studyDate: *, modalities: *, studyDescription: *, imageCount: *, studyInstanceUid: *}} */ async function resultDataToStudyMetadata(server, studyInstanceUid, resultData) { + const { DICOMWeb } = OHIF; + if (!resultData.length) { return; } @@ -362,7 +373,7 @@ async function resultDataToStudyMetadata(server, studyInstanceUid, resultData) { * @param studyInstanceUid * @returns {Promise} */ -OHIF.studies.services.WADO.RetrieveMetadata = async function(server, studyInstanceUid) { +async function RetrieveMetadata (server, studyInstanceUid) { const config = { url: server.wadoRoot, headers: OHIF.DICOMWeb.getAuthorizationHeader() @@ -376,3 +387,5 @@ OHIF.studies.services.WADO.RetrieveMetadata = async function(server, studyInstan return resultDataToStudyMetadata(server, studyInstanceUid, result); }); }; + +export default RetrieveMetadata; diff --git a/Packages/ohif-core/client/studies.js b/Packages/ohif-core/client/studies.js new file mode 100644 index 000000000..68c8c4fca --- /dev/null +++ b/Packages/ohif-core/client/studies.js @@ -0,0 +1,9 @@ +import { OHIF } from 'meteor/ohif:core'; +import { QIDO, WADO } from './services/'; + +OHIF.studies = { + services: { + QIDO, + WADO + } +}; diff --git a/Packages/ohif-core/package.js b/Packages/ohif-core/package.js index 0dfe820b6..c2a52b970 100644 --- a/Packages/ohif-core/package.js +++ b/Packages/ohif-core/package.js @@ -3,7 +3,9 @@ Npm.depends({ 'jquery.hotkeys': '0.1.0', loglevel: '1.4.1', jquery: '3.3.1', - underscore: "1.9.1" + underscore: "1.9.1", + 'dicomweb-client': '0.3.2', + 'xhr2': '0.1.4' }); Package.describe({ diff --git a/Packages/ohif-cornerstone/main.js b/Packages/ohif-cornerstone/main.js index 687a59ecb..168423d8a 100644 --- a/Packages/ohif-cornerstone/main.js +++ b/Packages/ohif-cornerstone/main.js @@ -1,9 +1,9 @@ import Hammer from 'hammerjs'; -import cornerstone from 'cornerstone-core/dist/cornerstone.js'; -import cornerstoneMath from 'cornerstone-math/dist/cornerstoneMath.js'; -import cornerstoneTools from 'cornerstone-tools/dist/cornerstoneTools.js'; -import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader/dist/cornerstoneWADOImageLoader.js'; -import dicomParser from 'dicom-parser'; // Importing from dist breaks instance reference of dicomParser.DataSet class +import cornerstone from 'cornerstone-core'; +import cornerstoneMath from 'cornerstone-math'; +import cornerstoneTools from 'cornerstone-tools'; +import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader'; +import dicomParser from 'dicom-parser'; import * as dcmjs from 'dcmjs/build/dcmjs'; cornerstoneTools.external.Hammer = Hammer; diff --git a/Packages/ohif-hanging-protocols/client/matcher/HPMatcher.js b/Packages/ohif-hanging-protocols/client/matcher/HPMatcher.js index 4ce67bde7..ebda27ff8 100644 --- a/Packages/ohif-hanging-protocols/client/matcher/HPMatcher.js +++ b/Packages/ohif-hanging-protocols/client/matcher/HPMatcher.js @@ -1,5 +1,4 @@ -// OHIF Modules -import { Viewerbase } from 'meteor/ohif:viewerbase'; +import { OHIF } from 'meteor/ohif:core'; // Local imports import { validate } from '../lib/validate.js'; @@ -8,7 +7,8 @@ import '../customAttributes'; /** * Import Constants */ -const { OHIFError, metadata: { StudySummary, InstanceMetadata } } = Viewerbase; +const { OHIFError } = OHIF.classes; +const { StudySummary, InstanceMetadata } = OHIF.metadata; /** * Match a Metadata instance against rules using Validate.js for validation. @@ -53,7 +53,7 @@ const match = (metadataInstance, rules) => { [attribute]: rule.constraint }; - // Create a single attribute object to be validated, since metadataInstance is an + // Create a single attribute object to be validated, since metadataInstance is an // instance of Metadata (StudyMetadata, SeriesMetadata or InstanceMetadata) const attributeValue = customAttributeExists ? metadataInstance.getCustomAttribute(attribute) : metadataInstance.getTagValue(attribute); const attributeMap = { @@ -112,4 +112,4 @@ const HPMatcher = { match }; -export { HPMatcher }; \ No newline at end of file +export { HPMatcher }; diff --git a/Packages/ohif-hanging-protocols/client/protocolEngine.js b/Packages/ohif-hanging-protocols/client/protocolEngine.js index e1fb6e8e2..5a85be36c 100644 --- a/Packages/ohif-hanging-protocols/client/protocolEngine.js +++ b/Packages/ohif-hanging-protocols/client/protocolEngine.js @@ -15,7 +15,8 @@ import './customViewportSettings'; * Import Constants */ -const { OHIFError, metadata: { StudyMetadata, SeriesMetadata, InstanceMetadata, StudySummary } } = OHIF.viewerbase; +const { OHIFError } = OHIF.classes; +const { StudyMetadata, SeriesMetadata, InstanceMetadata, StudySummary } = OHIF.metadata; // Useful constants const ABSTRACT_PRIOR_VALUE = 'abstractPriorValue'; diff --git a/Packages/ohif-measurements/package.js b/Packages/ohif-measurements/package.js index 13a1db1f3..181d60015 100644 --- a/Packages/ohif-measurements/package.js +++ b/Packages/ohif-measurements/package.js @@ -29,7 +29,6 @@ Package.onUse(function(api) { // Our custom packages api.use('ohif:cornerstone'); api.use('ohif:core'); - api.use('ohif:studies'); api.use('ohif:viewerbase'); // Client imports diff --git a/Packages/ohif-measurements/src/lib/index.js b/Packages/ohif-measurements/src/lib/index.js index 4df085252..3d7760e79 100644 --- a/Packages/ohif-measurements/src/lib/index.js +++ b/Packages/ohif-measurements/src/lib/index.js @@ -12,7 +12,7 @@ import './getLocationLabel'; import './getParentToolData'; import './getTimepointName'; import './getToolConfiguration'; -import './hangingProtocolCustomizations'; +//import './hangingProtocolCustomizations'; import './isNewLesionsMeasurement'; import './isSaveDisabled'; import './MeasurementHandlers'; diff --git a/Packages/ohif-studies/client/main.js b/Packages/ohif-studies/client/main.js deleted file mode 100644 index a6fe3859b..000000000 --- a/Packages/ohif-studies/client/main.js +++ /dev/null @@ -1 +0,0 @@ -require('../imports/client'); diff --git a/Packages/ohif-studies/imports/client/index.js b/Packages/ohif-studies/imports/client/index.js deleted file mode 100644 index 5783456aa..000000000 --- a/Packages/ohif-studies/imports/client/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import './lib'; -import './services'; diff --git a/Packages/ohif-studies/imports/client/lib/classes/index.js b/Packages/ohif-studies/imports/client/lib/classes/index.js deleted file mode 100644 index f5e176e05..000000000 --- a/Packages/ohif-studies/imports/client/lib/classes/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import { OHIF } from 'meteor/ohif:core'; -import { OHIFStudyMetadataSource } from './OHIFStudyMetadataSource'; -import { OHIFStudySummary } from './OHIFStudySummary'; - -OHIF.studies = {}; -OHIF.studies.classes = { - OHIFStudyMetadataSource, - OHIFStudySummary -}; diff --git a/Packages/ohif-studies/imports/client/lib/index.js b/Packages/ohif-studies/imports/client/lib/index.js deleted file mode 100644 index c93b82234..000000000 --- a/Packages/ohif-studies/imports/client/lib/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import './classes'; -import './getStudyBoxData'; -import './loadStudy'; -import './retrieveStudiesMetadata'; -import './retrieveStudyMetadata'; -import './searchStudies'; -import './parseFloatArray'; diff --git a/Packages/ohif-studies/imports/client/services/index.js b/Packages/ohif-studies/imports/client/services/index.js deleted file mode 100644 index 8808a8ee6..000000000 --- a/Packages/ohif-studies/imports/client/services/index.js +++ /dev/null @@ -1,6 +0,0 @@ -import './namespace'; - -// DICOMWeb instance, study, and metadata retrieval -import './qido/instances.js'; -import './qido/studies.js'; -import './wado/retrieveMetadata.js'; diff --git a/Packages/ohif-studies/imports/client/services/namespace.js b/Packages/ohif-studies/imports/client/services/namespace.js deleted file mode 100644 index 1c6f6b75d..000000000 --- a/Packages/ohif-studies/imports/client/services/namespace.js +++ /dev/null @@ -1,6 +0,0 @@ -import { OHIF } from 'meteor/ohif:core'; - -OHIF.studies.services = { - QIDO: {}, - WADO: {} -}; diff --git a/Packages/ohif-studies/package.js b/Packages/ohif-studies/package.js deleted file mode 100644 index 3dd5ef287..000000000 --- a/Packages/ohif-studies/package.js +++ /dev/null @@ -1,31 +0,0 @@ -Package.describe({ - name: 'ohif:studies', - summary: 'OHIF Studies Library to deal with studies UI, retrieval and manipulation', - version: '0.0.1' -}); - -Npm.depends({ - dimse: '0.0.2', - 'dicomweb-client': '0.3.2', - 'xhr2': '0.1.4' -}); - -Package.onUse(function(api) { - api.versionsFrom('1.7'); - - api.use([ - 'ecmascript', - 'templating', - 'stylus', - 'http' - ]); - - // Our custom packages - api.use([ - 'ohif:core', - 'ohif:viewerbase', - ]); - - // Client imports - api.addFiles('client/main.js', 'client'); -}); diff --git a/Packages/ohif-study-list/client/components/StudyList.css b/Packages/ohif-study-list/client/components/StudyList.css new file mode 100644 index 000000000..ac62c3004 --- /dev/null +++ b/Packages/ohif-study-list/client/components/StudyList.css @@ -0,0 +1,9 @@ +.StudyList { + height: 100%; + width: 100%; +} + +.tempStudyList { + height: 100%; + width: 100%; +} diff --git a/Packages/ohif-study-list/client/lib/getStudyPriors.js b/Packages/ohif-study-list/client/lib/getStudyPriors.js index 9842c8b63..3dea6bd07 100644 --- a/Packages/ohif-study-list/client/lib/getStudyPriors.js +++ b/Packages/ohif-study-list/client/lib/getStudyPriors.js @@ -1,7 +1,6 @@ import { OHIF } from 'meteor/ohif:core'; -import 'meteor/ohif:viewerbase'; -const { StudyMetadata, StudySummary } = OHIF.viewerbase.metadata; +const { StudyMetadata, StudySummary } = OHIF.metadata; const PATIENT_ID = 'x00100020'; const STUDY_DATE = 'x00080020'; diff --git a/Packages/ohif-study-list/client/lib/studylist.js b/Packages/ohif-study-list/client/lib/studylist.js index 23f9192b2..4728b1756 100644 --- a/Packages/ohif-study-list/client/lib/studylist.js +++ b/Packages/ohif-study-list/client/lib/studylist.js @@ -1,13 +1,13 @@ import { OHIF } from 'meteor/ohif:core'; // Functions -import { getStudyPriors } from './getStudyPriors'; +/*import { getStudyPriors } from './getStudyPriors'; import { getStudyPriorsMap } from './getStudyPriorsMap'; OHIF.studylist.functions = { getStudyPriors, getStudyPriorsMap -}; +};*/ const dblClickOnStudy = data => { //Router.go('viewerStudies', { studyInstanceUids: data.studyInstanceUid }); diff --git a/Packages/ohif-study-list/package.js b/Packages/ohif-study-list/package.js index 253c40315..2bd73b86f 100644 --- a/Packages/ohif-study-list/package.js +++ b/Packages/ohif-study-list/package.js @@ -26,7 +26,6 @@ Package.onUse(function(api) { // Our custom packages api.use('ohif:core', 'client'); api.use('ohif:viewerbase', 'client'); - api.use('ohif:studies', 'client'); // Client imports api.addFiles('client/index.js', 'client'); diff --git a/Packages/ohif-viewerbase/client/collections.js b/Packages/ohif-viewerbase/client/collections.js index 016c23866..57dfe6e5e 100644 --- a/Packages/ohif-viewerbase/client/collections.js +++ b/Packages/ohif-viewerbase/client/collections.js @@ -1,6 +1,7 @@ import { Meteor } from 'meteor/meteor'; import { OHIF } from '../namespace'; -import { TypeSafeCollection } from './lib/classes/TypeSafeCollection'; + +const { TypeSafeCollection } = OHIF.classes; // Create main Studies collection which will be used across the entire viewer... const Studies = new TypeSafeCollection(); @@ -13,6 +14,3 @@ const StudyMetadataList = new TypeSafeCollection(); // Make it publicly available on "OHIF.viewer" namespace... OHIF.viewer.StudyMetadataList = StudyMetadataList; - -// Subscriptions... -Meteor.subscribe('studyImportStatus'); diff --git a/Packages/ohif-viewerbase/client/components/viewer/ViewerMain/ViewerMain.js b/Packages/ohif-viewerbase/client/components/viewer/ViewerMain/ViewerMain.js index dd9b6fd11..42d5fa0b9 100644 --- a/Packages/ohif-viewerbase/client/components/viewer/ViewerMain/ViewerMain.js +++ b/Packages/ohif-viewerbase/client/components/viewer/ViewerMain/ViewerMain.js @@ -3,10 +3,10 @@ import { Session } from 'meteor/session'; import { OHIF } from 'meteor/ohif:core'; // Local Modules import { unloadHandlers } from '../../../lib/unloadHandlers'; -import { ResizeViewportManager } from '../../../lib/classes/ResizeViewportManager'; import { LayoutManager } from '../../../lib/classes/LayoutManager'; -import { StudyPrefetcher } from '../../../lib/classes/StudyPrefetcher'; -import { StudyLoadingListener } from '../../../lib/classes/StudyLoadingListener'; + +const { StudyLoadingListener, StudyPrefetcher, ResizeViewportManager } = OHIF.classes; + import './ViewerMain.styl'; import { Component } from 'react'; diff --git a/Packages/ohif-viewerbase/client/index.js b/Packages/ohif-viewerbase/client/index.js index 40651e043..6932872a5 100644 --- a/Packages/ohif-viewerbase/client/index.js +++ b/Packages/ohif-viewerbase/client/index.js @@ -95,10 +95,6 @@ Viewerbase.getStudyMetadata = getStudyMetadata; * Exported Namespaces (sub-namespaces) */ -// imageViewerViewportData.* -import { imageViewerViewportData } from './lib/imageViewerViewportData'; -Viewerbase.imageViewerViewportData = imageViewerViewportData; - // panelNavigation.* import { panelNavigation } from './lib/panelNavigation'; Viewerbase.panelNavigation = panelNavigation; @@ -127,10 +123,6 @@ Viewerbase.viewportOverlayUtils = viewportOverlayUtils; import { viewportUtils } from './lib/viewportUtils'; Viewerbase.viewportUtils = viewportUtils; -// thumbnailDragHandlers.* -import { thumbnailDragHandlers } from './lib/thumbnailDragHandlers'; -Viewerbase.thumbnailDragHandlers = thumbnailDragHandlers; - // dialogUtils.* import { dialogUtils } from './lib/dialogUtils'; Viewerbase.dialogUtils = dialogUtils; @@ -187,67 +179,5 @@ Viewerbase.helpers = helpers; import { sopClassDictionary } from './lib/sopClassDictionary'; Viewerbase.sopClassDictionary = sopClassDictionary; -// dicomTagDescriptions -import { DICOMTagDescriptions } from './lib/DICOMTagDescriptions'; -Viewerbase.DICOMTagDescriptions = DICOMTagDescriptions; - -/** - * Exported Classes - */ - -// ImageSet -import { ImageSet } from './lib/classes/ImageSet'; -Viewerbase.ImageSet = ImageSet; - -// LayoutManager -import { LayoutManager } from './lib/classes/LayoutManager'; -Viewerbase.LayoutManager = LayoutManager; - -// StudyPrefetcher -import { StudyPrefetcher } from './lib/classes/StudyPrefetcher'; -Viewerbase.StudyPrefetcher = StudyPrefetcher; - -// ResizeViewportManager -import { ResizeViewportManager } from './lib/classes/ResizeViewportManager'; -Viewerbase.ResizeViewportManager = ResizeViewportManager; - -// StudyLoadingListener -import { StudyLoadingListener } from './lib/classes/StudyLoadingListener'; -Viewerbase.StudyLoadingListener = StudyLoadingListener; - -// StackLoadingListener -import { StackLoadingListener } from './lib/classes/StudyLoadingListener'; -Viewerbase.StackLoadingListener = StackLoadingListener; - -// DICOMFileLoadingListener -import { DICOMFileLoadingListener } from './lib/classes/StudyLoadingListener'; -Viewerbase.DICOMFileLoadingListener = DICOMFileLoadingListener; - -// StudyMetadata, SeriesMetadata, InstanceMetadata -import { StudyMetadata } from './lib/classes/metadata/StudyMetadata'; -import { SeriesMetadata } from './lib/classes/metadata/SeriesMetadata'; -import { InstanceMetadata } from './lib/classes/metadata/InstanceMetadata'; -import { StudySummary } from './lib/classes/metadata/StudySummary'; -Viewerbase.metadata = { StudyMetadata, SeriesMetadata, InstanceMetadata, StudySummary }; - -import { plugins } from './lib/classes/plugins/'; -Viewerbase.plugins = plugins; - -// TypeSafeCollection -import { TypeSafeCollection } from './lib/classes/TypeSafeCollection'; -Viewerbase.TypeSafeCollection = TypeSafeCollection; - -// OHIFError -import { OHIFError } from './lib/classes/OHIFError'; -Viewerbase.OHIFError = OHIFError; - -// StackImagePositionOffsetSynchronizer -import { StackImagePositionOffsetSynchronizer } from './lib/classes/StackImagePositionOffsetSynchronizer'; -Viewerbase.StackImagePositionOffsetSynchronizer = StackImagePositionOffsetSynchronizer; - -// StudyMetadataSource -import { StudyMetadataSource } from './lib/classes/StudyMetadataSource'; -Viewerbase.StudyMetadataSource = StudyMetadataSource; - import redux from './lib/redux/'; Viewerbase.redux = redux; diff --git a/Packages/ohif-viewerbase/client/lib/StackManager.js b/Packages/ohif-viewerbase/client/lib/StackManager.js index a40e7475b..85d77a388 100644 --- a/Packages/ohif-viewerbase/client/lib/StackManager.js +++ b/Packages/ohif-viewerbase/client/lib/StackManager.js @@ -1,11 +1,13 @@ import { OHIF } from 'meteor/ohif:core'; import { getImageId } from './getImageId'; -import { OHIFError } from './classes/OHIFError'; let stackMap = {}; let configuration = {}; const stackUpdatedCallbacks = []; +const { OHIFError } = OHIF.classes; + + /** * Loop through the current series and add metadata to the * Cornerstone meta data provider. This will be used to fill information diff --git a/Packages/ohif-viewerbase/client/lib/classes/LayoutManager.js b/Packages/ohif-viewerbase/client/lib/classes/LayoutManager.js index ddd2ee846..e83eec11f 100644 --- a/Packages/ohif-viewerbase/client/lib/classes/LayoutManager.js +++ b/Packages/ohif-viewerbase/client/lib/classes/LayoutManager.js @@ -674,3 +674,4 @@ export class LayoutManager { return this.layoutProps.row !== 1 && this.layoutProps.columns !== 1; } } + diff --git a/Packages/ohif-viewerbase/client/lib/createStacks.js b/Packages/ohif-viewerbase/client/lib/createStacks.js index 6c7414961..6d1dbf886 100644 --- a/Packages/ohif-viewerbase/client/lib/createStacks.js +++ b/Packages/ohif-viewerbase/client/lib/createStacks.js @@ -1,5 +1,4 @@ import { Meteor } from 'meteor/meteor'; -import { ImageSet } from './classes/ImageSet'; import { isImage } from './isImage'; import { OHIF } from 'meteor/ohif:core'; @@ -11,6 +10,7 @@ const isMultiFrame = instance => { const makeDisplaySet = (series, instances) => { const instance = instances[0]; + const { ImageSet } = OHIF.classes; const imageSet = new ImageSet(instances); const seriesData = series.getData(); diff --git a/Packages/ohif-viewerbase/client/lib/getWADORSImageId.js b/Packages/ohif-viewerbase/client/lib/getWADORSImageId.js index 0f312631a..646a0358d 100644 --- a/Packages/ohif-viewerbase/client/lib/getWADORSImageId.js +++ b/Packages/ohif-viewerbase/client/lib/getWADORSImageId.js @@ -1,6 +1,20 @@ import { OHIF } from 'meteor/ohif:core'; -import { getWADORSImageUrl } from './getWADORSImageUrl'; +function getWADORSImageUrl(instance, frame) { + let wadorsuri = instance.wadorsuri; + + if (!wadorsuri) { + return; + } + + // We need to sum 1 because WADO-RS frame number is 1-based + frame = (frame || 0) + 1; + + // Replaces /frame/1 by /frame/{frame} + wadorsuri = wadorsuri.replace(/(%2Fframes%2F)(\d+)/, `$1${frame}`); + + return wadorsuri; +} /** * Obtain an imageId for Cornerstone based on the WADO-RS scheme diff --git a/Packages/ohif-viewerbase/client/lib/getWADORSImageUrl.js b/Packages/ohif-viewerbase/client/lib/getWADORSImageUrl.js deleted file mode 100644 index 4f7b82dfb..000000000 --- a/Packages/ohif-viewerbase/client/lib/getWADORSImageUrl.js +++ /dev/null @@ -1,15 +0,0 @@ -export function getWADORSImageUrl(instance, frame) { - let wadorsuri = instance.wadorsuri; - - if (!wadorsuri) { - return; - } - - // We need to sum 1 because WADO-RS frame number is 1-based - frame = (frame || 0) + 1; - - // Replaces /frame/1 by /frame/{frame} - wadorsuri = wadorsuri.replace(/(%2Fframes%2F)(\d+)/, `$1${frame}`); - - return wadorsuri; -} diff --git a/Packages/ohif-viewerbase/client/lib/imageViewerViewportData.js b/Packages/ohif-viewerbase/client/lib/imageViewerViewportData.js deleted file mode 100644 index a6f8d35f1..000000000 --- a/Packages/ohif-viewerbase/client/lib/imageViewerViewportData.js +++ /dev/null @@ -1,7 +0,0 @@ - -export const imageViewerViewportData = { - callbacks: {}, - extendData() { - // No-Op function... - } -}; diff --git a/Packages/ohif-viewerbase/client/lib/setActiveViewport.js b/Packages/ohif-viewerbase/client/lib/setActiveViewport.js index ed4d53f14..518e96448 100644 --- a/Packages/ohif-viewerbase/client/lib/setActiveViewport.js +++ b/Packages/ohif-viewerbase/client/lib/setActiveViewport.js @@ -3,7 +3,7 @@ import $ from 'jquery'; import { Random } from 'meteor/random'; import { OHIF } from 'meteor/ohif:core'; -import { StudyPrefetcher } from './classes/StudyPrefetcher'; +//import { StudyPrefetcher } from './classes/StudyPrefetcher'; import { displayReferenceLines } from './displayReferenceLines'; const PLUGIN_CORNERSTONE = 'cornerstone'; @@ -48,7 +48,7 @@ export function setActiveViewport(element) { // so we can't pass a jQuery object as an argument, otherwise it throws an excepetion const domElement = $element.find('.imageViewerViewport').get(0); displayReferenceLines(domElement); - StudyPrefetcher.getInstance().prefetch(); + //StudyPrefetcher.getInstance().prefetch(); // @TODO Add this to OHIFAfterActivateViewport handler... const synchronizer = OHIF.viewer.stackImagePositionOffsetSynchronizer; diff --git a/Packages/ohif-viewerbase/client/lib/sopClassDictionary.js b/Packages/ohif-viewerbase/client/lib/sopClassDictionary.js index db851d0b5..7be21ce3a 100644 --- a/Packages/ohif-viewerbase/client/lib/sopClassDictionary.js +++ b/Packages/ohif-viewerbase/client/lib/sopClassDictionary.js @@ -1,4 +1,4 @@ - +// TODO: Deprecate since we have the same thing in dcmjs? export const sopClassDictionary = { ComputedRadiographyImageStorage: "1.2.840.10008.5.1.4.1.1.1", DigitalXRayImageStorageForPresentation: "1.2.840.10008.5.1.4.1.1.1.1", diff --git a/Packages/ohif-viewerbase/client/lib/sortStudy.js b/Packages/ohif-viewerbase/client/lib/sortStudy.js index cc928798e..b697466b5 100644 --- a/Packages/ohif-viewerbase/client/lib/sortStudy.js +++ b/Packages/ohif-viewerbase/client/lib/sortStudy.js @@ -1,4 +1,6 @@ -import { OHIFError } from './classes/OHIFError'; +import { OHIF } from 'meteor/ohif:core'; + +const { OHIFError } = OHIF.classes; /** * Sorts the series and instances inside a study instance by their series diff --git a/Packages/ohif-viewerbase/client/lib/thumbnailDragHandlers.js b/Packages/ohif-viewerbase/client/lib/thumbnailDragHandlers.js deleted file mode 100644 index 538bd3b7e..000000000 --- a/Packages/ohif-viewerbase/client/lib/thumbnailDragHandlers.js +++ /dev/null @@ -1,255 +0,0 @@ -import $ from 'jquery'; -import { OHIF } from 'meteor/ohif:core'; - -const cloneElement = (element, targetId) => { - // Clone the DOM element - const clone = element.cloneNode(true); - - // Find any canvas children to clone - const clonedCanvases = $(clone).find('canvas'); - clonedCanvases.each((canvasIndex, clonedCanvas) => { - // Draw from the original canvas to the cloned canvas - const context = clonedCanvas.getContext('2d'); - const thumbnailCanvas = $(element).find('canvas').get(canvasIndex); - context.drawImage(thumbnailCanvas, 0, 0); - }); - - // Update the clone with the targetId - clone.id = targetId; - clone.style.visibility = 'hidden'; - - return clone; -}; - -const thumbnailDragStartHandler = (event, data) => { - // Prevent any scrolling behaviour normally caused by the original event - event.originalEvent.preventDefault(); - - // Identify the current study and series index from the thumbnail's DOM position - const targetThumbnail = event.currentTarget; - const $imageThumbnail = $(targetThumbnail); - - // Force to hardware acceleration to move element - // if browser supports translate property - const useTransform = OHIF.ui.styleProperty.check('transform', 'translate(1px, 1px)'); - - // Clone the image thumbnail - const targetId = 'DragClone'; - const clone = cloneElement(targetThumbnail, targetId); - const $clone = $(clone); - $clone.addClass('imageThumbnailClone'); - - // Set pointerEvents to pass through the clone DOM element - // This is necessary in order to identify what is below it - // when using document.elementFromPoint - clone.style.pointerEvents = 'none'; - - // Append the clone to the body - document.body.appendChild(clone); - - // Set the cursor x and y positions from the current touch/mouse coordinates - let cursorX; - let cursorY; - // Handle touchStart cases - if (event.type === 'touchstart') { - cursorX = event.originalEvent.touches[0].pageX; - cursorY = event.originalEvent.touches[0].pageY; - } else { - cursorX = event.pageX; - cursorY = event.pageY; - - // Also hook up event handlers for mouse events - const handlers = {}; - handlers.mousemove = event => thumbnailDragHandler(event); - handlers.mouseup = event => thumbnailDragEndHandler(event, data, handlers); - - $(document).on('mousemove', handlers.mousemove); - $(document).on('mouseup', handlers.mouseup); - } - - // This block gets the current offset of the touch/mouse - // relative to the window - // - // i.e. Where did the user grab it from? - const offset = $imageThumbnail.offset(); - const { left, top } = offset; - - // This difference is saved for later so the element movement looks normal - const diff = { - x: cursorX - left, - y: cursorY - top - }; - $clone.data('diff', diff); - - $clone.css({ - visibility: 'hidden', - 'z-index': 100000 - }); - - // This sets the default style properties of the cloned element so it is - // ready to be dragged around the page - if (useTransform) { - const viewerHeight = $('#viewer').height(); - const headerHeight = $('.header').outerHeight(); - const heightDiff = viewerHeight + headerHeight; - - // Save height difference for later to set top position of the element during movement - $clone.data('heightDiff', heightDiff); - - const positionX = cursorX - diff.x; - const positionY = cursorY - diff.y - heightDiff; - - const translation = `translate(${positionX}px, ${positionY}px)`; - OHIF.ui.styleProperty.set($clone.get(0), 'transform', translation); - } else { - $clone.css({ - left: cursorX - diff.x, - position: 'fixed', - top: cursorY - diff.y, - }); - } -}; - -const thumbnailDragHandler = event => { - // Get the touch/mouse coordinates from the event - let cursorX; - let cursorY; - if (event.type === 'touchmove') { - cursorX = event.originalEvent.changedTouches[0].pageX; - cursorY = event.originalEvent.changedTouches[0].pageY; - } else { - cursorX = event.pageX; - cursorY = event.pageY; - } - - // Find the clone element and update it's position on the page - const $clone = $('#DragClone'); - const diff = $clone.data('diff'); - - // Force to hardware acceleration to move element - // if browser supports translate property - const useTransform = OHIF.ui.styleProperty.check('transform', 'translate(1px, 1px)'); - - $clone.css({ - visibility: 'visible', - 'z-index': 100000 - }); - - // This sets the default style properties of the cloned element so it is - // ready to be dragged around the page - if (useTransform) { - const heightDiff = $clone.data('heightDiff'); - const positionX = cursorX - diff.x; - const positionY = cursorY - diff.y - heightDiff; - - const translation = `translate(${positionX}px, ${positionY}px)`; - OHIF.ui.styleProperty.set($clone.get(0), 'transform', translation); - } else { - $clone.css({ - left: cursorX - diff.x, - position: 'fixed', - top: cursorY - diff.y, - }); - } - - // Identify the element below the current cursor position - const elemBelow = document.elementFromPoint(cursorX, cursorY); - - // If none exists, stop here - if (!elemBelow) { - return; - } - - // Remove any current faded effects on viewports - $('.viewportContainer canvas').removeClass('faded'); - - // Figure out what to do depending on what we're dragging over - const $viewportsDraggedOver = $(elemBelow).parents('.viewportContainer'); - if ($viewportsDraggedOver.length) { - // If we're dragging over a non-empty viewport, fade it and change the cursor style - $viewportsDraggedOver.find('canvas').not('.magnifyTool').addClass('faded'); - document.body.style.cursor = 'copy'; - } else if (elemBelow.classList.contains('viewportContainer') && elemBelow.classList.contains('empty')) { - // If we're dragging over an empty viewport, just change the cursor style - document.body.style.cursor = 'copy'; - } else { - // Otherwise, keep the cursor as no-drop style - document.body.style.cursor = 'no-drop'; - } -}; - -const thumbnailDragEndHandler = (event, data, handlers) => { - // Remove the mouse event listeners - if (handlers) { - $(document).off('mousemove', handlers.mousemove); - $(document).off('mouseup', handlers.mouseup); - } - - // Reset the cursor style to the default - document.body.style.cursor = 'auto'; - - // Get the cloned element - const $clone = $('#DragClone'); - - // If it doesn't exist, stop here - if (!$clone.length) { - return; - } - - const offset = $clone.offset(); - const { top, left } = offset; - const diff = $clone.data('diff'); - - // Identify the element below the cloned element position - const elemBelow = document.elementFromPoint(left + diff.x, top + diff.y); - - // Remove all cloned elements from the page - $('.imageThumbnailClone').remove(); - - // Remove any current faded effects on viewports - $('.viewportContainer canvas').removeClass('faded'); - - // If none exists, stop here - if (!elemBelow) { - return; - } - - // Remove any fade effects on the element below - elemBelow.classList.remove('faded'); - - let element; - const $viewportsDraggedOver = $(elemBelow).closest('.viewportContainer'); - - if ($viewportsDraggedOver.length) { - // If we're dragging over a non-empty viewport, retrieve it - element = $viewportsDraggedOver.get(0); - } else if (elemBelow.classList.contains('viewportContainer') && - elemBelow.classList.contains('empty')) { - // If we're dragging over an empty viewport, retrieve that instead - element = elemBelow; - } else { - // Otherwise, stop here - return false; - } - - // If there is no stored drag and drop data, stop here - if (!data) { - return false; - } - - // Get the dropped viewport index - const viewportIndex = $('.viewportContainer').index(element); - - // Rerender the viewport using the dragged thumbnail data - OHIF.viewerbase.layoutManager.rerenderViewportWithNewDisplaySet(viewportIndex, data); - - return false; -}; - -const thumbnailDragHandlers = { - thumbnailDragEndHandler, - thumbnailDragStartHandler, - thumbnailDragHandler -}; - -export { thumbnailDragHandlers }; diff --git a/Packages/ohif-viewerbase/client/lib/updateMetaDataManager.js b/Packages/ohif-viewerbase/client/lib/updateMetaDataManager.js index 05b854055..c3e4854fa 100644 --- a/Packages/ohif-viewerbase/client/lib/updateMetaDataManager.js +++ b/Packages/ohif-viewerbase/client/lib/updateMetaDataManager.js @@ -1,6 +1,6 @@ import _ from 'underscore'; +import { OHIF } from 'meteor/ohif:core'; import { getWADORSImageId } from './getWADORSImageId'; -import { WadoRsMetaDataBuilder } from './classes/metadata/WadoRsMetaDataBuilder'; function getRadiopharmaceuticalInfoMetaData(instance) { const radiopharmaceuticalInfo = instance.radiopharmaceuticalInfo; @@ -8,6 +8,7 @@ function getRadiopharmaceuticalInfoMetaData(instance) { if ((instance.modality !== 'PT') || !radiopharmaceuticalInfo) { return; } + const { WadoRsMetaDataBuilder } = OHIF.metadata; return new WadoRsMetaDataBuilder() .addTag('00181072', radiopharmaceuticalInfo.radiopharmaceuticalStartTime) @@ -17,6 +18,7 @@ function getRadiopharmaceuticalInfoMetaData(instance) { } const getWadoRsInstanceMetaData = (study, series, instance) => { + const { WadoRsMetaDataBuilder } = OHIF.metadata; return new WadoRsMetaDataBuilder() .addTag('00080016', instance.sopClassUid) .addTag('00080018', instance.sopInstanceUid) diff --git a/Packages/ohif-viewerbase/package.js b/Packages/ohif-viewerbase/package.js index 22ea72af8..bdca4ef7e 100644 --- a/Packages/ohif-viewerbase/package.js +++ b/Packages/ohif-viewerbase/package.js @@ -158,7 +158,7 @@ Package.onUse(function(api) { api.addFiles('client/components/viewer/studySeriesQuickSwitch/studySeriesQuickSwitch.styl', 'client'); api.addFiles('client/components/viewer/studySeriesQuickSwitch/studySeriesQuickSwitch.js', 'client'); - api.addFiles('client/components/viewer/studyTimepointBrowser/studyTimepoint.html', 'client'); + /*api.addFiles('client/components/viewer/studyTimepointBrowser/studyTimepoint.html', 'client'); api.addFiles('client/components/viewer/studyTimepointBrowser/studyTimepoint.styl', 'client'); api.addFiles('client/components/viewer/studyTimepointBrowser/studyTimepoint.js', 'client'); @@ -167,7 +167,7 @@ Package.onUse(function(api) { api.addFiles('client/components/viewer/studyTimepointBrowser/studyTimepointBrowser.js', 'client'); api.addFiles('client/components/viewer/studyTimepointBrowser/studyTimepointStudy.html', 'client'); - api.addFiles('client/components/viewer/studyTimepointBrowser/studyTimepointStudy.js', 'client'); + api.addFiles('client/components/viewer/studyTimepointBrowser/studyTimepointStudy.js', 'client');*/ api.addFiles('client/components/viewer/windowLevelPresets/form.html', 'client'); api.addFiles('client/components/viewer/windowLevelPresets/form.js', 'client'); diff --git a/Packages/ohif-user-oidc/client/main.js b/legacy/Packages/ohif-user-oidc/client/main.js similarity index 100% rename from Packages/ohif-user-oidc/client/main.js rename to legacy/Packages/ohif-user-oidc/client/main.js diff --git a/Packages/ohif-user-oidc/imports/client/index.js b/legacy/Packages/ohif-user-oidc/imports/client/index.js similarity index 100% rename from Packages/ohif-user-oidc/imports/client/index.js rename to legacy/Packages/ohif-user-oidc/imports/client/index.js diff --git a/Packages/ohif-user-oidc/imports/client/oidcUserManager.js b/legacy/Packages/ohif-user-oidc/imports/client/oidcUserManager.js similarity index 100% rename from Packages/ohif-user-oidc/imports/client/oidcUserManager.js rename to legacy/Packages/ohif-user-oidc/imports/client/oidcUserManager.js diff --git a/Packages/ohif-user-oidc/imports/client/routes.js b/legacy/Packages/ohif-user-oidc/imports/client/routes.js similarity index 100% rename from Packages/ohif-user-oidc/imports/client/routes.js rename to legacy/Packages/ohif-user-oidc/imports/client/routes.js diff --git a/Packages/ohif-user-oidc/package.js b/legacy/Packages/ohif-user-oidc/package.js similarity index 100% rename from Packages/ohif-user-oidc/package.js rename to legacy/Packages/ohif-user-oidc/package.js diff --git a/Packages/ohif-user-oidc/public/js/oidc-client.min.js b/legacy/Packages/ohif-user-oidc/public/js/oidc-client.min.js similarity index 100% rename from Packages/ohif-user-oidc/public/js/oidc-client.min.js rename to legacy/Packages/ohif-user-oidc/public/js/oidc-client.min.js diff --git a/Packages/ohif-user-oidc/public/js/silentRefresh.js b/legacy/Packages/ohif-user-oidc/public/js/silentRefresh.js similarity index 100% rename from Packages/ohif-user-oidc/public/js/silentRefresh.js rename to legacy/Packages/ohif-user-oidc/public/js/silentRefresh.js diff --git a/Packages/ohif-user-oidc/public/silent-refresh.html b/legacy/Packages/ohif-user-oidc/public/silent-refresh.html similarity index 100% rename from Packages/ohif-user-oidc/public/silent-refresh.html rename to legacy/Packages/ohif-user-oidc/public/silent-refresh.html