From 60f0a68e3f7bdddd026088fd4817a58fea3bc8d6 Mon Sep 17 00:00:00 2001
From: Katja <bax5612@studium.uni-hamburg.de>
Date: Tue, 9 Nov 2021 18:49:46 +0100
Subject: [PATCH] click interaction, hover text

---
 Output/index.html | 93 +++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 77 insertions(+), 16 deletions(-)

diff --git a/Output/index.html b/Output/index.html
index ce1e960..23ddb58 100644
--- a/Output/index.html
+++ b/Output/index.html
@@ -9,8 +9,10 @@
 
         .link { stroke: #999; stroke-opacity: .6; stroke-width: 1px; }
     </style>
+    <link rel="shortcut icon" href="#">
 </head>
 <body>
+<p id="id"></p>  <!--for commenting with document.getElementById("id").innerHTML = "text"; -->
 <svg width="960" height="600"></svg>
 
 <script src="https://d3js.org/d3.v4.min.js" type="text/javascript"></script>
@@ -24,24 +26,28 @@
         height = +svg.attr("height"),
         node,
         link;
+        r=5;
+
+    svg.append('defs').append('marker')//arrowhead
 
-    svg.append('defs').append('marker')
         .attrs({'id':'arrowhead',
             'viewBox':'-0 -5 10 10',
             'refX':13,
             'refY':0,
             'orient':'auto',
-            'markerWidth':13,
+            'markerWidth':10,
             'markerHeight':13,
             'xoverflow':'visible'})
         .append('svg:path')
         .attr('d', 'M 0,-5 L 10 ,0 L 0,5')
-        .attr('fill', '#999')
+        .attr('fill', '#999')//arrowhead color
         .style('stroke','none');
+        
 
     var simulation = d3.forceSimulation()
         .force("link", d3.forceLink().id(function (d) { return d.doi; }).distance(100).strength(1))
-        .force("charge", d3.forceManyBody())
+        .force("collide", d3.forceCollide(r+35))
+        .force("charge", d3.forceManyBody().strength(-30))
         .force("center", d3.forceCenter(width / 2, height / 2));
 
     d3.json("data.json", function (error, graph) {
@@ -54,13 +60,15 @@
             .data(links)
             .enter()
             .append("line")
+            .style("stroke-width", "1px")
+            .style("stroke", "#000000")
             .attr("class", "link")
             .attr('marker-end','url(#arrowhead)')
 
         link.append("title")
             .text(function (d) {return d.author;});
 
-        edgepaths = svg.selectAll(".edgepath")
+      /*  edgepaths = svg.selectAll(".edgepath")
             .data(links)
             .enter()
             .append('path')
@@ -70,9 +78,9 @@
                 'stroke-opacity': 0,
                 'id': function (d, i) {return 'edgepath' + i}
             })
-            .style("pointer-events", "none");
+            .style("pointer-events", "none");*/
 
-        edgelabels = svg.selectAll(".edgelabel")
+       /* edgelabels = svg.selectAll(".edgelabel")
             .data(links)
             .enter()
             .append('text')
@@ -90,23 +98,59 @@
             .style("pointer-events", "none")
             .attr("startOffset", "50%")
             .text(function (d) {return d.author});
+            */
 
         node = svg.selectAll(".node")
             .data(nodes)
             .enter()
             .append("g")
             .attr("class", "node")
+            .call(d3.drag()
+                    .on("start", dragstarted)
+                    .on("drag", dragged)
+                    //.on("end", dragended)
+            );
+
 
+var toRemove;
         node.append("circle")
-            .attr("r", 5)
+            .attr("r", r)
+            .attr("class", "circle")
             .style("fill", function (d, i) {return colors(i);})
 
+
+            .on('click', function() {
+                if(toRemove){
+                    d3.select(toRemove).selectAll(".circle").attr("r", r);
+                }
+                toRemove = this.parentNode;
+                d3.select(this).attr("r", 12);
+            });
+
+
+           /* .on("click", function(){
+            d3.select(this).attr('r', r+5)
+                //.style("fill","lightcoral")
+            });*/
+
         node.append("title")
-            .text(function (d) {return d.author;});
+            .text(function (d) {return "Title: "+d.name+"\nAuthor: "+d.author+"\nYear: "+d.year+"\ndoi: "+d.doi;});
 
         node.append("text")
-            .attr("dy", -3)
-            .text(function (d) {return d.author;});
+            //.attr("dy", -30)
+            .attr("class", "text") //über selectAll(".text") können objs mit der klasse ausgewählt werden
+            .style("font-size", "15px")
+            .text(function (d) {return d.author;})
+            .style('pointer-events', 'auto')
+
+            
+            .on('click', function() {
+                if(toRemove){
+                    d3.select(toRemove).selectAll(".circle").attr("r", r);
+                }
+                toRemove = this.parentNode;
+                d3.select(this.parentNode).selectAll(".circle").attr("r", 12);
+            });
 
         simulation
             .nodes(nodes)
@@ -116,6 +160,8 @@
             .links(links);
     }
 
+
+
     function ticked() {
         link
             .attr("x1", function (d) {return d.source.x;})
@@ -126,11 +172,11 @@
         node
             .attr("transform", function (d) {return "translate(" + d.x + ", " + d.y + ")";});
 
-        edgepaths.attr('d', function (d) {
-            return 'M ' + d.source.x + ' ' + d.source.y + ' L ' + d.target.x + ' ' + d.target.y;
-        });
+     //   edgepaths.attr('d', function (d) {
+     //       return 'M ' + d.source.x + ' ' + d.source.y + ' L ' + d.target.x + ' ' + d.target.y;
+      //  });
 
-        edgelabels.attr('transform', function (d) {
+     /*   edgelabels.attr('transform', function (d) {
             if (d.target.x < d.source.x) {
                 var bbox = this.getBBox();
 
@@ -141,9 +187,20 @@
             else {
                 return 'rotate(0)';
             }
-        });
+        });*/
+    }
+
+
+    function dragstarted(d) {
+        if (!d3.event.active) simulation.alphaTarget(0.3).restart()
+        d.fx = d.x;
+        d.fy = d.y;
     }
 
+    function dragged(d) {
+        d.fx = d3.event.x;
+        d.fy = d3.event.y;
+    }
 
 //    function dragended(d) {
 //        if (!d3.event.active) simulation.alphaTarget(0);
@@ -151,6 +208,10 @@
 //        d.fy = undefined;
 //    }
 
+
+
+
+
 </script>
 
 </body>
-- 
GitLab