import * as d3 from "d3"; // import * as Global from "./global"; const TextImageConnection = function (parent) { let that = this; that.parent = parent; that.set_link_group = that.parent.set_link_group; // animation that.create_ani = that.parent.create_ani; that.update_ani = that.parent.update_ani; that.remove_ani = that.parent.remove_ani; // this.mismatch_threshold = 1500; this.mismatch_threshold = 0.5; this.get_expand_set_id = function(){ return that.parent.expand_set_id; }; that.sub_component_update = function (set_links) { // update state // update view that.e_set_links = that.set_link_group .selectAll(".set-link") .data(set_links, d => d.source.id + "-" + d.target.id); that.create(); that.update(); that.remove(); } that.create = function () { // set links that.e_set_links .enter() .append("path") .attr("class", d => d.mismatch_value > that.mismatch_threshold ? "set-link mismatched-link": "set-link matched-link") .attr("id", d => d.source.id + "-" + d.target.id) // .attr("d", Global.set_line) .attr( "d", d3.linkHorizontal() .x((d) => d.x) .y((d) => d.y) ) .style("opacity", 0) // .style("stroke", d => d.mismatch_value > that.mismatch_threshold ? // Global.Red: Global.GrayColor) .style("stroke-width", 1) // .style("stroke-dasharray", "5, 5") .transition() .duration(that.create_ani) .delay(that.update_ani + that.remove_ani) .style("opacity", d => { let id = that.get_expand_set_id(); return id === -1 || id === d.target.id ? 1 : 0; }); }; that.update = function () { that.e_set_links .transition() .duration(that.update_ani) .delay(that.remove_ani) .attr("class", d => d.mismatch_value > that.mismatch_threshold ? "set-link mismatched-link": "set-link matched-link") .attr("d", d3.linkHorizontal() .x((d) => d.x) .y((d) => d.y)) .style("opacity", d => { let id = that.get_expand_set_id(); return id === -1 || id === d.target.id ? 1 : 0; }); }; that.remove = function () { that.e_set_links .exit() .transition() .duration(that.remove_ani) .style("opacity", 0) .remove(); }; that.highlight_by_node = function(node){ let id = node.id; d3.selectAll(".set").style("opacity", 0.3); that.set_link_group .selectAll("path") .each(function(d){ let self = d3.select(this); if (d.source.id === id){ self.style("opacity", 1); self.style("stroke-width", 2); let cluster_id = "#set-" + d.target.id; d3.select(cluster_id) .style("opacity", 1); } else{ let id = that.get_expand_set_id(); self.style("opacity", id === -1 ? 0.2 : 0); self.style("stroke-width", 1); } }) }; that.dehighlight = function(){ that.set_link_group .selectAll("path") .style("opacity", d => { let id = that.get_expand_set_id(); return id === -1 || id === d.target.id ? 1 : 0; }) .style("stroke-width", 1); d3.selectAll(".set").style("opacity", 1); d3.selectAll(".tree-node").style("opacity", 1); d3.selectAll(".rest-tree-node").style("opacity", 1); }; that.highlight_by_image_cluster = function(node){ // console.log("highlight_by_image_cluster", node); let id = node.id; d3.selectAll(".tree-node").style("opacity", 0.2); d3.selectAll(".rest-tree-node").style("opacity", 0.2); that.set_link_group .selectAll("path") .each(function(d){ let self = d3.select(this); if (d.target.id === id){ self.style("opacity", 1); self.style("stroke-width", 2); let cluster_id = ".tree-node#id-" + d.source.id; d3.select(cluster_id) .style("opacity", 1); } else{ let id = that.get_expand_set_id(); self.style("opacity", id === -1 ? 0.2 : 0); self.style("stroke-width", 1); } }) }; that.clean = function(){ that.set_link_group.selectAll(".set-link").remove(); }; } export default TextImageConnection;