diff --git a/backend/app/app.py b/backend/app/app.py index 952d1c0822dd79dc856fd84a96ab86ec54d08ebf..5d8c8be2c6589ccded5769329fea8e6e70786ce4 100644 --- a/backend/app/app.py +++ b/backend/app/app.py @@ -35,6 +35,7 @@ for vip_route in vip_routes: app.include_router(quickstart_router, prefix="/quickstart") app.include_router(saneurl_router, prefix="/saneUrl") +app.include_router(saneurl_router, prefix="/saneurl") app.include_router(saneurl_router, prefix="/go") app.include_router(plugin_router, prefix="/plugins") app.include_router(user_router, prefix="/user") diff --git a/backend/app/sane_url.py b/backend/app/sane_url.py index 707b2c30f245686edcf7f312830f3f4a77306d98..947466933489b6509e6139df18d032864fbade43 100644 --- a/backend/app/sane_url.py +++ b/backend/app/sane_url.py @@ -127,7 +127,7 @@ data_proxy_store = SaneUrlDPStore() async def get_short(short_id:str, request: Request): try: existing_json = data_proxy_store.get(short_id) - accept = request.headers.get("Accept") + accept = request.headers.get("Accept", "") if "text/html" in accept: hashed_path = existing_json.get("hashPath") return RedirectResponse(f"{HOST_PATHNAME}/#{hashed_path}") diff --git a/docs/releases/v2.13.1.md b/docs/releases/v2.13.1.md new file mode 100644 index 0000000000000000000000000000000000000000..5872a5e48e92469e758856112dc5ce03b4247a23 --- /dev/null +++ b/docs/releases/v2.13.1.md @@ -0,0 +1,8 @@ +# v2.13.1 + +## Bugfixes + +- fixed saneurl query without accept header +- added `saneurl` also to the acceptable route +- fixes `Unknown` on hover prompt, fixes some issues where context menu behaves +- fixes unscrollable feature container on touch devices diff --git a/mkdocs.yml b/mkdocs.yml index 53929148e28204116e11ed1b9c8ed13fcf23304e..da0c7cd795225bb0141a01843c90337e00917ca3 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -33,6 +33,7 @@ nav: - Fetching datasets: 'advanced/datasets.md' - Display non-atlas volumes: 'advanced/otherVolumes.md' - Release notes: + - v2.13.1: 'releases/v2.13.1.md' - v2.13.0: 'releases/v2.13.0.md' - v2.12.5: 'releases/v2.12.5.md' - v2.12.4: 'releases/v2.12.4.md' diff --git a/package.json b/package.json index 61905b375982273f0594ad19d1b873903bbb6768..4a5fc8a314db8c6cb5f450c4b3fea5296a457b07 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "siibra-explorer", - "version": "2.13.0", + "version": "2.13.1", "description": "siibra-explorer - explore brain atlases. Based on humanbrainproject/nehuba & google/neuroglancer. Built with angular", "scripts": { "lint": "eslint src --ext .ts", diff --git a/src/features/entry/entry.flattened.component.html b/src/features/entry/entry.flattened.component.html index bf4ba0534083eca964afb00bedea023bbb52f7d9..a7067c508812127d2f71773254f35c311730caae 100644 --- a/src/features/entry/entry.flattened.component.html +++ b/src/features/entry/entry.flattened.component.html @@ -187,11 +187,11 @@ let-feature let-last="last"> + <!-- n.b. do not introduce mattooltip in scrollable container --> + <!-- it will override scrollability --> <button mat-button class="virtual-scroll-item sxplr-w-100" - [matTooltip]="feature.name" - matTooltipPosition="right" (click)="onClickFeature(feature)"> {{ feature.name }} </button> diff --git a/src/viewerModule/nehuba/nehubaViewer/nehubaViewer.component.ts b/src/viewerModule/nehuba/nehubaViewer/nehubaViewer.component.ts index 9ff4c75cc8234c254e143e1a1812519dba9a74ff..3871a62d89ed41a1836aff6c7971b5dc98499035 100644 --- a/src/viewerModule/nehuba/nehubaViewer/nehubaViewer.component.ts +++ b/src/viewerModule/nehuba/nehubaViewer/nehubaViewer.component.ts @@ -403,22 +403,24 @@ export class NehubaViewerUnit implements OnDestroy { : null public loadNehuba() { - this.nehubaViewer = this.exportNehuba.createNehubaViewer(this.config, (err: string) => { + + const { registerActionListener, createNehubaViewer } = this.exportNehuba + + this.nehubaViewer = createNehubaViewer(this.config, (err: string) => { /* print in debug mode */ this.log.error(err) }); (window as any).nehubaViewer = this.nehubaViewer + const viewer = window['viewer'] + /** * Hide all layers except the base layer (template) * Then show the layers referenced in multiNgIdLabelIndexMap */ - - /* creation of the layout is done on next frame, hence the settimeout */ const patchSliceview = async () => { - const viewer = window['viewer'] viewer.inputEventBindings.sliceView.set("at:wheel", "proxy-wheel") viewer.inputEventBindings.sliceView.set("at:control+shift+wheel", "proxy-wheel-alt") await (async () => { @@ -426,6 +428,7 @@ export class NehubaViewerUnit implements OnDestroy { while (lenPanels === 0) { lenPanels = viewer.display.panels.size + /* creation of the layout is done on next frame, hence the settimeout */ await new Promise(rs => setTimeout(rs, 150)) } })() @@ -433,6 +436,9 @@ export class NehubaViewerUnit implements OnDestroy { viewer.inputEventBindings.sliceView.set("at:control+shift+wheel", "proxy-wheel-10") viewer.display.panels.forEach(sliceView => patchSliceViewPanel(sliceView, this.exportNehuba, this.multplier)) } + + viewer.inputEventBindings.sliceView.set("at:touchhold1", { action: "noop", stopPropagation: false }) + viewer.inputEventBindings.perspectiveView.set("at:touchhold1", { action: "noop", stopPropagation: false }) patchSliceview() this.newViewerInit() @@ -914,6 +920,13 @@ export class NehubaViewerUnit implements OnDestroy { } } + +const noop = (event: MouseEvent) => { + // TODO either emit contextmenu + // or capture longtouch on higher level as contextmenu + // at the moment, this is required to override default behavior (move to cursur location) +} + const patchSliceViewPanel = (sliceViewPanel: any, exportNehuba: any, mulitplier: Float32Array) => { // patch draw calls to dispatch viewerportToData @@ -950,6 +963,8 @@ const patchSliceViewPanel = (sliceViewPanel: any, exportNehuba: any, mulitplier: navigationState.pose.translateVoxelsRelative(offset) }) } + + registerActionListener(sliceViewPanel.element, `noop`, noop) } export interface ViewerState { diff --git a/src/viewerModule/nehuba/nehubaViewerInterface/nehubaViewerContainer.component.ts b/src/viewerModule/nehuba/nehubaViewerInterface/nehubaViewerContainer.component.ts index 2c0184e79b7304b440473addb8e3e0f71c9814f5..6c0c0eed5ff3ed8f8a157422ac38a1e4d21dbe1b 100644 --- a/src/viewerModule/nehuba/nehubaViewerInterface/nehubaViewerContainer.component.ts +++ b/src/viewerModule/nehuba/nehubaViewerInterface/nehubaViewerContainer.component.ts @@ -66,8 +66,9 @@ export class NehubaViewerContainer implements AfterViewInit, OnDestroy { labelIndices: [ Number(v.segmentId) ], regions: (() => { const record = multiNgIdsRegionsLabelIndexMap[v.layer.name] || {} - if (!record) return [] - return [record[Number(v.segmentId)]] + const region = record[Number(v.segmentId)] + if (!record || !region) return [] + return [region] })() } }) diff --git a/src/viewerModule/viewerCmp/viewerCmp.template.html b/src/viewerModule/viewerCmp/viewerCmp.template.html index 4810207ef5225ec2098255c7e832b448779bd161..dff8e4b55526b59147c566f195691a0d19746551 100644 --- a/src/viewerModule/viewerCmp/viewerCmp.template.html +++ b/src/viewerModule/viewerCmp/viewerCmp.template.html @@ -902,7 +902,7 @@ <div class="sxplr-list-like-button-body"> - <ng-template [ngIf]="data.point"> + <ng-template [ngIf]="data?.point?.point"> <span class="sxplr-list-like-button-body-line"> {{ data.point | nmToMm | numbers | addUnitAndJoin : '' }} (mm) </span>