From 725ced9eb4f85a00aa0c24d89a26fbf8496b217c Mon Sep 17 00:00:00 2001
From: Xiao Gui <xgui3783@gmail.com>
Date: Thu, 14 Sep 2023 11:11:37 +0200
Subject: [PATCH] fix: saneurl, hover/context menu

---
 backend/app/app.py                            |  1 +
 backend/app/sane_url.py                       |  2 +-
 docs/releases/v2.13.1.md                      |  8 +++++++
 mkdocs.yml                                    |  1 +
 package.json                                  |  2 +-
 .../entry/entry.flattened.component.html      |  4 ++--
 .../nehubaViewer/nehubaViewer.component.ts    | 23 +++++++++++++++----
 .../nehubaViewerContainer.component.ts        |  5 ++--
 .../viewerCmp/viewerCmp.template.html         |  2 +-
 9 files changed, 37 insertions(+), 11 deletions(-)
 create mode 100644 docs/releases/v2.13.1.md

diff --git a/backend/app/app.py b/backend/app/app.py
index 952d1c082..5d8c8be2c 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 707b2c30f..947466933 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 000000000..5872a5e48
--- /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 53929148e..da0c7cd79 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 61905b375..4a5fc8a31 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 bf4ba0534..a7067c508 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 9ff4c75cc..3871a62d8 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 2c0184e79..6c0c0eed5 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 4810207ef..dff8e4b55 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>
-- 
GitLab