Cleanup around viewerbase and worklist
This commit is contained in:
parent
0365e9963d
commit
5363880e40
@ -146,7 +146,7 @@ var cornerstoneTools = (function ($, cornerstone, cornerstoneMath, cornerstoneTo
|
|||||||
function updateLesionCollection(lesionData, currentElement) {
|
function updateLesionCollection(lesionData, currentElement) {
|
||||||
|
|
||||||
if (lesionData.active) {
|
if (lesionData.active) {
|
||||||
if(lesionData.timepointID != undefined && lesionData.timepointID != "") {
|
if(lesionData.timepointID !== undefined && lesionData.timepointID !== "") {
|
||||||
// Update Measurements Collection
|
// Update Measurements Collection
|
||||||
measurementManagerDAL.updateTimepointData(lesionData);
|
measurementManagerDAL.updateTimepointData(lesionData);
|
||||||
|
|
||||||
|
|||||||
@ -26,7 +26,7 @@ Template.lesionLocationDialog.onRendered(function () {
|
|||||||
// Observe Measurements Collection Changes
|
// Observe Measurements Collection Changes
|
||||||
Measurements.find().observe({
|
Measurements.find().observe({
|
||||||
added: function (lesionData) {
|
added: function (lesionData) {
|
||||||
lastAddedLesionData = lesionData
|
lastAddedLesionData = lesionData;
|
||||||
},
|
},
|
||||||
changed: function(lesionData) {
|
changed: function(lesionData) {
|
||||||
console.log("lesionData is changed!");
|
console.log("lesionData is changed!");
|
||||||
@ -44,7 +44,7 @@ Template.lesionLocationDialog.events({
|
|||||||
|
|
||||||
'change select#selectLesionLocation': function (e) {
|
'change select#selectLesionLocation': function (e) {
|
||||||
var el = $(e.target);
|
var el = $(e.target);
|
||||||
var selectedLocationIndex = el.val()
|
var selectedLocationIndex = el.val();
|
||||||
if(selectedLocationIndex !== "-1"){
|
if(selectedLocationIndex !== "-1"){
|
||||||
|
|
||||||
// Get selected location data
|
// Get selected location data
|
||||||
|
|||||||
@ -199,7 +199,7 @@ Template.thumbnailEntry.events({
|
|||||||
// Touch drag/drop events
|
// Touch drag/drop events
|
||||||
'touchstart .thumbnailEntry, mousedown .thumbnailEntry': function(e) {
|
'touchstart .thumbnailEntry, mousedown .thumbnailEntry': function(e) {
|
||||||
var data = Template.parentData(2);
|
var data = Template.parentData(2);
|
||||||
data.studyInstanceUid = this.stack.instances[0].studyInstanceUid;
|
data.studyInstanceUid = this.stack.studyInstanceUid;
|
||||||
data.seriesInstanceUid = this.stack.seriesInstanceUid;
|
data.seriesInstanceUid = this.stack.seriesInstanceUid;
|
||||||
thumbnailDragStartHandler(e, data);
|
thumbnailDragStartHandler(e, data);
|
||||||
},
|
},
|
||||||
|
|||||||
@ -10,6 +10,7 @@
|
|||||||
color: #ffffff
|
color: #ffffff
|
||||||
background-color: #424242
|
background-color: #424242
|
||||||
border-color: #424242
|
border-color: #424242
|
||||||
|
outline: none
|
||||||
|
|
||||||
&.active, &:active
|
&.active, &:active
|
||||||
background-color: #3B678E
|
background-color: #3B678E
|
||||||
@ -1,13 +1,13 @@
|
|||||||
<template name="viewportOverlay">
|
<template name="viewportOverlay">
|
||||||
<div class="imageViewerViewportOverlay noselect">
|
<div class="imageViewerViewportOverlay noselect">
|
||||||
<div class="topleft dicomTag">
|
<div class="topleft dicomTag">
|
||||||
<div>{{patientName}}</div>
|
<div>{{formatPN patientName}}</div>
|
||||||
<div>{{patientId}}</div>
|
<div>{{patientId}}</div>
|
||||||
<div></div>
|
<div></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="topright dicomTag">
|
<div class="topright dicomTag">
|
||||||
<div>{{studyDescription}}</div>
|
<div>{{studyDescription}}</div>
|
||||||
<div>{{studyDate}} {{studyTime}}</div>
|
<div>{{formatDA studyDate}} {{formatTM studyTime}}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bottomright dicomTag">
|
<div class="bottomright dicomTag">
|
||||||
<div>Zoom: {{formatNumberPrecision zoom 2}}%</div>
|
<div>Zoom: {{formatNumberPrecision zoom 2}}%</div>
|
||||||
|
|||||||
@ -12,6 +12,8 @@ createStacks = function(study) {
|
|||||||
if (!anInstance || !anInstance.rows) {
|
if (!anInstance || !anInstance.rows) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
series.studyInstanceUid = study.studyInstanceUid;
|
||||||
stacks.push(series);
|
stacks.push(series);
|
||||||
});
|
});
|
||||||
return stacks;
|
return stacks;
|
||||||
|
|||||||
@ -2,12 +2,8 @@ UI.registerHelper('formatDA', function (context, format, options) {
|
|||||||
if (!context) {
|
if (!context) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
/*var date = DICOMUtilities.toDate(context, '', false);
|
|
||||||
if(!date) {
|
|
||||||
return context;
|
|
||||||
}*/
|
|
||||||
var date = context;
|
var date = context;
|
||||||
var dateAsMoment = moment(date);
|
var dateAsMoment = moment(date, "YYYYMMDD");
|
||||||
var strFormat = "MMM D, YYYY";
|
var strFormat = "MMM D, YYYY";
|
||||||
if (options) {
|
if (options) {
|
||||||
strFormat = format;
|
strFormat = format;
|
||||||
|
|||||||
@ -1,20 +1,7 @@
|
|||||||
UI.registerHelper('formatDA', function (context, format, options) {
|
UI.registerHelper('formatPN', function (context, format, options) {
|
||||||
if (!context) {
|
if (!context) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
var pn = context;
|
var patientName = context.replace('^', ', ');
|
||||||
var str = '';
|
return patientName;
|
||||||
if(pn.prefix) {
|
|
||||||
str = pn.prefix + ' ';
|
|
||||||
}
|
|
||||||
str += (pn.familyName || '') + ', ';
|
|
||||||
str += (pn.givenName || '');
|
|
||||||
if(pn.middleName) {
|
|
||||||
str += ' ' + pn.middleName;
|
|
||||||
}
|
|
||||||
if(pn.suffix) {
|
|
||||||
str += ' ' + pn.suffix;
|
|
||||||
}
|
|
||||||
|
|
||||||
return str;
|
|
||||||
});
|
});
|
||||||
@ -10,9 +10,10 @@ addMetaData = function(imageId, data) {
|
|||||||
var metaData = {};
|
var metaData = {};
|
||||||
|
|
||||||
metaData.study = {
|
metaData.study = {
|
||||||
date: instanceMetaData.studyDate,
|
instanceUid: studyMetaData.studyInstanceUid,
|
||||||
time: instanceMetaData.studyTime,
|
date: studyMetaData.studyDate,
|
||||||
description: instanceMetaData.studyDescription
|
time: studyMetaData.studyTime,
|
||||||
|
description: studyMetaData.studyDescription
|
||||||
};
|
};
|
||||||
|
|
||||||
metaData.series = {
|
metaData.series = {
|
||||||
@ -29,8 +30,8 @@ addMetaData = function(imageId, data) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
metaData.patient = {
|
metaData.patient = {
|
||||||
name: instanceMetaData.patientName,
|
name: studyMetaData.patientName,
|
||||||
id: instanceMetaData.patientId
|
id: studyMetaData.patientId
|
||||||
};
|
};
|
||||||
|
|
||||||
// If there is sufficient information, populate
|
// If there is sufficient information, populate
|
||||||
|
|||||||
@ -18,7 +18,7 @@ Package.onUse(function (api) {
|
|||||||
// Our custom package
|
// Our custom package
|
||||||
api.use('cornerstone');
|
api.use('cornerstone');
|
||||||
|
|
||||||
api.addFiles('log.js', 'client');
|
api.addFiles('log.js', ['client', 'server']);
|
||||||
|
|
||||||
// ---------- Components ----------
|
// ---------- Components ----------
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
'GetStudyMetadata' : function(studyInstanceUid) {
|
'GetStudyMetadata' : function(studyInstanceUid) {
|
||||||
console.log('GetStudyMetadata(%s)', studyInstanceUid);
|
log.info('GetStudyMetadata(%s)', studyInstanceUid);
|
||||||
|
|
||||||
var server = Meteor.settings.dicomWeb.endpoints[0];
|
var server = Meteor.settings.dicomWeb.endpoints[0];
|
||||||
|
|
||||||
|
|||||||
@ -14,14 +14,21 @@ function resultDataToStudies(resultData) {
|
|||||||
var studies = [];
|
var studies = [];
|
||||||
resultData.forEach(function(study) {
|
resultData.forEach(function(study) {
|
||||||
studies.push({
|
studies.push({
|
||||||
|
studyInstanceUid: DICOMWeb.getString(study['0020000D']),
|
||||||
|
// 00080005 = SpecificCharacterSet
|
||||||
|
studyDate: DICOMWeb.getString(study['00080020']),
|
||||||
|
studyTime: DICOMWeb.getString(study['00080030']),
|
||||||
|
accessionNumber: DICOMWeb.getString(study['00080050']),
|
||||||
|
referringPhysicianName: DICOMWeb.getString(study['00080090']),
|
||||||
|
// 00081190 = URL
|
||||||
patientName: DICOMWeb.getName(study['00100010']),
|
patientName: DICOMWeb.getName(study['00100010']),
|
||||||
patientId: DICOMWeb.getString(study['00100020']),
|
patientId: DICOMWeb.getString(study['00100020']),
|
||||||
accessionNumber : DICOMWeb.getString(study['00080050']),
|
patientBirthdate: DICOMWeb.getString(study['00100030']),
|
||||||
studyDate: DICOMWeb.getString(study['00080020']),
|
patientSex: DICOMWeb.getString(study['00100040']),
|
||||||
modalities: DICOMWeb.getString(study['00080061']),
|
|
||||||
studyDescription: DICOMWeb.getString(study['00081030']),
|
|
||||||
imageCount: DICOMWeb.getString(study['00201208']),
|
imageCount: DICOMWeb.getString(study['00201208']),
|
||||||
studyInstanceUid: DICOMWeb.getString(study['0020000D'])
|
studyId: DICOMWeb.getString(study['00200010']),
|
||||||
|
studyDescription: DICOMWeb.getString(study['00081030']),
|
||||||
|
modalities: DICOMWeb.getString(study['00080061'])
|
||||||
//url : server.wadoRoot + '/studies/' + DICOMWeb.getString(study['0020000D']) + '/metadata'
|
//url : server.wadoRoot + '/studies/' + DICOMWeb.getString(study['0020000D']) + '/metadata'
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -8,6 +8,28 @@ function buildUrl(server, studyInstanceUid) {
|
|||||||
function resultDataToStudyMetadata(server, studyInstanceUid, resultData) {
|
function resultDataToStudyMetadata(server, studyInstanceUid, resultData) {
|
||||||
var seriesMap = {};
|
var seriesMap = {};
|
||||||
var seriesList = [];
|
var seriesList = [];
|
||||||
|
|
||||||
|
if (!resultData.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var anInstance = resultData[0];
|
||||||
|
if (!anInstance) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var studyData = {
|
||||||
|
seriesList: seriesList,
|
||||||
|
patientName: DICOMWeb.getName(anInstance['00100010']),
|
||||||
|
patientId: DICOMWeb.getString(anInstance['00100020']),
|
||||||
|
accessionNumber: DICOMWeb.getString(anInstance['00080050']),
|
||||||
|
studyDate: DICOMWeb.getString(anInstance['00080020']),
|
||||||
|
modalities: DICOMWeb.getString(anInstance['00080061']),
|
||||||
|
studyDescription: DICOMWeb.getString(anInstance['00081030']),
|
||||||
|
imageCount: DICOMWeb.getString(anInstance['00201208']),
|
||||||
|
studyInstanceUid: DICOMWeb.getString(anInstance['0020000D']),
|
||||||
|
};
|
||||||
|
|
||||||
resultData.forEach(function(instance) {
|
resultData.forEach(function(instance) {
|
||||||
var seriesInstanceUid = DICOMWeb.getString(instance['0020000E']);
|
var seriesInstanceUid = DICOMWeb.getString(instance['0020000E']);
|
||||||
var series = seriesMap[seriesInstanceUid];
|
var series = seriesMap[seriesInstanceUid];
|
||||||
@ -26,18 +48,6 @@ function resultDataToStudyMetadata(server, studyInstanceUid, resultData) {
|
|||||||
var sopInstanceUid = DICOMWeb.getString(instance['00080018']);
|
var sopInstanceUid = DICOMWeb.getString(instance['00080018']);
|
||||||
|
|
||||||
var instanceSummary = {
|
var instanceSummary = {
|
||||||
// -----------
|
|
||||||
// TODO = Fix this
|
|
||||||
// This doesn't seem like the best place to put this, but otherwise we have no study info
|
|
||||||
patientName: DICOMWeb.getName(instance['00100010']),
|
|
||||||
patientId: DICOMWeb.getString(instance['00100020']),
|
|
||||||
accessionNumber : DICOMWeb.getString(instance['00080050']),
|
|
||||||
studyDate: DICOMWeb.getString(instance['00080020']),
|
|
||||||
modalities: DICOMWeb.getString(instance['00080061']),
|
|
||||||
studyDescription: DICOMWeb.getString(instance['00081030']),
|
|
||||||
imageCount: DICOMWeb.getString(instance['00201208']),
|
|
||||||
studyInstanceUid: DICOMWeb.getString(instance['0020000D']),
|
|
||||||
// -----------
|
|
||||||
imageType: DICOMWeb.getString(instance['00080008']),
|
imageType: DICOMWeb.getString(instance['00080008']),
|
||||||
sopClassUid: DICOMWeb.getString(instance['00080016']),
|
sopClassUid: DICOMWeb.getString(instance['00080016']),
|
||||||
sopInstanceUid: sopInstanceUid,
|
sopInstanceUid: sopInstanceUid,
|
||||||
@ -69,20 +79,22 @@ function resultDataToStudyMetadata(server, studyInstanceUid, resultData) {
|
|||||||
|
|
||||||
series.instances.push(instanceSummary);
|
series.instances.push(instanceSummary);
|
||||||
});
|
});
|
||||||
return seriesList;
|
|
||||||
|
return studyData;
|
||||||
}
|
}
|
||||||
|
|
||||||
Services.WADO.RetrieveMetadata = function(server, studyInstanceUid) {
|
Services.WADO.RetrieveMetadata = function(server, studyInstanceUid) {
|
||||||
|
|
||||||
var url = buildUrl(server, studyInstanceUid);
|
var url = buildUrl(server, studyInstanceUid);
|
||||||
|
|
||||||
var result = DICOMWeb.getJSON(url, server.requestOptions);
|
var result = DICOMWeb.getJSON(url, server.requestOptions);
|
||||||
|
|
||||||
var study = {
|
var study = resultDataToStudyMetadata(server, studyInstanceUid, result.data);
|
||||||
wadoUriRoot: server.wadoUriRoot,
|
if (!study) {
|
||||||
studyInstanceUid: studyInstanceUid,
|
study = {};
|
||||||
seriesList: resultDataToStudyMetadata(server, studyInstanceUid, result.data)
|
}
|
||||||
};
|
|
||||||
|
study.wadoUriRoot = server.wadoUriRoot;
|
||||||
|
study.studyInstanceUid = studyInstanceUid;
|
||||||
|
|
||||||
return study;
|
return study;
|
||||||
};
|
};
|
||||||
@ -104,7 +104,15 @@ Template.worklist.helpers({
|
|||||||
|
|
||||||
Template.worklist.events({
|
Template.worklist.events({
|
||||||
'click #tablist a[data-toggle="tab"]': function(e) {
|
'click #tablist a[data-toggle="tab"]': function(e) {
|
||||||
var contentId = $(e.currentTarget).data('target').replace("#", "");
|
// If this tab is already active, do nothing
|
||||||
|
var tabButton = $(e.currentTarget);
|
||||||
|
var tabTitle = tabButton.parents('.tabTitle');
|
||||||
|
if (tabTitle.hasClass("active")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, switch to the tab
|
||||||
|
var contentId = tabButton.data('target').replace("#", "");
|
||||||
switchToTab(contentId);
|
switchToTab(contentId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -46,6 +46,7 @@ body
|
|||||||
|
|
||||||
&:hover
|
&:hover
|
||||||
background-color: #424242
|
background-color: #424242
|
||||||
|
cursor: none
|
||||||
|
|
||||||
a
|
a
|
||||||
color: white
|
color: white
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template name="worklistResult">
|
<template name="worklistResult">
|
||||||
{{ #if studies.count }}
|
{{ #if studies.count }}
|
||||||
<table id="tblStudyList" class="table table-striped">
|
<table id="tblStudyList" class="table table-striped noselect">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Patient Name</th>
|
<th>Patient Name</th>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template name="worklistStudy">
|
<template name="worklistStudy">
|
||||||
<tr class="worklistStudy">
|
<tr class="worklistStudy noselect">
|
||||||
<td>
|
<td>
|
||||||
{{patientName}}
|
{{formatPN patientName}}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{patientId}}
|
{{patientId}}
|
||||||
@ -10,7 +10,7 @@
|
|||||||
{{accessionNumber}}
|
{{accessionNumber}}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{studyDate}}
|
{{formatDA studyDate}}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{modalities}}
|
{{modalities}}
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
Template.worklistStudy.events({
|
Template.worklistStudy.events({
|
||||||
'click': function () {
|
'click': function () {
|
||||||
openNewTab(this.studyInstanceUid, this.patientName);
|
// Use the formatPN template helper to clean up the patient name
|
||||||
|
var title = Blaze._globalHelpers['formatPN'](this.patientName);
|
||||||
|
openNewTab(this.studyInstanceUid, title);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Loading…
Reference in New Issue
Block a user