Updates to improve reactivity, session storage, logging
This commit is contained in:
1 parent
9fb5cc2953
commit
a10f149b4b
37 files changed
+370
-288
No files matched your search
@@ -36,3 +36,4 @@ random
|
||||
reactive-var
|
||||
reactive-dict
|
||||
lesiontracker
|
||||
practicalmeteor:loglevel
|
||||
@@ -16,6 +16,7 @@ caching-compiler@1.0.0
|
||||
caching-html-compiler@1.0.2
|
||||
callback-hook@1.0.4
|
||||
check@1.1.0
|
||||
coffeescript@1.0.11
|
||||
cornerstone@0.0.1
|
||||
ddp@1.2.2
|
||||
ddp-client@1.2.1
|
||||
@@ -67,6 +68,8 @@ npm-bcrypt@0.7.8_2
|
||||
npm-mongo@1.4.39_1
|
||||
observe-sequence@1.0.7
|
||||
ordered-dict@1.0.4
|
||||
practicalmeteor:chai@1.9.2_3
|
||||
practicalmeteor:loglevel@1.1.0_3
|
||||
promise@0.5.1
|
||||
random@1.0.5
|
||||
rate-limit@1.0.0
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<template name="viewer">
|
||||
<div id="viewer" class="viewer">
|
||||
{{ >lesionDialog studies=studies activeViewport=activeViewport}}
|
||||
{{ >lesionDialog }}
|
||||
<div id="upperHalf">
|
||||
{{ >hidingPanel studies=studies activeViewport=activeViewport}}
|
||||
{{ >viewerMain studies=studies activeViewport=activeViewport viewportRows=viewportRows viewportColumns=viewportColumns}}
|
||||
{{ >hidingPanel }}
|
||||
{{ >viewerMain }}
|
||||
</div>
|
||||
{{ >lesionTable studies=studies activeViewport=activeViewport viewportRows=viewportRows viewportColumns=viewportColumns}}
|
||||
{{ >lesionTable }}
|
||||
</div>
|
||||
</template>
|
||||
@@ -1,4 +1,6 @@
|
||||
function resizeViewports() {
|
||||
log.info("viewer resizeViewports");
|
||||
|
||||
// Handle resizing of image viewer viewports
|
||||
// For some reason, this seems to need to be on
|
||||
// another delay, or the resizing won't work properly
|
||||
@@ -15,7 +17,8 @@ function resizeViewports() {
|
||||
}
|
||||
|
||||
Template.viewer.onCreated(function() {
|
||||
console.log("Image Viewer onCreated");
|
||||
log.info("viewer onCreated");
|
||||
|
||||
OHIF = {
|
||||
viewer: {}
|
||||
};
|
||||
@@ -55,35 +58,35 @@ Template.viewer.onCreated(function() {
|
||||
};
|
||||
}
|
||||
|
||||
if (this.data.activeViewport === undefined) {
|
||||
this.data.activeViewport = new ReactiveVar(0);
|
||||
}
|
||||
if (this.data.viewportRows === undefined) {
|
||||
this.data.viewportRows = new ReactiveVar(1);
|
||||
}
|
||||
if (this.data.viewportColumns === undefined) {
|
||||
this.data.viewportColumns = new ReactiveVar(2);
|
||||
}
|
||||
|
||||
var contentId = this.data.contentId;
|
||||
|
||||
// Update the viewer data object
|
||||
ViewerData[contentId].viewportColumns = this.data.viewportColumns;
|
||||
ViewerData[contentId].viewportRows = this.data.viewportRows;
|
||||
ViewerData[contentId].activeViewport = this.data.activeViewport;
|
||||
Session.set('ViewerData', ViewerData);
|
||||
if (ViewerData[contentId].loadedSeriesData) {
|
||||
log.info('Reloading previous loadedSeriesData');
|
||||
|
||||
OHIF.viewer.loadedSeriesData = ViewerData[contentId].loadedSeriesData;
|
||||
|
||||
if (ViewerData[contentId].viewer) {
|
||||
OHIF.viewer = ViewerData[contentId].viewer;
|
||||
} else {
|
||||
OHIF.viewer.imageViewerLoadedSeriesDictionary = {};
|
||||
ViewerData[contentId].viewer = OHIF.viewer;
|
||||
log.info('Setting default ViewerData');
|
||||
OHIF.viewer.loadedSeriesData = {};
|
||||
|
||||
ViewerData[contentId].loadedSeriesData = OHIF.viewer.loadedSeriesData;
|
||||
|
||||
// Update the viewer data object
|
||||
ViewerData[contentId].viewportColumns = 2;
|
||||
ViewerData[contentId].viewportRows = 1;
|
||||
ViewerData[contentId].activeViewport = 0;
|
||||
Session.set('ViewerData', ViewerData);
|
||||
}
|
||||
|
||||
Session.set('activeViewport', ViewerData[contentId].activeViewport || 0);
|
||||
|
||||
Session.set("studies", this.data.studies);
|
||||
|
||||
OHIF.viewer.updateImageSynchronizer = new cornerstoneTools.Synchronizer("CornerstoneNewImage", cornerstoneTools.updateImageSynchronizer);
|
||||
});
|
||||
|
||||
Template.viewer.onDestroyed(function() {
|
||||
log.info("onDestroyed");
|
||||
OHIF.viewer.updateImageSynchronizer.destroy();
|
||||
});
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template name="viewerMain">
|
||||
<div class="viewerMain">
|
||||
{{ >toolbar toolbarOptions=toolbarOptions activeViewport=activeViewport viewportRows=viewportRows viewportColumns=viewportColumns}}
|
||||
{{ >imageViewerViewports studies=studies activeViewport=activeViewport viewportRows=viewportRows viewportColumns=viewportColumns}}
|
||||
{{ >toolbar toolbarOptions=toolbarOptions }}
|
||||
{{ >imageViewerViewports }}
|
||||
</div>
|
||||
</template>
|
||||
@@ -1,7 +1,4 @@
|
||||
Template.viewerMain.helpers({
|
||||
studies : function() {
|
||||
return this.studies;
|
||||
},
|
||||
'toolbarOptions': function() {
|
||||
var toolbarOptions = {};
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
// Create application logger using loglevel
|
||||
// https://atmospherejs.com/spacejamio/loglevel
|
||||
log = loglevel.createAppLogger('LesionTracker', defaultLevel = 'info');
|
||||
@@ -1,49 +0,0 @@
|
||||
Router.configure({
|
||||
layoutTemplate: 'layoutLesionTracker',
|
||||
//loadingTemplate: '',
|
||||
notFoundTemplate: 'notFound'
|
||||
});
|
||||
|
||||
Router.route('/', function () {
|
||||
this.render('worklist', {});
|
||||
});
|
||||
|
||||
tabs = new Meteor.Collection(null);
|
||||
Session.setDefault('ViewerData', {});
|
||||
Session.setDefault('ViewerDataUpdated', Random.id());
|
||||
|
||||
Object.keys(ViewerData).forEach(function(contentId) {
|
||||
var tabData = ViewerData[contentId];
|
||||
var data = {
|
||||
title: tabData.title,
|
||||
contentid: tabData.contentId,
|
||||
};
|
||||
tabs.insert(data);
|
||||
});
|
||||
|
||||
|
||||
Router.route('/viewer/:_id', {
|
||||
layoutTemplate: 'layout',
|
||||
name: 'viewer',
|
||||
onBeforeAction: function() {
|
||||
var self = this;
|
||||
|
||||
Meteor.call('GetStudyMetadata', this.params._id, function(error, study) {
|
||||
sortStudy(study);
|
||||
|
||||
var title = study.seriesList[0].instances[0].patientName;
|
||||
var contentid = generateUUID();
|
||||
|
||||
var data = {
|
||||
title: title,
|
||||
contentid: contentid,
|
||||
};
|
||||
tabs.insert(data);
|
||||
|
||||
data.studies = [study];
|
||||
|
||||
self.render('worklist');
|
||||
Session.set('OpenNewTabEvent', data);
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,45 @@
|
||||
tabs = new Meteor.Collection(null);
|
||||
Session.setDefault('ViewerData', {});
|
||||
|
||||
// Re-add any tab data saved in the Session
|
||||
Object.keys(ViewerData).forEach(function(contentId) {
|
||||
var tabData = ViewerData[contentId];
|
||||
var data = {
|
||||
title: tabData.title,
|
||||
contentid: tabData.contentid,
|
||||
};
|
||||
tabs.insert(data);
|
||||
});
|
||||
|
||||
Router.configure({
|
||||
layoutTemplate: 'layout',
|
||||
loadingTemplate: 'layout',
|
||||
notFoundTemplate: 'notFound'
|
||||
});
|
||||
|
||||
Router.onBeforeAction('loading');
|
||||
|
||||
Router.route('/', function () {
|
||||
this.render('worklist');
|
||||
});
|
||||
|
||||
|
||||
Router.route('/viewer/:_id', {
|
||||
layoutTemplate: 'layout',
|
||||
name: 'viewer',
|
||||
onBeforeAction: function() {
|
||||
log.info('Router GetStudyMetadata');
|
||||
|
||||
var studyInstanceUid = this.params._id;
|
||||
|
||||
// Check if this study is already loaded in a tab
|
||||
// If it is, stop here so we don't keep adding tabs on hot-code reloads
|
||||
var tab = tabs.find({'studyInstanceUid' : studyInstanceUid}).fetch();
|
||||
if (tab) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.render('worklist');
|
||||
openNewTab(studyInstanceUid);
|
||||
}
|
||||
});
|
||||
Reference in new issue
Block a user