Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
201 commits
Select commit Hold shift + click to select a range
86d72bf
feat(Slice): Use keyboard to change slices
Oct 28, 2024
a38efeb
fix(Slice): Refactor code and set active view when mouse scrolling
Jan 16, 2025
17ea21e
Merge pull request #679 from lchauvin/keyboard-change-slice
floryst Jan 20, 2025
2c70887
Fix url typo in AboutBox.vue
Gabsha Jan 24, 2025
20009fd
Merge pull request #691 from Gabsha/main
floryst Jan 28, 2025
ab0e1f7
chore: upgrade webdriverio to v9
floryst Jan 28, 2025
1832c17
chore: make base path relative
PaulHax Jan 27, 2025
186b19d
Merge pull request #695 from Kitware/upgrade-webdriver
floryst Jan 28, 2025
a814b9b
Merge pull request #694 from PaulHax/rel-base-path
floryst Jan 28, 2025
3d7dda2
feat: support token and tokenUrl in URL
floryst Jan 22, 2025
3b52a09
docs: add initial deployment docs
floryst Jan 27, 2025
f72a9a7
docs: update authentication docs
floryst Jan 28, 2025
0c75deb
fix(fetch): merge against base
floryst Jan 28, 2025
f2f56f7
feat(DICOMWeb): add global headers to requests
PaulHax Jan 27, 2025
7d19699
Merge pull request #692 from Kitware/authz-token-in-url
floryst Jan 29, 2025
6d96b23
docs: fix docs not building
floryst Jan 30, 2025
0df2b80
Merge pull request #696 from Kitware/floryst-patch-2
floryst Jan 30, 2025
ae0adb0
chore(publish.yml): update actions versions
PaulHax Jan 30, 2025
7d9834e
Merge pull request #697 from PaulHax/update-ci
PaulHax Jan 30, 2025
6a1434f
docs: add CORS note to tokenUrl
floryst Feb 3, 2025
8c525ac
fix(server): fix showing median filtered image
PaulHax Feb 4, 2025
15473d8
Merge pull request #700 from PaulHax/server-fix
floryst Feb 17, 2025
6df6e6e
Merge pull request #698 from Kitware/improve-auth-docs
floryst Feb 17, 2025
79cc718
chore(package): set version to 4.3.0
PaulHax Feb 19, 2025
d565bf3
fix:(useAnnotationTool): keep tool selected when hiding
PaulHax Feb 20, 2025
5385aa6
feat(SegmentGroupControls): add batch edit checkboxes
PaulHax Feb 20, 2025
d657625
fix(paint): keep existing currentSegmentGroup when adding new group
PaulHax Feb 21, 2025
1e9d8c4
fix(paint): ensure segment group on start stroke
PaulHax Feb 26, 2025
6dbda91
feat(segmentGroups): cycle colors on create new segment
PaulHax Feb 26, 2025
79d48bb
feat(App): use current image name in doc title
PaulHax Feb 27, 2025
3c2053b
feat(ControlsStripTools): add shortcut in tooltip
PaulHax Feb 27, 2025
99f52fc
refactor(App): remove special parsing of save url param
PaulHax Feb 27, 2025
bda9efe
feat(SegmentGroupControls): hide batch controls when no groups
PaulHax Feb 27, 2025
2f7eb25
Merge pull request #705 from PaulHax/seg-sliders
floryst Feb 27, 2025
3b9e614
Merge pull request #704 from PaulHax/version
floryst Feb 27, 2025
079a195
Merge pull request #708 from PaulHax/name-in-title
floryst Feb 27, 2025
55f993a
Merge pull request #709 from PaulHax/shortcut-in-tooltip
floryst Feb 27, 2025
390562e
feat: keyboard shortcut to delete current image and clear scene
Feb 21, 2025
9e7cb1f
fix: remove function handles null ids
Feb 28, 2025
66e16bc
fix(App): just VolView in doc title after delete image
PaulHax Mar 6, 2025
1f3102a
Merge pull request #713 from PaulHax/delete-shortcut
PaulHax Mar 10, 2025
b87392b
feat: change slice with key and mouse movement
PaulHax Mar 7, 2025
2671ca9
chore(package-lock): update volview version
PaulHax Mar 10, 2025
0b14111
refactor(GatedMouseRangeManipulator): simplify initialization
PaulHax Mar 10, 2025
03f3931
feat(config): simplify default segments and labels
PaulHax Mar 14, 2025
8995ca7
fix(slices): set coincident topology with relative
PaulHax Mar 17, 2025
6c29fd1
feat: add scalar probe tool
PaulHax Mar 10, 2025
3c4d5ed
feat(ScalarProbe): move display to sidebar
PaulHax Mar 12, 2025
6d3241e
fix(segmentGroups): don't delete source image on conversion
PaulHax Mar 13, 2025
448cdee
fix(dataset-images): trigger reactive updates on deleteImage
PaulHax Mar 13, 2025
5984752
fix(ScalarProbe): calculate position from IJK
PaulHax Mar 17, 2025
0358913
Merge pull request #714 from PaulHax/grab-slice
floryst Mar 19, 2025
08398bc
Merge pull request #715 from PaulHax/probe
floryst Mar 19, 2025
c2e0f23
Merge pull request #718 from PaulHax/default-seg
floryst Mar 19, 2025
e6848ed
Merge pull request #719 from PaulHax/coincident-fix
floryst Mar 19, 2025
c3b6daf
fix(ScalarProbe): eliminate vue console warning
1isten Mar 20, 2025
be5f770
fix(ScalarProbe): avoid accessing undefined rep
1isten Mar 20, 2025
971610f
Merge pull request #723 from 1isten/fix/scalar-probe
PaulHax Mar 21, 2025
245e5b9
refactor(dataSource): rename to FileDataSource
floryst Jan 5, 2024
f1bad7e
feat(streaming): open URIs as streams
floryst Jan 5, 2024
b9b7919
feat(streaming): add DICOM stream handler
floryst Jan 9, 2024
ba2e929
feat(streaming): add streaming integration
floryst May 23, 2024
923fc26
fix(streaming): improved interface
floryst Jun 13, 2024
b80e608
perf(windowing): perform histogram in worker
floryst Jun 13, 2024
5b1133d
fix(VolumeRendering): defer editor loading
floryst Jun 13, 2024
4eda124
chore: pin patched packages
floryst Jun 18, 2024
a12f85b
chore(vtk.js): update to 30.9.0
floryst Jun 18, 2024
82606c9
chore(vtk.js): apply streaming-textures patch
floryst Jun 18, 2024
d91dc14
feat: incremental volume loading
floryst Jun 18, 2024
fe3ecae
fix(MeasurementsToolList): ts error
floryst Jun 18, 2024
e61bd3c
chore: update package-lock
floryst Jun 26, 2024
71d60d6
fix(updateUriType): finished stream -> empty mime
floryst Jul 9, 2024
134e435
fix(DataBrowser): remove keys from panels to avoid error
PaulHax Jul 16, 2024
b6502e3
fix(CachedStreamFetcher): better 404 error msg
floryst Jul 20, 2024
18ea625
fix(allocateImageFromChunks): support 1-bit images
floryst Jul 20, 2024
6a2f1fd
fix(vtk.js): incorrect patch
floryst Jul 22, 2024
a4f6431
fix(cachedStreamFetcher): handle Content-Range
floryst Jul 22, 2024
7da9fdb
fix(allocateImageFromChunks): support multi-frame
floryst Aug 1, 2024
e86a60f
chore: update vue + vueuse and remove patches
floryst Mar 19, 2025
ce30cdd
perf(chunkImage): drop chunkStatus reactivity
floryst Mar 19, 2025
43b4812
fix(volumeColoring): watching a non-ref object
floryst Mar 19, 2025
74bdb83
feat(import): simpler import + state restore logic
floryst Jul 16, 2024
c1730a8
feat(DataSource): simplified data structure
floryst Aug 7, 2024
c217deb
fix(DicomWeb): expand panel at start and build fix
PaulHax Aug 8, 2024
b19fca1
fix(EditableChipList): put edit button at end and name overflow
PaulHax Aug 8, 2024
9868eec
fix(layers): load whole image before resampling
PaulHax Aug 9, 2024
0a0ecc1
fix(segmentGroups): wait for image load before resample
PaulHax Aug 15, 2024
38b4450
fix(allocateImageFromChunks): port z spacing logic from ITK
PaulHax Aug 15, 2024
01c90f3
fix(dicomChunkImage): update data range on realloc
floryst Mar 26, 2025
758475c
refactor: imageCacheStore for progressive images
floryst Apr 2, 2025
4ebfbae
fix: layerStore uses imageCacheStore for images
floryst Apr 2, 2025
df18032
fix: forgot to commit this file
floryst Apr 2, 2025
7374cb9
test(content-range): handle empty string
floryst Apr 2, 2025
863a1df
fix(sliceInitializer): do not use const type
floryst Apr 9, 2025
e7077ad
test(vtk-image): skip thumbnail tests
floryst Apr 9, 2025
62c01ab
refactor: remove unused chunk store
floryst Apr 9, 2025
6e75e97
fix(serialization): conditionally create IDs
floryst Apr 9, 2025
f2ea602
chore(github): update node runner
floryst Apr 11, 2025
4519e96
feat(state-file): bump manifest to 5.0.0
floryst Apr 11, 2025
070962d
chore: switch to happy-dom
floryst Apr 11, 2025
e71c722
test: remove direct chai dep
floryst Apr 12, 2025
b386720
chore(ts): do not use typeRoots
floryst Apr 15, 2025
e46b916
test: fix illegal fetch invocation
floryst Apr 16, 2025
95aaa94
test: use ubuntu-latest
floryst Apr 16, 2025
7f2a992
Merge pull request #606 from Kitware/streaming-base
floryst Apr 16, 2025
2b964f7
chore(github): use ubuntu-latest
floryst Apr 16, 2025
ac5e127
Merge pull request #727 from Kitware/fix-github-ci
floryst Apr 16, 2025
788aade
fix: typo
Jackie733 Apr 18, 2025
fff6fd9
fix(requestPool): increase pool size
floryst Apr 22, 2025
98e80c2
Merge pull request #731 from Kitware/bump-up-request-pool
floryst Apr 22, 2025
aac0d0d
Merge pull request #730 from Jackie733/patch-1
floryst Apr 22, 2025
34d02f7
chore: bump itk-wasm to 1.0.0-b.188
PaulHax Apr 11, 2025
6eff0ec
feat(paint): add fill between slice interpolation
PaulHax Mar 31, 2025
495fac1
fix(paint): disable widget when in fill between mode
PaulHax Apr 24, 2025
cf28f8f
fix(wheneverImageLoaded): run callback when switching images
PaulHax Mar 20, 2025
f616fed
fix(seg): regression with loading seg images
floryst Apr 28, 2025
871991b
Merge pull request #732 from Kitware/fix-streaming-seg
floryst Apr 28, 2025
bdecfcf
refactor(PaintControls): factor out FillBetweenControls
PaulHax Apr 24, 2025
4cffa91
feat: improve error messages for file loading
PaulHax May 2, 2025
40a07f7
Merge pull request #726 from PaulHax/interpolate
floryst May 2, 2025
6def5e2
Merge pull request #724 from PaulHax/crop-fix
floryst May 2, 2025
3f9eb8a
Merge pull request #735 from PaulHax/error-messages
floryst May 2, 2025
36ce276
fix(cachedStreamFetcher): avoid double download
PaulHax May 6, 2025
4cf7ef4
Merge pull request #736 from PaulHax/fix-content-range
floryst May 7, 2025
d8ffbf8
fix(dicom): build valid DICOM when reading tags
floryst May 8, 2025
67b6296
Merge pull request #737 from Kitware/fix-opt-dicom-loading
floryst May 12, 2025
c3c32c1
fix(windowing): no auto window level if user set already
PaulHax May 12, 2025
c456f42
fix(windowing): keep autoRange when switching images
PaulHax May 13, 2025
8c0fc62
refactor: move image min, max, autoRange to image-stats
PaulHax May 13, 2025
2df76cb
refactor(windowing): update width/level from autoRange in windowing
PaulHax May 13, 2025
5fddb4f
refactor(windowing): use computed refs instead of watches
PaulHax May 13, 2025
89f8ba1
fix(state-file): bump version for view windowing changes
PaulHax May 13, 2025
7aa0777
fix(camera): only automatically reset camera once
PaulHax May 14, 2025
359e575
fix(windowing): fix range manipulator corrupting windowing
PaulHax May 13, 2025
bf098e5
refactor(windowing): simplify update logic
PaulHax May 13, 2025
c1fb113
fix(windowing): deserialize userTriggered correctly
PaulHax May 14, 2025
7760c6e
fix(schema): allow just auto and useAuto for view.windowing
PaulHax May 14, 2025
086b055
Merge pull request #739 from PaulHax/fix-camera-reset
floryst May 16, 2025
4cc449e
refactor(image-stats): better watcher lifecycle management
PaulHax May 15, 2025
200edec
fix(importSingleFile): show middle slice of image on load
May 21, 2025
3026a43
fix(VtkViews): reset clipping planes on view layout change
PaulHax May 21, 2025
459f6d5
refactor(VtkSliceView): remove unused disableAutoResetCamera prop
PaulHax May 21, 2025
88f012c
Merge pull request #738 from PaulHax/wl-while-streaming
floryst May 22, 2025
4e40ace
Merge pull request #741 from PaulHax/fix-image-middle-slice
floryst May 22, 2025
19f0ef6
fix(dicom): load images with NumberOfFrames == 1
floryst May 22, 2025
5644bad
Merge pull request #742 from PaulHax/fix-layout-change
floryst May 22, 2025
3a54cc3
feat(config): change default layer colormap to 2hot-opaque
PaulHax May 22, 2025
c3bee77
Merge pull request #746 from PaulHax/colormap-to-hot
floryst May 23, 2025
551641e
Merge pull request #745 from Kitware/fix-slice-with-numberofframes
floryst May 23, 2025
da5eba0
feat(crosshairs): add hold key for temp crosshairs tool
PaulHax May 21, 2025
03365c3
feat(segments): rasterize polygons as segments
floryst May 27, 2025
c58c990
Merge pull request #747 from Kitware/rasterize-polygons
floryst May 27, 2025
1d78dab
Merge pull request #743 from PaulHax/crosshairs-toggle
floryst May 27, 2025
54c896b
fix: handle images with 0 range or multiple components
PaulHax May 29, 2025
a5f0fb9
perf(image-stats): use existing ranges for histogram calculation
PaulHax May 29, 2025
31e7dcc
Merge pull request #749 from PaulHax/range-fix
floryst Jun 3, 2025
e6b1f0b
fix(windowing): default to black images
floryst Jun 3, 2025
76d9639
fix(image-stats): fix loading of SEG DICOM modality files
PaulHax Jun 3, 2025
7adcd97
Merge pull request #751 from PaulHax/fix-loading-seg
floryst Jun 4, 2025
8b2b3ea
Merge pull request #750 from Kitware/no-flash-of-white-wl
floryst Jun 4, 2025
2c77c2d
fix(image-stats): load one component images
PaulHax Jun 5, 2025
66d9082
feat(views): maximize a view on double click
PaulHax Jun 5, 2025
bf5bb92
fix(LayoutGrid): avoid maximizing view when annotating
PaulHax Jun 5, 2025
ed3840b
Merge pull request #753 from PaulHax/stats-range-fix
floryst Jun 6, 2025
6c6329a
Merge pull request #754 from PaulHax/maximize
floryst Jun 6, 2025
b57987a
feat(paint): thresholding support
floryst Jun 9, 2025
1c3c9a3
fix(paint): update threshold on image switch
floryst Jun 10, 2025
63b5159
fix(paint): consistent controls styling
floryst Jun 10, 2025
db620f2
Merge pull request #755 from Kitware/paint-thresholding
floryst Jun 11, 2025
1650c26
chore(package): run eslint on project files
PaulHax Jun 23, 2025
a45fbdc
feat(paint): add Gaussian smoothing for segment groups
PaulHax Jun 23, 2025
2342e7a
refactor(paint): create unified process architecture for fillBetween …
PaulHax Jun 23, 2025
8c1b0dc
perf(gaussianSmooth): optimize Gaussian smoothing performance
PaulHax Jun 23, 2025
739195b
feat(process): improve ProcessWorkflow layout and button arrangement
PaulHax Jun 23, 2025
9e4be2d
refactor(gaussianSmooth): consolidate worker into paint tools directory
PaulHax Jun 24, 2025
5139967
feat(gaussianSmooth): implement smoothing with spacing scaled kernel
PaulHax Jun 24, 2025
e163c04
perf(gaussianSmooth): optimize processing with bounding box sub-volum…
PaulHax Jun 24, 2025
05bb668
feat(gaussianSmooth): disable sigma slider during preview mode
PaulHax Jun 24, 2025
b5de3d6
refactor(gaussianSmooth): remove explicit return types
PaulHax Jun 24, 2025
b8e954d
refactor(gaussianSmooth): simplfy process interface
PaulHax Jun 24, 2025
9ad3a7a
refactor(paintProcess): address PR review feedback
PaulHax Jun 25, 2025
3b9f35b
feat(ProcessWorkflow): add a cancel button nice to apply
PaulHax Jun 26, 2025
a694df2
style(slider): improve thumb label visibility with opaque background
PaulHax Jun 26, 2025
58f56b9
refactor(ProcessWorkflow): simplify type conversion in handleToggleCh…
PaulHax Jun 26, 2025
f5d7f7b
Merge pull request #757 from PaulHax/gaussy
floryst Jun 27, 2025
1f162fb
feat(segment): add lock/unlock functionality for segments
TomTonroe Jul 3, 2025
416112e
feat(SegmentList): add button to lock/unlock all segments
TomTonroe Jul 3, 2025
0dd87a3
feat(SegmentList): add lock button tooltips
TomTonroe Jul 3, 2025
708c193
refactor(paint): move locked segment check above threshold checking
TomTonroe Jul 4, 2025
1b59575
refactor(segment): use updateSegment for lock toggle
TomTonroe Jul 4, 2025
6a966bb
feat(paintProcess): prevent processing of locked segments
TomTonroe Jul 4, 2025
f1ca5b5
feat(SegmentList): change lock icon color to red when all segments ar…
TomTonroe Jul 4, 2025
df30899
feat(paint): prevent painting if active segment is locked
TomTonroe Jul 4, 2025
0a40ce4
feat(segment): space evenly on segment lock and visibility buttons
PaulHax Jul 8, 2025
8d5ada4
Merge pull request #760 from TomTonroe/segment-locking
floryst Jul 11, 2025
431af1f
feat(PaintWidget2D): add Ctrl+scroll wheel brush size control
TomTonroe Jul 5, 2025
e5f8d69
style(PaintWidget2D): format with prettier
TomTonroe Jul 13, 2025
f2e36a0
feat(PaintWidget2D): make brush size modifier key customizable
TomTonroe Jul 16, 2025
971b364
Merge pull request #765 from TomTonroe/brush-size-shortcut
floryst Jul 25, 2025
0a1ee68
feat(package): bump VolView version to 4.4.0
PaulHax Jul 31, 2025
6c1f808
Merge pull request #768 from PaulHax/release-4-4
PaulHax Jul 31, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ on:

