Compare commits
20
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b426256df5 | ||
|
|
c9b7e97f9c | ||
|
|
0fc7d93d73 | ||
|
|
33307d3cd2 | ||
|
|
c3ce909434 | ||
|
|
ad2c750503 | ||
|
|
cceb61f123 | ||
|
|
13bcba8c39 | ||
|
|
d2db026158 | ||
|
|
e4b0552db4 | ||
|
|
d7ba2fac69 | ||
|
|
761d54fbbf | ||
|
|
79548d2380 | ||
|
|
6a401c9e52 | ||
|
|
23376d279d | ||
|
|
4110b0422c | ||
|
|
ed501bb462 | ||
|
|
abf050e162 | ||
|
|
35ed82e161 | ||
|
|
d0ccc22fd9 |
No files matched your search
+11
-7
@@ -25,11 +25,9 @@ executors:
|
|||||||
docker:
|
docker:
|
||||||
# Primary container image where all steps run.
|
# Primary container image where all steps run.
|
||||||
- image: 'cypress/browsers:node14.15.0-chrome86-ff82'
|
- image: 'cypress/browsers:node14.15.0-chrome86-ff82'
|
||||||
- image: 'ohif/viewer-testdata:0.1-test'
|
|
||||||
|
|
||||||
defaults: &defaults
|
defaults: &defaults
|
||||||
docker:
|
docker:
|
||||||
- image: circleci/node:14.15.0
|
- image: cimg/node:14.18
|
||||||
environment:
|
environment:
|
||||||
TERM: xterm # Enable colors in term
|
TERM: xterm # Enable colors in term
|
||||||
QUICK_BUILD: true
|
QUICK_BUILD: true
|
||||||
@@ -119,6 +117,7 @@ jobs:
|
|||||||
command: yarn install --frozen-lockfile
|
command: yarn install --frozen-lockfile
|
||||||
|
|
||||||
- setup_remote_docker:
|
- setup_remote_docker:
|
||||||
|
version: 19.03.13
|
||||||
docker_layer_caching: false
|
docker_layer_caching: false
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
@@ -295,6 +294,7 @@ jobs:
|
|||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: ~/repo
|
at: ~/repo
|
||||||
- setup_remote_docker:
|
- setup_remote_docker:
|
||||||
|
version: 19.03.13
|
||||||
docker_layer_caching: false
|
docker_layer_caching: false
|
||||||
- run:
|
- run:
|
||||||
name: Build and push Docker image
|
name: Build and push Docker image
|
||||||
@@ -347,7 +347,8 @@ workflows:
|
|||||||
store_artifacts: true
|
store_artifacts: true
|
||||||
working_directory: platform/viewer
|
working_directory: platform/viewer
|
||||||
build:
|
build:
|
||||||
npx cross-env QUICK_BUILD=true APP_CONFIG=config/dicomweb-server.js
|
git submodule update --init &&
|
||||||
|
npx cross-env QUICK_BUILD=true APP_CONFIG=config/e2e.js
|
||||||
yarn run build
|
yarn run build
|
||||||
start: yarn run test:e2e:serve
|
start: yarn run test:e2e:serve
|
||||||
spec: 'cypress/integration/common/**/*,cypress/integration/pwa/**/*'
|
spec: 'cypress/integration/common/**/*,cypress/integration/pwa/**/*'
|
||||||
@@ -375,7 +376,8 @@ workflows:
|
|||||||
store_artifacts: true
|
store_artifacts: true
|
||||||
working_directory: platform/viewer
|
working_directory: platform/viewer
|
||||||
build:
|
build:
|
||||||
npx cross-env QUICK_BUILD=true APP_CONFIG=config/dicomweb-server.js
|
git submodule update --init &&
|
||||||
|
npx cross-env QUICK_BUILD=true APP_CONFIG=config/e2e.js
|
||||||
yarn run build:package
|
yarn run build:package
|
||||||
start: yarn run test:e2e:serve
|
start: yarn run test:e2e:serve
|
||||||
spec: 'cypress/integration/common/**/*,cypress/integration/script-tag/**/*'
|
spec: 'cypress/integration/common/**/*,cypress/integration/script-tag/**/*'
|
||||||
@@ -408,7 +410,8 @@ workflows:
|
|||||||
store_artifacts: false
|
store_artifacts: false
|
||||||
working_directory: platform/viewer
|
working_directory: platform/viewer
|
||||||
build:
|
build:
|
||||||
npx cross-env QUICK_BUILD=true APP_CONFIG=config/dicomweb-server.js
|
git submodule update --init &&
|
||||||
|
npx cross-env QUICK_BUILD=true APP_CONFIG=config/e2e.js
|
||||||
yarn run build
|
yarn run build
|
||||||
# start server --> verify running --> percy + chrome + cypress
|
# start server --> verify running --> percy + chrome + cypress
|
||||||
command: yarn run test:e2e:dist
|
command: yarn run test:e2e:dist
|
||||||
@@ -487,7 +490,8 @@ workflows:
|
|||||||
store_artifacts: false
|
store_artifacts: false
|
||||||
working_directory: platform/viewer
|
working_directory: platform/viewer
|
||||||
build:
|
build:
|
||||||
npx cross-env QUICK_BUILD=true APP_CONFIG=config/dicomweb-server.js
|
git submodule update --init &&
|
||||||
|
npx cross-env QUICK_BUILD=true APP_CONFIG=config/e2e.js
|
||||||
yarn run build
|
yarn run build
|
||||||
# start server --> verify running --> percy + chrome + cypress
|
# start server --> verify running --> percy + chrome + cypress
|
||||||
command: yarn run test:e2e:dist
|
command: yarn run test:e2e:dist
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "testdata"]
|
||||||
|
path = testdata
|
||||||
|
url = https://github.com/OHIF/viewer-testdata-dicomweb.git
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
14.18.0
|
||||||
@@ -28,7 +28,7 @@ module.exports = (env, argv, { SRC_DIR, DIST_DIR }) => {
|
|||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
mode: isProdBuild ? 'production' : 'development',
|
mode: isProdBuild ? 'production' : 'development',
|
||||||
devtool: isProdBuild ? 'source-map' : 'cheap-module-eval-source-map',
|
devtool: isProdBuild ? 'source-map' : 'eval-cheap-module-source-map',
|
||||||
entry: {
|
entry: {
|
||||||
app: `${SRC_DIR}/index.js`,
|
app: `${SRC_DIR}/index.js`,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -273,6 +273,17 @@ development of OHIF Viewer:
|
|||||||
Leidos Biomedical Research under Task Order HHSN26100071 from NCI.
|
Leidos Biomedical Research under Task Order HHSN26100071 from NCI.
|
||||||
[IDC Viewer](https://learn.canceridc.dev/portal/visualization) is a customized
|
[IDC Viewer](https://learn.canceridc.dev/portal/visualization) is a customized
|
||||||
version of the OHIF Viewer.
|
version of the OHIF Viewer.
|
||||||
|
|
||||||
|
### Research notice
|
||||||
|
Please note that this repository is participating in a study into sustainability
|
||||||
|
of open source projects. Data will be gathered about this repository for
|
||||||
|
approximately the next 12 months, starting from June 2021.
|
||||||
|
|
||||||
|
Data collected will include number of contributors, number of PRs, time taken to
|
||||||
|
close/merge these PRs, and issues closed.
|
||||||
|
|
||||||
|
For more information, please visit
|
||||||
|
[our informational page](https://sustainable-open-science-and-software.github.io/) or download our [participant information sheet](https://sustainable-open-science-and-software.github.io/assets/PIS_sustainable_software.pdf).
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ OHIF Viewer and its medical imaging data. This post covers one of many potential
|
|||||||
setups that accomplish that. Please note, noticably absent is user account
|
setups that accomplish that. Please note, noticably absent is user account
|
||||||
control.
|
control.
|
||||||
|
|
||||||
Do not use this recipe to host sensitive medical data on the open web. Depending
|
> **Do not use this recipe to host sensitive medical data on the open web!**
|
||||||
|
|
||||||
|
Depending
|
||||||
on your company's policies, this may be an appropriate setup on an internal
|
on your company's policies, this may be an appropriate setup on an internal
|
||||||
network when protected with a server's basic authentication. For a more robust
|
network when protected with a server's basic authentication. For a more robust
|
||||||
setup, check out our [user account control recipe](./user-account-control.md)
|
setup, check out our [user account control recipe](./user-account-control.md)
|
||||||
@@ -23,13 +25,13 @@ Our two biggest hurdles when hosting our image archive and web client are:
|
|||||||
|
|
||||||
### Handling Web Requests
|
### Handling Web Requests
|
||||||
|
|
||||||
We mittigate our first issue by allowing [Nginx][nginx] to handle incoming web
|
We mitigate our first issue by allowing [Nginx][nginx] to handle incoming web
|
||||||
requests. Nginx is open source software for web serving, reverse proxying,
|
requests. Nginx is open source software for web serving, reverse proxying,
|
||||||
caching, and more. It's designed for maximum performance and stability --
|
caching, and more. It's designed for maximum performance and stability --
|
||||||
allowing us to more reliably serve content than Orthanc's built-in server can.
|
allowing us to more reliably serve content than Orthanc's built-in server can.
|
||||||
|
|
||||||
More specifically, we accomplish this by using a
|
More specifically, we accomplish this by using a
|
||||||
[`reverse proxy`](https://en.wikipedia.org/wiki/Reverse_proxy) to retrieve
|
[`reverse proxy`](https://en.wikipedia.org/wiki/Reverse_proxy) to retrieve
|
||||||
resources from our image archive (Orthanc), and when accessing its web admin.
|
resources from our image archive (Orthanc), and when accessing its web admin.
|
||||||
|
|
||||||
> A reverse proxy is a type of proxy server that retrieves resources on behalf
|
> A reverse proxy is a type of proxy server that retrieves resources on behalf
|
||||||
@@ -38,7 +40,7 @@ resources from our image archive (Orthanc), and when accessing its web admin.
|
|||||||
|
|
||||||
### CORS Issues
|
### CORS Issues
|
||||||
|
|
||||||
Cross-Origin Resource Sharing (CORS) is a mechanism that uses HTTP headers to
|
[Cross-Origin Resource Sharing][understanding-cors] (CORS) is a mechanism that uses HTTP headers to
|
||||||
tell a browser which web applications have permission to access selected
|
tell a browser which web applications have permission to access selected
|
||||||
resources from a server at a different origin (domain, protocol, port). IE. By
|
resources from a server at a different origin (domain, protocol, port). IE. By
|
||||||
default, a Web App located at `http://my-website.com` can't access resources
|
default, a Web App located at `http://my-website.com` can't access resources
|
||||||
@@ -51,9 +53,6 @@ We can solve this one of two ways:
|
|||||||
|
|
||||||
**This solution uses the first approach.**
|
**This solution uses the first approach.**
|
||||||
|
|
||||||
You can read more about CORS in this Medium article: [Understanding
|
|
||||||
CORS][understanding-cors]
|
|
||||||
|
|
||||||
### Diagram
|
### Diagram
|
||||||
|
|
||||||
This setup allows us to create a setup similar to the one pictured below:
|
This setup allows us to create a setup similar to the one pictured below:
|
||||||
@@ -73,6 +72,8 @@ This setup allows us to create a setup similar to the one pictured below:
|
|||||||
- Docker
|
- Docker
|
||||||
- [Docker for Mac](https://docs.docker.com/docker-for-mac/)
|
- [Docker for Mac](https://docs.docker.com/docker-for-mac/)
|
||||||
- [Docker for Windows](https://docs.docker.com/docker-for-windows/)
|
- [Docker for Windows](https://docs.docker.com/docker-for-windows/)
|
||||||
|
- Node 16.x with optional Python and Visual Studio Build Tools ([webpack 4 has an issue](https://github.com/webpack/webpack/issues/14532) with Node 17.x)
|
||||||
|
- [Node.js](https://nodejs.org/en/download/)
|
||||||
|
|
||||||
_Not sure if you have `docker` installed already? Try running `docker --version`
|
_Not sure if you have `docker` installed already? Try running `docker --version`
|
||||||
in command prompt or terminal_
|
in command prompt or terminal_
|
||||||
@@ -81,7 +82,7 @@ in command prompt or terminal_
|
|||||||
|
|
||||||
_Spin Things Up_
|
_Spin Things Up_
|
||||||
|
|
||||||
- Navigate to `<project-root>/docker/OpenResty-Orthanc` in your shell
|
- Navigate to `./platform/viewer/.recipes/OpenResty-Orthanc` in your shell
|
||||||
- Run `docker-compose up`
|
- Run `docker-compose up`
|
||||||
|
|
||||||
_Upload Your First Study_
|
_Upload Your First Study_
|
||||||
@@ -94,16 +95,16 @@ _Upload Your First Study_
|
|||||||
|
|
||||||
### Troubleshooting
|
### Troubleshooting
|
||||||
|
|
||||||
_Exit code 137_
|
#### Exit code 137
|
||||||
|
|
||||||
This means Docker ran out of memory. Open Docker Desktop, go to the `advanced`
|
This means Docker ran out of memory. Open Docker Desktop, go to the `advanced`
|
||||||
tab, and increase the amount of Memory available.
|
tab, and increase the amount of Memory available.
|
||||||
|
|
||||||
_Cannot create container for service X_
|
#### Cannot create container for service X
|
||||||
|
|
||||||
Use this one with caution: `docker system prune`
|
Use this one with caution: `docker system prune`
|
||||||
|
|
||||||
_X is already running_
|
#### X is already running
|
||||||
|
|
||||||
Stop running all containers:
|
Stop running all containers:
|
||||||
|
|
||||||
@@ -120,15 +121,12 @@ likely want to update:
|
|||||||
#### OHIF Viewer
|
#### OHIF Viewer
|
||||||
|
|
||||||
The OHIF Viewer's configuration is imported from a static `.js` file. The
|
The OHIF Viewer's configuration is imported from a static `.js` file. The
|
||||||
configuration we use is set to a specific file when we build the viewer, and
|
configuration we use is set to [a specific file][config-ohif] when we build the viewer, and
|
||||||
determined by the env variable: `APP_CONFIG`. You can see where we set its value
|
determined by the env variable: `APP_CONFIG`. You can see where we set its value
|
||||||
in the `dockerfile` for this solution:
|
in the `dockerfile` for this solution:
|
||||||
|
|
||||||
`ENV APP_CONFIG=config/docker_openresty-orthanc.js`
|
`ENV APP_CONFIG=config/docker_openresty-orthanc.js`
|
||||||
|
|
||||||
You can find the configuration we're using here:
|
|
||||||
`/public/config/docker_openresty-orthanc.js`
|
|
||||||
|
|
||||||
To rebuild the `webapp` image created by our `dockerfile` after updating the
|
To rebuild the `webapp` image created by our `dockerfile` after updating the
|
||||||
Viewer's configuration, you can run:
|
Viewer's configuration, you can run:
|
||||||
|
|
||||||
@@ -137,7 +135,7 @@ Viewer's configuration, you can run:
|
|||||||
|
|
||||||
#### Other
|
#### Other
|
||||||
|
|
||||||
All other files are found in: `/docker/OpenResty-Orthanc/`
|
All other files in this directory include
|
||||||
|
|
||||||
| Service | Configuration | Docs |
|
| Service | Configuration | Docs |
|
||||||
| ----------------- | --------------------------------- | ------------------------------------------- |
|
| ----------------- | --------------------------------- | ------------------------------------------- |
|
||||||
@@ -236,6 +234,8 @@ members put together:
|
|||||||
[orthanc-docs]: http://book.orthanc-server.com/users/configuration.html#configuration
|
[orthanc-docs]: http://book.orthanc-server.com/users/configuration.html#configuration
|
||||||
[lua-resty-openidc-docs]: https://github.com/zmartzone/lua-resty-openidc
|
[lua-resty-openidc-docs]: https://github.com/zmartzone/lua-resty-openidc
|
||||||
<!-- SRC -->
|
<!-- SRC -->
|
||||||
|
|
||||||
|
[config-ohif]: https://github.com/OHIF/Viewers/blob/master/platform/viewer/public/config/docker_openresty-orthanc.js
|
||||||
[dockerfile]: https://github.com/OHIF/Viewers/blob/master/platform/viewer/.recipes/OpenResty-Orthanc/dockerfile
|
[dockerfile]: https://github.com/OHIF/Viewers/blob/master/platform/viewer/.recipes/OpenResty-Orthanc/dockerfile
|
||||||
[config-nginx]: https://github.com/OHIF/Viewers/blob/master/platform/viewer/.recipes/OpenResty-Orthanc/config/nginx.conf
|
[config-nginx]: https://github.com/OHIF/Viewers/blob/master/platform/viewer/.recipes/OpenResty-Orthanc/config/nginx.conf
|
||||||
[config-orthanc]: https://github.com/OHIF/Viewers/blob/master/platform/viewer/.recipes/OpenResty-Orthanc/config/orthanc.json
|
[config-orthanc]: https://github.com/OHIF/Viewers/blob/master/platform/viewer/.recipes/OpenResty-Orthanc/config/orthanc.json
|
||||||
|
|||||||
@@ -3,6 +3,22 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [2.12.4](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.3...@ohif/extension-cornerstone@2.12.4) (2022-01-20)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-cornerstone
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [2.12.3](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.2...@ohif/extension-cornerstone@2.12.3) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-cornerstone
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.12.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.1...@ohif/extension-cornerstone@2.12.2) (2021-10-26)
|
## [2.12.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-cornerstone@2.12.1...@ohif/extension-cornerstone@2.12.2) (2021-10-26)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/extension-cornerstone
|
**Note:** Version bump only for package @ohif/extension-cornerstone
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-cornerstone",
|
"name": "@ohif/extension-cornerstone",
|
||||||
"version": "2.12.2",
|
"version": "2.12.4",
|
||||||
"description": "OHIF extension for Cornerstone",
|
"description": "OHIF extension for Cornerstone",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -32,12 +32,12 @@
|
|||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ohif/core": "^0.50.0",
|
"@ohif/core": "^0.50.0",
|
||||||
"@ohif/ui": "^0.50.0",
|
"@ohif/ui": "^0.50.0",
|
||||||
"cornerstone-core": "^2.5.0",
|
"cornerstone-core": "^2.6.1",
|
||||||
"cornerstone-math": "^0.1.9",
|
"cornerstone-math": "^0.1.9",
|
||||||
"cornerstone-tools": "^6.0.0",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"cornerstone-wado-image-loader": "^4.0.3",
|
"cornerstone-wado-image-loader": "^4.1.0",
|
||||||
"dcmjs": "0.18.10",
|
"dcmjs": "0.19.2",
|
||||||
"dicom-parser": "^1.8.9",
|
"dicom-parser": "^1.8.11",
|
||||||
"hammerjs": "^2.0.8",
|
"hammerjs": "^2.0.8",
|
||||||
"prop-types": "^15.6.2",
|
"prop-types": "^15.6.2",
|
||||||
"react": "^16.8.6",
|
"react": "^16.8.6",
|
||||||
|
|||||||
@@ -3,6 +3,14 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [0.3.1](https://github.com/OHIF/Viewers/compare/@ohif/extension-debugging@0.3.0...@ohif/extension-debugging@0.3.1) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-debugging
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [0.3.0](https://github.com/OHIF/Viewers/compare/@ohif/extension-debugging@0.2.2...@ohif/extension-debugging@0.3.0) (2021-09-23)
|
# [0.3.0](https://github.com/OHIF/Viewers/compare/@ohif/extension-debugging@0.2.2...@ohif/extension-debugging@0.3.0) (2021-09-23)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-debugging",
|
"name": "@ohif/extension-debugging",
|
||||||
"version": "0.3.0",
|
"version": "0.3.1",
|
||||||
"description": "OHIF extension for debugging.",
|
"description": "OHIF extension for debugging.",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -28,12 +28,12 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ohif/core": "^2.6.0",
|
"@ohif/core": "^2.6.0",
|
||||||
"dicom-parser": "^1.8.9"
|
"dicom-parser": "^1.8.11"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.5.5",
|
"@babel/runtime": "^7.5.5",
|
||||||
"detect-browser": "5.1.1",
|
"detect-browser": "5.1.1",
|
||||||
"dicomweb-client": "^0.8.1",
|
"dicomweb-client": "^0.8.3",
|
||||||
"file-saver": "^2.0.2",
|
"file-saver": "^2.0.2",
|
||||||
"jszip": "^3.2.2"
|
"jszip": "^3.2.2"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,22 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [1.3.15](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@1.3.14...@ohif/extension-dicom-html@1.3.15) (2022-01-20)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-html
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [1.3.14](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@1.3.13...@ohif/extension-dicom-html@1.3.14) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-html
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [1.3.13](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@1.3.12...@ohif/extension-dicom-html@1.3.13) (2021-10-26)
|
## [1.3.13](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-html@1.3.12...@ohif/extension-dicom-html@1.3.13) (2021-10-26)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/extension-dicom-html
|
**Note:** Version bump only for package @ohif/extension-dicom-html
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-dicom-html",
|
"name": "@ohif/extension-dicom-html",
|
||||||
"version": "1.3.13",
|
"version": "1.3.15",
|
||||||
"description": "OHIF extension for rendering structured reports to HTML",
|
"description": "OHIF extension for rendering structured reports to HTML",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ohif/core": "^0.50.0",
|
"@ohif/core": "^0.50.0",
|
||||||
"dcmjs": "0.18.10",
|
"dcmjs": "0.19.2",
|
||||||
"prop-types": "^15.6.2",
|
"prop-types": "^15.6.2",
|
||||||
"react": "^16.8.6",
|
"react": "^16.8.6",
|
||||||
"react-dom": "^16.8.6"
|
"react-dom": "^16.8.6"
|
||||||
|
|||||||
@@ -3,6 +3,22 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [1.1.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-pdf@1.1.1...@ohif/extension-dicom-pdf@1.1.2) (2022-01-29)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-pdf
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [1.1.1](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-pdf@1.1.0...@ohif/extension-dicom-pdf@1.1.1) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-pdf
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [1.1.0](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-pdf@1.0.6...@ohif/extension-dicom-pdf@1.1.0) (2021-09-23)
|
# [1.1.0](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-pdf@1.0.6...@ohif/extension-dicom-pdf@1.1.0) (2021-09-23)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-dicom-pdf",
|
"name": "@ohif/extension-dicom-pdf",
|
||||||
"version": "1.1.0",
|
"version": "1.1.2",
|
||||||
"description": "OHIF extension for Dicom PDF",
|
"description": "OHIF extension for Dicom PDF",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ohif/core": "^0.50.0",
|
"@ohif/core": "^0.50.0",
|
||||||
"dicom-parser": "^1.8.9",
|
"dicom-parser": "^1.8.11",
|
||||||
"prop-types": "^15.6.2",
|
"prop-types": "^15.6.2",
|
||||||
"react": "^16.8.6",
|
"react": "^16.8.6",
|
||||||
"react-dom": "^16.8.6"
|
"react-dom": "^16.8.6"
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ class DicomPDFViewport extends Component {
|
|||||||
|
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
byteArray: TypedArrayProp.uint8,
|
byteArray: TypedArrayProp.uint8,
|
||||||
|
rawPdf: PropTypes.bool,
|
||||||
useNative: PropTypes.bool,
|
useNative: PropTypes.bool,
|
||||||
viewportData: PropTypes.object,
|
viewportData: PropTypes.object,
|
||||||
activeViewportIndex: PropTypes.number,
|
activeViewportIndex: PropTypes.number,
|
||||||
@@ -45,7 +46,8 @@ class DicomPDFViewport extends Component {
|
|||||||
};
|
};
|
||||||
|
|
||||||
async componentDidMount() {
|
async componentDidMount() {
|
||||||
const dataSet = this.parseByteArray(this.props.byteArray);
|
const { rawPdf } = this.props
|
||||||
|
const dataSet = !rawPdf && this.parseByteArray(this.props.byteArray);
|
||||||
const fileURL = this.getPDFFileUrl(dataSet, this.props.byteArray);
|
const fileURL = this.getPDFFileUrl(dataSet, this.props.byteArray);
|
||||||
|
|
||||||
this.setState(state => ({ ...state, fileURL }));
|
this.setState(state => ({ ...state, fileURL }));
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
|
|||||||
import OHIF from '@ohif/core';
|
import OHIF from '@ohif/core';
|
||||||
import OHIFComponentPlugin from './OHIFComponentPlugin.js';
|
import OHIFComponentPlugin from './OHIFComponentPlugin.js';
|
||||||
import DicomPDFViewport from './DicomPDFViewport';
|
import DicomPDFViewport from './DicomPDFViewport';
|
||||||
|
import { str2ab } from '@ohif/core';
|
||||||
|
|
||||||
const { DicomLoaderService } = OHIF.utils;
|
const { DicomLoaderService } = OHIF.utils;
|
||||||
|
|
||||||
@@ -18,6 +19,7 @@ class OHIFDicomPDFViewport extends Component {
|
|||||||
|
|
||||||
state = {
|
state = {
|
||||||
byteArray: null,
|
byteArray: null,
|
||||||
|
rawPdf: false,
|
||||||
error: null,
|
error: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -34,6 +36,15 @@ class OHIFDicomPDFViewport extends Component {
|
|||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
const { displaySet, studies } = this.props.viewportData;
|
const { displaySet, studies } = this.props.viewportData;
|
||||||
|
|
||||||
|
if (displaySet.metadata && displaySet.metadata.EncapsulatedDocument) {
|
||||||
|
const { InlineBinary, BulkDataURI } = displaySet.metadata.EncapsulatedDocument;
|
||||||
|
if (InlineBinary) {
|
||||||
|
const inlineBinaryData = atob(InlineBinary);
|
||||||
|
const byteArray = str2ab(inlineBinaryData);
|
||||||
|
this.setState({ byteArray, rawPdf: true });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
DicomLoaderService.findDicomDataPromise(displaySet, studies).then(
|
DicomLoaderService.findDicomDataPromise(displaySet, studies).then(
|
||||||
data => this.setState({ byteArray: new Uint8Array(data) }),
|
data => this.setState({ byteArray: new Uint8Array(data) }),
|
||||||
error => {
|
error => {
|
||||||
@@ -49,15 +60,16 @@ class OHIFDicomPDFViewport extends Component {
|
|||||||
viewportIndex,
|
viewportIndex,
|
||||||
activeViewportIndex,
|
activeViewportIndex,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
const { byteArray, error } = this.state;
|
const { byteArray, error, rawPdf } = this.state;
|
||||||
const { id, init, destroy } = OHIFDicomPDFViewport;
|
const { id, init, destroy } = OHIFDicomPDFViewport;
|
||||||
const pluginProps = { id, init, destroy };
|
const pluginProps = { id, init, destroy };
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<OHIFComponentPlugin {...pluginProps}>
|
<OHIFComponentPlugin {...pluginProps}>
|
||||||
{byteArray && (
|
{(byteArray) && (
|
||||||
<DicomPDFViewport
|
<DicomPDFViewport
|
||||||
byteArray={byteArray}
|
byteArray={byteArray}
|
||||||
|
rawPdf={rawPdf}
|
||||||
setViewportActive={setViewportActive}
|
setViewportActive={setViewportActive}
|
||||||
viewportIndex={viewportIndex}
|
viewportIndex={viewportIndex}
|
||||||
activeViewportIndex={activeViewportIndex}
|
activeViewportIndex={activeViewportIndex}
|
||||||
|
|||||||
@@ -3,6 +3,30 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [0.7.6](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-rt@0.7.5...@ohif/extension-dicom-rt@0.7.6) (2022-01-20)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-rt
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.7.5](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-rt@0.7.4...@ohif/extension-dicom-rt@0.7.5) (2022-01-19)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-rt
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.7.4](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-rt@0.7.3...@ohif/extension-dicom-rt@0.7.4) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-rt
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [0.7.3](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-rt@0.7.2...@ohif/extension-dicom-rt@0.7.3) (2021-10-26)
|
## [0.7.3](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-rt@0.7.2...@ohif/extension-dicom-rt@0.7.3) (2021-10-26)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/extension-dicom-rt
|
**Note:** Version bump only for package @ohif/extension-dicom-rt
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-dicom-rt",
|
"name": "@ohif/extension-dicom-rt",
|
||||||
"version": "0.7.3",
|
"version": "0.7.6",
|
||||||
"description": "OHIF extension for rendering DICOM RTSTRUCTs on top of cornerstone images.",
|
"description": "OHIF extension for rendering DICOM RTSTRUCTs on top of cornerstone images.",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -29,9 +29,9 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ohif/core": "^0.50.0",
|
"@ohif/core": "^0.50.0",
|
||||||
"cornerstone-core": "^2.5.0",
|
"cornerstone-core": "^2.6.1",
|
||||||
"cornerstone-tools": "^6.0.0",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"dcmjs": "0.18.10",
|
"dcmjs": "0.19.2",
|
||||||
"gl-matrix": "^3.3.0",
|
"gl-matrix": "^3.3.0",
|
||||||
"prop-types": "^15.6.2",
|
"prop-types": "^15.6.2",
|
||||||
"react": "^16.8.6",
|
"react": "^16.8.6",
|
||||||
|
|||||||
@@ -81,13 +81,10 @@ const RTPanel = ({
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
updateStructureSets();
|
updateStructureSets();
|
||||||
|
|
||||||
document.addEventListener('extensiondicomrtrtloaded', updateStructureSets);
|
document.addEventListener('rt-panel-tab-updated', updateStructureSets);
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
document.removeEventListener(
|
document.removeEventListener('rt-panel-tab-updated', updateStructureSets);
|
||||||
'extensiondicomrtrtloaded',
|
|
||||||
updateStructureSets
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,22 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [0.7.6](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-segmentation@0.7.5...@ohif/extension-dicom-segmentation@0.7.6) (2022-01-20)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-segmentation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.7.5](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-segmentation@0.7.4...@ohif/extension-dicom-segmentation@0.7.5) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-segmentation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [0.7.4](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-segmentation@0.7.3...@ohif/extension-dicom-segmentation@0.7.4) (2021-10-27)
|
## [0.7.4](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-segmentation@0.7.3...@ohif/extension-dicom-segmentation@0.7.4) (2021-10-27)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/extension-dicom-segmentation
|
**Note:** Version bump only for package @ohif/extension-dicom-segmentation
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-dicom-segmentation",
|
"name": "@ohif/extension-dicom-segmentation",
|
||||||
"version": "0.7.4",
|
"version": "0.7.6",
|
||||||
"description": "OHIF extension for viewing segmentations in the 2D MPR view",
|
"description": "OHIF extension for viewing segmentations in the 2D MPR view",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -29,9 +29,9 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ohif/core": "^0.50.0",
|
"@ohif/core": "^0.50.0",
|
||||||
"cornerstone-core": "^2.5.0",
|
"cornerstone-core": "^2.6.1",
|
||||||
"cornerstone-tools": "^6.0.0",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"dcmjs": "0.18.10",
|
"dcmjs": "0.19.2",
|
||||||
"prop-types": "^15.6.2",
|
"prop-types": "^15.6.2",
|
||||||
"react": "^16.8.6",
|
"react": "^16.8.6",
|
||||||
"react-dom": "^16.8.6"
|
"react-dom": "^16.8.6"
|
||||||
|
|||||||
@@ -3,6 +3,30 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [0.2.17](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-tag-browser@0.2.16...@ohif/extension-dicom-tag-browser@0.2.17) (2022-01-20)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-tag-browser
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.16](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-tag-browser@0.2.15...@ohif/extension-dicom-tag-browser@0.2.16) (2021-12-10)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-tag-browser
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [0.2.15](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-tag-browser@0.2.14...@ohif/extension-dicom-tag-browser@0.2.15) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-dicom-tag-browser
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [0.2.14](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-tag-browser@0.2.13...@ohif/extension-dicom-tag-browser@0.2.14) (2021-11-30)
|
## [0.2.14](https://github.com/OHIF/Viewers/compare/@ohif/extension-dicom-tag-browser@0.2.13...@ohif/extension-dicom-tag-browser@0.2.14) (2021-11-30)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/extension-dicom-tag-browser
|
**Note:** Version bump only for package @ohif/extension-dicom-tag-browser
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-dicom-tag-browser",
|
"name": "@ohif/extension-dicom-tag-browser",
|
||||||
"version": "0.2.14",
|
"version": "0.2.17",
|
||||||
"description": "OHIF extension for checking DICOM headers.",
|
"description": "OHIF extension for checking DICOM headers.",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -28,12 +28,12 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ohif/core": "^2.6.0",
|
"@ohif/core": "^2.6.0",
|
||||||
"dcmjs": "0.18.10",
|
"dcmjs": "0.19.2",
|
||||||
"react": "^16.8.6"
|
"react": "^16.8.6"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.5.5",
|
"@babel/runtime": "^7.5.5",
|
||||||
"dicomweb-client": "^0.8.1",
|
"dicomweb-client": "^0.8.3",
|
||||||
"moment": "2.24.0",
|
"moment": "2.24.0",
|
||||||
"react-select": "^3.0.8"
|
"react-select": "^3.0.8"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ const DicomTagBrowser = ({ displaySets, displaySetInstanceUID }) => {
|
|||||||
activeDisplaySetInstanceUID,
|
activeDisplaySetInstanceUID,
|
||||||
setActiveDisplaySetInstanceUID,
|
setActiveDisplaySetInstanceUID,
|
||||||
] = useState(displaySetInstanceUID);
|
] = useState(displaySetInstanceUID);
|
||||||
const [activeInstance, setActiveInstance] = useState(0);
|
const [activeInstance, setActiveInstance] = useState(1);
|
||||||
const [tags, setTags] = useState([]);
|
const [tags, setTags] = useState([]);
|
||||||
const [meta, setMeta] = useState('');
|
const [meta, setMeta] = useState('');
|
||||||
const [instanceList, setInstanceList] = useState([]);
|
const [instanceList, setInstanceList] = useState([]);
|
||||||
@@ -51,7 +51,7 @@ const DicomTagBrowser = ({ displaySets, displaySetInstanceUID }) => {
|
|||||||
description: displayDate,
|
description: displayDate,
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
setActiveDisplaySetInstanceUID(displaySetInstanceUID);
|
setActiveDisplaySetInstanceUID(displaySetInstanceUID);
|
||||||
setActiveInstance(0);
|
setActiveInstance(1);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
@@ -65,7 +65,7 @@ const DicomTagBrowser = ({ displaySets, displaySetInstanceUID }) => {
|
|||||||
|
|
||||||
if (isImageStack) {
|
if (isImageStack) {
|
||||||
const { images } = activeDisplaySet;
|
const { images } = activeDisplaySet;
|
||||||
const image = images[activeInstance];
|
const image = images[activeInstance - 1];
|
||||||
|
|
||||||
instanceList = images.map((image, index) => {
|
instanceList = images.map((image, index) => {
|
||||||
const metadata = image.getData().metadata;
|
const metadata = image.getData().metadata;
|
||||||
@@ -107,7 +107,7 @@ const DicomTagBrowser = ({ displaySets, displaySetInstanceUID }) => {
|
|||||||
showValue
|
showValue
|
||||||
step={1}
|
step={1}
|
||||||
min={1}
|
min={1}
|
||||||
max={instanceList.length - 1}
|
max={instanceList.length}
|
||||||
value={activeInstance}
|
value={activeInstance}
|
||||||
valueRenderer={value => <p>Instance Number: {value}</p>}
|
valueRenderer={value => <p>Instance Number: {value}</p>}
|
||||||
onChange={({ target }) => {
|
onChange={({ target }) => {
|
||||||
|
|||||||
@@ -3,6 +3,54 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [1.12.12](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.11...@ohif/extension-vtk@1.12.12) (2022-01-29)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-vtk
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [1.12.11](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.10...@ohif/extension-vtk@1.12.11) (2022-01-20)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-vtk
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [1.12.10](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.9...@ohif/extension-vtk@1.12.10) (2022-01-13)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-vtk
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [1.12.9](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.8...@ohif/extension-vtk@1.12.9) (2021-12-23)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-vtk
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [1.12.8](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.7...@ohif/extension-vtk@1.12.8) (2021-12-23)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-vtk
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [1.12.7](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.6...@ohif/extension-vtk@1.12.7) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/extension-vtk
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [1.12.6](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.5...@ohif/extension-vtk@1.12.6) (2021-11-30)
|
## [1.12.6](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.12.5...@ohif/extension-vtk@1.12.6) (2021-11-30)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/extension-vtk
|
**Note:** Version bump only for package @ohif/extension-vtk
|
||||||
|
|||||||
+10
-10
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/extension-vtk",
|
"name": "@ohif/extension-vtk",
|
||||||
"version": "1.12.6",
|
"version": "1.12.12",
|
||||||
"description": "OHIF extension for VTK.js",
|
"description": "OHIF extension for VTK.js",
|
||||||
"author": "OHIF",
|
"author": "OHIF",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -32,11 +32,11 @@
|
|||||||
"@ohif/core": "^0.50.0",
|
"@ohif/core": "^0.50.0",
|
||||||
"@ohif/i18n": "^0.50.0",
|
"@ohif/i18n": "^0.50.0",
|
||||||
"@ohif/ui": "^0.50.0",
|
"@ohif/ui": "^0.50.0",
|
||||||
"cornerstone-core": "^2.5.0",
|
"cornerstone-core": "^2.6.1",
|
||||||
"cornerstone-tools": "^6.0.0",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"cornerstone-wado-image-loader": "^4.0.3",
|
"cornerstone-wado-image-loader": "^4.1.0",
|
||||||
"dcmjs": "0.18.10",
|
"dcmjs": "0.19.2",
|
||||||
"dicom-parser": "^1.8.9",
|
"dicom-parser": "^1.8.11",
|
||||||
"i18next": "^17.0.3",
|
"i18next": "^17.0.3",
|
||||||
"i18next-browser-languagedetector": "^3.0.1",
|
"i18next-browser-languagedetector": "^3.0.1",
|
||||||
"prop-types": "^15.7.2",
|
"prop-types": "^15.7.2",
|
||||||
@@ -53,11 +53,11 @@
|
|||||||
"react-vtkjs-viewport": "^0.14.4"
|
"react-vtkjs-viewport": "^0.14.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ohif/core": "^2.16.2",
|
"@ohif/core": "^2.16.8",
|
||||||
"@ohif/ui": "^1.10.5",
|
"@ohif/ui": "^1.10.5",
|
||||||
"cornerstone-tools": "^6.0.0",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"cornerstone-wado-image-loader": "^4.0.3",
|
"cornerstone-wado-image-loader": "^4.1.0",
|
||||||
"dicom-parser": "^1.8.9",
|
"dicom-parser": "^1.8.11",
|
||||||
"gh-pages": "^2.0.1",
|
"gh-pages": "^2.0.1",
|
||||||
"i18next": "^17.0.3",
|
"i18next": "^17.0.3",
|
||||||
"i18next-browser-languagedetector": "^3.0.1",
|
"i18next-browser-languagedetector": "^3.0.1",
|
||||||
|
|||||||
+4
-2
@@ -56,6 +56,7 @@
|
|||||||
"@babel/preset-env": "^7.5.0",
|
"@babel/preset-env": "^7.5.0",
|
||||||
"@babel/preset-react": "^7.0.0",
|
"@babel/preset-react": "^7.0.0",
|
||||||
"@percy/cypress": "^2.2.0",
|
"@percy/cypress": "^2.2.0",
|
||||||
|
"@webpack-cli/serve": "^1.6.1",
|
||||||
"babel-eslint": "9.x",
|
"babel-eslint": "9.x",
|
||||||
"babel-loader": "^8.0.6",
|
"babel-loader": "^8.0.6",
|
||||||
"babel-plugin-inline-react-svg": "1.1.0",
|
"babel-plugin-inline-react-svg": "1.1.0",
|
||||||
@@ -104,8 +105,8 @@
|
|||||||
"stylus-loader": "^3.0.2",
|
"stylus-loader": "^3.0.2",
|
||||||
"terser-webpack-plugin": "^2.1.0",
|
"terser-webpack-plugin": "^2.1.0",
|
||||||
"webpack": "^4.35.2",
|
"webpack": "^4.35.2",
|
||||||
"webpack-cli": "^3.3.5",
|
"webpack-cli": "^4.9.2",
|
||||||
"webpack-dev-server": "^3.7.2",
|
"webpack-dev-server": "^4.7.3",
|
||||||
"webpack-hot-middleware": "^2.25.0",
|
"webpack-hot-middleware": "^2.25.0",
|
||||||
"webpack-merge": "^4.2.1",
|
"webpack-merge": "^4.2.1",
|
||||||
"workbox-webpack-plugin": "^5.0.0-beta.1",
|
"workbox-webpack-plugin": "^5.0.0-beta.1",
|
||||||
@@ -123,6 +124,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
|
"**/node-gyp": "8.4.1",
|
||||||
"**/@babel/runtime": "7.5.5"
|
"**/@babel/runtime": "7.5.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,60 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [2.16.8](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.7...@ohif/core@2.16.8) (2022-01-29)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/core
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [2.16.7](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.6...@ohif/core@2.16.7) (2022-01-20)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/core
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [2.16.6](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.5...@ohif/core@2.16.6) (2022-01-13)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/core
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [2.16.5](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.4...@ohif/core@2.16.5) (2021-12-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* DICOMFileLoadingListener typo in method name ([#2647](https://github.com/OHIF/Viewers/issues/2647)) ([761d54f](https://github.com/OHIF/Viewers/commit/761d54fbbfb376c20ee15794ef7bb7111f64a06f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [2.16.4](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.3...@ohif/core@2.16.4) (2021-12-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* SeriesTime and SeriesDate are only set for the first series and undefined for the remaining ones ([#2476](https://github.com/OHIF/Viewers/issues/2476)) ([6a401c9](https://github.com/OHIF/Viewers/commit/6a401c9e5204cb4f7af6aa33190ad5a8d0879de6))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [2.16.3](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.2...@ohif/core@2.16.3) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/core
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [2.16.2](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.1...@ohif/core@2.16.2) (2021-11-30)
|
## [2.16.2](https://github.com/OHIF/Viewers/compare/@ohif/core@2.16.1...@ohif/core@2.16.2) (2021-11-30)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/core
|
**Note:** Version bump only for package @ohif/core
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/core",
|
"name": "@ohif/core",
|
||||||
"version": "2.16.2",
|
"version": "2.16.8",
|
||||||
"description": "Generic business logic for web-based medical imaging applications",
|
"description": "Generic business logic for web-based medical imaging applications",
|
||||||
"author": "OHIF Core Team",
|
"author": "OHIF Core Team",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -31,16 +31,16 @@
|
|||||||
"test:unit:ci": "jest --ci --runInBand --collectCoverage"
|
"test:unit:ci": "jest --ci --runInBand --collectCoverage"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"cornerstone-core": "^2.5.0",
|
"cornerstone-core": "^2.6.1",
|
||||||
"cornerstone-tools": "^6.0.0",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"cornerstone-wado-image-loader": "^4.0.3",
|
"cornerstone-wado-image-loader": "^4.1.0",
|
||||||
"dicom-parser": "^1.8.9"
|
"dicom-parser": "^1.8.11"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.5.5",
|
"@babel/runtime": "^7.5.5",
|
||||||
"ajv": "^6.10.0",
|
"ajv": "^6.10.0",
|
||||||
"dcmjs": "0.18.10",
|
"dcmjs": "0.19.2",
|
||||||
"dicomweb-client": "^0.8.1",
|
"dicomweb-client": "^0.8.3",
|
||||||
"immer": "6.0.2",
|
"immer": "6.0.2",
|
||||||
"isomorphic-base64": "^1.0.2",
|
"isomorphic-base64": "^1.0.2",
|
||||||
"lodash.clonedeep": "^4.5.0",
|
"lodash.clonedeep": "^4.5.0",
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ class DICOMFileLoadingListener extends BaseLoadingListener {
|
|||||||
constructor(stack, options) {
|
constructor(stack, options) {
|
||||||
super(stack, options);
|
super(stack, options);
|
||||||
|
|
||||||
this.imageLoadProgressEventHandler = this._imageLoadProgressEventHandle.bind(
|
this.imageLoadProgressEventHandler = this._imageLoadProgressEventHandler.bind(
|
||||||
this
|
this
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ export class StudyPrefetcher {
|
|||||||
requestType: 'prefetch',
|
requestType: 'prefetch',
|
||||||
preventCache: false,
|
preventCache: false,
|
||||||
prefetchDisplaySetsTimeout: 300,
|
prefetchDisplaySetsTimeout: 300,
|
||||||
|
maxNumPrefetchRequests: 100,
|
||||||
includeActiveDisplaySet: false,
|
includeActiveDisplaySet: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -151,6 +152,11 @@ export class StudyPrefetcher {
|
|||||||
const nonCachedImageIds = this.filterCachedImageIds(imageIds);
|
const nonCachedImageIds = this.filterCachedImageIds(imageIds);
|
||||||
const imageLoadPoolManager = cornerstone.imageLoadPoolManager;
|
const imageLoadPoolManager = cornerstone.imageLoadPoolManager;
|
||||||
|
|
||||||
|
imageLoadPoolManager.maxNumRequests = {
|
||||||
|
...imageLoadPoolManager.maxNumRequests,
|
||||||
|
prefetch: this.options.maxNumPrefetchRequests,
|
||||||
|
};
|
||||||
|
|
||||||
let requestFn;
|
let requestFn;
|
||||||
if (this.options.preventCache) {
|
if (this.options.preventCache) {
|
||||||
requestFn = id => cornerstone.loadImage(id);
|
requestFn = id => cornerstone.loadImage(id);
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import ui from './ui';
|
|||||||
import user from './user.js';
|
import user from './user.js';
|
||||||
import errorHandler from './errorHandler.js';
|
import errorHandler from './errorHandler.js';
|
||||||
import utils, { hotkeys } from './utils/';
|
import utils, { hotkeys } from './utils/';
|
||||||
|
import str2ab from './utils/str2ab';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
UINotificationService,
|
UINotificationService,
|
||||||
@@ -96,6 +97,8 @@ export {
|
|||||||
UIDialogService,
|
UIDialogService,
|
||||||
MeasurementService,
|
MeasurementService,
|
||||||
LoggerService,
|
LoggerService,
|
||||||
|
|
||||||
|
str2ab,
|
||||||
};
|
};
|
||||||
|
|
||||||
export { OHIF };
|
export { OHIF };
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ describe('Top level exports', () => {
|
|||||||
'cornerstone',
|
'cornerstone',
|
||||||
'default', //
|
'default', //
|
||||||
'errorHandler',
|
'errorHandler',
|
||||||
|
'str2ab',
|
||||||
'string',
|
'string',
|
||||||
'ui',
|
'ui',
|
||||||
'user',
|
'user',
|
||||||
|
|||||||
@@ -9,38 +9,27 @@ import { api } from 'dicomweb-client';
|
|||||||
*/
|
*/
|
||||||
export default class StaticWadoClient extends api.DICOMwebClient {
|
export default class StaticWadoClient extends api.DICOMwebClient {
|
||||||
static filterKeys = {
|
static filterKeys = {
|
||||||
StudyInstanceUID: '0020000D',
|
"StudyInstanceUID": "0020000D",
|
||||||
PatientName: '00100010',
|
"PatientName": "00100010",
|
||||||
PatientID: '00100020',
|
"00100020": "mrn",
|
||||||
StudyDescription: '00081030',
|
"PatientID": "00100020",
|
||||||
ModalitiesInStudy: '00080061',
|
"StudyDescription": "00081030",
|
||||||
|
"StudyDate": "00080020",
|
||||||
|
"ModalitiesInStudy": "00080061",
|
||||||
|
AccessionNumber: "00080050",
|
||||||
};
|
};
|
||||||
|
|
||||||
constructor(qidoConfig) {
|
constructor(qidoConfig) {
|
||||||
super(qidoConfig);
|
super(qidoConfig);
|
||||||
this.staticWado = qidoConfig.staticWado;
|
this.staticWado = qidoConfig.staticWado;
|
||||||
this.extendMetadataWithInstances = qidoConfig.extendMetadataWithInstances;
|
|
||||||
}
|
|
||||||
|
|
||||||
async retrieveSeriesMetadata(options) {
|
|
||||||
if (!this.extendMetadataWithInstances)
|
|
||||||
return super.retrieveSeriesMetadata(options);
|
|
||||||
const results = await Promise.all([
|
|
||||||
super.retrieveSeriesMetadata(options),
|
|
||||||
this.searchForInstances(options),
|
|
||||||
]);
|
|
||||||
const metadata = results[0];
|
|
||||||
const instances = results[1];
|
|
||||||
return metadata.map(item => {
|
|
||||||
const sopUID = item['00080018'].Value[0];
|
|
||||||
const instance = instances.find(
|
|
||||||
instance => instance['00080018'].Value[0] == sopUID
|
|
||||||
);
|
|
||||||
Object.assign(item, instance);
|
|
||||||
return item;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replace the search for studies remote query with a local version which
|
||||||
|
* retrieves a complete query list and then sub-selects from it locally.
|
||||||
|
* @param {*} options
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
async searchForStudies(options) {
|
async searchForStudies(options) {
|
||||||
if (!this.staticWado) return super.searchForStudies(options);
|
if (!this.staticWado) return super.searchForStudies(options);
|
||||||
|
|
||||||
@@ -56,6 +45,62 @@ export default class StaticWadoClient extends api.DICOMwebClient {
|
|||||||
return filtered;
|
return filtered;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compares values, matching any instance of desired to any instance of
|
||||||
|
* actual by recursively go through the paired set of values. That is,
|
||||||
|
* this is O(m*n) where m is how many items in desired and n is the length of actual
|
||||||
|
* Then, at the individual item node, compares the Alphabetic name if present,
|
||||||
|
* and does a sub-string matching on string values, and otherwise does an
|
||||||
|
* exact match comparison.
|
||||||
|
*
|
||||||
|
* @param {*} desired
|
||||||
|
* @param {*} actual
|
||||||
|
* @returns true if the values match
|
||||||
|
*/
|
||||||
|
compareValues(desired, actual) {
|
||||||
|
if (Array.isArray(desired)) {
|
||||||
|
return desired.find(item => this.compareValues(item, actual));
|
||||||
|
}
|
||||||
|
if (Array.isArray(actual)) {
|
||||||
|
return actual.find(actualItem => this.compareValues(desired, actualItem));
|
||||||
|
}
|
||||||
|
if (actual && actual.Alphabetic) {
|
||||||
|
actual = actual.Alphabetic;
|
||||||
|
}
|
||||||
|
if (typeof (actual) == 'string') {
|
||||||
|
if (actual.length === 0) return true;
|
||||||
|
if (desired.length === 0 || desired === '*') return true;
|
||||||
|
if (desired[0] === '*' && desired[desired.length - 1] === '*') {
|
||||||
|
console.log(`Comparing ${actual} to ${desired.substring(1, desired.length - 1)}`)
|
||||||
|
return actual.indexOf(desired.substring(1, desired.length - 1)) != -1;
|
||||||
|
} else if (desired[desired.length - 1] === '*') {
|
||||||
|
return actual.indexOf(desired.substring(0, desired.length - 1)) != -1;
|
||||||
|
} else if (desired[0] === '*') {
|
||||||
|
return actual.indexOf(desired.substring(1)) === actual.length - desired.length + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return desired === actual;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Compares a pair of dates to see if the value is within the range */
|
||||||
|
compareDateRange(range, value) {
|
||||||
|
if (!value) return true;
|
||||||
|
const dash = range.indexOf('-');
|
||||||
|
if (dash === -1) return this.compareValues(range, value);
|
||||||
|
const start = range.substring(0, dash);
|
||||||
|
const end = range.substring(dash + 1);
|
||||||
|
return (!start || value >= start) &&
|
||||||
|
(!end || value <= end);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filters the return list by the query parameters.
|
||||||
|
*
|
||||||
|
* @param {*} key
|
||||||
|
* @param {*} queryParams
|
||||||
|
* @param {*} study
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
filterItem(key, queryParams, study) {
|
filterItem(key, queryParams, study) {
|
||||||
const altKey = StaticWadoClient.filterKeys[key] || key;
|
const altKey = StaticWadoClient.filterKeys[key] || key;
|
||||||
if (!queryParams) return true;
|
if (!queryParams) return true;
|
||||||
@@ -63,23 +108,8 @@ export default class StaticWadoClient extends api.DICOMwebClient {
|
|||||||
if (!testValue) return true;
|
if (!testValue) return true;
|
||||||
const valueElem = study[key] || study[altKey];
|
const valueElem = study[key] || study[altKey];
|
||||||
if (!valueElem) return false;
|
if (!valueElem) return false;
|
||||||
|
if (valueElem.vr == 'DA') return this.compareDateRange(testValue, valueElem.Value[0]);
|
||||||
const value = valueElem.Value;
|
const value = valueElem.Value;
|
||||||
return this.eqItem(testValue, value);
|
return this.compareValues(testValue, value) && true;
|
||||||
}
|
|
||||||
|
|
||||||
eqItem(testValue, value) {
|
|
||||||
if (testValue.filter) {
|
|
||||||
return (
|
|
||||||
testValue.filter(testItem => this.eqItem(testItem, value)).length > 0
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (value === testValue) return true;
|
|
||||||
if (typeof value == 'string') {
|
|
||||||
return value.indexOf(testValue) != -1;
|
|
||||||
}
|
|
||||||
if (value.Alphabetic) return this.eqItem(testValue, value.Alphabetic);
|
|
||||||
if (value.filter)
|
|
||||||
return value.filter(item => this.eqItem(testValue, item)).length > 0;
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -116,6 +116,11 @@ async function makeSOPInstance(server, study, instance) {
|
|||||||
};
|
};
|
||||||
study.seriesMap[SeriesInstanceUID] = series;
|
study.seriesMap[SeriesInstanceUID] = series;
|
||||||
study.series.push(series);
|
study.series.push(series);
|
||||||
|
} else {
|
||||||
|
if (series.SeriesDate === undefined)
|
||||||
|
series.SeriesDate = naturalizedInstance.SeriesDate;
|
||||||
|
if (series.SeriesTime === undefined)
|
||||||
|
series.SeriesTime = naturalizedInstance.SeriesTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
const wadouri = buildInstanceWadoUrl(
|
const wadouri = buildInstanceWadoUrl(
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ services:
|
|||||||
ohif_viewer:
|
ohif_viewer:
|
||||||
build:
|
build:
|
||||||
# Project root
|
# Project root
|
||||||
context: ./../../
|
context: ./../../../../
|
||||||
# Relative to context
|
# Relative to context
|
||||||
dockerfile: ./docker/OpenResty-Orthanc-Keycloak/dockerfile
|
dockerfile: ./platform/viewer/.recipes/OpenResty-Orthanc-Keycloak/dockerfile
|
||||||
image: webapp:latest
|
image: webapp:latest
|
||||||
container_name: webapp
|
container_name: webapp
|
||||||
volumes:
|
volumes:
|
||||||
@@ -35,7 +35,7 @@ services:
|
|||||||
# TODO: Update to use Postgres
|
# TODO: Update to use Postgres
|
||||||
# https://github.com/mrts/docker-postgresql-multiple-databases
|
# https://github.com/mrts/docker-postgresql-multiple-databases
|
||||||
orthanc:
|
orthanc:
|
||||||
image: jodogne/orthanc-plugins:1.5.6
|
image: jodogne/orthanc-plugins:1.9.7
|
||||||
hostname: orthanc
|
hostname: orthanc
|
||||||
container_name: orthanc
|
container_name: orthanc
|
||||||
volumes:
|
volumes:
|
||||||
@@ -47,7 +47,7 @@ services:
|
|||||||
|
|
||||||
# LINK: https://hub.docker.com/r/jboss/keycloak
|
# LINK: https://hub.docker.com/r/jboss/keycloak
|
||||||
keycloak:
|
keycloak:
|
||||||
image: jboss/keycloak:6.0.1
|
image: jboss/keycloak:16.1.0
|
||||||
hostname: keycloak
|
hostname: keycloak
|
||||||
container_name: keycloak
|
container_name: keycloak
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
@@ -23,7 +23,9 @@
|
|||||||
|
|
||||||
|
|
||||||
# Stage 1: Build the application
|
# Stage 1: Build the application
|
||||||
FROM node:11.2.0-slim as builder
|
|
||||||
|
# Needs to be pinned at 16.x for now because of https://github.com/webpack/webpack/issues/14532
|
||||||
|
FROM node:lts-slim as builder
|
||||||
|
|
||||||
RUN mkdir /usr/src/app
|
RUN mkdir /usr/src/app
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
@@ -36,12 +38,12 @@ COPY yarn.lock /usr/src/app/yarn.lock
|
|||||||
|
|
||||||
ADD . /usr/src/app/
|
ADD . /usr/src/app/
|
||||||
RUN yarn install
|
RUN yarn install
|
||||||
RUN yarn run build:web
|
RUN yarn run build
|
||||||
|
|
||||||
# Stage 2: Bundle the built application into a Docker container
|
# Stage 2: Bundle the built application into a Docker container
|
||||||
# which runs openresty (nginx) using Alpine Linux
|
# which runs openresty (nginx) using Alpine Linux
|
||||||
# LINK: https://hub.docker.com/r/openresty/openresty
|
# LINK: https://hub.docker.com/r/openresty/openresty
|
||||||
FROM openresty/openresty:1.15.8.1rc1-0-alpine-fat
|
FROM openresty/openresty:1.19.9.1-4-alpine-fat
|
||||||
|
|
||||||
RUN mkdir /var/log/nginx
|
RUN mkdir /var/log/nginx
|
||||||
RUN apk add --no-cache openssl
|
RUN apk add --no-cache openssl
|
||||||
@@ -60,6 +62,6 @@ RUN luarocks install lua-resty-openidc
|
|||||||
RUN luarocks install luacrypto
|
RUN luarocks install luacrypto
|
||||||
|
|
||||||
# Copy build output to image
|
# Copy build output to image
|
||||||
COPY --from=builder /usr/src/app/build /var/www/html
|
COPY --from=builder /usr/src/app/platform/viewer/dist /var/www/html
|
||||||
|
|
||||||
ENTRYPOINT ["/usr/local/openresty/nginx/sbin/nginx", "-g", "daemon off;"]
|
ENTRYPOINT ["/usr/local/openresty/nginx/sbin/nginx", "-g", "daemon off;"]
|
||||||
@@ -10,9 +10,9 @@ services:
|
|||||||
ohif_viewer:
|
ohif_viewer:
|
||||||
build:
|
build:
|
||||||
# Project root
|
# Project root
|
||||||
context: ./../../
|
context: ./../../../../
|
||||||
# Relative to context
|
# Relative to context
|
||||||
dockerfile: ./docker/OpenResty-Orthanc/dockerfile
|
dockerfile: ./platform/viewer/.recipes/OpenResty-Orthanc/dockerfile
|
||||||
image: webapp:latest
|
image: webapp:latest
|
||||||
container_name: webapp
|
container_name: webapp
|
||||||
volumes:
|
volumes:
|
||||||
@@ -34,7 +34,7 @@ services:
|
|||||||
# TODO: Update to use Postgres
|
# TODO: Update to use Postgres
|
||||||
# https://github.com/mrts/docker-postgresql-multiple-databases
|
# https://github.com/mrts/docker-postgresql-multiple-databases
|
||||||
orthanc:
|
orthanc:
|
||||||
image: jodogne/orthanc-plugins:1.5.6
|
image: jodogne/orthanc-plugins:1.9.7
|
||||||
hostname: orthanc
|
hostname: orthanc
|
||||||
container_name: orthanc
|
container_name: orthanc
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
@@ -23,7 +23,9 @@
|
|||||||
|
|
||||||
|
|
||||||
# Stage 1: Build the application
|
# Stage 1: Build the application
|
||||||
FROM node:11.2.0-slim as builder
|
|
||||||
|
# Needs to be pinned at 16.x for now because of https://github.com/webpack/webpack/issues/14532
|
||||||
|
FROM node:lts-slim as builder
|
||||||
|
|
||||||
RUN mkdir /usr/src/app
|
RUN mkdir /usr/src/app
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
@@ -36,12 +38,12 @@ COPY yarn.lock /usr/src/app/yarn.lock
|
|||||||
|
|
||||||
ADD . /usr/src/app/
|
ADD . /usr/src/app/
|
||||||
RUN yarn install
|
RUN yarn install
|
||||||
RUN yarn run build:web
|
RUN yarn run build
|
||||||
|
|
||||||
# Stage 2: Bundle the built application into a Docker container
|
# Stage 2: Bundle the built application into a Docker container
|
||||||
# which runs openresty (nginx) using Alpine Linux
|
# which runs openresty (nginx) using Alpine Linux
|
||||||
# LINK: https://hub.docker.com/r/openresty/openresty
|
# LINK: https://hub.docker.com/r/openresty/openresty
|
||||||
FROM openresty/openresty:1.15.8.1rc1-0-alpine-fat
|
FROM openresty/openresty:1.19.9.1-4-alpine-fat
|
||||||
|
|
||||||
RUN mkdir /var/log/nginx
|
RUN mkdir /var/log/nginx
|
||||||
RUN apk add --no-cache openssl
|
RUN apk add --no-cache openssl
|
||||||
@@ -60,6 +62,6 @@ RUN luarocks install lua-resty-openidc
|
|||||||
RUN luarocks install luacrypto
|
RUN luarocks install luacrypto
|
||||||
|
|
||||||
# Copy build output to image
|
# Copy build output to image
|
||||||
COPY --from=builder /usr/src/app/build /var/www/html
|
COPY --from=builder /usr/src/app/platform/viewer/dist /var/www/html
|
||||||
|
|
||||||
ENTRYPOINT ["/usr/local/openresty/nginx/sbin/nginx", "-g", "daemon off;"]
|
ENTRYPOINT ["/usr/local/openresty/nginx/sbin/nginx", "-g", "daemon off;"]
|
||||||
@@ -26,6 +26,16 @@ const PROXY_TARGET = process.env.PROXY_TARGET;
|
|||||||
const PROXY_DOMAIN = process.env.PROXY_DOMAIN;
|
const PROXY_DOMAIN = process.env.PROXY_DOMAIN;
|
||||||
const ENTRY_TARGET = process.env.ENTRY_TARGET || `${SRC_DIR}/index.js`;
|
const ENTRY_TARGET = process.env.ENTRY_TARGET || `${SRC_DIR}/index.js`;
|
||||||
|
|
||||||
|
|
||||||
|
const setHeaders = (res, path) => {
|
||||||
|
res.setHeader('Content-Type', 'text/plain')
|
||||||
|
if (path.indexOf('.gz') !== -1) {
|
||||||
|
res.setHeader('Content-Encoding', 'gzip')
|
||||||
|
} else if (path.indexOf('.br') !== -1) {
|
||||||
|
res.setHeader('Content-Encoding', 'br')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = (env, argv) => {
|
module.exports = (env, argv) => {
|
||||||
const baseConfig = webpackBase(env, argv, { SRC_DIR, DIST_DIR });
|
const baseConfig = webpackBase(env, argv, { SRC_DIR, DIST_DIR });
|
||||||
const isProdBuild = process.env.NODE_ENV === 'production';
|
const isProdBuild = process.env.NODE_ENV === 'production';
|
||||||
@@ -134,11 +144,40 @@ module.exports = (env, argv) => {
|
|||||||
hot: true,
|
hot: true,
|
||||||
open: true,
|
open: true,
|
||||||
port: 3000,
|
port: 3000,
|
||||||
host: '0.0.0.0',
|
client: {
|
||||||
public: 'http://localhost:' + 3000,
|
overlay: { errors: true, warnings: false },
|
||||||
|
},
|
||||||
|
'static': [
|
||||||
|
{
|
||||||
|
directory: path.join(require('os').homedir(), 'dicomweb'),
|
||||||
|
staticOptions: {
|
||||||
|
extensions: ['gz', 'br'],
|
||||||
|
index: "index.json.gz",
|
||||||
|
redirect: true,
|
||||||
|
setHeaders,
|
||||||
|
},
|
||||||
|
publicPath: '/dicomweb',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
directory: '../../testdata',
|
||||||
|
staticOptions: {
|
||||||
|
extensions: ['gz', 'br'],
|
||||||
|
index: "index.json.gz",
|
||||||
|
redirect: true,
|
||||||
|
setHeaders,
|
||||||
|
},
|
||||||
|
publicPath: '/testdata',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
//public: 'http://localhost:' + 3000,
|
||||||
|
//writeToDisk: true,
|
||||||
historyApiFallback: {
|
historyApiFallback: {
|
||||||
disableDotRule: true,
|
disableDotRule: true,
|
||||||
},
|
},
|
||||||
|
headers: {
|
||||||
|
'Cross-Origin-Embedder-Policy': 'require-corp',
|
||||||
|
'Cross-Origin-Opener-Policy': 'same-origin',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,70 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
## [4.12.14](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.13...@ohif/viewer@4.12.14) (2022-01-31)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [4.12.13](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.12...@ohif/viewer@4.12.13) (2022-01-29)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [4.12.12](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.11...@ohif/viewer@4.12.12) (2022-01-20)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [4.12.11](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.10...@ohif/viewer@4.12.11) (2022-01-19)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [4.12.10](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.9...@ohif/viewer@4.12.10) (2022-01-13)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [4.12.9](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.8...@ohif/viewer@4.12.9) (2021-12-23)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [4.12.8](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.7...@ohif/viewer@4.12.8) (2021-12-23)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [4.12.7](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.6...@ohif/viewer@4.12.7) (2021-12-02)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [4.12.6](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.5...@ohif/viewer@4.12.6) (2021-11-30)
|
## [4.12.6](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.12.5...@ohif/viewer@4.12.6) (2021-11-30)
|
||||||
|
|
||||||
**Note:** Version bump only for package @ohif/viewer
|
**Note:** Version bump only for package @ohif/viewer
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ describe('OHIF Save Measurements', function() {
|
|||||||
// cy.get('.sb-closeIcon').click();
|
// cy.get('.sb-closeIcon').click();
|
||||||
// });
|
// });
|
||||||
|
|
||||||
it('checks if warning message is displayed on measurements of unsupported tools', function() {
|
/*it('checks if warning message is displayed on measurements of unsupported tools', function() {
|
||||||
// Add measurement for unsupported tool in the viewport
|
// Add measurement for unsupported tool in the viewport
|
||||||
cy.addAngleMeasurement();
|
cy.addAngleMeasurement();
|
||||||
|
|
||||||
@@ -108,7 +108,7 @@ describe('OHIF Save Measurements', function() {
|
|||||||
|
|
||||||
// Close Measurements panel
|
// Close Measurements panel
|
||||||
cy.get('@measurementsBtn').click();
|
cy.get('@measurementsBtn').click();
|
||||||
});
|
});*/
|
||||||
|
|
||||||
/*it('checks if measurements of unsupported tools were not saved', function() {
|
/*it('checks if measurements of unsupported tools were not saved', function() {
|
||||||
// Add measurement for supported tool in the viewport
|
// Add measurement for supported tool in the viewport
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import '@percy/cypress';
|
import '@percy/cypress';
|
||||||
|
import { enable } from 'cornerstone-core';
|
||||||
import 'cypress-file-upload';
|
import 'cypress-file-upload';
|
||||||
import { DragSimulator } from '../helpers/DragSimulator.js';
|
import { DragSimulator } from '../helpers/DragSimulator.js';
|
||||||
import {
|
import {
|
||||||
@@ -199,6 +200,11 @@ Cypress.Commands.add('waitDicomImage', (timeout = 50000) => {
|
|||||||
.its('cornerstone')
|
.its('cornerstone')
|
||||||
.then({ timeout }, $cornerstone => {
|
.then({ timeout }, $cornerstone => {
|
||||||
return new Cypress.Promise(resolve => {
|
return new Cypress.Promise(resolve => {
|
||||||
|
const onEnabled = enabledEvt => {
|
||||||
|
const element = enabledEvt.detail.element;
|
||||||
|
|
||||||
|
element.addEventListener('cornerstoneimagerendered', onEvent);
|
||||||
|
};
|
||||||
const onEvent = renderedEvt => {
|
const onEvent = renderedEvt => {
|
||||||
const element = renderedEvt.detail.element;
|
const element = renderedEvt.detail.element;
|
||||||
|
|
||||||
@@ -209,15 +215,17 @@ Cypress.Commands.add('waitDicomImage', (timeout = 50000) => {
|
|||||||
);
|
);
|
||||||
resolve();
|
resolve();
|
||||||
};
|
};
|
||||||
const onEnabled = enabledEvt => {
|
const enabledElements = $cornerstone.getEnabledElements();
|
||||||
const element = enabledEvt.detail.element;
|
if (enabledElements && enabledElements.length && !enabledElements[0].invalid) {
|
||||||
|
// Sometimes the page finishes rendering before this gets run,
|
||||||
element.addEventListener('cornerstoneimagerendered', onEvent);
|
// if so, just resolve immediately.
|
||||||
};
|
resolve();
|
||||||
$cornerstone.events.addEventListener(
|
} else {
|
||||||
'cornerstoneelementenabled',
|
$cornerstone.events.addEventListener(
|
||||||
onEnabled
|
'cornerstoneelementenabled',
|
||||||
);
|
onEnabled
|
||||||
|
);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ohif/viewer",
|
"name": "@ohif/viewer",
|
||||||
"version": "4.12.6",
|
"version": "4.12.14",
|
||||||
"description": "OHIF Viewer",
|
"description": "OHIF Viewer",
|
||||||
"author": "OHIF Contributors",
|
"author": "OHIF Contributors",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
@@ -22,8 +22,8 @@
|
|||||||
"build:viewer:ci": "cross-env NODE_ENV=production PUBLIC_URL=/pwa/ APP_CONFIG=config/netlify.js QUICK_BUILD=true node --max_old_space_size=4096 ./../../node_modules/webpack/bin/webpack.js --config .webpack/webpack.pwa.js",
|
"build:viewer:ci": "cross-env NODE_ENV=production PUBLIC_URL=/pwa/ APP_CONFIG=config/netlify.js QUICK_BUILD=true node --max_old_space_size=4096 ./../../node_modules/webpack/bin/webpack.js --config .webpack/webpack.pwa.js",
|
||||||
"build:viewer:demo": "cross-env NODE_ENV=production APP_CONFIG=config/demo.js HTML_TEMPLATE=rollbar.html QUICK_BUILD=true node --max_old_space_size=4096 ./../../node_modules/webpack/bin/webpack.js --progress --config .webpack/webpack.pwa.js",
|
"build:viewer:demo": "cross-env NODE_ENV=production APP_CONFIG=config/demo.js HTML_TEMPLATE=rollbar.html QUICK_BUILD=true node --max_old_space_size=4096 ./../../node_modules/webpack/bin/webpack.js --progress --config .webpack/webpack.pwa.js",
|
||||||
"build:viewer:package": "yarn run build:package",
|
"build:viewer:package": "yarn run build:package",
|
||||||
"dev": "cross-env NODE_ENV=development webpack-dev-server --config .webpack/webpack.pwa.js --watch",
|
"dev": "cross-env NODE_ENV=development webpack-dev-server --config .webpack/webpack.pwa.js",
|
||||||
"dev:orthanc": "cross-env NODE_ENV=development PROXY_TARGET=/dicom-web PROXY_DOMAIN=http://localhost:8042 APP_CONFIG=config/docker_nginx-orthanc.js webpack-dev-server --config .webpack/webpack.pwa.js --watch",
|
"dev:orthanc": "cross-env NODE_ENV=development PROXY_TARGET=/dicom-web PROXY_DOMAIN=http://localhost:8042 APP_CONFIG=config/docker_nginx-orthanc.js webpack-dev-server --config .webpack/webpack.pwa.js",
|
||||||
"dev:viewer": "yarn run dev",
|
"dev:viewer": "yarn run dev",
|
||||||
"start": "yarn run dev",
|
"start": "yarn run dev",
|
||||||
"test:e2e": "cypress open",
|
"test:e2e": "cypress open",
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
"test:e2e:script-tag": "cypress run --config video=false --browser chrome --spec 'cypress/integration/common/**/*,cypress/integration/script-tag/**/*'",
|
"test:e2e:script-tag": "cypress run --config video=false --browser chrome --spec 'cypress/integration/common/**/*,cypress/integration/script-tag/**/*'",
|
||||||
"test:e2e:local": "cypress run --config video=false --browser chrome --spec 'cypress/integration/common/**/*,cypress/integration/pwa/**/*'",
|
"test:e2e:local": "cypress run --config video=false --browser chrome --spec 'cypress/integration/common/**/*,cypress/integration/pwa/**/*'",
|
||||||
"test:e2e:dist": "start-server-and-test test:e2e:serve http://localhost:3000 test:e2e:ci",
|
"test:e2e:dist": "start-server-and-test test:e2e:serve http://localhost:3000 test:e2e:ci",
|
||||||
"test:e2e:serve": "serve -n -l 3000 -s dist",
|
"test:e2e:serve": "cross-env APP_CONFIG=config/e2e.js yarn start",
|
||||||
"test:unit": "jest --watchAll",
|
"test:unit": "jest --watchAll",
|
||||||
"test:unit:ci": "jest --ci --runInBand --collectCoverage",
|
"test:unit:ci": "jest --ci --runInBand --collectCoverage",
|
||||||
"prepublishOnly": "yarn run build:package",
|
"prepublishOnly": "yarn run build:package",
|
||||||
@@ -47,28 +47,28 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.5.5",
|
"@babel/runtime": "^7.5.5",
|
||||||
"@ohif/core": "^2.16.2",
|
"@ohif/core": "^2.16.8",
|
||||||
"@ohif/extension-cornerstone": "^2.12.2",
|
"@ohif/extension-cornerstone": "^2.12.4",
|
||||||
"@ohif/extension-debugging": "^0.3.0",
|
"@ohif/extension-debugging": "^0.3.1",
|
||||||
"@ohif/extension-dicom-html": "^1.3.13",
|
"@ohif/extension-dicom-html": "^1.3.15",
|
||||||
"@ohif/extension-dicom-microscopy": "^0.52.0",
|
"@ohif/extension-dicom-microscopy": "^0.52.0",
|
||||||
"@ohif/extension-dicom-pdf": "^1.1.0",
|
"@ohif/extension-dicom-pdf": "^1.1.2",
|
||||||
"@ohif/extension-dicom-rt": "^0.7.3",
|
"@ohif/extension-dicom-rt": "^0.7.6",
|
||||||
"@ohif/extension-dicom-segmentation": "^0.7.4",
|
"@ohif/extension-dicom-segmentation": "^0.7.6",
|
||||||
"@ohif/extension-lesion-tracker": "^0.2.1",
|
"@ohif/extension-lesion-tracker": "^0.2.1",
|
||||||
"@ohif/extension-vtk": "^1.12.6",
|
"@ohif/extension-vtk": "^1.12.12",
|
||||||
"@ohif/i18n": "^0.53.0",
|
"@ohif/i18n": "^0.53.0",
|
||||||
"@ohif/ui": "^1.10.5",
|
"@ohif/ui": "^1.10.5",
|
||||||
"@tanem/react-nprogress": "^1.1.25",
|
"@tanem/react-nprogress": "^1.1.25",
|
||||||
"classnames": "^2.2.6",
|
"classnames": "^2.2.6",
|
||||||
"core-js": "^3.2.1",
|
"core-js": "^3.2.1",
|
||||||
"cornerstone-core": "^2.5.0",
|
"cornerstone-core": "^2.6.1",
|
||||||
"cornerstone-math": "^0.1.9",
|
"cornerstone-math": "^0.1.9",
|
||||||
"cornerstone-tools": "^6.0.0",
|
"cornerstone-tools": "^6.0.6",
|
||||||
"cornerstone-wado-image-loader": "^4.0.3",
|
"cornerstone-wado-image-loader": "^4.1.0",
|
||||||
"dcmjs": "0.18.10",
|
"dcmjs": "0.19.2",
|
||||||
"dicom-parser": "^1.8.9",
|
"dicom-parser": "^1.8.11",
|
||||||
"dicomweb-client": "^0.8.1",
|
"dicomweb-client": "^0.8.3",
|
||||||
"hammerjs": "^2.0.8",
|
"hammerjs": "^2.0.8",
|
||||||
"i18next": "^17.0.3",
|
"i18next": "^17.0.3",
|
||||||
"i18next-browser-languagedetector": "^3.0.1",
|
"i18next-browser-languagedetector": "^3.0.1",
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ window.config = {
|
|||||||
displaySetCount: 3,
|
displaySetCount: 3,
|
||||||
preventCache: false,
|
preventCache: false,
|
||||||
prefetchDisplaySetsTimeout: 300,
|
prefetchDisplaySetsTimeout: 300,
|
||||||
|
maxNumPrefetchRequests: 100,
|
||||||
displayProgress: true,
|
displayProgress: true,
|
||||||
includeActiveDisplaySet: true,
|
includeActiveDisplaySet: true,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,116 @@
|
|||||||
|
window.config = {
|
||||||
|
routerBasename: '/',
|
||||||
|
showStudyList: true,
|
||||||
|
servers: {
|
||||||
|
dicomWeb: [
|
||||||
|
{
|
||||||
|
name: 'LocalStatic',
|
||||||
|
wadoUriRoot: '/testdata',
|
||||||
|
qidoRoot: '/testdata',
|
||||||
|
wadoRoot: '/testdata',
|
||||||
|
qidoSupportsIncludeField: false,
|
||||||
|
imageRendering: 'wadors',
|
||||||
|
enableStudyLazyLoad: true,
|
||||||
|
supportsFuzzyMatching: false,
|
||||||
|
staticWado: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// Extensions should be able to suggest default values for these?
|
||||||
|
// Or we can require that these be explicitly set
|
||||||
|
hotkeys: [
|
||||||
|
// ~ Global
|
||||||
|
{
|
||||||
|
commandName: 'incrementActiveViewport',
|
||||||
|
label: 'Next Viewport',
|
||||||
|
keys: ['right'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
commandName: 'decrementActiveViewport',
|
||||||
|
label: 'Previous Viewport',
|
||||||
|
keys: ['left'],
|
||||||
|
},
|
||||||
|
// Supported Keys: https://craig.is/killing/mice
|
||||||
|
// ~ Cornerstone Extension
|
||||||
|
{ commandName: 'rotateViewportCW', label: 'Rotate Right', keys: ['r'] },
|
||||||
|
{ commandName: 'rotateViewportCCW', label: 'Rotate Left', keys: ['l'] },
|
||||||
|
{ commandName: 'invertViewport', label: 'Invert', keys: ['i'] },
|
||||||
|
{
|
||||||
|
commandName: 'flipViewportVertical',
|
||||||
|
label: 'Flip Horizontally',
|
||||||
|
keys: ['h'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
commandName: 'flipViewportHorizontal',
|
||||||
|
label: 'Flip Vertically',
|
||||||
|
keys: ['v'],
|
||||||
|
},
|
||||||
|
{ commandName: 'scaleUpViewport', label: 'Zoom In', keys: ['+'] },
|
||||||
|
{ commandName: 'scaleDownViewport', label: 'Zoom Out', keys: ['-'] },
|
||||||
|
{ commandName: 'fitViewportToWindow', label: 'Zoom to Fit', keys: ['='] },
|
||||||
|
{ commandName: 'resetViewport', label: 'Reset', keys: ['space'] },
|
||||||
|
// clearAnnotations
|
||||||
|
{ commandName: 'nextImage', label: 'Next Image', keys: ['down'] },
|
||||||
|
{ commandName: 'previousImage', label: 'Previous Image', keys: ['up'] },
|
||||||
|
// firstImage
|
||||||
|
// lastImage
|
||||||
|
{
|
||||||
|
commandName: 'previousViewportDisplaySet',
|
||||||
|
label: 'Previous Series',
|
||||||
|
keys: ['pagedown'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
commandName: 'nextViewportDisplaySet',
|
||||||
|
label: 'Next Series',
|
||||||
|
keys: ['pageup'],
|
||||||
|
},
|
||||||
|
// ~ Cornerstone Tools
|
||||||
|
{ commandName: 'setZoomTool', label: 'Zoom', keys: ['z'] },
|
||||||
|
// ~ Window level presets
|
||||||
|
{
|
||||||
|
commandName: 'windowLevelPreset1',
|
||||||
|
label: 'W/L Preset 1',
|
||||||
|
keys: ['1'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
commandName: 'windowLevelPreset2',
|
||||||
|
label: 'W/L Preset 2',
|
||||||
|
keys: ['2'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
commandName: 'windowLevelPreset3',
|
||||||
|
label: 'W/L Preset 3',
|
||||||
|
keys: ['3'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
commandName: 'windowLevelPreset4',
|
||||||
|
label: 'W/L Preset 4',
|
||||||
|
keys: ['4'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
commandName: 'windowLevelPreset5',
|
||||||
|
label: 'W/L Preset 5',
|
||||||
|
keys: ['5'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
commandName: 'windowLevelPreset6',
|
||||||
|
label: 'W/L Preset 6',
|
||||||
|
keys: ['6'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
commandName: 'windowLevelPreset7',
|
||||||
|
label: 'W/L Preset 7',
|
||||||
|
keys: ['7'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
commandName: 'windowLevelPreset8',
|
||||||
|
label: 'W/L Preset 8',
|
||||||
|
keys: ['8'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
commandName: 'windowLevelPreset9',
|
||||||
|
label: 'W/L Preset 9',
|
||||||
|
keys: ['9'],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
@@ -5,9 +5,9 @@ window.config = {
|
|||||||
dicomWeb: [
|
dicomWeb: [
|
||||||
{
|
{
|
||||||
name: 'LocalStatic',
|
name: 'LocalStatic',
|
||||||
wadoUriRoot: 'http://localhost:5000/',
|
wadoUriRoot: '/dicomweb',
|
||||||
qidoRoot: 'http://localhost:5000',
|
qidoRoot: '/dicomweb',
|
||||||
wadoRoot: 'http://localhost:5000/',
|
wadoRoot: '/dicomweb',
|
||||||
qidoSupportsIncludeField: false,
|
qidoSupportsIncludeField: false,
|
||||||
imageRendering: 'wadors',
|
imageRendering: 'wadors',
|
||||||
thumbnailRendering: 'thumbnail',
|
thumbnailRendering: 'thumbnail',
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
3.7
|
||||||
Submodule
+1
Submodule testdata added at 47d51e15a0.
Reference in new issue
Block a user