PWV-1: Fixing merging issues
This commit is contained in:
parent
481bf30a14
commit
db0602def7
@ -6,10 +6,10 @@ if (Meteor.isClient){
|
|||||||
},
|
},
|
||||||
signIn: {
|
signIn: {
|
||||||
displayFullName: true,
|
displayFullName: true,
|
||||||
destination: '/worklist'
|
destination: '/studylist'
|
||||||
},
|
},
|
||||||
signUp: {
|
signUp: {
|
||||||
destination: '/worklist'
|
destination: '/studylist'
|
||||||
},
|
},
|
||||||
themeColors: {
|
themeColors: {
|
||||||
primary: ""
|
primary: ""
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template name="app">
|
<template name="app">
|
||||||
<div class="topBar noselect {{#if onStudyList}}studyList{{/if}}">
|
<div class="topBar noselect {{#if onStudyList}}studyList{{/if}}">
|
||||||
<div class="clearfix p-x-1 p-t-1">
|
<div class="clearfix">
|
||||||
<a target='_blank'
|
<a target='_blank'
|
||||||
class="brandSection pull-left"
|
class="brandSection pull-left"
|
||||||
href="http://ohif.org">
|
href="http://ohif.org">
|
||||||
|
|||||||
@ -9,6 +9,8 @@ $expandedHeight = 160px
|
|||||||
|
|
||||||
.topBar
|
.topBar
|
||||||
height: $topBarHeight
|
height: $topBarHeight
|
||||||
|
overflow: hidden
|
||||||
|
padding: 1rem $studyListPadding 0
|
||||||
theme('color', '$textPrimaryColor')
|
theme('color', '$textPrimaryColor')
|
||||||
theme('background-color', '$primaryBackgroundColor')
|
theme('background-color', '$primaryBackgroundColor')
|
||||||
transition(all 0.5s ease)
|
transition(all 0.5s ease)
|
||||||
@ -19,7 +21,7 @@ $expandedHeight = 160px
|
|||||||
text-decoration: none
|
text-decoration: none
|
||||||
|
|
||||||
.logoImage
|
.logoImage
|
||||||
margin: 0 8px
|
margin: 0 8px 0 0
|
||||||
width: 30px
|
width: 30px
|
||||||
|
|
||||||
.logoText
|
.logoText
|
||||||
@ -53,12 +55,11 @@ $expandedHeight = 160px
|
|||||||
.brandSection
|
.brandSection
|
||||||
height: 100%
|
height: 100%
|
||||||
width: 80%
|
width: 80%
|
||||||
padding-left: 50px
|
|
||||||
line-height: $expandedHeight
|
line-height: $expandedHeight
|
||||||
|
|
||||||
.logoImage
|
.logoImage
|
||||||
width: 50px
|
width: 50px
|
||||||
margin: 0 20px
|
margin: 0 20px 0 0
|
||||||
|
|
||||||
.logoText
|
.logoText
|
||||||
font-size: 30px
|
font-size: 30px
|
||||||
|
|||||||
@ -1,117 +0,0 @@
|
|||||||
accounts-base@1.2.14
|
|
||||||
aldeed:collection2@2.10.0
|
|
||||||
aldeed:collection2-core@1.2.0
|
|
||||||
aldeed:schema-deny@1.1.0
|
|
||||||
aldeed:schema-index@1.1.1
|
|
||||||
aldeed:simple-schema@1.5.3
|
|
||||||
aldeed:template-extension@4.0.0
|
|
||||||
allow-deny@1.0.5
|
|
||||||
arsnebula:reactive-promise@0.9.1
|
|
||||||
autoupdate@1.3.12
|
|
||||||
babel-compiler@6.13.0
|
|
||||||
babel-runtime@0.1.13
|
|
||||||
base64@1.0.10
|
|
||||||
binary-heap@1.0.10
|
|
||||||
blaze@2.2.0
|
|
||||||
blaze-html-templates@1.0.5
|
|
||||||
blaze-tools@1.0.10
|
|
||||||
boilerplate-generator@1.0.11
|
|
||||||
caching-compiler@1.1.8
|
|
||||||
caching-html-compiler@1.0.7
|
|
||||||
callback-hook@1.0.10
|
|
||||||
check@1.2.4
|
|
||||||
clinical:router@2.0.19
|
|
||||||
clinical:router-location@2.1.0
|
|
||||||
clinical:router-middleware-stack@2.1.2
|
|
||||||
clinical:router-url@2.1.0
|
|
||||||
coffeescript@1.11.1_2
|
|
||||||
ddp@1.2.5
|
|
||||||
ddp-client@1.3.2
|
|
||||||
ddp-common@1.2.7
|
|
||||||
ddp-rate-limiter@1.0.6
|
|
||||||
ddp-server@1.3.11
|
|
||||||
deps@1.0.12
|
|
||||||
design@0.0.1
|
|
||||||
diff-sequence@1.0.7
|
|
||||||
ecmascript@0.5.9
|
|
||||||
ecmascript-runtime@0.3.15
|
|
||||||
ejson@1.0.13
|
|
||||||
fastclick@1.0.13
|
|
||||||
fortawesome:fontawesome@4.6.3
|
|
||||||
geojson-utils@1.0.10
|
|
||||||
gilbertwat:bootstrap3-daterangepicker@1.3.21_1
|
|
||||||
hot-code-push@1.0.4
|
|
||||||
html-tools@1.0.11
|
|
||||||
htmljs@1.0.11
|
|
||||||
http@1.2.10
|
|
||||||
id-map@1.0.9
|
|
||||||
iron:controller@1.0.12
|
|
||||||
iron:core@1.0.11
|
|
||||||
iron:dynamic-template@1.0.12
|
|
||||||
iron:layout@1.0.12
|
|
||||||
johdirr:meteor-git-rev@0.0.4
|
|
||||||
jquery@1.11.10
|
|
||||||
launch-screen@1.1.0
|
|
||||||
livedata@1.0.18
|
|
||||||
localstorage@1.0.12
|
|
||||||
logging@1.1.16
|
|
||||||
mdg:validation-error@0.5.1
|
|
||||||
meteor@1.6.0
|
|
||||||
meteor-base@1.0.4
|
|
||||||
meteor-platform@1.2.6
|
|
||||||
minifier-css@1.2.15
|
|
||||||
minifier-js@1.2.15
|
|
||||||
minimongo@1.0.18
|
|
||||||
mobile-experience@1.0.4
|
|
||||||
mobile-status-bar@1.0.13
|
|
||||||
modules@0.7.7
|
|
||||||
modules-runtime@0.7.7
|
|
||||||
momentjs:moment@2.15.2
|
|
||||||
mongo@1.1.14
|
|
||||||
mongo-id@1.0.6
|
|
||||||
mrt:moment@2.8.1
|
|
||||||
natestrauser:select2@4.0.3
|
|
||||||
npm-mongo@2.2.11_2
|
|
||||||
observe-sequence@1.0.14
|
|
||||||
ohif:core@0.0.1
|
|
||||||
ohif:cornerstone@0.0.1
|
|
||||||
ohif:dicom-services@0.0.1
|
|
||||||
ohif:hanging-protocols@0.0.1
|
|
||||||
ohif:study-list@0.0.1
|
|
||||||
ohif:viewerbase@0.0.1
|
|
||||||
ohif:wadoproxy@0.0.1
|
|
||||||
ordered-dict@1.0.9
|
|
||||||
peppelg:bootstrap-3-modal@1.0.4
|
|
||||||
practicalmeteor:chai@2.1.0_1
|
|
||||||
practicalmeteor:loglevel@1.2.0_2
|
|
||||||
promise@0.8.8
|
|
||||||
raix:eventemitter@0.1.3
|
|
||||||
random@1.0.10
|
|
||||||
rate-limit@1.0.6
|
|
||||||
reactive-dict@1.1.8
|
|
||||||
reactive-var@1.0.11
|
|
||||||
reload@1.1.11
|
|
||||||
retry@1.0.9
|
|
||||||
routepolicy@1.0.12
|
|
||||||
service-configuration@1.0.11
|
|
||||||
session@1.1.7
|
|
||||||
shell-server@0.2.1
|
|
||||||
silentcicero:jszip@0.0.4
|
|
||||||
spacebars@1.0.13
|
|
||||||
spacebars-compiler@1.0.13
|
|
||||||
standard-app-packages@1.0.9
|
|
||||||
standard-minifier-css@1.3.2
|
|
||||||
standard-minifier-js@1.2.1
|
|
||||||
stylus@2.513.6
|
|
||||||
templating@1.2.15
|
|
||||||
templating-compiler@1.2.15
|
|
||||||
templating-runtime@1.2.15
|
|
||||||
templating-tools@1.0.5
|
|
||||||
tracker@1.1.1
|
|
||||||
twbs:bootstrap@3.3.6
|
|
||||||
ui@1.0.12
|
|
||||||
underscore@1.0.10
|
|
||||||
url@1.0.11
|
|
||||||
validatejs@0.0.1
|
|
||||||
webapp@1.3.12
|
|
||||||
webapp-hashing@1.0.9
|
|
||||||
@ -1,11 +1,11 @@
|
|||||||
<template name="ohifViewer">
|
<template name="ohifViewer">
|
||||||
<div class="topBar noselect {{#if onStudyList}}studyList{{/if}}">
|
<div class="topBar noselect {{#if onStudyList}}studyList{{/if}}">
|
||||||
<div class="clearfix p-x-1 p-t-1">
|
<div class="clearfix">
|
||||||
<a target='_blank'
|
<a target='_blank'
|
||||||
class="brandSection pull-left"
|
class="brandSection pull-left"
|
||||||
href="http://ohif.org">
|
href="http://ohif.org">
|
||||||
<svg class="logoImage">
|
<svg class="logoImage">
|
||||||
<use xlink:href="/packages/viewerbase/assets/icons.svg#icon-ohif-logo"></use>
|
<use xlink:href="/packages/ohif_viewerbase/assets/icons.svg#icon-ohif-logo"></use>
|
||||||
</svg>
|
</svg>
|
||||||
<div class="logoText">
|
<div class="logoText">
|
||||||
Open Health Imaging Foundation
|
Open Health Imaging Foundation
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { Template } from 'meteor/templating';
|
import { Template } from 'meteor/templating';
|
||||||
import { Session } from 'meteor/session';
|
import { Session } from 'meteor/session';
|
||||||
|
|
||||||
const worklistContentId = 'worklistTab';
|
const studylistContentId = 'studylistTab';
|
||||||
let lastContentId;
|
let lastContentId;
|
||||||
|
|
||||||
// Define the ViewerData global object
|
// Define the ViewerData global object
|
||||||
@ -15,8 +15,8 @@ Template.ohifViewer.events({
|
|||||||
'click .js-toggle-studyList'() {
|
'click .js-toggle-studyList'() {
|
||||||
const contentId = Session.get('activeContentId');
|
const contentId = Session.get('activeContentId');
|
||||||
|
|
||||||
if (contentId !== worklistContentId) {
|
if (contentId !== studylistContentId) {
|
||||||
switchToTab(worklistContentId);
|
switchToTab(studylistContentId);
|
||||||
} else {
|
} else {
|
||||||
switchToTab(lastContentId);
|
switchToTab(lastContentId);
|
||||||
}
|
}
|
||||||
@ -35,7 +35,7 @@ Template.ohifViewer.helpers({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (contentId === worklistContentId) {
|
if (contentId === studylistContentId) {
|
||||||
return 'Back to viewer';
|
return 'Back to viewer';
|
||||||
} else {
|
} else {
|
||||||
lastContentId = contentId;
|
lastContentId = contentId;
|
||||||
@ -44,6 +44,6 @@ Template.ohifViewer.helpers({
|
|||||||
},
|
},
|
||||||
|
|
||||||
onStudyList() {
|
onStudyList() {
|
||||||
return (Session.get('activeContentId') === 'worklistTab');
|
return (Session.get('activeContentId') === 'studylistTab');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -9,6 +9,8 @@ $expandedHeight = 160px
|
|||||||
|
|
||||||
.topBar
|
.topBar
|
||||||
height: $topBarHeight
|
height: $topBarHeight
|
||||||
|
overflow: hidden
|
||||||
|
padding: 1rem $studyListPadding 0
|
||||||
theme('color', '$textPrimaryColor')
|
theme('color', '$textPrimaryColor')
|
||||||
theme('background-color', '$primaryBackgroundColor')
|
theme('background-color', '$primaryBackgroundColor')
|
||||||
transition(all 0.5s ease)
|
transition(all 0.5s ease)
|
||||||
@ -19,7 +21,7 @@ $expandedHeight = 160px
|
|||||||
text-decoration: none
|
text-decoration: none
|
||||||
|
|
||||||
.logoImage
|
.logoImage
|
||||||
margin: 0 8px
|
margin: 0 8px 0 0
|
||||||
width: 30px
|
width: 30px
|
||||||
|
|
||||||
.logoText
|
.logoText
|
||||||
@ -53,12 +55,11 @@ $expandedHeight = 160px
|
|||||||
.brandSection
|
.brandSection
|
||||||
height: 100%
|
height: 100%
|
||||||
width: 80%
|
width: 80%
|
||||||
padding-left: 50px
|
|
||||||
line-height: $expandedHeight
|
line-height: $expandedHeight
|
||||||
|
|
||||||
.logoImage
|
.logoImage
|
||||||
width: 50px
|
width: 50px
|
||||||
margin: 0 20px
|
margin: 0 20px 0 0
|
||||||
|
|
||||||
.logoText
|
.logoText
|
||||||
font-size: 30px
|
font-size: 30px
|
||||||
@ -69,7 +70,7 @@ $expandedHeight = 160px
|
|||||||
top: 5px
|
top: 5px
|
||||||
left: 5px
|
left: 5px
|
||||||
|
|
||||||
#worklistTabs
|
#studylistTabs
|
||||||
height: "calc(100% - %s)" % $topBarHeight
|
height: "calc(100% - %s)" % $topBarHeight
|
||||||
|
|
||||||
.tab-pane
|
.tab-pane
|
||||||
|
|||||||
@ -19,7 +19,7 @@ Template.toolbarSection.helpers({
|
|||||||
value: instance.data.state,
|
value: instance.data.state,
|
||||||
options: [{
|
options: [{
|
||||||
value: 'studies',
|
value: 'studies',
|
||||||
svgLink: '/packages/viewerbase/assets/icons.svg#icon-studies',
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-studies',
|
||||||
svgWidth: 15,
|
svgWidth: 15,
|
||||||
svgHeight: 13,
|
svgHeight: 13,
|
||||||
bottomLabel: 'Series'
|
bottomLabel: 'Series'
|
||||||
@ -47,35 +47,35 @@ Template.toolbarSection.helpers({
|
|||||||
id: 'zoom',
|
id: 'zoom',
|
||||||
title: 'Zoom',
|
title: 'Zoom',
|
||||||
classes: 'imageViewerTool',
|
classes: 'imageViewerTool',
|
||||||
svgLink: '/packages/viewerbase/assets/icons.svg#icon-tools-zoom'
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-zoom'
|
||||||
});
|
});
|
||||||
|
|
||||||
buttonData.push({
|
buttonData.push({
|
||||||
id: 'wwwc',
|
id: 'wwwc',
|
||||||
title: 'Levels',
|
title: 'Levels',
|
||||||
classes: 'imageViewerTool',
|
classes: 'imageViewerTool',
|
||||||
svgLink: '/packages/viewerbase/assets/icons.svg#icon-tools-levels'
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-levels'
|
||||||
});
|
});
|
||||||
|
|
||||||
buttonData.push({
|
buttonData.push({
|
||||||
id: 'pan',
|
id: 'pan',
|
||||||
title: 'Pan',
|
title: 'Pan',
|
||||||
classes: 'imageViewerTool',
|
classes: 'imageViewerTool',
|
||||||
svgLink: '/packages/viewerbase/assets/icons.svg#icon-tools-pan'
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-pan'
|
||||||
});
|
});
|
||||||
|
|
||||||
buttonData.push({
|
buttonData.push({
|
||||||
id: 'length',
|
id: 'length',
|
||||||
title: 'Length',
|
title: 'Length',
|
||||||
classes: 'imageViewerTool toolbarSectionButton',
|
classes: 'imageViewerTool toolbarSectionButton',
|
||||||
svgLink: '/packages/viewerbase/assets/icons.svg#icon-tools-measure-temp'
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-measure-temp'
|
||||||
});
|
});
|
||||||
|
|
||||||
buttonData.push({
|
buttonData.push({
|
||||||
id: 'annotate',
|
id: 'annotate',
|
||||||
title: 'Annotate',
|
title: 'Annotate',
|
||||||
classes: 'imageViewerTool',
|
classes: 'imageViewerTool',
|
||||||
svgLink: '/packages/viewerbase/assets/icons.svg#icon-tools-measure-non-target'
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-measure-non-target'
|
||||||
});
|
});
|
||||||
|
|
||||||
buttonData.push({
|
buttonData.push({
|
||||||
|
|||||||
@ -6,10 +6,10 @@ if (Meteor.isClient){
|
|||||||
},
|
},
|
||||||
signIn: {
|
signIn: {
|
||||||
displayFullName: true,
|
displayFullName: true,
|
||||||
destination: '/worklist'
|
destination: '/studylist'
|
||||||
},
|
},
|
||||||
signUp: {
|
signUp: {
|
||||||
destination: '/worklist'
|
destination: '/studylist'
|
||||||
},
|
},
|
||||||
themeColors: {
|
themeColors: {
|
||||||
primary: ""
|
primary: ""
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template name="app">
|
<template name="app">
|
||||||
<div class="topBar noselect {{#if onStudyList}}studyList{{/if}}">
|
<div class="topBar noselect {{#if onStudyList}}studyList{{/if}}">
|
||||||
<div class="clearfix p-x-1 p-t-1">
|
<div class="clearfix">
|
||||||
<a target='_blank'
|
<a target='_blank'
|
||||||
class="brandSection pull-left"
|
class="brandSection pull-left"
|
||||||
href="http://ohif.org">
|
href="http://ohif.org">
|
||||||
|
|||||||
@ -9,6 +9,8 @@ $expandedHeight = 160px
|
|||||||
|
|
||||||
.topBar
|
.topBar
|
||||||
height: $topBarHeight
|
height: $topBarHeight
|
||||||
|
overflow: hidden
|
||||||
|
padding: 1rem $studyListPadding 0
|
||||||
theme('color', '$textPrimaryColor')
|
theme('color', '$textPrimaryColor')
|
||||||
theme('background-color', '$primaryBackgroundColor')
|
theme('background-color', '$primaryBackgroundColor')
|
||||||
transition(all 0.5s ease)
|
transition(all 0.5s ease)
|
||||||
@ -19,7 +21,7 @@ $expandedHeight = 160px
|
|||||||
text-decoration: none
|
text-decoration: none
|
||||||
|
|
||||||
.logoImage
|
.logoImage
|
||||||
margin: 0 8px
|
margin: 0 8px 0 0
|
||||||
width: 30px
|
width: 30px
|
||||||
|
|
||||||
.logoText
|
.logoText
|
||||||
@ -53,12 +55,11 @@ $expandedHeight = 160px
|
|||||||
.brandSection
|
.brandSection
|
||||||
height: 100%
|
height: 100%
|
||||||
width: 80%
|
width: 80%
|
||||||
padding-left: 50px
|
|
||||||
line-height: $expandedHeight
|
line-height: $expandedHeight
|
||||||
|
|
||||||
.logoImage
|
.logoImage
|
||||||
width: 50px
|
width: 50px
|
||||||
margin: 0 20px
|
margin: 0 20px 0 0
|
||||||
|
|
||||||
.logoText
|
.logoText
|
||||||
font-size: 30px
|
font-size: 30px
|
||||||
|
|||||||
@ -79,7 +79,7 @@ class Bounded {
|
|||||||
const result = {};
|
const result = {};
|
||||||
|
|
||||||
// Check if the element is the window
|
// Check if the element is the window
|
||||||
if (element === window) {
|
if (!element || element === window) {
|
||||||
const $window = $(window);
|
const $window = $(window);
|
||||||
const width = $window.outerWidth();
|
const width = $window.outerWidth();
|
||||||
const height = $window.outerHeight();
|
const height = $window.outerHeight();
|
||||||
|
|||||||
@ -8,7 +8,7 @@ $themes['tide'] = {
|
|||||||
$uiStateErrorBorder: #993333
|
$uiStateErrorBorder: #993333
|
||||||
$uiStateErrorText: #661111
|
$uiStateErrorText: #661111
|
||||||
|
|
||||||
$uiLightGray: #516873
|
$uiGrayLight: #516873
|
||||||
$uiGray: #263340
|
$uiGray: #263340
|
||||||
$uiGrayDark: #16202B
|
$uiGrayDark: #16202B
|
||||||
$uiGrayDarker: #151A1F
|
$uiGrayDarker: #151A1F
|
||||||
|
|||||||
@ -8,7 +8,7 @@ $themes['tigerlilly'] = {
|
|||||||
$uiStateErrorBorder: #CC6666
|
$uiStateErrorBorder: #CC6666
|
||||||
$uiStateErrorText: #661111
|
$uiStateErrorText: #661111
|
||||||
|
|
||||||
$uiLightGray: #516873
|
$uiGrayLight: #516873
|
||||||
$uiGray: #263340
|
$uiGray: #263340
|
||||||
$uiGrayDark: #16202B
|
$uiGrayDark: #16202B
|
||||||
$uiGrayDarker: #151A1F
|
$uiGrayDarker: #151A1F
|
||||||
|
|||||||
@ -6,6 +6,8 @@ $toolbarHeight = 78px
|
|||||||
$toolbarDrawerHeight = 62px
|
$toolbarDrawerHeight = 62px
|
||||||
$studiesSidebarMenuWidth = 307px
|
$studiesSidebarMenuWidth = 307px
|
||||||
$lesionsSidebarMenuWidth = 323px
|
$lesionsSidebarMenuWidth = 323px
|
||||||
|
$studyListPadding = 8%
|
||||||
|
$studyListPaddingMediumScreen = 10px
|
||||||
|
|
||||||
// Fonts
|
// Fonts
|
||||||
$logoFontFamily = "Sanchez"
|
$logoFontFamily = "Sanchez"
|
||||||
|
|||||||
@ -1,291 +1,291 @@
|
|||||||
import { _ } from 'meteor/underscore';
|
import { _ } from 'meteor/underscore';
|
||||||
|
|
||||||
// Uses NodeJS 'net'
|
// Uses NodeJS 'net'
|
||||||
// https://nodejs.org/api/net.html
|
// https://nodejs.org/api/net.html
|
||||||
var net = Npm.require('net');
|
var net = Npm.require('net');
|
||||||
var Socket = net.Socket;
|
var Socket = net.Socket;
|
||||||
|
|
||||||
Connection = function(options) {
|
Connection = function(options) {
|
||||||
EventEmitter.call(this);
|
EventEmitter.call(this);
|
||||||
this.options = Object.assign({
|
this.options = Object.assign({
|
||||||
maxPackageSize: C.DEFAULT_MAX_PACKAGE_SIZE,
|
maxPackageSize: C.DEFAULT_MAX_PACKAGE_SIZE,
|
||||||
idle: false,
|
idle: false,
|
||||||
reconnect: true,
|
reconnect: true,
|
||||||
vr: {
|
vr: {
|
||||||
split: true
|
split: true
|
||||||
}
|
}
|
||||||
}, options);
|
}, options);
|
||||||
|
|
||||||
this.reset();
|
this.reset();
|
||||||
};
|
};
|
||||||
|
|
||||||
util.inherits(Connection, EventEmitter);
|
util.inherits(Connection, EventEmitter);
|
||||||
|
|
||||||
var StoreHandle = function() {
|
var StoreHandle = function() {
|
||||||
EventEmitter.call(this);
|
EventEmitter.call(this);
|
||||||
};
|
};
|
||||||
|
|
||||||
util.inherits(StoreHandle, EventEmitter);
|
util.inherits(StoreHandle, EventEmitter);
|
||||||
|
|
||||||
Connection.prototype.reset = function() {
|
Connection.prototype.reset = function() {
|
||||||
this.defaultPeer = null;
|
this.defaultPeer = null;
|
||||||
this.defaultServer = null;
|
this.defaultServer = null;
|
||||||
|
|
||||||
_.each(this.peers, peerInfo => {
|
_.each(this.peers, peerInfo => {
|
||||||
_.each(peerInfo.sockets, socket => socket.emit('close'));
|
_.each(peerInfo.sockets, socket => socket.emit('close'));
|
||||||
});
|
});
|
||||||
|
|
||||||
this.peers = {};
|
this.peers = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
Connection.prototype.addPeer = function(options) {
|
Connection.prototype.addPeer = function(options) {
|
||||||
if (!options.aeTitle || !options.host || !options.port) {
|
if (!options.aeTitle || !options.host || !options.port) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var peer = {
|
var peer = {
|
||||||
host: options.host,
|
host: options.host,
|
||||||
port: options.port,
|
port: options.port,
|
||||||
sockets: {}
|
sockets: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.peers[options.aeTitle] = peer;
|
this.peers[options.aeTitle] = peer;
|
||||||
if (options.default) {
|
if (options.default) {
|
||||||
if (options.server) {
|
if (options.server) {
|
||||||
this.defaultServer = options.aeTitle;
|
this.defaultServer = options.aeTitle;
|
||||||
} else {
|
} else {
|
||||||
this.defaultPeer = options.aeTitle;
|
this.defaultPeer = options.aeTitle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.server) {
|
if (options.server) {
|
||||||
//start listening
|
//start listening
|
||||||
peer.server = net.createServer();
|
peer.server = net.createServer();
|
||||||
peer.server.listen(options.port, options.host, function() {
|
peer.server.listen(options.port, options.host, function() {
|
||||||
console.log('listening on %j', this.address());
|
console.log('listening on %j', this.address());
|
||||||
});
|
});
|
||||||
peer.server.on('error', function(err) {
|
peer.server.on('error', function(err) {
|
||||||
console.log('server error %j', err);
|
console.log('server error %j', err);
|
||||||
});
|
});
|
||||||
peer.server.on('connection', nativeSocket => {
|
peer.server.on('connection', nativeSocket => {
|
||||||
//incoming connections
|
//incoming connections
|
||||||
var socket = new CSocket(nativeSocket, this.options);
|
var socket = new CSocket(nativeSocket, this.options);
|
||||||
this.addSocket(options.aeTitle, socket);
|
this.addSocket(options.aeTitle, socket);
|
||||||
|
|
||||||
//close server on close socket
|
//close server on close socket
|
||||||
socket.on('close', function() {
|
socket.on('close', function() {
|
||||||
peer.server.close();
|
peer.server.close();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Connection.prototype.selectPeer = function(aeTitle) {
|
Connection.prototype.selectPeer = function(aeTitle) {
|
||||||
if (!aeTitle || !this.peers[aeTitle]) {
|
if (!aeTitle || !this.peers[aeTitle]) {
|
||||||
throw 'No such peer';
|
throw 'No such peer';
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.peers[aeTitle];
|
return this.peers[aeTitle];
|
||||||
};
|
};
|
||||||
|
|
||||||
Connection.prototype._sendFile = function(socket, sHandle, file, maxSend, metaLength, list) {
|
Connection.prototype._sendFile = function(socket, sHandle, file, maxSend, metaLength, list) {
|
||||||
var fileNameText = typeof file.file === 'string' ? file.file : 'buffer';
|
var fileNameText = typeof file.file === 'string' ? file.file : 'buffer';
|
||||||
console.log('Sending file ' + fileNameText);
|
console.log('Sending file ' + fileNameText);
|
||||||
var useContext = socket.getContextByUID(file.context);
|
var useContext = socket.getContextByUID(file.context);
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
PDU.generatePDatas(useContext.id, file.file, maxSend, null, metaLength, function(err, handle) {
|
PDU.generatePDatas(useContext.id, file.file, maxSend, null, metaLength, function(err, handle) {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.log('Error while sending file');
|
console.log('Error while sending file');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var processNext = function() {
|
var processNext = function() {
|
||||||
var next = list.shift();
|
var next = list.shift();
|
||||||
if (next) {
|
if (next) {
|
||||||
self._sendFile(socket, sHandle, next, maxSend, metaLength, list);
|
self._sendFile(socket, sHandle, next, maxSend, metaLength, list);
|
||||||
} else {
|
} else {
|
||||||
socket.release();
|
socket.release();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var store = socket.storeInstance(useContext.abstractSyntax, file.uid);
|
var store = socket.storeInstance(useContext.abstractSyntax, file.uid);
|
||||||
handle.on('pdv', function(pdv) {
|
handle.on('pdv', function(pdv) {
|
||||||
socket.sendPData(pdv);
|
socket.sendPData(pdv);
|
||||||
});
|
});
|
||||||
handle.on('error', function(err) {
|
handle.on('error', function(err) {
|
||||||
sHandle.emit('file', err, fileNameText);
|
sHandle.emit('file', err, fileNameText);
|
||||||
processNext();
|
processNext();
|
||||||
});
|
});
|
||||||
store.on('response', function(msg) {
|
store.on('response', function(msg) {
|
||||||
var statusText = msg.getStatus().toString(16);
|
var statusText = msg.getStatus().toString(16);
|
||||||
console.log('STORE reponse with status', statusText);
|
console.log('STORE reponse with status', statusText);
|
||||||
var error = null;
|
var error = null;
|
||||||
if (msg.failure()) {
|
if (msg.failure()) {
|
||||||
error = new Error(statusText);
|
error = new Error(statusText);
|
||||||
}
|
}
|
||||||
|
|
||||||
sHandle.emit('file', error, fileNameText);
|
sHandle.emit('file', error, fileNameText);
|
||||||
processNext();
|
processNext();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
Connection.prototype.storeInstances = function(fileList) {
|
Connection.prototype.storeInstances = function(fileList) {
|
||||||
var contexts = {};
|
var contexts = {};
|
||||||
var read = 0;
|
var read = 0;
|
||||||
var length = fileList.length;
|
var length = fileList.length;
|
||||||
var toSend = [];
|
var toSend = [];
|
||||||
var self = this;
|
var self = this;
|
||||||
var handle = new StoreHandle();
|
var handle = new StoreHandle();
|
||||||
var lastProcessedMetaLength;
|
var lastProcessedMetaLength;
|
||||||
|
|
||||||
fileList.forEach(function(bufferOrFile) {
|
fileList.forEach(function(bufferOrFile) {
|
||||||
var fileNameText = typeof bufferOrFile === 'string' ? bufferOrFile : 'buffer';
|
var fileNameText = typeof bufferOrFile === 'string' ? bufferOrFile : 'buffer';
|
||||||
DicomMessage.readMetaHeader(bufferOrFile, function(err, metaMessage, metaLength) {
|
DicomMessage.readMetaHeader(bufferOrFile, function(err, metaMessage, metaLength) {
|
||||||
read++;
|
read++;
|
||||||
if (err) {
|
if (err) {
|
||||||
handle.emit('file', err, fileNameText);
|
handle.emit('file', err, fileNameText);
|
||||||
if (read === length && toSend.length > 0 && lastProcessedMetaLength) {
|
if (read === length && toSend.length > 0 && lastProcessedMetaLength) {
|
||||||
sendProcessedFiles(self, contexts, toSend, handle, lastProcessedMetaLength);
|
sendProcessedFiles(self, contexts, toSend, handle, lastProcessedMetaLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('Dicom file ' + (typeof bufferOrFile === 'string' ? bufferOrFile : 'buffer') + ' found');
|
console.log('Dicom file ' + (typeof bufferOrFile === 'string' ? bufferOrFile : 'buffer') + ' found');
|
||||||
lastProcessedMetaLength = metaLength;
|
lastProcessedMetaLength = metaLength;
|
||||||
var syntax = metaMessage.getValue(0x00020010);
|
var syntax = metaMessage.getValue(0x00020010);
|
||||||
var sopClassUID = metaMessage.getValue(0x00020002);
|
var sopClassUID = metaMessage.getValue(0x00020002);
|
||||||
var instanceUID = metaMessage.getValue(0x00020003);
|
var instanceUID = metaMessage.getValue(0x00020003);
|
||||||
|
|
||||||
if (!contexts[sopClassUID]) {
|
if (!contexts[sopClassUID]) {
|
||||||
contexts[sopClassUID] = [];
|
contexts[sopClassUID] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (syntax && contexts[sopClassUID].indexOf(syntax) === -1) {
|
if (syntax && contexts[sopClassUID].indexOf(syntax) === -1) {
|
||||||
contexts[sopClassUID].push(syntax);
|
contexts[sopClassUID].push(syntax);
|
||||||
}
|
}
|
||||||
|
|
||||||
toSend.push({
|
toSend.push({
|
||||||
file: bufferOrFile,
|
file: bufferOrFile,
|
||||||
context: sopClassUID,
|
context: sopClassUID,
|
||||||
uid: instanceUID
|
uid: instanceUID
|
||||||
});
|
});
|
||||||
|
|
||||||
if (read === length) {
|
if (read === length) {
|
||||||
sendProcessedFiles(self, contexts, toSend, handle, metaLength);
|
sendProcessedFiles(self, contexts, toSend, handle, metaLength);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return handle;
|
return handle;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Starts to send dcm files
|
// Starts to send dcm files
|
||||||
sendProcessedFiles = function(self, contexts, toSend, handle, metaLength) {
|
sendProcessedFiles = function(self, contexts, toSend, handle, metaLength) {
|
||||||
var useContexts = [];
|
var useContexts = [];
|
||||||
_.each(contexts, (useSyntaxes, context) => {
|
_.each(contexts, (useSyntaxes, context) => {
|
||||||
if (useSyntaxes.length > 0) {
|
if (useSyntaxes.length > 0) {
|
||||||
useContexts.push({
|
useContexts.push({
|
||||||
context: context,
|
context: context,
|
||||||
syntaxes: useSyntaxes
|
syntaxes: useSyntaxes
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
throw 'No syntax specified for context ' + context;
|
throw 'No syntax specified for context ' + context;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
self.associate({
|
self.associate({
|
||||||
contexts: useContexts
|
contexts: useContexts
|
||||||
}, function(ac) {
|
}, function(ac) {
|
||||||
var maxSend = ac.getMaxSize();
|
var maxSend = ac.getMaxSize();
|
||||||
var next = toSend.shift();
|
var next = toSend.shift();
|
||||||
self._sendFile(this, handle, next, maxSend, metaLength, toSend);
|
self._sendFile(this, handle, next, maxSend, metaLength, toSend);
|
||||||
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
Connection.prototype.storeResponse = function(messageId, msg) {
|
Connection.prototype.storeResponse = function(messageId, msg) {
|
||||||
var rq = this.messages[messageId];
|
var rq = this.messages[messageId];
|
||||||
|
|
||||||
if (rq.listener[2]) {
|
if (rq.listener[2]) {
|
||||||
var status = rq.listener[2].call(this, msg);
|
var status = rq.listener[2].call(this, msg);
|
||||||
if (status !== undefined && status !== null && rq.command.store) {
|
if (status !== undefined && status !== null && rq.command.store) {
|
||||||
//store ok, ready to send c-store-rsp
|
//store ok, ready to send c-store-rsp
|
||||||
var storeSr = rq.command.store;
|
var storeSr = rq.command.store;
|
||||||
var replyMessage = storeSr.replyWith(status);
|
var replyMessage = storeSr.replyWith(status);
|
||||||
replyMessage.setAffectedSOPInstanceUID(this.lastCommand.getSOPInstanceUID());
|
replyMessage.setAffectedSOPInstanceUID(this.lastCommand.getSOPInstanceUID());
|
||||||
replyMessage.setReplyMessageId(this.lastCommand.messageId);
|
replyMessage.setReplyMessageId(this.lastCommand.messageId);
|
||||||
this.sendMessage(replyMessage, null, null, storeSr);
|
this.sendMessage(replyMessage, null, null, storeSr);
|
||||||
} else {
|
} else {
|
||||||
throw 'Missing store status';
|
throw 'Missing store status';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Connection.prototype.allClosed = function() {
|
Connection.prototype.allClosed = function() {
|
||||||
var allClosed = true;
|
var allClosed = true;
|
||||||
for (var i in this.peers) {
|
for (var i in this.peers) {
|
||||||
if (Object.keys(peers[i].sockets).length > 0) {
|
if (Object.keys(peers[i].sockets).length > 0) {
|
||||||
allClosed = false;
|
allClosed = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return allClosed;
|
return allClosed;
|
||||||
};
|
};
|
||||||
|
|
||||||
Connection.prototype.addSocket = function(hostAE, socket) {
|
Connection.prototype.addSocket = function(hostAE, socket) {
|
||||||
var peerInfo = this.selectPeer(hostAE);
|
var peerInfo = this.selectPeer(hostAE);
|
||||||
|
|
||||||
peerInfo.sockets[socket.id] = socket;
|
peerInfo.sockets[socket.id] = socket;
|
||||||
|
|
||||||
socket.on('close', function() {
|
socket.on('close', function() {
|
||||||
if (peerInfo.sockets[this.id]) {
|
if (peerInfo.sockets[this.id]) {
|
||||||
delete peerInfo.sockets[this.id];
|
delete peerInfo.sockets[this.id];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
Connection.prototype.associate = function(options, callback) {
|
Connection.prototype.associate = function(options, callback) {
|
||||||
var hostAE = options.hostAE ? options.hostAE : this.defaultPeer;
|
var hostAE = options.hostAE ? options.hostAE : this.defaultPeer;
|
||||||
var sourceAE = options.sourceAE ? options.sourceAE : this.defaultServer;
|
var sourceAE = options.sourceAE ? options.sourceAE : this.defaultServer;
|
||||||
|
|
||||||
if (!hostAE || !sourceAE) {
|
if (!hostAE || !sourceAE) {
|
||||||
throw 'Peers not provided or no defaults in settings';
|
throw 'Peers not provided or no defaults in settings';
|
||||||
}
|
}
|
||||||
|
|
||||||
var peerInfo = this.selectPeer(hostAE);
|
var peerInfo = this.selectPeer(hostAE);
|
||||||
var nativeSocket = new Socket();
|
var nativeSocket = new Socket();
|
||||||
|
|
||||||
var socket = new CSocket(nativeSocket, this.options);
|
var socket = new CSocket(nativeSocket, this.options);
|
||||||
|
|
||||||
if (callback) {
|
if (callback) {
|
||||||
socket.once('associated', callback);
|
socket.once('associated', callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('Starting Connection...');
|
console.log('Starting Connection...');
|
||||||
|
|
||||||
socket.setCalledAe(hostAE);
|
socket.setCalledAe(hostAE);
|
||||||
socket.setCallingAE(sourceAE);
|
socket.setCallingAE(sourceAE);
|
||||||
|
|
||||||
console.log(peerInfo);
|
console.log(peerInfo);
|
||||||
|
|
||||||
nativeSocket.connect({
|
nativeSocket.connect({
|
||||||
host: peerInfo.host,
|
host: peerInfo.host,
|
||||||
port: peerInfo.port
|
port: peerInfo.port
|
||||||
}, () => {
|
}, () => {
|
||||||
//connected
|
//connected
|
||||||
this.addSocket(hostAE, socket);
|
this.addSocket(hostAE, socket);
|
||||||
|
|
||||||
if (options.contexts) {
|
if (options.contexts) {
|
||||||
socket.setPresentationContexts(options.contexts);
|
socket.setPresentationContexts(options.contexts);
|
||||||
} else {
|
} else {
|
||||||
throw 'Contexts must be specified';
|
throw 'Contexts must be specified';
|
||||||
}
|
}
|
||||||
|
|
||||||
socket.associate();
|
socket.associate();
|
||||||
});
|
});
|
||||||
|
|
||||||
return socket;
|
return socket;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -12,11 +12,10 @@ body
|
|||||||
|
|
||||||
.studylistContainer
|
.studylistContainer
|
||||||
theme('background-color', '$primaryBackgroundColor')
|
theme('background-color', '$primaryBackgroundColor')
|
||||||
margin: 0 auto
|
margin: 2px auto 0
|
||||||
color: white
|
color: white
|
||||||
float: left;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
.tab-content
|
.tab-content
|
||||||
width: 100%
|
width: 100%
|
||||||
height: calc(100% - 91px)
|
height: calc(100% - 91px)
|
||||||
@ -31,4 +30,4 @@ body
|
|||||||
|
|
||||||
.viewerContainer
|
.viewerContainer
|
||||||
height: 100%
|
height: 100%
|
||||||
width: 100%
|
width: 100%
|
||||||
|
|||||||
@ -4,9 +4,6 @@
|
|||||||
font-size: 13px
|
font-size: 13px
|
||||||
font-weight: normal !important
|
font-weight: normal !important
|
||||||
|
|
||||||
.rows-per-page
|
|
||||||
padding-top: 20px
|
|
||||||
|
|
||||||
label
|
label
|
||||||
font-weight: normal
|
font-weight: normal
|
||||||
|
|
||||||
@ -15,18 +12,23 @@
|
|||||||
color: white
|
color: white
|
||||||
|
|
||||||
.page-number
|
.page-number
|
||||||
|
margin: 0
|
||||||
text-align: right
|
text-align: right
|
||||||
|
|
||||||
label
|
label
|
||||||
font-weight: normal
|
font-weight: normal
|
||||||
|
|
||||||
ul#pagination
|
ul#pagination
|
||||||
|
margin: 0
|
||||||
|
|
||||||
li
|
li
|
||||||
a
|
a
|
||||||
padding: 4px 8px
|
padding: 4px 8px
|
||||||
theme('background-color', '$primaryBackgroundColor')
|
theme('background-color', '$primaryBackgroundColor')
|
||||||
|
theme('border-color', '$uiGray')
|
||||||
|
theme('background-color', '$uiGrayDarkest')
|
||||||
color: white
|
color: white
|
||||||
|
padding: 4px 8px
|
||||||
|
|
||||||
&:hover
|
&:hover
|
||||||
theme('color', '$activeColor')
|
theme('color', '$activeColor')
|
||||||
@ -41,3 +43,13 @@
|
|||||||
a:hover
|
a:hover
|
||||||
color: inherit
|
color: inherit
|
||||||
|
|
||||||
|
&:not(.disabled):hover a
|
||||||
|
theme('background-color', '$uiGrayDark')
|
||||||
|
theme('color', '$activeColor')
|
||||||
|
|
||||||
|
&.active a
|
||||||
|
theme('background-color', '$uiGrayDark')
|
||||||
|
theme('color', '$activeColor')
|
||||||
|
|
||||||
|
&.disabled a
|
||||||
|
theme('color', '$uiGrayLight')
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template name="studylistResult">
|
<template name="studylistResult">
|
||||||
<div class="studyListToolbar">
|
<div class="studyListToolbar clearfix">
|
||||||
<div class="header">
|
<div class="header pull-left">
|
||||||
Study list
|
Study list
|
||||||
</div>
|
</div>
|
||||||
<div class="studyCount pull-right">
|
<div class="studyCount pull-right">
|
||||||
@ -104,4 +104,4 @@
|
|||||||
{{/unless}}
|
{{/unless}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -8,23 +8,21 @@ $inputBackgroundColor = #2c363f
|
|||||||
$inputPlaceholderColor = lightgray
|
$inputPlaceholderColor = lightgray
|
||||||
|
|
||||||
$studyListToolbarHeight = 75px
|
$studyListToolbarHeight = 75px
|
||||||
$tablePadding = 8%
|
|
||||||
$bodyCellHeight = 40px
|
$bodyCellHeight = 40px
|
||||||
|
|
||||||
.studyListToolbar
|
.studyListToolbar
|
||||||
theme('background', '$uiGrayDarker')
|
theme('background', '$uiGrayDarker')
|
||||||
height: $studyListToolbarHeight
|
height: $studyListToolbarHeight
|
||||||
border-bottom: 2px solid black
|
margin-bottom: 2px
|
||||||
padding: 0 30px
|
padding: 0 $studyListPadding
|
||||||
|
|
||||||
div
|
&>div
|
||||||
display: inline-block
|
display: inline-block
|
||||||
|
|
||||||
.header
|
.header
|
||||||
font-size: 22px
|
font-size: 22px
|
||||||
font-weight: 300
|
font-weight: 300
|
||||||
color: $tableTextSecondaryColor
|
color: $tableTextSecondaryColor
|
||||||
padding: 0 10px
|
|
||||||
line-height: $studyListToolbarHeight
|
line-height: $studyListToolbarHeight
|
||||||
|
|
||||||
.studylistToolbar
|
.studylistToolbar
|
||||||
@ -35,20 +33,35 @@ $bodyCellHeight = 40px
|
|||||||
theme('color', '$uiSkyBlue')
|
theme('color', '$uiSkyBlue')
|
||||||
font-size: 40px
|
font-size: 40px
|
||||||
font-weight: 100
|
font-weight: 100
|
||||||
padding: 0 10px
|
|
||||||
line-height: $studyListToolbarHeight
|
line-height: $studyListToolbarHeight
|
||||||
|
|
||||||
.theadBackground
|
.theadBackground
|
||||||
theme('background-color', '$uiGrayDarker')
|
height: 121px
|
||||||
width: 100%
|
|
||||||
height: 122px
|
|
||||||
position: absolute
|
position: absolute
|
||||||
z-index: 1
|
width: 100%
|
||||||
|
|
||||||
|
&:before, &:after
|
||||||
|
content: ''
|
||||||
|
display: block
|
||||||
|
left: 0
|
||||||
|
position: absolute
|
||||||
|
width: 100%
|
||||||
|
|
||||||
|
&:before
|
||||||
|
theme('background-color', '$uiGrayDarker')
|
||||||
|
height: 100%
|
||||||
|
top: 0
|
||||||
|
z-index: 1
|
||||||
|
|
||||||
|
&:after
|
||||||
|
theme('background-color', '$uiSkyBlue')
|
||||||
|
bottom: -1px
|
||||||
|
height: 1px
|
||||||
|
z-index: 3
|
||||||
|
|
||||||
#studyListContainer
|
#studyListContainer
|
||||||
background: black
|
|
||||||
width: 100%
|
width: 100%
|
||||||
padding: 0 $tablePadding
|
padding: 0 $studyListPadding
|
||||||
position: absolute
|
position: absolute
|
||||||
z-index: 2
|
z-index: 2
|
||||||
|
|
||||||
@ -64,7 +77,6 @@ $bodyCellHeight = 40px
|
|||||||
|
|
||||||
table#tblStudyList
|
table#tblStudyList
|
||||||
thead
|
thead
|
||||||
theme('background-color', '$uiGrayDarker')
|
|
||||||
white-space: nowrap
|
white-space: nowrap
|
||||||
|
|
||||||
tr
|
tr
|
||||||
@ -144,15 +156,10 @@ $bodyCellHeight = 40px
|
|||||||
color: $tableTextPrimaryColor
|
color: $tableTextPrimaryColor
|
||||||
font-weight: 300
|
font-weight: 300
|
||||||
border-top: 1px solid #436270
|
border-top: 1px solid #436270
|
||||||
|
border-bottom: 1px solid #436270
|
||||||
white-space: nowrap
|
white-space: nowrap
|
||||||
transition(all 0.1s ease)
|
transition(all 0.1s ease)
|
||||||
|
|
||||||
&:first-child
|
|
||||||
padding-left: $tablePadding
|
|
||||||
|
|
||||||
&:last-child
|
|
||||||
padding-right: $tablePadding
|
|
||||||
|
|
||||||
&:hover, &:active, &.active
|
&:hover, &:active, &.active
|
||||||
background-color: $tableHoverColor
|
background-color: $tableHoverColor
|
||||||
color: white
|
color: white
|
||||||
@ -163,7 +170,6 @@ $bodyCellHeight = 40px
|
|||||||
border-bottom: 1px solid #436270
|
border-bottom: 1px solid #436270
|
||||||
background-color: $tableHoverColor
|
background-color: $tableHoverColor
|
||||||
|
|
||||||
|
|
||||||
@media only screen and (max-width: 1362px)
|
@media only screen and (max-width: 1362px)
|
||||||
$tablePadding = 5%
|
$tablePadding = 5%
|
||||||
|
|
||||||
@ -238,4 +244,4 @@ $bodyCellHeight = 40px
|
|||||||
.worklistPagination
|
.worklistPagination
|
||||||
.row
|
.row
|
||||||
margin-left: 0
|
margin-left: 0
|
||||||
margin-right: 0
|
margin-right: 0
|
||||||
@ -24,4 +24,4 @@
|
|||||||
opacity: 0
|
opacity: 0
|
||||||
overflow: hidden
|
overflow: hidden
|
||||||
position: absolute
|
position: absolute
|
||||||
z-index: -1
|
z-index: -1
|
||||||
|
|||||||
@ -19,7 +19,7 @@ const currentServerChangeHandler = () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switchToTab('worklistTab');
|
switchToTab('studylistTab');
|
||||||
};
|
};
|
||||||
|
|
||||||
CurrentServer.find().observe({
|
CurrentServer.find().observe({
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import './publications.js';
|
import './publications.js';
|
||||||
|
import './servers.js';
|
||||||
import './validateServerConfiguration.js';
|
import './validateServerConfiguration.js';
|
||||||
|
|
||||||
import './lib';
|
import './lib';
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import { Meteor } from 'meteor/meteor';
|
import { Meteor } from 'meteor/meteor';
|
||||||
|
import { _ } from 'meteor/underscore';
|
||||||
|
|
||||||
Meteor.startup(function() {
|
Meteor.startup(function() {
|
||||||
console.log('Adding Servers from JSON Configuration');
|
console.log('Adding Servers from JSON Configuration');
|
||||||
@ -72,7 +73,7 @@ class ServersControl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static remove(serverId) {
|
static remove(serverId) {
|
||||||
var query = {
|
const query = {
|
||||||
_id: serverId
|
_id: serverId
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
line-height: 18px
|
line-height: 18px
|
||||||
|
|
||||||
.caret-down
|
.caret-down
|
||||||
theme('color', '$uiLightGray')
|
theme('color', '$uiGrayLight')
|
||||||
margin: 0 4px 4px 2px
|
margin: 0 4px 4px 2px
|
||||||
|
|
||||||
ul.dropdown-menu
|
ul.dropdown-menu
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
.loadingTextDiv
|
.loadingTextDiv
|
||||||
margin: 30px
|
font-weight: 300
|
||||||
|
padding: 30px
|
||||||
text-align: center
|
text-align: center
|
||||||
font-weight: 300
|
|
||||||
@ -205,10 +205,6 @@ Template.thumbnailEntry.onCreated(() => {
|
|||||||
instance.isDragAndDrop = _.isUndefined(instance.data.viewportIndex);
|
instance.isDragAndDrop = _.isUndefined(instance.data.viewportIndex);
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.thumbnailEntry.onRendered(() => {
|
|
||||||
console.warn('thumbnailEntry onRendered');
|
|
||||||
});
|
|
||||||
|
|
||||||
Template.thumbnailEntry.events({
|
Template.thumbnailEntry.events({
|
||||||
// Event handlers for drag and drop
|
// Event handlers for drag and drop
|
||||||
'touchstart .thumbnailEntry, mousedown .thumbnailEntry'(event, instance) {
|
'touchstart .thumbnailEntry, mousedown .thumbnailEntry'(event, instance) {
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
<template name="standaloneViewer">
|
<template name="standaloneViewer">
|
||||||
<div class="topBar noselect">
|
<div class="topBar noselect">
|
||||||
<div class="clearfix p-x-1 p-t-1">
|
<div class="clearfix">
|
||||||
<a target='_blank'
|
<a target='_blank'
|
||||||
class="brandSection pull-left"
|
class="brandSection pull-left"
|
||||||
href="http://ohif.org">
|
href="http://ohif.org">
|
||||||
<svg class="logoImage">
|
<svg class="logoImage">
|
||||||
<use xlink:href="/packages/viewerbase/assets/icons.svg#icon-ohif-logo"></use>
|
<use xlink:href="/packages/ohif_viewerbase/assets/icons.svg#icon-ohif-logo"></use>
|
||||||
</svg>
|
</svg>
|
||||||
<div class="logoText">
|
<div class="logoText">
|
||||||
Open Health Imaging Foundation
|
Open Health Imaging Foundation
|
||||||
@ -14,4 +14,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{> viewer }}
|
{{> viewer }}
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -9,6 +9,8 @@ $expandedHeight = 160px
|
|||||||
|
|
||||||
.topBar
|
.topBar
|
||||||
height: $topBarHeight
|
height: $topBarHeight
|
||||||
|
overflow: hidden
|
||||||
|
padding: 1rem $studyListPadding 0
|
||||||
theme('color', '$textPrimaryColor')
|
theme('color', '$textPrimaryColor')
|
||||||
theme('background-color', '$primaryBackgroundColor')
|
theme('background-color', '$primaryBackgroundColor')
|
||||||
transition(all 0.5s ease)
|
transition(all 0.5s ease)
|
||||||
@ -19,7 +21,7 @@ $expandedHeight = 160px
|
|||||||
text-decoration: none
|
text-decoration: none
|
||||||
|
|
||||||
.logoImage
|
.logoImage
|
||||||
margin: 0 8px
|
margin: 0 8px 0 0
|
||||||
width: 30px
|
width: 30px
|
||||||
|
|
||||||
.logoText
|
.logoText
|
||||||
@ -50,17 +52,16 @@ $expandedHeight = 160px
|
|||||||
.brandSection
|
.brandSection
|
||||||
height: 100%
|
height: 100%
|
||||||
width: 80%
|
width: 80%
|
||||||
padding-left: 50px
|
|
||||||
line-height: $expandedHeight
|
line-height: $expandedHeight
|
||||||
|
|
||||||
.logoImage
|
.logoImage
|
||||||
width: 50px
|
width: 50px
|
||||||
margin: 0 20px
|
margin: 0 20px 0 0
|
||||||
|
|
||||||
.logoText
|
.logoText
|
||||||
font-size: 30px
|
font-size: 30px
|
||||||
|
|
||||||
#worklistTabs
|
#studylistTabs
|
||||||
height: "calc(100% - %s)" % $topBarHeight
|
height: "calc(100% - %s)" % $topBarHeight
|
||||||
|
|
||||||
.tab-pane
|
.tab-pane
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user