jobs:
checks:
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
name: Code check and tests
steps:
- uses: actions/checkout@v4
- name: Setup node
uses: actions/setup-node@v1
with:
node-version: 16
node-version: 22
- run: npm ci
- name: Enforce code style
run: npx prettier --config ./prettier.config.cjs --list-different "src/**/*.[jt]s" "tests/**/*.[jt]s" "src/**/*.vue"
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ jobs:
test:
strategy:
matrix:
os: [ubuntu-20.04, macos-latest]
os: [ubuntu-latest, macos-latest]
name: E2E Testing on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
env:
Expand All @@ -16,24 +16,24 @@ jobs:
with:
fetch-depth: 0
- name: Install node-canvas deps (macos)
if: matrix.os != 'ubuntu-20.04'
if: matrix.os != 'ubuntu-latest'
run: brew install pkg-config cairo pango libpng jpeg giflib librsvg pixman
- name: Install dependencies
run: npm ci
env:
DETECT_CHROMEDRIVER_VERSION: true
- name: Install xvfb (linux)
if: matrix.os == 'ubuntu-20.04'
if: matrix.os == 'ubuntu-latest'
run: sudo apt-get install xvfb
- name: Run E2E on chrome (linux)
if: matrix.os == 'ubuntu-20.04'
if: matrix.os == 'ubuntu-latest'
run: xvfb-run --server-args="-screen 0, 1400x1000x24" --auto-servernum npm run test:e2e:chrome
- name: Set screen resolution (windows)
if: matrix.os == 'windows-latest'
run: Set-DisplayResolution -Width 1920 -Height 1080 -Force
shell: pwsh
- name: Run E2E on chrome (non-linux)
if: matrix.os != 'ubuntu-20.04'
if: matrix.os != 'ubuntu-latest'
run: npm run test:e2e:chrome
- name: Archive test results
if: success() || failure()
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ concurrency:
jobs:
build:
name: Build Docs
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
Expand All @@ -35,7 +35,7 @@ jobs:
- name: Build docs
run: npm run docs:build
- name: Upload pages artifact
uses: actions/upload-pages-artifact@v1
uses: actions/upload-pages-artifact@v3
with:
path: './docs/.vitepress/dist'

