From f99f330bf37df1ae124a03da1506a92946f82a81 Mon Sep 17 00:00:00 2001 From: Mary Salvi Date: Tue, 1 Jul 2025 10:40:03 -0400 Subject: [PATCH 1/6] Add roi to router query --- histomicsui/web_client/views/body/ImageView.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/histomicsui/web_client/views/body/ImageView.js b/histomicsui/web_client/views/body/ImageView.js index 471c1a3d..464414ed 100644 --- a/histomicsui/web_client/views/body/ImageView.js +++ b/histomicsui/web_client/views/body/ImageView.js @@ -66,6 +66,7 @@ var ImageView = View.extend({ this.listenTo(events, 's:widgetDrawRegionEvent', this._widgetDrawRegion); this.listenTo(events, 'li:drawRegionUpdate', this._drawRegionUpdate); this.listenTo(events, 'li:drawModeChange', this._drawModeChange); + this.listenTo(events, 'li:drawRegionUpdate', this._setRouter); events.trigger('h:imageOpened', null); this.listenTo(events, 'query:image', this.openImage); this.annotations = new girder.plugins.large_image_annotation.collections.AnnotationCollection(); @@ -1806,6 +1807,11 @@ var ImageView = View.extend({ window.setTimeout(() => $(`#h-analysis-panel .s-select-region-button[shape="${$(evt.originalEvent.target).attr('shape')}"][multi="${$(evt.originalEvent.target).attr('multi')}"][parent-id="${$(evt.originalEvent.target).attr('parent-id')}"]`).eq(0).trigger('click'), 50); } } - } + }, + + _setRouter(evt) { + router.setQuery('roi', String(evt.values), {trigger: false}); + }, + }); export default ImageView; From 7f683a12e39b09784d3f56df9d282448d9ac0d62 Mon Sep 17 00:00:00 2001 From: Mary Salvi Date: Tue, 1 Jul 2025 11:48:22 -0400 Subject: [PATCH 2/6] Use query string to reset region --- histomicsui/web_client/views/body/ImageView.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/histomicsui/web_client/views/body/ImageView.js b/histomicsui/web_client/views/body/ImageView.js index 464414ed..320e8263 100644 --- a/histomicsui/web_client/views/body/ImageView.js +++ b/histomicsui/web_client/views/body/ImageView.js @@ -742,6 +742,11 @@ var ImageView = View.extend({ _resetRegion() { var hasRegionParameter; + if(router.getQuery('roi')){ + this._displayedRegion = router.getQuery('roi').slice(); + hasRegionParameter = true; + this.showRegion(this._displayedRegion); + } if (!this._displayedRegion) { return; } From 674d92ae748a8d5284d23d1daac329fd3c4f2791 Mon Sep 17 00:00:00 2001 From: Mary Salvi Date: Tue, 15 Jul 2025 12:45:01 -0400 Subject: [PATCH 3/6] Add input to router by event ID and update input field with js. --- histomicsui/web_client/views/body/ImageView.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/histomicsui/web_client/views/body/ImageView.js b/histomicsui/web_client/views/body/ImageView.js index 320e8263..5fcf28ea 100644 --- a/histomicsui/web_client/views/body/ImageView.js +++ b/histomicsui/web_client/views/body/ImageView.js @@ -66,10 +66,10 @@ var ImageView = View.extend({ this.listenTo(events, 's:widgetDrawRegionEvent', this._widgetDrawRegion); this.listenTo(events, 'li:drawRegionUpdate', this._drawRegionUpdate); this.listenTo(events, 'li:drawModeChange', this._drawModeChange); - this.listenTo(events, 'li:drawRegionUpdate', this._setRouter); events.trigger('h:imageOpened', null); this.listenTo(events, 'query:image', this.openImage); this.annotations = new girder.plugins.large_image_annotation.collections.AnnotationCollection(); + this.listenTo(events, 's:widgetChanged', this._setRouter); this.controlPanel = new girder.plugins.slicer_cli_web.views.PanelGroup({ parentView: this, @@ -691,6 +691,7 @@ var ImageView = View.extend({ }, widgetRegion(model) { + console.log('widgetRegion', model); var value = model.get('value'); if (!this.viewerWidget || !this.viewerWidget.viewer) { model.set('value', '-1,-1,-1,-1'); @@ -742,10 +743,12 @@ var ImageView = View.extend({ _resetRegion() { var hasRegionParameter; - if(router.getQuery('roi')){ - this._displayedRegion = router.getQuery('roi').slice(); - hasRegionParameter = true; - this.showRegion(this._displayedRegion); + if(router.getQuery('region')){ + var region = router.getQuery('region'); + $('#region').val(region); + // this._displayedRegion = region; + // hasRegionParameter = true; + // this.showRegion(this._displayedRegion); } if (!this._displayedRegion) { return; @@ -1815,7 +1818,7 @@ var ImageView = View.extend({ }, _setRouter(evt) { - router.setQuery('roi', String(evt.values), {trigger: false}); + router.setQuery(evt.id, String(evt.changed.value), {trigger: false, replace: true}); }, }); From d8bf7d1402cdd468e05ed114318e69d549e6470e Mon Sep 17 00:00:00 2001 From: Mary Salvi Date: Thu, 21 May 2026 12:29:47 -0400 Subject: [PATCH 4/6] Wait for image to instantiate before rendering metadata widget. --- histomicsui/web_client/panels/MetadataWidget.js | 4 ++++ histomicsui/web_client/views/body/ImageView.js | 14 +++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/histomicsui/web_client/panels/MetadataWidget.js b/histomicsui/web_client/panels/MetadataWidget.js index 564fb0a7..713a8a69 100644 --- a/histomicsui/web_client/panels/MetadataWidget.js +++ b/histomicsui/web_client/panels/MetadataWidget.js @@ -60,6 +60,10 @@ var MetadataWidgetPanel = Panel.extend({ render: function () { if (this.item && this.item.id) { + if (!this.item.has('meta')) { + this.listenToOnce(this.item, 'g:fetched', this.render); + return this; + } let func = this.item.getAccessLevel; if (this.item.get('_modelType') === 'annotation') { func = (callback) => { diff --git a/histomicsui/web_client/views/body/ImageView.js b/histomicsui/web_client/views/body/ImageView.js index 5fcf28ea..8db0336a 100644 --- a/histomicsui/web_client/views/body/ImageView.js +++ b/histomicsui/web_client/views/body/ImageView.js @@ -691,7 +691,6 @@ var ImageView = View.extend({ }, widgetRegion(model) { - console.log('widgetRegion', model); var value = model.get('value'); if (!this.viewerWidget || !this.viewerWidget.viewer) { model.set('value', '-1,-1,-1,-1'); @@ -743,12 +742,12 @@ var ImageView = View.extend({ _resetRegion() { var hasRegionParameter; - if(router.getQuery('region')){ + if (router.getQuery('region')) { var region = router.getQuery('region'); $('#region').val(region); - // this._displayedRegion = region; - // hasRegionParameter = true; - // this.showRegion(this._displayedRegion); + this._displayedRegion = region.split(','); + hasRegionParameter = true; + this.showRegion(this._displayedRegion); } if (!this._displayedRegion) { return; @@ -1818,8 +1817,9 @@ var ImageView = View.extend({ }, _setRouter(evt) { - router.setQuery(evt.id, String(evt.changed.value), {trigger: false, replace: true}); - }, + const value = evt.changed.value !== undefined ? String(evt.changed.value) : null; + router.setQuery(evt.id, value, {trigger: false, replace: true}); + } }); export default ImageView; From ca3b368bce7a090e7663e5edba89e878347d91ff Mon Sep 17 00:00:00 2001 From: Mary Salvi Date: Sat, 20 Jun 2026 16:35:51 -0400 Subject: [PATCH 5/6] Parse fields from url and set on reload --- .../web_client/views/body/ImageView.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/histomicsui/web_client/views/body/ImageView.js b/histomicsui/web_client/views/body/ImageView.js index 8db0336a..a88b533a 100644 --- a/histomicsui/web_client/views/body/ImageView.js +++ b/histomicsui/web_client/views/body/ImageView.js @@ -62,6 +62,7 @@ var ImageView = View.extend({ this.listenTo(events, 'h:analysis:rendered', this._allowRootSelection); this.listenTo(events, 'h:analysis:rendered', this._setDefaultFileOutputs); this.listenTo(events, 'h:analysis:rendered', this._resetRegion); + this.listenTo(events, 'h:analysis:rendered', this._setFieldsFromRouter); this.listenTo(this.selectedElements, 'add remove reset', this._redrawSelection); this.listenTo(events, 's:widgetDrawRegionEvent', this._widgetDrawRegion); this.listenTo(events, 'li:drawRegionUpdate', this._drawRegionUpdate); @@ -743,11 +744,8 @@ var ImageView = View.extend({ _resetRegion() { var hasRegionParameter; if (router.getQuery('region')) { - var region = router.getQuery('region'); - $('#region').val(region); - this._displayedRegion = region.split(','); + this._setFieldsFromRouter(); hasRegionParameter = true; - this.showRegion(this._displayedRegion); } if (!this._displayedRegion) { return; @@ -1819,6 +1817,19 @@ var ImageView = View.extend({ _setRouter(evt) { const value = evt.changed.value !== undefined ? String(evt.changed.value) : null; router.setQuery(evt.id, value, {trigger: false, replace: true}); + }, + + _setFieldsFromRouter() { + _.each(this.controlPanel.models(), (model) => { + const value = router.getQuery(model.id); + if (value) { + if (model.id === 'region') { + this._displayedRegion = value; + this.showRegion(this._displayedRegion); + } + model.set('value', value); + } + }); } }); From baffeebea43b2141ed60cbde538675d77c166574 Mon Sep 17 00:00:00 2001 From: Mary Salvi Date: Tue, 23 Jun 2026 13:41:17 -0400 Subject: [PATCH 6/6] Ensure roi's get drawn on reload --- histomicsui/web_client/views/body/ImageView.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/histomicsui/web_client/views/body/ImageView.js b/histomicsui/web_client/views/body/ImageView.js index a88b533a..9b1981d2 100644 --- a/histomicsui/web_client/views/body/ImageView.js +++ b/histomicsui/web_client/views/body/ImageView.js @@ -743,10 +743,6 @@ var ImageView = View.extend({ _resetRegion() { var hasRegionParameter; - if (router.getQuery('region')) { - this._setFieldsFromRouter(); - hasRegionParameter = true; - } if (!this._displayedRegion) { return; } @@ -1825,7 +1821,6 @@ var ImageView = View.extend({ if (value) { if (model.id === 'region') { this._displayedRegion = value; - this.showRegion(this._displayedRegion); } model.set('value', value); }