larvitar 1.4.1 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,23 +1,24 @@
1
1
  name: CI-docs
2
2
 
3
- # Controls when the action will run. Triggers the workflow on push or pull request
4
- # events but only for the master branch
5
3
  on:
6
- push:
7
- branches: [master]
4
+ pull_request:
5
+ types:
6
+ - opened
7
+ - reopened
8
+ - synchronize
8
9
 
9
- # A workflow run is made up of one or more jobs that can run sequentially or in parallel
10
10
  jobs:
11
- # First job, build package
12
11
  build:
13
- # The type of runner that the job will run on
14
12
  runs-on: ubuntu-latest
15
13
 
16
- # Steps represent a sequence of tasks that will be executed as part of the job
17
14
  steps:
18
- # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
15
+ # CLone repo at current branch
19
16
  - name: Clone repo
20
17
  uses: actions/checkout@v2
18
+ with:
19
+ persist-credentials: false
20
+ ref: ${{ github.head_ref }}
21
+ token: ${{ secrets.GIT_TOKEN }}
21
22
 
22
23
  # Setup node environment
23
24
  - name: Setup Node.js environment
@@ -42,10 +43,13 @@ jobs:
42
43
  run: |
43
44
  yarn generate-docs
44
45
 
45
- # Commit Package and Docs
46
+ # Commit docs on current branch (update pull request)
46
47
  - name: Commit docs
47
- run: |
48
- git config --global user.name 'Mattia-gh-action'
49
- git config --global user.email 'ronzim@users.noreply.github.com'
50
- git commit --allow-empty -am "Automated docs generation"
51
- git push
48
+ uses: actions-js/push@master
49
+ with:
50
+ github_token: ${{ secrets.GITHUB_TOKEN }}
51
+ message: "Update docs"
52
+ branch: ${{ github.head_ref }}
53
+ empty: true
54
+
55
+
package/README.md CHANGED
@@ -6,9 +6,9 @@
6
6
 
7
7
  ## Dicom Image Toolkit for CornerstoneJS
8
8
 
9
- ### Current version: 1.4.1
9
+ ### Current version: 1.5.1
10
10
 
11
- ### Latest Published Release: 1.4.1
11
+ ### Latest Published Release: 1.5.1
12
12
 
13
13
  This library provides common DICOM functionalities to be used in web-applications: it's wrapper that simplifies the use of cornerstone-js environment.
