diff --git a/README b/README index 902d5a45aefd206fdb1a3d95369f8b7d6811b275..37983765fdff749ca08a13825a7fc79d7327139f 100644 --- a/README +++ b/README @@ -1,6 +1,6 @@ Thank you for using CATview - the Colored & Aligned Texts view. -This is version 2.6.5 +This is version 2.7 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 711b6aae26c673756bed13044b7c71f79a76163c..0d36300044bf10334eea5ec1eace10428287a24d 100644 --- a/catview.js +++ b/catview.js @@ -22,7 +22,7 @@ SOFTWARE. */ -// CATview - the Colored & Aligned Texts view - version 2.6.5 +// CATview - the Colored & Aligned Texts view - version 2.7 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.5'; + CATview.version = '2.7'; // id of the parent container that will include CATview CATview.parent_id = 'CATview'; @@ -146,6 +146,10 @@ const CATview = new function() { CATview.drag_mode = 'insert'; // 'insert' || 'swap' this.zebra_enabled = true; + + CATview.draw_fadeouts = true; // fade out borders when zooming in + CATview.fadeout_real_rect_space = null; // including spacing to other rect + }; // method to set margins and content width/height according to the current orientation of CATview and its axis @@ -1061,7 +1065,94 @@ const CATview = new function() { return transform; }) .attr('font-size', CATview.font_size_x); - } + + + // define gradients + d3.select("defs#"+CATview.parent_id+"_gradient_definition").remove(); + let rect_outline_width = Number(d3.select("div#"+CATview.parent_id).select("rect.rect-segment").style("stroke-width").split("px")[0]); + + CATview.content.select(".alignment") + .append("defs") + .attr("id", CATview.parent_id+"_gradient_definition") + .append("linearGradient") + .attr("id", CATview.parent_id+"_gradient_left") + .attr("x1", "0" ) //x1="0" x2="0" y1="0" y2="1" + .attr("x2", CATview.vertical === true ? "0" : "1") + .attr("y1", "0") + .attr("y2", CATview.vertical === true ? "1" : "0") + .append("stop") + .attr("offset", "20%") + .attr("stop-color", "rgba(248,248,248,1)") // "rgba(0,0,248,1)" + CATview.content.select(".alignment").select("defs").select("linearGradient#"+CATview.parent_id+"_gradient_left") + .append("stop") + .attr("offset", "80%") + .attr("stop-color", "rgba(248,248,248,0)"); // hier 0 statt 1 für Transparenz + + // right gradient + CATview.content.select(".alignment").select("defs#"+CATview.parent_id+"_gradient_definition") + .append("linearGradient") + .attr("id", CATview.parent_id+"_gradient_right") + .attr("x1", "0") //x1="0" x2="0" y1="0" y2="1" + .attr("x2", CATview.vertical === true ? "0" : "1") + .attr("y1", "0") + .attr("y2", CATview.vertical === true ? "1" : "0") + .append("stop") + .attr("offset", "20%") + .attr("stop-color", "rgba(248,248,248,0)") + CATview.content.select(".alignment").select("defs").select("linearGradient#"+CATview.parent_id+"_gradient_right") + .append("stop") + .attr("offset", "80%") + .attr("stop-color", "rgba(248,248,248,1)") // "rgba(0,0,248,1)" (blue) , "rgba(248,248,248,1)" (transparent) + ; + + // size of gradient compared to content size + let grad_fraction = 0.5; + + // fadeout left / top + d3.select("#"+CATview.parent_id+"_fadeout_left").remove(); + + if(CATview.draw_fadeouts) { + + if (CATview.from > 1) { + // je kleiner der Anteil von 0 bis from, desto kleiner soll auch + // der fade out in der Breite sein. + let zoom_from_fraction = (CATview.from/CATview.edges.length); + + CATview.content.select(".alignment") + .append("rect") + .attr("id", CATview.parent_id+"_fadeout_left") + .attr("height", CATview.vertical === true ? Math.floor((CATview.height_content*grad_fraction)*zoom_from_fraction) : CATview.height_content-2 ) + .attr("width", CATview.vertical === true ? CATview.width_content-2 : Math.floor((CATview.width_content*grad_fraction)*zoom_from_fraction)) + .attr("transform", "translate"+ + (CATview.vertical === true ? "(1,0)" : "(0,1)")) + .style("fill", "url(#"+CATview.parent_id+"_gradient_left)") + .style("pointer-events", "none"); + + } + // fadeout right / bottom + d3.select("#"+CATview.parent_id+"_fadeout_right").remove(); + + if (CATview.to < CATview.edges.length) { + + let alignment_height = d3.select("g.alignment").node().getBoundingClientRect().height+2*rect_outline_width; + let alignment_width = d3.select("g.alignment").node().getBoundingClientRect().width+2*rect_outline_width; + + let zoom_to_fraction = ((CATview.edges.length-CATview.to)/CATview.edges.length); + CATview.content.select(".alignment") + .append("rect") + .attr("id", CATview.parent_id+"_fadeout_right") + .attr("height", CATview.vertical === true ? Math.floor(CATview.height_content*grad_fraction*zoom_to_fraction) : CATview.height_content-2 ) + .attr("width", CATview.vertical === true ? CATview.width_content-2 : Math.floor(CATview.width_content*grad_fraction*zoom_to_fraction)) + .attr("transform", "translate("+ + (CATview.vertical === true ? ("1, " + Math.floor(CATview.height_content-CATview.height_content*grad_fraction*zoom_to_fraction)) : + (Math.ceil(CATview.width_content-CATview.width_content*grad_fraction*zoom_to_fraction) +", 1") + )+")") + .style("fill", "url(#"+CATview.parent_id+"_gradient_right)") + .style("pointer-events", "none"); + + } + } // if draw_fadeouts + } // if content else return false; }; @@ -1550,8 +1641,8 @@ const CATview = new function() { // simulate central mouse position in case of zoom button clicks if (CATview.zoom_button_clicked){ - var art_mouse_x = CATview.width_content/2; - var art_mouse_y = CATview.height_content/2; + let art_mouse_x = CATview.width_content/2; + let art_mouse_y = CATview.height_content/2; scale_from = delta_size * ((CATview.vertical === true ? art_mouse_y : art_mouse_x) / current_size); CATview.zoom_button_clicked = false; }