PWV-1: Fixing merging issues

This commit is contained in:
Bruno Alves de Faria 2016-10-01 13:58:21 -03:00 committed by Erik Ziegler
parent 481bf30a14
commit db0602def7
29 changed files with 392 additions and 488 deletions

View File

@ -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: ""

View File

@ -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">

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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');
} }
}); });

View File

@ -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

View File

@ -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({

View File

@ -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: ""

View File

@ -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">

View File

@ -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

View File

@ -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();

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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;
}; };

View File

@ -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%

View File

@ -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')

View File

@ -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>

View File

@ -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

View File

@ -24,4 +24,4 @@
opacity: 0 opacity: 0
overflow: hidden overflow: hidden
position: absolute position: absolute
z-index: -1 z-index: -1

View File

@ -19,7 +19,7 @@ const currentServerChangeHandler = () => {
return; return;
} }
switchToTab('worklistTab'); switchToTab('studylistTab');
}; };
CurrentServer.find().observe({ CurrentServer.find().observe({

View File

@ -1,4 +1,5 @@
import './publications.js'; import './publications.js';
import './servers.js';
import './validateServerConfiguration.js'; import './validateServerConfiguration.js';
import './lib'; import './lib';

View File

@ -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
}; };

View File

@ -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

View File

@ -1,4 +1,4 @@
.loadingTextDiv .loadingTextDiv
margin: 30px font-weight: 300
padding: 30px
text-align: center text-align: center
font-weight: 300

View File

@ -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) {

View File

@ -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>

View File

@ -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