14
14
  Orthogonal multiplanar reformat is included as well as custom loader/exporter for nrrd files and [Vuex](https://vuex.vuejs.org/) custom integration.
@@ -148,6 +148,8 @@ export const updateLoadedStack = function (
148
148
  let numberOfTemporalPositions = seriesData.metadata["x00200105"];
149
149
  let acquisitionNumberAttribute = seriesData.metadata["x00200012"];
150
150
  let is4D = seriesData.metadata.is4D;
151
+ let SOPUID = seriesData.metadata["x00080016"];
152
+ let isPDF = SOPUID == "1.2.840.10008.5.1.4.1.1.104.1" ? true : false;
151
153
 
152
154
  let color = cornerstoneWADOImageLoader.isColorImage(
153
155
  seriesData.metadata["x00280004"]
@@ -170,6 +172,7 @@ export const updateLoadedStack = function (
170
172
  numberOfTemporalPositions: numberOfTemporalPositions,
171
173
  isMultiframe: isMultiframe,
172
174
  is4D: is4D,
175
+ isPDF: isPDF,
173
176
  modality: modality,
174
177
  color: color,
175
178
  bytes: 0
@@ -270,7 +270,7 @@ let parseFile = function (file) {
270
270
  reject(dataSet.warnings);
271
271
  } else {
272
272
  let pixelDataElement = dataSet.elements.x7fe00010;
273
-
273
+ let SOPUID = metadata["x00080016"];
274
274
  if (pixelDataElement) {
275
275
  // done, pixelDataElement found
276
276
  let instanceUID = metadata["x00080018"] || randomId();
@@ -323,6 +323,29 @@ let parseFile = function (file) {
323
323
  imageObject.metadata.length = pixelDataElement.length;
324
324
  imageObject.metadata.repr = getPixelRepresentation(dataSet);
325
325
  resolve(imageObject);
326
+ } else if (SOPUID == "1.2.840.10008.5.1.4.1.1.104.1") {
327
+ let pdfObject = {
328
+ // data needed for rendering
329
+ file: file,
330
+ dataSet: dataSet
331
+ };
332
+ pdfObject.metadata = metadata;
333
+ pdfObject.metadata.seriesUID = seriesInstanceUID;
334
+ pdfObject.instanceUID = metadata["x00080018"] || randomId();
335
+ pdfObject.metadata.studyUID = metadata["x0020000d"];
336
+ pdfObject.metadata.accessionNumber = metadata["x00080050"];
337
+ pdfObject.metadata.studyDescription = metadata["x00081030"];
338
+ pdfObject.metadata.patientName = metadata["x00100010"];
339
+ pdfObject.metadata.patientBirthdate = metadata["x00100030"];
340
+ pdfObject.metadata.seriesDate = metadata["x00080021"];
341
+ pdfObject.metadata.seriesModality =
342
+ metadata["x00080060"].toLowerCase();
343
+ pdfObject.metadata.mimeType = metadata["x00420012"];
344
+ pdfObject.metadata.is4D = false;
345
+ pdfObject.metadata.numberOfFrames = 0;
346
+ pdfObject.metadata.numberOfSlices = 0;
347
+ pdfObject.metadata.numberOfTemporalPositions = 0;
348
+ resolve(pdfObject);
326
349
  } else {
327
350
  // done, no pixelData
328
351
  reject("no pixelData");
@@ -115,6 +115,53 @@ export function loadAndCacheImages(series, callback) {
115
115
  });
116
116
  }
117
117
 
118
+ /**
119
+ * Render a PDF from a DICOM Encapsulated PDF
120
+ * @instance
121
+ * @function renderDICOMPDF
122
+ * @param {Object} seriesStack - The original series data object
123
+ * @param {String} elementId - The html div id used for rendering or its DOM HTMLElement
124
+ * @returns {Promise} - Return a promise which will resolve when pdf is displayed
125
+ */
126
+ export const renderDICOMPDF = function (seriesStack, elementId) {
127
+ let t0 = performance.now();
128
+ let element = isElement(elementId)
129
+ ? elementId
130
+ : document.getElementById(elementId);
131
+ if (!element) {
132
+ console.error("invalid html element: " + elementId);
133
+ return;
134
+ }
135
+ let renderPromise = new Promise((resolve, reject) => {
136
+ let image = seriesStack.instances[seriesStack.imageIds[0]];
137
+ const SOPUID = image.dataSet.string("x00080016");
138
+ if (SOPUID === "1.2.840.10008.5.1.4.1.1.104.1") {
139
+ let fileTag = image.dataSet.elements.x00420011;
140
+ let pdfByteArray = image.dataSet.byteArray.slice(
141
+ fileTag.dataOffset,
142
+ fileTag.dataOffset + fileTag.length
143
+ );
144
+ let PDF = new Blob([pdfByteArray], { type: "application/pdf" });
145
+ let fileURL = URL.createObjectURL(PDF);
146
+ element.innerHTML =
147
+ '<object data="' +
148
+ fileURL +
149
+ '" type="application/pdf" width="100%" height="100%"></object>';
150
+ let t1 = performance.now();
151
+ console.log(`Call to renderDICOMPDF took ${t1 - t0} milliseconds.`);
152
+ image = null;
153
+ fileTag = null;
154
+ pdfByteArray = null;
155
+ PDF = null;
156
+ fileURL = null;
157
+ resolve();
158
+ } else {
159
+ reject("This is not a DICOM with a PDF");
160
+ }
161
+ });
162
+ return renderPromise;
163
+ };
164
+
118
165
  /**
119
166
  * Render an image (png or jpg) from File on a html div using cornerstone
120
167
  * @instance
package/index.js CHANGED
@@ -78,6 +78,7 @@ import {
78
78
  clearImageCache,
79
79
  loadAndCacheImages,
80
80
  renderFileImage,
81
+ renderDICOMPDF,
81
82
  renderWebImage,
82
83
  disableViewport,
83
84
  unloadViewport,
@@ -273,6 +274,7 @@ export {
273
274
  clearImageCache,
274
275
  loadAndCacheImages,
275
276
  renderFileImage,
277
+ renderDICOMPDF,
276
278
  renderWebImage,
277
279
  disableViewport,
278
280
  unloadViewport,
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "medical",
7
7
  "cornerstone"
8
8
  ],
9
- "version": "1.4.1",
9
+ "version": "1.5.1",
10
10
  "description": "javascript library for parsing, loading, rendering and interacting with DICOM images",
11
11
  "repository": {
12
12
  "url": "https://github.com/dvisionlab/Larvitar.git",
@@ -54,4 +54,4 @@
54
54
  "module": "dist/larvitar.js",
55
55
  "browser": "dist/larvitar.js",
56
56
  "type": "module"
57
- }
57
+ }