From b9c7c93d47cca44067f0e1e9c63b957321552208 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 11:09:25 +0200 Subject: [PATCH] v2.6.1: Bugfixes for add_name and remove_name --- README | 2 +- catview.js | 148 +++++++++++++++++++++++++++++++---------------------- 2 files changed, 87 insertions(+), 63 deletions(-) diff --git a/README b/README index 3ca7298..28c2105 100644 --- a/README +++ b/README @@ -1,6 +1,6 @@ Thank you for using CATview - the Colored & Aligned Texts view. -This is version 2.6 +This is version 2.6.1 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 e7cf2e9..a6cf69f 100644 --- a/catview.js +++ b/catview.js @@ -22,7 +22,7 @@ SOFTWARE. */ -// CATview - the Colored & Aligned Texts view - version 2.6 +// CATview - the Colored & Aligned Texts view - version 2.6.1 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'; + CATview.version = '2.6.1'; // id of the parent container that will include CATview CATview.parent_id = 'CATview'; @@ -72,8 +72,6 @@ const CATview = new function() { CATview.rect_border = "stroke: #2f2f86;"; CATview.enable_scroll_spy = true; CATview.scroll_spy_pos = 1; // default position of the scroll spy - CATview.display_remaining_edges = false; // setting: should remaining alignment edges be displayed - CATview.threshold = 50; // setting: for which degree of difference remaining alignment edges should be displayed CATview.display_extra_segments = true; // setting: should extra_segments be displayed CATview.search_mode = 'seg'; // setting: highlight search results for full columns ('col' )or individual segments ('seg') CATview.tools = []; // pairs of font-awesome-unicodes and callbacks @@ -107,7 +105,6 @@ const CATview = new function() { // -1: no segment for the witness // value within [0.0, 1.0]: segment, which will be colored according to CATview.scale_color CATview.search_results = []; // array with column ids to be highlighted as search results - CATview.remaining_edges = []; // TODO deprecated: array with supposed edges that could not be aligned - entries: [distance, [ [[row, col], [row, col]]+ ]] CATview.extra_segments = []; // additional segments that will be displayed in a faded out fashion (gray dotted without filling) // entries are triples with [index of edge, index of witness, color value (within [0.0, 1.0])] CATview.edge_names = []; // array of the edges' names, displayed on mouse over @@ -173,7 +170,7 @@ const CATview = new function() { CATview.width_content = CATview.width_svg - CATview.margin.left - CATview.margin.right; CATview.height_content = CATview.height_svg - CATview.margin.top - CATview.margin.bottom; }; - // method to set scales according to the current orientation of CATview and its axis + // methods to set scales according to the current orientation of CATview and its axis this.set_scale_edges = function(_from, _to){ if(CATview.debug) console.log('CATview.set_scale_edges'); @@ -241,7 +238,6 @@ const CATview = new function() { CATview.edges = data.edges; CATview.edge_names = data.edge_names; - // CATview.remaining_edges = data.remaining_edges; CATview.extra_segments = data.extra_segments; CATview.rect_linking_data = data.rect_linking_data; CATview.rect_scaling = data.rect_scaling; @@ -399,7 +395,6 @@ const CATview = new function() { // add containers for different groups of content CATview.content.append("g").attr("class", "search_results_background"); CATview.content.append("g").attr("class", "alignment"); - CATview.content.append("g").attr("class", "remaining_edges"); //CATview.content.append("g").attr("class", "brush"); // set default interval of data to be shown and draw the content @@ -437,7 +432,6 @@ const CATview = new function() { CATview.draw_search_results(); if(CATview.enable_scroll_spy) CATview.draw_scroll_spy(); - //CATview.draw_remaining_edges(); } else return false; @@ -1098,48 +1092,6 @@ const CATview = new function() { return false; }; - // todo deprecated: draws remaining edges as orange lines between the rectangles - this.set_remaining_edges = function(remaining_edges){ - if(remaining_edges == null) - return false; - - CATview.remaining_edges = remaining_edges; - return true; - }; - this.draw_remaining_edges = function(){ - if(CATview.debug) - console.log('CATview.draw_remaining_edges'); - - if(CATview.content) { - CATview.content.select(".remaining_edges").selectAll("line.remaining").remove(); - if (CATview.remaining_edges == null) - return false; - if (CATview.display_remaining_edges) { - CATview.remaining_edges.every(function (edges) { - // stop drawing when the distance of the remaining edges exceed the threshold - if (edges[0] > CATview.threshold) { - return false; - } - - edges[1].forEach(function (edge) { - if (CATview.from <= edge[0][1] + 1 && edge[0][1] + 1 <= CATview.to && CATview.from <= edge[1][1] + 1 && edge[1][1] + 1 <= CATview.to) { - CATview.content.select(".remaining_edges").append('line') - .attr("class", "remaining") - .attr('x1', CATview.scale_edges(edge[0][1] + 1)) - .attr('y1', CATview.scale_names(edge[0][0])) - .attr('x2', CATview.scale_edges(edge[1][1] + 1)) - .attr('y2', CATview.scale_names(edge[1][0])); - } - }); - - return true; - }); - } - } - else - return false; - }; - // draws extra segments this.set_extra_segments = function(_segments){ if(_segments == null) @@ -1865,15 +1817,6 @@ const CATview = new function() { index, CATview.vertical ? 90 : 0); }; - // add the display-remaining-edges tool - this.add_tool_display_remaining_edges = function(index){ - return CATview.add_tool('f074', - function(){ - CATview.display_remaining_edges = !CATview.display_remaining_edges; - CATview.draw_remaining_edges();}, - index, - 0); - }; // add the switch-highlight-mode-of-search-results tool this.add_tool_toggle_search_mode = function(index){ return CATview.add_tool('f002', @@ -1930,9 +1873,47 @@ const CATview = new function() { if (isNaN(index) || index < 0 || index > CATview.names.length ) index = CATview.names.length; + // add the name CATview.names.splice(index, 0, name); - // todo set dummies at edges + // add dummies to edges + CATview.edges.forEach(function (edge) { + edge.splice(index, 0, -1) + }); + + // refresh the search results + CATview.search_results.forEach(function (edge) { + for(let i = 0; i < edge[1].length; i++){ + if(edge[1][i] >= index) + edge[1][i] += 1 + } + }); + + // refresh the extra segments + CATview.extra_segments.forEach(function (segment) { + if(segment[1] >= index) + segment[1] += 1; + }); + + // refresh the data for rectangle scaling (add dummies as for edges) + if(CATview.rect_scaling !== null){ + CATview.rect_scaling.forEach(function (edge) { + edge.splice(index, 0, -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 wit = parseInt(group[i].split('_')[1]) + if(wit >= index) + group[i] = ( group[i].split('_')[0] + '_' + (wit + 1) ) + } + }); + } + + // TODO may refresh drag_names_order ... return true; }; @@ -1944,7 +1925,50 @@ const CATview = new function() { CATview.names.splice(index, 1); - // todo update edges + // remove edges + CATview.edges.forEach(function (edge) { + edge.splice(index, 1) + }); + + // refresh the search results + CATview.search_results.forEach(function (edge) { + for(let i = edge[1].length - 1; i >= 0; i--){ + if(edge[1][i] > index) + edge[1][i] -= 1 + else if (edge[1][i] == index) + edge[1].splice(i, 1) + } + }); + + // refresh the extra segments + for(let i = CATview.extra_segments.length - 1; i >= 0; i--) { + if(CATview.extra_segments[i][1] > index) + CATview.extra_segments[i][1] -= 1 + else if (CATview.extra_segments[i][1] == 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 linking + if(CATview.rect_linking_data !== null){ + CATview.rect_linking_data.forEach(function (group) { + for(let i = 0; i < group.length; i++){ + let wit = parseInt(group[i].split('_')[1]) + if(wit > index) + group[i] = ( group[i].split('_')[0] + '_' + (wit - 1 ) ) + else if(wit == index) + group.splice(i, 1) + } + }); + } + + // TODO may refresh drag_names_order ... return true; }; -- GitLab