From 895498118e7290054c4588d71112455369f96d9c Mon Sep 17 00:00:00 2001 From: Lichene Date: Fri, 14 Nov 2025 00:51:12 +0100 Subject: [PATCH] test --- public/js/arf.js | 219 ++++++++++++++++++++++++++++++----------------- 1 file changed, 140 insertions(+), 79 deletions(-) diff --git a/public/js/arf.js b/public/js/arf.js index ca3b2d5..ea7c3fa 100644 --- a/public/js/arf.js +++ b/public/js/arf.js @@ -1,23 +1,25 @@ var margin = [20, 120, 20, 140], - width = 1280 - margin[1] - margin[3], - height = 800 - margin[0] - margin[2], - i = 0, - duration = 1250, - root; + width = 1280 - margin[1] - margin[3], + height = 800 - margin[0] - margin[2], + i = 0, + duration = 1250, + root; -var tree = d3.layout.tree() - .size([height, width]); +var tree = d3.layout.tree().size([height, width]); -var diagonal = d3.svg.diagonal() - .projection(function(d) { return [d.y, d.x]; }); +var diagonal = d3.svg.diagonal().projection(function (d) { + return [d.y, d.x]; +}); -var vis = d3.select("#body").append("svg:svg") - .attr("width", width + margin[1] + margin[3]) - .attr("height", height + margin[0] + margin[2]) +var vis = d3 + .select("#body") + .append("svg:svg") + .attr("width", width + margin[1] + margin[3]) + .attr("height", height + margin[0] + margin[2]) .append("svg:g") - .attr("transform", "translate(" + margin[3] + "," + margin[0] + ")"); + .attr("transform", "translate(" + margin[3] + "," + margin[0] + ")"); -d3.json("arf.json", function(json) { +d3.json("arf.json", function (json) { root = json; root.x0 = height / 2; root.y0 = 0; @@ -30,7 +32,7 @@ d3.json("arf.json", function(json) { } } -/* function toggleAll(d) { + /* function toggleAll(d) { if (d.children) { d.children.forEach(toggleAll); toggle(d); @@ -47,93 +49,152 @@ function update(source) { var nodes = tree.nodes(root).reverse(); // Normalize for fixed-depth. - nodes.forEach(function(d) { d.y = d.depth * 180; }); + nodes.forEach(function (d) { + d.y = d.depth * 180; + }); // Update the nodes… - var node = vis.selectAll("g.node") - .data(nodes, function(d) { return d.id || (d.id = ++i); }); + var node = vis.selectAll("g.node").data(nodes, function (d) { + return d.id || (d.id = ++i); + }); // Enter any new nodes at the parent's previous position. - var nodeEnter = node.enter().append("svg:g") - .attr("class", "node") - .attr("transform", function(d) { return "translate(" + source.y0 + "," + source.x0 + ")"; }) - .on("click", function(d) { toggle(d); update(d); }); - - nodeEnter.append("svg:circle") - .attr("r", 1e-6) - .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; }); - - nodeEnter.append('a') - .attr("target", "_blank") - .attr('xlink:href', function(d) { return d.url; }) - .append("svg:text") - .attr("x", function(d) { return d.children || d._children ? -10 : 10; }) - .attr("dy", ".35em") - .attr("text-anchor", function(d) { return d.children || d._children ? "end" : "start"; }) - .text(function(d) { return d.name; }) - .style("fill: rgb(0, 0, 0)", function(d) { return d.free ? 'black' : '#999'; }) - .style("fill-opacity", 1e-6); - - nodeEnter.append("svg:title") - .text(function(d) { - return d.description; + var nodeEnter = node + .enter() + .append("svg:g") + .attr("class", "node") + .attr("transform", function (d) { + return "translate(" + source.y0 + "," + source.x0 + ")"; + }) + .on("click", function (d) { + toggle(d); + update(d); }); + nodeEnter + .append("svg:circle") + .attr("r", 1e-6) + .style("fill", function (d) { + return d._children ? "lightsteelblue" : "#fff"; + }); + + nodeEnter + .append("a") + .attr("target", "_blank") + .attr("xlink:href", function (d) { + return d.url; + }) + .append("svg:text") + .attr("x", function (d) { + return d.children || d._children ? -10 : 10; + }) + .attr("dy", ".35em") + .attr("text-anchor", function (d) { + return d.children || d._children ? "end" : "start"; + }) + .text(function (d) { + return d.name; + }) + .style("fill: rgb(0, 0, 0)", function (d) { + return d.free ? "black" : "#999"; + }) + .style("fill-opacity", 1e-6); + nodeEnter + .filter(function (d) { + return !d.children && !d._children; + }) // Only leaf nodes + .append("a") + .attr("target", "_blank") + .attr("xlink:href", function (d) { + // Assuming your notes are in a "notes" folder with filename based on node name + return ( + "https://git.hackinpovo.it/HackInPovo/resources/src/branch/main/Notes/" + + d.name + + ".txt" + ); + // Or if you have a specific property: return d.notesUrl; + }) + .append("svg:text") + .attr("x", function (d) { + // Position to the right of the node name + // Adjust the offset (60) based on your node name lengths + return 10 + 60; + }) + .attr("dy", ".35em") + .attr("text-anchor", "start") + .text(" [Notes]") + .style("fill", "blue") + .style("fill-opacity", 1e-6) + .style("text-decoration", "underline"); + nodeEnter.append("svg:title").text(function (d) { + return d.description; + }); + // Transition nodes to their new position. - var nodeUpdate = node.transition() - .duration(duration) - .attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; }); + var nodeUpdate = node + .transition() + .duration(duration) + .attr("transform", function (d) { + return "translate(" + d.y + "," + d.x + ")"; + }); - nodeUpdate.select("circle") - .attr("r", 6) - .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; }); + nodeUpdate + .select("circle") + .attr("r", 6) + .style("fill", function (d) { + return d._children ? "lightsteelblue" : "#fff"; + }); - nodeUpdate.select("text") - .style("fill-opacity", 1); + nodeUpdate.select("text").style("fill-opacity", 1); // Transition exiting nodes to the parent's new position. - var nodeExit = node.exit().transition() - .duration(duration) - .attr("transform", function(d) { return "translate(" + source.y + "," + source.x + ")"; }) - .remove(); + var nodeExit = node + .exit() + .transition() + .duration(duration) + .attr("transform", function (d) { + return "translate(" + source.y + "," + source.x + ")"; + }) + .remove(); - nodeExit.select("circle") - .attr("r", 1e-6); + nodeExit.select("circle").attr("r", 1e-6); - nodeExit.select("text") - .style("fill-opacity", 1e-6); + nodeExit.select("text").style("fill-opacity", 1e-6); // Update the links… - var link = vis.selectAll("path.link") - .data(tree.links(nodes), function(d) { return d.target.id; }); + var link = vis.selectAll("path.link").data(tree.links(nodes), function (d) { + return d.target.id; + }); // Enter any new links at the parent's previous position. - link.enter().insert("svg:path", "g") - .attr("class", "link") - .attr("d", function(d) { - var o = {x: source.x0, y: source.y0}; - return diagonal({source: o, target: o}); - }) + link + .enter() + .insert("svg:path", "g") + .attr("class", "link") + .attr("d", function (d) { + var o = { x: source.x0, y: source.y0 }; + return diagonal({ source: o, target: o }); + }) .transition() - .duration(duration) - .attr("d", diagonal); + .duration(duration) + .attr("d", diagonal); // Transition links to their new position. - link.transition() - .duration(duration) - .attr("d", diagonal); + link.transition().duration(duration).attr("d", diagonal); // Transition exiting nodes to the parent's new position. - link.exit().transition() - .duration(duration) - .attr("d", function(d) { - var o = {x: source.x, y: source.y}; - return diagonal({source: o, target: o}); - }) - .remove(); + link + .exit() + .transition() + .duration(duration) + .attr("d", function (d) { + var o = { x: source.x, y: source.y }; + return diagonal({ source: o, target: o }); + }) + .remove(); // Stash the old positions for transition. - nodes.forEach(function(d) { + nodes.forEach(function (d) { d.x0 = d.x; d.y0 = d.y; }); @@ -153,4 +214,4 @@ function toggle(d) { function goDark() { var element = document.body; element.classList.toggle("dark-Mode"); -} \ No newline at end of file +}