Expand All @@ -49,4 +49,4 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v1
uses: actions/deploy-pages@v4
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,6 @@ bundle-analysis.html
reports
*.log
.tmp/

.github/copilot
CLAUDE.md
10 changes: 10 additions & 0 deletions docs/.vitepress/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,16 @@ export default defineConfig({
{ text: 'Configuration File', link: '/configuration_file' },
],
},
{
text: 'Deployment',
items: [
{ text: 'Overview', link: '/deployment_overview' },
{ text: 'Building for Production', link: '/building_for_production' },
{ text: 'Deploying VolView', link: '/deploying_volview' },
{ text: 'Authentication & Authorization', link: '/authentication' },
{ text: 'Cross Origin Resource Sharing (CORS)', link: '/cors' },
],
},
],

socialLinks: [
Expand Down
29 changes: 29 additions & 0 deletions docs/authentication.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Authentication & Authorization

VolView itself does not specify any given authentication mechanism to use. How you let VolView access authenticated resources depends on individual deployment needs.

## VolView behind Login Portal

The easiest approach to securing a VolView instance is to host VolView behind an authentication portal. This will secure access to VolView, and allow VolView to automatically use existing user credentials to request protected data. Often the credentials are stored in a cookie.

## OAuth Tokens via URL

When accessing OAuth-protected resources, VolView by default does not add the `Authorization` header to requests. It is possible to tell VolView to add `Authorization` headers to all requests, via the `token` and `tokenUrl` parameters.

### `token` URL parameter

> [!WARNING]
> This is a discouraged approach! Only use it if you absolutely must.

You can pass in the `token` URL parameter like so: `https://example.com/VolView/?token=XXXX`. When VolView sees this, it will extract the token from the URL and use it for all subsequent data requests. VolView will also strip the token from the URL to prevent saving the token into the browser history.

### `tokenUrl` URL parameter

As an alternative to passing in the token via the URL, if you have an endpoint that returns the user's token then you can use the `tokenUrl` parameter like so: `https://example.com/VolView/?tokenUrl=https://example.com/userToken`. If VolView successfully receives a token from this endpoint, it will use the token in subsequent data requests.

The token URL is expected to return the access token as plaintext, i.e. `text/plain`. Please note that you cannot use an OAuth token endpoint here! OAuth token endpoints are used to exchange auth information, while `tokenUrl` must return just the access token under an already-authenticated session.

By default, VolView will make a `GET` request to the token URL. If another type of request is needed, you can configure it via the `tokenUrlMethod` parameter. For example, to make a `POST` request: `https:/example.com/VolView/?tokenUrl=https://example.com/userToken&tokenUrlMethod=POST`.

> [!NOTE]
> This requires CORS to be properly configured for the token URL endpoint. See the [CORS](/cors) documentation for more info.
14 changes: 14 additions & 0 deletions docs/building_for_production.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Building for Production

To build VolView, ensure you have the latest `node.js` and `npm` tools installed. `git` is optional for fetching the VolView sources.

To build, run the following commands.

```bash
git clone https://github.com/Kitware/VolView.git
cd VolView/
npm install
npm run build
```

If all goes well, the build artifacts will be located in `dist/`. This directory should consist of a bunch of static HTML, CSS, JS, font files, and images. These files can be copied to any static site hosting root for immediate deployment.
29 changes: 29 additions & 0 deletions docs/cors.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Cross Origin Resource Sharing (CORS)

CORS is a browser mechanism to let servers protect user data from malicious user-side scripts. In a nutshell, CORS protections prevent browsers from allowing JavaScript to read the responses of cross-origin requests unless certain conditions are met.

For VolView, this manifests most prominently when fetching remote datasets. If the public VolView instance at <https://volview.kitware.app> requests MRI data from <https://example.com/mri-data.nrrd>, the request may fail if `example.com` has not whitelisted `volview.kitware.app`.

The rest of this document describes two ways to resolve this issue.

## Whitelist your VolView domain on the data server

If you have control over the data server, you can whitelist your VolView domain. The simpliest way to do this is to set the `Access-Control-Allow-Origin: MYDOMAIN` header on the server. How this is done depends on the static file server that you are using. An example is provided below.

### Nginx example

Please see [the deployment docs](/deploying_volview) for more info on what an expanded nginx configuration may look like.

```
server {
...

# Replace "volview.kitware.app" with the domain on which
# VolView is being hosted.
add_header Access-Control-Allow-Origin "volview.kitware.app"
}
```

## CORS proxy

If you do not control the data server, you can use a CORS proxy. A CORS proxy is a lightweight proxy server that is configured to attach CORS headers to responses originating from the data server.
46 changes: 46 additions & 0 deletions docs/deploying_volview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Deploying VolView

Deploying VolView is straightforward: just take the locally built files in `dist/` and put them on any static site hosting.

As a local example, running `npx serve dist/` will spin up a static file server (running on <http://localhost:3000>) that reads the locally built files from `dist/`.

> [!NOTE]
> Using `npx serve` is *not* a recommended way to deploy VolView. It is only used to demonstrate how easy it can be to deploy VolView in simple scenarios.

## Managed Hosting (S3, GCP, etc.)

Please refer to your hosting provider's documentation on how to host a static site. You will need to upload the built files in `dist/` to wherever your provider specifies.

## Self-hosted Server (nginx, apache2, etc.)

Please refer to your desired server's documentation on how to serve static files. You will need to upload the built files in `dist/` to the static file directory on your server. Several examples are provided below.

### Apache example config

In this apache2 example, the `dist/*` files are located under `/var/www/VolView`, and the domain is `example.com`. This does *not* configure TLS.

```
<VirtualHost *:80>
ServerName YOUR_SERVER_NAME
DocumentRoot "/var/www/VolView"
</VirtualHost>
```

### Nginx example config

In this nginx example, the `dist/*` files are located under `/var/www/VolView`, and the domain is `example.com`. This does *not* configure TLS.

```
server {
listen 80;
listen [::]:80;

server_name example.com;
root /var/www/VolView;

# index.html fallback
location / {
try_files $uri $uri/ /index.html;
}
}
```
10 changes: 10 additions & 0 deletions docs/deployment_overview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Deployment Overview

VolView is a client-side application, which means deploying VolView does not have much overhead. That being said, this section of the documentation will cover some common deployment environments that may be of interest.

Generally, most deployments follow a similar pattern:

1. [Building VolView for production](./building_for_production)
2. [Deploying VolView](./deploying_volview)

The other articles in this section cover other scenarios that may be applicable to your situation.
21 changes: 12 additions & 9 deletions docs/mouse_controls.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,26 @@

## Data management

| Shortcut | Action |
| -------- | ------ |
| Shortcut | Action |
| -------- | --------------------- |
| Ctrl + . | Delete Current Image |
| Ctrl + / | Clear all data |

## Slice

| Shortcut | Action |
| ----------- | -------------- |
| Up arrow | Next Slice |
| Right arrow | Next Slice |
| Down array | Previous Slice |
| Left array | Previous Slice |
| Shortcut | Action |
| ------------------- | --------------- |
| Up arrow | Next Slice |
| Right arrow | Next Slice |
| Down array | Previous Slice |
| Left array | Previous Slice |
| Alt + mouse up/down | navigate slices |

## Mouse Controls

| Action | 2D | 3D |
| ------------ | --------------- | ------ |
| Left | grayscale | rotate |
| Left | window level | rotate |
| Mid | pan | pan |
| Right | zoom | zoom |
| Ctrl + Left | zoom | zoom |
Expand Down
Loading
Loading