From 549d17887a7a45e41f61ab469a6efe870bd697f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcus=20P=C3=B6ckelmann?=
 <marcus.poeckelmann@informatik.uni-halle.de>
Date: Wed, 31 May 2023 16:16:21 +0200
Subject: [PATCH] v2.6.2: Bugfixes for add_edge and remove_edge

---
 README     |  2 +-
 catview.js | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 88 insertions(+), 5 deletions(-)

diff --git a/README b/README
index 28c2105..b39b48d 100644
--- a/README
+++ b/README
@@ -1,6 +1,6 @@
 Thank you for using CATview - the Colored & Aligned Texts view.
 
-This is version 2.6.1
+This is version 2.6.2
 
 For information about the features and usage of CATview, please visit:
 https://catview.uzi.uni-halle.de
diff --git a/catview.js b/catview.js
index a6cf69f..37a07bd 100644
--- a/catview.js
+++ b/catview.js
@@ -22,7 +22,7 @@
  SOFTWARE.
 */
 
-// CATview - the Colored & Aligned Texts view - version 2.6.1
+// CATview - the Colored & Aligned Texts view - version 2.6.2
 const CATview = new function() {
   this.debug = false;
 
@@ -31,7 +31,7 @@ const CATview = new function() {
     if(CATview.debug)
       console.log('CATview.initialize');
 
-    CATview.version = '2.6.1';
+    CATview.version = '2.6.2';
 
     // id of the parent container that will include CATview
     CATview.parent_id = 'CATview';
@@ -1998,8 +1998,49 @@ const CATview = new function() {
     if (isNaN(index) || index < 0 || index > CATview.edges.length )
       index = CATview.edges.length;
 
+    // handle malformed parameter
+    while(edge.length > CATview.names.length)
+      edge.pop();
+    while(edge.length < CATview.names.length)
+      edge.push(-1);
+
     CATview.edges.splice(index, 0, edge);
-    // todo fill edge with -1 if not all names are covered
+
+    // refresh the search results
+    for(let i = 0; i < CATview.search_results.length; i++){
+      if(CATview.search_results[i][0] >= index)
+        CATview.search_results[i][0] += 1
+    }
+
+    // refresh the extra segments
+    CATview.extra_segments.forEach(function (segment) {
+      if(segment[0] >= index)
+        segment[0] += 1;
+    });
+
+    // refresh the data for rectangle scaling (add dummies as for edges)
+    if(CATview.rect_scaling !== null){
+      let scales = []
+      for(let i = 0; i < edge.length; i++)
+        if(edge[i] == -1)
+          scales.push(-1);
+        else
+          scales.push(1);
+      CATview.rect_scaling.splice(index, 0, scales);
+    }
+
+    // refresh the data for rectangle linking
+    if(CATview.rect_linking_data !== null){
+      CATview.rect_linking_data.forEach(function (group) {
+        for(let i = 0; i < group.length; i++){
+          let row = parseInt(group[i].split('_')[0])
+          if(row >= index)
+            group[i] = ( (row + 1) + '_' + group[i].split('_')[1] )
+        }
+      });
+    }
+
+    // TODO may refresh available zooming level ...
 
     return true;
   };
@@ -2011,6 +2052,49 @@ const CATview = new function() {
 
     CATview.edges.splice(index, 1);
 
+    // refresh the search results
+    for(let i = CATview.search_results.length - 1; i >= 0 ; i--){
+      if(CATview.search_results[i][0] > index)
+        CATview.search_results[i][0] -= 1
+      else if (CATview.search_results[i][0] == index)
+        CATview.search_results.splice(i, 1)
+    }
+
+    // refresh the extra segments
+    for(let i = CATview.extra_segments.length - 1; i >= 0; i--) {
+      if(CATview.extra_segments[i][0] > index)
+        CATview.extra_segments[i][0] -= 1
+      else if (CATview.extra_segments[i][0] == index)
+        CATview.extra_segments.splice(i, 1)
+    }
+
+    // refresh the data for rectangle scaling (remove within edges)
+    if(CATview.rect_scaling !== null){
+      CATview.rect_scaling.forEach(function (edge) {
+        edge.splice(index, 1)
+      });
+    }
+
+    // refresh the data for rectangle scaling (add dummies as for edges)
+    if(CATview.rect_scaling !== null){
+      CATview.rect_scaling.splice(index, 1);
+    }
+
+    // refresh the data for rectangle linking
+    if(CATview.rect_linking_data !== null){
+      CATview.rect_linking_data.forEach(function (group) {
+        for(let i = 0; i < group.length; i++){
+          let row = parseInt(group[i].split('_')[0])
+          if(row > index)
+            group[i] = ( (row - 1 ) + '_' + group[i].split('_')[1] )
+          else if(row == index)
+            group.splice(i, 1)
+        }
+      });
+    }
+
+    // TODO may refresh available zooming level ...
+
     return true;
   };
   // replace a single edge
@@ -2059,7 +2143,6 @@ const CATview = new function() {
 
   // todo
   // - may: method to set search_mode → toggle_search_mode(_mode)
-  // - may: method to zoom → zoom_to(_factor)
   // - may: method for changing the border_color → set_border(_color, _width)
   // - adopt font size in respect to the number of witnesses
   // - method to reset all data → reset
-- 
GitLab