diff --git a/README b/README index 28c2105b1718e05570b214b819729d2213df8219..b39b48dfe919b618d96ae45e6640cd24bee58238 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 a6cf69fd034889c7be5956a6a50a4e13a5aea629..37a07bd230584cec03f5b90c9f6bcedb05588447 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