First pass at a Hanging Protocol implementation and editor (LT-131)
This commit is contained in:
1 parent
dfcb33153f
commit
2e52d9e3c1
157 files changed
+8869
-23585
No files matched your search
@@ -4,9 +4,6 @@
|
||||
# 'meteor add' and 'meteor remove' will edit this file for you,
|
||||
# but you can also edit it by hand.
|
||||
|
||||
accounts-password
|
||||
ian:accounts-ui-bootstrap-3
|
||||
iron:router
|
||||
twbs:bootstrap
|
||||
http
|
||||
arsnebula:reactive-promise
|
||||
@@ -37,3 +34,4 @@ practicalmeteor:loglevel
|
||||
hangingprotocols
|
||||
reactive-dict
|
||||
gilbertwat:bootstrap3-daterangepicker
|
||||
clinical:router
|
||||
@@ -1,6 +1,3 @@
|
||||
accounts-base@1.2.2
|
||||
accounts-password@1.1.4
|
||||
anti:i18n@0.4.3
|
||||
arsnebula:reactive-promise@0.9.1
|
||||
autoupdate@1.2.4
|
||||
babel-compiler@5.8.24_1
|
||||
@@ -15,12 +12,15 @@ caching-compiler@1.0.0
|
||||
caching-html-compiler@1.0.2
|
||||
callback-hook@1.0.4
|
||||
check@1.1.0
|
||||
clinical:router@2.0.17
|
||||
clinical:router-location@2.0.14
|
||||
clinical:router-middleware-stack@2.0.13
|
||||
clinical:router-url@2.0.15
|
||||
coffeescript@1.0.11
|
||||
cornerstone@0.0.1
|
||||
ddp@1.2.2
|
||||
ddp-client@1.2.1
|
||||
ddp-common@1.2.2
|
||||
ddp-rate-limiter@1.0.0
|
||||
ddp-server@1.2.2
|
||||
deps@1.0.9
|
||||
dicomweb@0.0.1
|
||||
@@ -29,7 +29,6 @@ dimseservice@0.0.1
|
||||
ecmascript@0.1.6
|
||||
ecmascript-runtime@0.2.6
|
||||
ejson@1.0.7
|
||||
email@1.0.8
|
||||
fastclick@1.0.7
|
||||
fortawesome:fontawesome@4.4.0
|
||||
geojson-utils@1.0.4
|
||||
@@ -39,20 +38,14 @@ hot-code-push@1.0.0
|
||||
html-tools@1.0.5
|
||||
htmljs@1.0.5
|
||||
http@1.1.1
|
||||
ian:accounts-ui-bootstrap-3@1.2.83
|
||||
id-map@1.0.4
|
||||
iron:controller@1.0.12
|
||||
iron:core@1.0.11
|
||||
iron:dynamic-template@1.0.12
|
||||
iron:layout@1.0.12
|
||||
iron:location@1.0.11
|
||||
iron:middleware-stack@1.0.11
|
||||
iron:router@1.0.12
|
||||
iron:url@1.0.11
|
||||
jquery@1.11.4
|
||||
launch-screen@1.0.4
|
||||
livedata@1.0.15
|
||||
localstorage@1.0.5
|
||||
logging@1.0.8
|
||||
meteor@1.1.10
|
||||
meteor-base@1.0.1
|
||||
@@ -65,28 +58,25 @@ momentjs:moment@2.9.0
|
||||
mongo@1.1.3
|
||||
mongo-id@1.0.1
|
||||
mrt:moment@2.8.1
|
||||
npm-bcrypt@0.7.8_2
|
||||
natestrauser:select2@4.0.1
|
||||
npm-mongo@1.4.39_1
|
||||
observe-sequence@1.0.7
|
||||
ordered-dict@1.0.4
|
||||
orthanc-remote@0.0.1
|
||||
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
|
||||
reactive-dict@1.1.3
|
||||
reactive-var@1.0.6
|
||||
reload@1.1.4
|
||||
retry@1.0.4
|
||||
routepolicy@1.0.6
|
||||
rwatts:uuid@0.0.2
|
||||
service-configuration@1.0.5
|
||||
session@1.1.1
|
||||
sha@1.0.4
|
||||
silentcicero:jszip@0.0.4
|
||||
spacebars@1.0.7
|
||||
spacebars-compiler@1.0.7
|
||||
srp@1.0.4
|
||||
standard-app-packages@1.0.6
|
||||
standard-minifiers@1.0.2
|
||||
stylus@2.511.1
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<template name="layout">
|
||||
<nav class="navbar navbar-default noselect" role="navigation">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="/">
|
||||
<img height="30px" src="/images/logo.png">
|
||||
<h4 class="name">Open Health Imaging Foundation</h4>
|
||||
</a>
|
||||
</div>
|
||||
<div id="navbar" class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li>
|
||||
<a href="http://www.ohif.org">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
{{> yield}}
|
||||
</template>
|
||||
@@ -0,0 +1,50 @@
|
||||
.noselect
|
||||
-webkit-touch-callout: none
|
||||
-webkit-user-select: none
|
||||
-khtml-user-select: none
|
||||
-moz-user-select: none
|
||||
-ms-user-select: none
|
||||
user-select: none
|
||||
|
||||
.navbar
|
||||
margin-bottom: 0
|
||||
border-radius: 0
|
||||
background-color: #060606
|
||||
border: none
|
||||
font-family: "Sanchez"
|
||||
color: #C1C1C1
|
||||
|
||||
-webkit-transition: all 0.3s ease
|
||||
-moz-transition: all 0.3s ease
|
||||
transition: all 0.3s ease
|
||||
|
||||
.navbar-default .navbar-nav > li > a
|
||||
color: #C1C1C1
|
||||
font-weight: bold
|
||||
font-size: 12pt
|
||||
|
||||
.navbar-form
|
||||
height: 50px
|
||||
margin: 0
|
||||
padding: 15px 3px
|
||||
font-weight: bold
|
||||
font-size: 12pt
|
||||
line-height: 20px
|
||||
|
||||
.navbar-brand
|
||||
display: inline-block
|
||||
|
||||
img
|
||||
float: left
|
||||
margin-right: 10px
|
||||
margin-top: -5px
|
||||
|
||||
h4.name
|
||||
float: left
|
||||
margin: 0
|
||||
font-family: "Sanchez"
|
||||
color: #C1C1C1
|
||||
|
||||
@media (min-width: 768px)
|
||||
.navbar
|
||||
border-radius: 0px
|
||||
@@ -1,13 +1,18 @@
|
||||
<template name="viewer">
|
||||
{{#if Template.subscriptionsReady}}
|
||||
<div id="viewer">
|
||||
{{> studyBrowser }}
|
||||
<div class="studyBrowserSidebar">
|
||||
{{ >relatedStudySelect }}
|
||||
{{> studyBrowser }}
|
||||
</div>
|
||||
{{> cineDialog }}
|
||||
<div class='viewerMain'>
|
||||
{{> toolbar }}
|
||||
{{> imageViewerViewports }}
|
||||
<div id='layoutManagerTarget'>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ >protocolEditor }}
|
||||
{{else}}
|
||||
{{>loadingText}}
|
||||
{{/if}}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
Template.viewer.onCreated(function() {
|
||||
// Attach the Window resize listener
|
||||
$(window).on('resize', handleResize);
|
||||
$('.navbar').width('100%');
|
||||
|
||||
Meteor.subscribe('hangingprotocols');
|
||||
|
||||
log.info('viewer onCreated');
|
||||
|
||||
@@ -24,18 +27,22 @@ Template.viewer.onCreated(function() {
|
||||
cornerstone.setViewport(element, viewport);
|
||||
},
|
||||
resetViewport: function(element) {
|
||||
cornerstone.reset(element);
|
||||
var enabledElement = cornerstone.getEnabledElement(element);
|
||||
if (enabledElement.fitToWindow === false) {
|
||||
var imageId = enabledElement.image.imageId;
|
||||
var instance = cornerstoneTools.metaData.get('instance', imageId);
|
||||
|
||||
enabledElement.viewport = cornerstone.getDefaultViewport(enabledElement.canvas, enabledElement.image);
|
||||
var instanceClassDefaultViewport = getInstanceClassDefaultViewport(instance, enabledElement, imageId);
|
||||
cornerstone.setViewport(element, instanceClassDefaultViewport);
|
||||
} else {
|
||||
cornerstone.reset(element);
|
||||
}
|
||||
},
|
||||
clearTools: function(element) {
|
||||
var toolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager;
|
||||
toolStateManager.clear(element);
|
||||
cornerstone.updateImage(element);
|
||||
},
|
||||
previousPresentationGroup: function() {
|
||||
WindowManager.previousPresentationGroup();
|
||||
},
|
||||
nextPresentationGroup: function() {
|
||||
WindowManager.nextPresentationGroup();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -78,13 +85,18 @@ Template.viewer.onCreated(function() {
|
||||
study.selected = true;
|
||||
ViewerStudies.insert(study);
|
||||
});
|
||||
|
||||
OHIF.viewer.updateImageSynchronizer = new cornerstoneTools.Synchronizer('CornerstoneNewImage', cornerstoneTools.updateImageSynchronizer);
|
||||
});
|
||||
|
||||
Template.viewer.onRendered(function() {
|
||||
// Enable hotkeys
|
||||
enableHotkeys();
|
||||
|
||||
var parentNode = document.getElementById('layoutManagerTarget');
|
||||
var studies = this.data.studies;
|
||||
layoutManager = new LayoutManager(parentNode, studies);
|
||||
|
||||
ProtocolEngine = new HP.ProtocolEngine(layoutManager, studies);
|
||||
HP.setEngine(ProtocolEngine);
|
||||
});
|
||||
|
||||
Template.viewer.onDestroyed(function() {
|
||||
@@ -92,6 +104,4 @@ Template.viewer.onDestroyed(function() {
|
||||
|
||||
// Remove the Window resize listener
|
||||
$(window).off('resize', handleResize);
|
||||
|
||||
OHIF.viewer.updateImageSynchronizer.destroy();
|
||||
});
|
||||
@@ -18,4 +18,20 @@
|
||||
float: left
|
||||
background-color: gray
|
||||
height: 100%
|
||||
width: calc(100% - 120px)
|
||||
width: calc(100% - 120px)
|
||||
|
||||
-webkit-transition: all 0.3s ease
|
||||
-moz-transition: all 0.3s ease
|
||||
transition: all 0.3s ease
|
||||
|
||||
#layoutManagerTarget
|
||||
height: calc(100% - 30px)
|
||||
width: 100%
|
||||
|
||||
.studyBrowserSidebar
|
||||
float: left
|
||||
height: 100%
|
||||
width: 120px
|
||||
overflow: hidden
|
||||
background-color: #000
|
||||
padding-top: 10px
|
||||
@@ -1,6 +1,7 @@
|
||||
Session.setDefault('ViewerData', {});
|
||||
|
||||
// Re-add any tab data saved in the Session
|
||||
WorklistTabs.remove({});
|
||||
Object.keys(ViewerData).forEach(function(contentId) {
|
||||
var tabData = ViewerData[contentId];
|
||||
var data = {
|
||||
@@ -12,8 +13,7 @@ Object.keys(ViewerData).forEach(function(contentId) {
|
||||
|
||||
Router.configure({
|
||||
layoutTemplate: 'layout',
|
||||
loadingTemplate: 'layout',
|
||||
notFoundTemplate: 'notFound'
|
||||
loadingTemplate: 'layout'
|
||||
});
|
||||
|
||||
Router.onBeforeAction('loading');
|
||||
@@ -22,6 +22,10 @@ Router.route('/', function() {
|
||||
this.render('worklist');
|
||||
});
|
||||
|
||||
Router.route('/worklist', function() {
|
||||
this.render('worklist');
|
||||
});
|
||||
|
||||
Router.route('/viewer/:_id', {
|
||||
layoutTemplate: 'layout',
|
||||
name: 'viewer',
|
||||
@@ -30,14 +34,19 @@ Router.route('/viewer/:_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 = WorklistTabs.find({
|
||||
var tabs = WorklistTabs.find({
|
||||
studyInstanceUid: studyInstanceUid
|
||||
}).fetch();
|
||||
if (tab) {
|
||||
});
|
||||
if (tabs.count()) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.render('worklist');
|
||||
openNewTab(studyInstanceUid);
|
||||
this.render('worklist', {
|
||||
data: function() {
|
||||
return {
|
||||
studyInstanceUid: studyInstanceUid
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -36,6 +36,4 @@ Meteor.startup(function() {
|
||||
}
|
||||
//defaultServiceType: 'dimse'
|
||||
};
|
||||
|
||||
console.log('Using default OHIF Viewer settings with service: ' + Meteor.settings.defaultServiceType);
|
||||
});
|
||||
Reference in new issue
Block a user