From 86cfa737ee9bc7d88155b9107c5682bb78389504 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 1 Nov 2023 16:11:20 +0100 Subject: [PATCH 1/5] load inherited ann if exists --- src/js/views/labels_from_maps_modal.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/js/views/labels_from_maps_modal.js b/src/js/views/labels_from_maps_modal.js index 2da09d12b..3e3f87ad6 100644 --- a/src/js/views/labels_from_maps_modal.js +++ b/src/js/views/labels_from_maps_modal.js @@ -38,6 +38,17 @@ var LabelFromMapsModal = Backbone.View.extend({ url += imageIds.join("&image="); $.getJSON(url, function(data) { + if (data.hasOwnProperty('inherited')){ + let inheritors = data.inherited.inheritors; + data.inherited.annotations.forEach(function(ann) { + for(j = 0; j < inheritors[ann["id"]].length; j++){ + // Unpacking the parent annoations for each image + var clone_ann = { ...ann }; + clone_ann.link.parent.id = inheritors[ann["id"]][j].id; + data.annotations.push(clone_ann); + } + }); + } this.isLoading = false; this.annotations = data.annotations; this.render(); @@ -150,7 +161,7 @@ var LabelFromMapsModal = Backbone.View.extend({ } } keyList.sort(function(a, b) { - return (a.toUpperCase() < b.toUpperCase()) ? -1 : 1; + return (a.toUpperCase() < b.toUpperCase()) ? -1 : 1; }); var html = keyList.map(function(key) { From e4180d6eb439065f03c7274e78978dc1b54a83fc Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 1 Nov 2023 18:08:23 +0100 Subject: [PATCH 2/5] inherited tag annotation support --- src/js/models/panel_model.js | 12 +++++++++++- src/js/views/labels_from_maps_modal.js | 7 +++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/js/models/panel_model.js b/src/js/models/panel_model.js index 988e62830..dce6de9e4 100644 --- a/src/js/models/panel_model.js +++ b/src/js/models/panel_model.js @@ -362,7 +362,7 @@ else if (property === "h") property = "height"; else if (property === "rot") property = "rotation"; - + var x_symbol = this.get('pixel_size_x_symbol'), z_symbol = this.get('pixel_size_z_symbol'); z_symbol = z_symbol ? z_symbol : x_symbol // Using x symbol when z not defined @@ -993,6 +993,16 @@ var url = WEBINDEX_URL + "api/annotations/?type=tag&limit=1000&" + image_ids; $.getJSON(url, function(data){ // Map {iid: {id: 'tag'}, {id: 'names'}} + if (data.hasOwnProperty('inherited')){ + data.inherited.annotations.forEach(function(ann) { + for(j = 0; j < data.inherited.inheritors[ann["id"]].length; j++){ + // Unpacking the parent annoations for each image + let clone_ann = { ...ann }; + clone_ann.link.parent.id = data.inherited.inheritors[ann["id"]][j].id; + data.annotations.push(clone_ann); + } + }); + } var imageTags = data.annotations.reduce(function(prev, t){ var iid = t.link.parent.id; if (!prev[iid]) { diff --git a/src/js/views/labels_from_maps_modal.js b/src/js/views/labels_from_maps_modal.js index 3e3f87ad6..136fd792b 100644 --- a/src/js/views/labels_from_maps_modal.js +++ b/src/js/views/labels_from_maps_modal.js @@ -39,12 +39,11 @@ var LabelFromMapsModal = Backbone.View.extend({ $.getJSON(url, function(data) { if (data.hasOwnProperty('inherited')){ - let inheritors = data.inherited.inheritors; data.inherited.annotations.forEach(function(ann) { - for(j = 0; j < inheritors[ann["id"]].length; j++){ + for(j = 0; j < data.inherited.inheritors[ann["id"]].length; j++){ // Unpacking the parent annoations for each image - var clone_ann = { ...ann }; - clone_ann.link.parent.id = inheritors[ann["id"]][j].id; + let clone_ann = { ...ann }; + clone_ann.link.parent.id = data.inherited.inheritors[ann["id"]][j].id; data.annotations.push(clone_ann); } }); From 05b0a0680c311aacb6908d1edae895bdd7c4f031 Mon Sep 17 00:00:00 2001 From: Tom-TBT Date: Sun, 5 Nov 2023 11:35:18 +0100 Subject: [PATCH 3/5] updated according to proposed changes in webclient api --- src/js/models/panel_model.js | 9 ++++++--- src/js/views/labels_from_maps_modal.js | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/js/models/panel_model.js b/src/js/models/panel_model.js index dce6de9e4..f4b42c337 100644 --- a/src/js/models/panel_model.js +++ b/src/js/models/panel_model.js @@ -990,15 +990,18 @@ var image_ids = this.map(function(s){return s.get('imageId')}) image_ids = "image=" + image_ids.join("&image="); // TODO: Use /api/ when annotations is supported - var url = WEBINDEX_URL + "api/annotations/?type=tag&limit=1000&" + image_ids; + var url = WEBINDEX_URL + "api/annotations/?type=tag&parents=yes&limit=1000&" + image_ids; $.getJSON(url, function(data){ // Map {iid: {id: 'tag'}, {id: 'names'}} if (data.hasOwnProperty('inherited')){ data.inherited.annotations.forEach(function(ann) { - for(j = 0; j < data.inherited.inheritors[ann["id"]].length; j++){ + let class_ = ann.link.parent.class; + let id_ = '' + ann.link.parent.id; + let children = data.inherited.inheritors[class_][id_]; + for(j = 0; j < children.length; j++){ // Unpacking the parent annoations for each image let clone_ann = { ...ann }; - clone_ann.link.parent.id = data.inherited.inheritors[ann["id"]][j].id; + clone_ann.link.parent.id = children[j].id; data.annotations.push(clone_ann); } }); diff --git a/src/js/views/labels_from_maps_modal.js b/src/js/views/labels_from_maps_modal.js index 136fd792b..eb16a1784 100644 --- a/src/js/views/labels_from_maps_modal.js +++ b/src/js/views/labels_from_maps_modal.js @@ -34,16 +34,19 @@ var LabelFromMapsModal = Backbone.View.extend({ this.isLoading = true; $('select', this.el).html(""); - var url = WEBINDEX_URL + "api/annotations/?type=map&image="; + var url = WEBINDEX_URL + "api/annotations/?type=map&parents=yes&image="; url += imageIds.join("&image="); $.getJSON(url, function(data) { if (data.hasOwnProperty('inherited')){ data.inherited.annotations.forEach(function(ann) { - for(j = 0; j < data.inherited.inheritors[ann["id"]].length; j++){ + let class_ = ann.link.parent.class; + let id_ = '' + ann.link.parent.id; + let children = data.inherited.inheritors[class_][id_]; + for(j = 0; j < children.length; j++){ // Unpacking the parent annoations for each image let clone_ann = { ...ann }; - clone_ann.link.parent.id = data.inherited.inheritors[ann["id"]][j].id; + clone_ann.link.parent.id = children[j].id; data.annotations.push(clone_ann); } }); From cc2f4decee8bd42fea4bc1fa8f2239453b650c0e Mon Sep 17 00:00:00 2001 From: Tom-TBT Date: Thu, 16 Nov 2023 16:37:26 +0100 Subject: [PATCH 4/5] reflect changes in api_annotations of webclient --- src/js/models/panel_model.js | 12 ++++++------ src/js/views/labels_from_maps_modal.js | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/js/models/panel_model.js b/src/js/models/panel_model.js index f4b42c337..e8db73712 100644 --- a/src/js/models/panel_model.js +++ b/src/js/models/panel_model.js @@ -990,18 +990,18 @@ var image_ids = this.map(function(s){return s.get('imageId')}) image_ids = "image=" + image_ids.join("&image="); // TODO: Use /api/ when annotations is supported - var url = WEBINDEX_URL + "api/annotations/?type=tag&parents=yes&limit=1000&" + image_ids; + var url = WEBINDEX_URL + "api/annotations/?type=tag&parents=true&limit=1000&" + image_ids; $.getJSON(url, function(data){ // Map {iid: {id: 'tag'}, {id: 'names'}} - if (data.hasOwnProperty('inherited')){ - data.inherited.annotations.forEach(function(ann) { + if (data.hasOwnProperty('parents')){ + data.parents.annotations.forEach(function(ann) { let class_ = ann.link.parent.class; let id_ = '' + ann.link.parent.id; - let children = data.inherited.inheritors[class_][id_]; - for(j = 0; j < children.length; j++){ + let lineage = data.parents.lineage[class_][id_]; + for(j = 0; j < lineage.length; j++){ // Unpacking the parent annoations for each image let clone_ann = { ...ann }; - clone_ann.link.parent.id = children[j].id; + clone_ann.link.parent.id = lineage[j].id; data.annotations.push(clone_ann); } }); diff --git a/src/js/views/labels_from_maps_modal.js b/src/js/views/labels_from_maps_modal.js index eb16a1784..09a9f792d 100644 --- a/src/js/views/labels_from_maps_modal.js +++ b/src/js/views/labels_from_maps_modal.js @@ -34,19 +34,19 @@ var LabelFromMapsModal = Backbone.View.extend({ this.isLoading = true; $('select', this.el).html(""); - var url = WEBINDEX_URL + "api/annotations/?type=map&parents=yes&image="; + var url = WEBINDEX_URL + "api/annotations/?type=map&parents=true&image="; url += imageIds.join("&image="); $.getJSON(url, function(data) { - if (data.hasOwnProperty('inherited')){ - data.inherited.annotations.forEach(function(ann) { + if (data.hasOwnProperty('parents')){ + data.parents.annotations.forEach(function(ann) { let class_ = ann.link.parent.class; let id_ = '' + ann.link.parent.id; - let children = data.inherited.inheritors[class_][id_]; - for(j = 0; j < children.length; j++){ + let lineage = data.parents.lineage[class_][id_]; + for(j = 0; j < lineage.length; j++){ // Unpacking the parent annoations for each image let clone_ann = { ...ann }; - clone_ann.link.parent.id = children[j].id; + clone_ann.link.parent.id = lineage[j].id; data.annotations.push(clone_ann); } }); From d4bbc2e06d32aebd957f560c58c2ffd0964b54e3 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 15 Feb 2024 16:30:18 +0100 Subject: [PATCH 5/5] fix shallow copy of inherited ann --- src/js/models/panel_model.js | 2 +- src/js/views/labels_from_maps_modal.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/models/panel_model.js b/src/js/models/panel_model.js index e8db73712..dd23d5da1 100644 --- a/src/js/models/panel_model.js +++ b/src/js/models/panel_model.js @@ -1000,7 +1000,7 @@ let lineage = data.parents.lineage[class_][id_]; for(j = 0; j < lineage.length; j++){ // Unpacking the parent annoations for each image - let clone_ann = { ...ann }; + let clone_ann = JSON.parse(JSON.stringify(ann)); clone_ann.link.parent.id = lineage[j].id; data.annotations.push(clone_ann); } diff --git a/src/js/views/labels_from_maps_modal.js b/src/js/views/labels_from_maps_modal.js index 09a9f792d..145492815 100644 --- a/src/js/views/labels_from_maps_modal.js +++ b/src/js/views/labels_from_maps_modal.js @@ -45,7 +45,7 @@ var LabelFromMapsModal = Backbone.View.extend({ let lineage = data.parents.lineage[class_][id_]; for(j = 0; j < lineage.length; j++){ // Unpacking the parent annoations for each image - let clone_ann = { ...ann }; + let clone_ann = JSON.parse(JSON.stringify(ann)); clone_ann.link.parent.id = lineage[j].id; data.annotations.push(clone_ann); }