-
-
Save tomhaymore/1249394 to your computer and use it in GitHub Desktop.
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> | |
| <title>Node-Link Tree</title> | |
| <link href="interactive_tree.css" rel="stylesheet" type="text/css" /> | |
| <script type="text/javascript" src="http://mbostock.github.com/d3/d3.js?1.27.2"></script> | |
| <script type="text/javascript" src="http://mbostock.github.com/d3/d3.layout.js?1.27.2"></script> | |
| </head> | |
| <body> | |
| <div id="chart"></div> | |
| <script type="text/javascript"> | |
| var w = 960, | |
| h = 2000, | |
| i = 0, | |
| duration = 500, | |
| root; | |
| var tree = d3.layout.tree() | |
| .size([h, w - 160]); | |
| var diagonal = d3.svg.diagonal() | |
| .projection(function(d) { return [d.y, d.x]; }); | |
| var vis = d3.select("#chart").append("svg:svg") | |
| .attr("width", w) | |
| .attr("height", h) | |
| .append("svg:g") | |
| .attr("transform", "translate(40,0)"); | |
| d3.json("math_map_compact.json", function(json) { | |
| json.x0 = 800; | |
| json.y0 = 0; | |
| update(root = json); | |
| }); | |
| function update(source) { | |
| // Compute the new tree layout. | |
| var nodes = tree.nodes(root).reverse(); | |
| console.log(nodes) | |
| // Update the nodes… | |
| var node = vis.selectAll("g.node") | |
| .data(nodes, function(d) { return d.id || (d.id = ++i); }); | |
| var nodeEnter = node.enter().append("svg:g") | |
| .attr("class", "node") | |
| .attr("transform", function(d) { return "translate(" + source.y0 + "," + source.x0 + ")"; }); | |
| //.style("opacity", 1e-6); | |
| // Enter any new nodes at the parent's previous position. | |
| nodeEnter.append("svg:circle") | |
| //.attr("class", "node") | |
| //.attr("cx", function(d) { return source.x0; }) | |
| //.attr("cy", function(d) { return source.y0; }) | |
| .attr("r", 4.5) | |
| .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; }) | |
| .on("click", click); | |
| nodeEnter.append("svg:text") | |
| .attr("x", function(d) { return d._children ? -8 : 8; }) | |
| .attr("y", 3) | |
| //.attr("fill","#ccc") | |
| //.attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; }) | |
| .text(function(d) { return d.name; }); | |
| // Transition nodes to their new position. | |
| nodeEnter.transition() | |
| .duration(duration) | |
| .attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; }) | |
| .style("opacity", 1) | |
| .select("circle") | |
| //.attr("cx", function(d) { return d.x; }) | |
| //.attr("cy", function(d) { return d.y; }) | |
| .style("fill", "lightsteelblue"); | |
| node.transition() | |
| .duration(duration) | |
| .attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; }) | |
| .style("opacity", 1); | |
| node.exit().transition() | |
| .duration(duration) | |
| .attr("transform", function(d) { return "translate(" + source.y + "," + source.x + ")"; }) | |
| .style("opacity", 1e-6) | |
| .remove(); | |
| /* | |
| var nodeTransition = node.transition() | |
| .duration(duration); | |
| nodeTransition.select("circle") | |
| .attr("cx", function(d) { return d.y; }) | |
| .attr("cy", function(d) { return d.x; }) | |
| .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; }); | |
| nodeTransition.select("text") | |
| .attr("dx", function(d) { return d._children ? -8 : 8; }) | |
| .attr("dy", 3) | |
| .style("fill", function(d) { return d._children ? "lightsteelblue" : "#5babfc"; }); | |
| // Transition exiting nodes to the parent's new position. | |
| var nodeExit = node.exit(); | |
| nodeExit.select("circle").transition() | |
| .duration(duration) | |
| .attr("cx", function(d) { return source.y; }) | |
| .attr("cy", function(d) { return source.x; }) | |
| .remove(); | |
| nodeExit.select("text").transition() | |
| .duration(duration) | |
| .remove(); | |
| */ | |
| // Update the links… | |
| 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}); | |
| }) | |
| .transition() | |
| .duration(duration) | |
| .attr("d", diagonal); | |
| // Transition links to their new position. | |
| 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(); | |
| // Stash the old positions for transition. | |
| nodes.forEach(function(d) { | |
| d.x0 = d.x; | |
| d.y0 = d.y; | |
| }); | |
| } | |
| // Toggle children on click. | |
| function click(d) { | |
| if (d.children) { | |
| d._children = d.children; | |
| d.children = null; | |
| } else { | |
| d.children = d._children; | |
| d._children = null; | |
| } | |
| update(d); | |
| } | |
| d3.select(self.frameElement).style("height", "2000px"); | |
| </script> | |
| </body> | |
| </html> |
| circle { | |
| cursor: pointer; | |
| fill: #fff; | |
| stroke: steelblue; | |
| stroke-width: 1.5px; | |
| } | |
| text { | |
| font-size:10px; | |
| } | |
| path.link { | |
| fill: none; | |
| stroke: #ccc; | |
| stroke-width: 1.5px; | |
| } |
| { | |
| "name": "MAT", | |
| "children": [ | |
| { | |
| "name": "TRI", | |
| "children": [ | |
| { | |
| "name": "Right Triangles and an Introduction to Trigonometry", | |
| "children": [ | |
| { | |
| "name": "The Pythagorean Theorem" | |
| }, | |
| { | |
| "name": "Special Right Triangles" | |
| }, | |
| { | |
| "name": "Basic Trigonometric Functions" | |
| }, | |
| { | |
| "name": "Solving Right Triangles" | |
| }, | |
| { | |
| "name": "Measuring Rotation" | |
| }, | |
| { | |
| "name": "Applying Trig Functions to Angles of Rotation" | |
| }, | |
| { | |
| "name": "Trigonometric Functions of Any Angle" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Graphing Trigonometric Functions - 2nd edition", | |
| "children": [ | |
| { | |
| "name": "Relating Trigonometric Functions" | |
| }, | |
| { | |
| "name": "Radian Measure" | |
| }, | |
| { | |
| "name": "Applications of Radian Measure" | |
| }, | |
| { | |
| "name": "Circular Functions of Real Numbers" | |
| }, | |
| { | |
| "name": "Translating Sine and Cosine Functions" | |
| }, | |
| { | |
| "name": "Amplitude, Period and Frequency" | |
| }, | |
| { | |
| "name": "General Sinusoidal Graphs" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Trigonometric Identities and Equations - 2nd edition", | |
| "children": [ | |
| { | |
| "name": "Graphing Tangent, Cotangent, Secant, and Cosecant" | |
| }, | |
| { | |
| "name": "Fundamental Identities" | |
| }, | |
| { | |
| "name": "Proving Identities" | |
| }, | |
| { | |
| "name": "Solving Trigonometric Equations" | |
| }, | |
| { | |
| "name": "Sum and Difference Identities" | |
| }, | |
| { | |
| "name": "Double Angle Identities" | |
| }, | |
| { | |
| "name": "Half-Angle Identities" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Inverse Trigonometric Functions - 2nd edition", | |
| "children": [ | |
| { | |
| "name": "Products, Sums, Linear Combinations, and Applications" | |
| }, | |
| { | |
| "name": "Basic Inverse Trigonometric Functions" | |
| }, | |
| { | |
| "name": "Graphing Inverse Trigonometric Functions" | |
| }, | |
| { | |
| "name": "Inverse Trigonometric Properties" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Triangles and Vectors", | |
| "children": [ | |
| { | |
| "name": "Applications & Models" | |
| }, | |
| { | |
| "name": "The Law of Cosines" | |
| }, | |
| { | |
| "name": "Area of a Triangle" | |
| }, | |
| { | |
| "name": "The Law of Sines" | |
| }, | |
| { | |
| "name": "The Ambiguous Case" | |
| }, | |
| { | |
| "name": "General Solutions of Triangles" | |
| }, | |
| { | |
| "name": "Vectors" | |
| } | |
| ] | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "ALG", | |
| "children": [ | |
| { | |
| "name": "Equations and Functions", | |
| "children": [ | |
| { | |
| "name": "Variable Expressions" | |
| }, | |
| { | |
| "name": "Order of Operations" | |
| }, | |
| { | |
| "name": "Patterns and Equations" | |
| }, | |
| { | |
| "name": "Equations and Inequalities" | |
| }, | |
| { | |
| "name": "Functions as Rules and Tables" | |
| }, | |
| { | |
| "name": "Functions as Graphs" | |
| }, | |
| { | |
| "name": "Problem-Solving Plan" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Real Numbers", | |
| "children": [ | |
| { | |
| "name": "Problem-Solving Strategies: Make a Table and Look for a Pattern" | |
| }, | |
| { | |
| "name": "Integers and Rational Numbers" | |
| }, | |
| { | |
| "name": "Adding and Subtracting Rational Numbers" | |
| }, | |
| { | |
| "name": "Multiplying and Dividing Rational Numbers" | |
| }, | |
| { | |
| "name": "The Distributive Property" | |
| }, | |
| { | |
| "name": "Square Roots and Real Numbers" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Equations of Lines", | |
| "children": [ | |
| { | |
| "name": "Problem-Solving Strategies: Guess and Check, Work Backward" | |
| }, | |
| { | |
| "name": "One-Step Equations" | |
| }, | |
| { | |
| "name": "Two-Step Equations" | |
| }, | |
| { | |
| "name": "Multi-Step Equations" | |
| }, | |
| { | |
| "name": "Equations with Variables on Both Sides" | |
| }, | |
| { | |
| "name": "Ratios and Proportions" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Graphs of Equations and Functions", | |
| "children": [ | |
| { | |
| "name": "Percent Problems" | |
| }, | |
| { | |
| "name": "The Coordinate Plane" | |
| }, | |
| { | |
| "name": "Graphs of Linear Equations" | |
| }, | |
| { | |
| "name": "Graphing Using Intercepts" | |
| }, | |
| { | |
| "name": "Slope and Rate of Change" | |
| }, | |
| { | |
| "name": "Graphs Using Slope-Intercept Form" | |
| }, | |
| { | |
| "name": "Direct Variation Models" | |
| }, | |
| { | |
| "name": "Linear Function Graphs" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Writing Linear Equations", | |
| "children": [ | |
| { | |
| "name": "Problem-Solving Strategies - Graphs" | |
| }, | |
| { | |
| "name": "Forms of Linear Equations" | |
| }, | |
| { | |
| "name": "Equations of Parallel and Perpendicular Lines" | |
| }, | |
| { | |
| "name": "Fitting a Line to Data" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Linear Inequalities", | |
| "children": [ | |
| { | |
| "name": "Predicting with Linear Models" | |
| }, | |
| { | |
| "name": "Solving Inequalities" | |
| }, | |
| { | |
| "name": "Using Inequalities" | |
| }, | |
| { | |
| "name": "Compound Inequalities" | |
| }, | |
| { | |
| "name": "Absolute Value Equations and Inequalities" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Solving Systems of Equations and Inequalities", | |
| "children": [ | |
| { | |
| "name": "Linear Inequalities in Two Variables" | |
| }, | |
| { | |
| "name": "Linear Systems by Graphing" | |
| }, | |
| { | |
| "name": "Solving Linear Systems by Substitution" | |
| }, | |
| { | |
| "name": "Solving Linear Systems by Elimination" | |
| }, | |
| { | |
| "name": "Special Types of Linear Systems" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Exponential Functions", | |
| "children": [ | |
| { | |
| "name": "Systems of Linear Inequalities" | |
| }, | |
| { | |
| "name": "Exponent Properties Involving Products" | |
| }, | |
| { | |
| "name": "Exponent Properties Involving Quotients" | |
| }, | |
| { | |
| "name": "Zero, Negative, and Fractional Exponents" | |
| }, | |
| { | |
| "name": "Scientific Notation" | |
| }, | |
| { | |
| "name": "Geometric Sequences" | |
| }, | |
| { | |
| "name": "Exponential Functions" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Polynomials", | |
| "children": [ | |
| { | |
| "name": "Applications of Exponential Functions" | |
| }, | |
| { | |
| "name": "Addition and Subtraction of Polynomials" | |
| }, | |
| { | |
| "name": "Multiplication of Polynomials" | |
| }, | |
| { | |
| "name": "Special Products of Polynomials" | |
| }, | |
| { | |
| "name": "Polynomial Equations in Factored Form" | |
| }, | |
| { | |
| "name": "Factoring Quadratic Expressions" | |
| }, | |
| { | |
| "name": "Factoring Special Products" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Quadratic Equations and Quadratic Functions", | |
| "children": [ | |
| { | |
| "name": "Factoring Polynomials Completely" | |
| }, | |
| { | |
| "name": "Graphs of Quadratic Functions" | |
| }, | |
| { | |
| "name": "Quadratic Equations by Graphing" | |
| }, | |
| { | |
| "name": "Quadratic Equations by Square Roots" | |
| }, | |
| { | |
| "name": "Solving Quadratic Equations by Completing the Square" | |
| }, | |
| { | |
| "name": "Solving Quadratic Equations by the Quadratic Formula" | |
| }, | |
| { | |
| "name": "The Discriminant" | |
| } | |
| ] | |
| }, | |
| { | |
| "name": "Algebra and Geometry Connections", | |
| "children": [ | |
| { | |
| "name": "Linear, Exponential and Quadratic Models" | |
| }, | |
| { | |
| "name": "Graphs of Square Root Functions" | |
| }, | |
| { | |
| "name": "Radical Expressions" | |
| }, | |
| { | |
| "name": "Radical Equations" | |
| }, | |
| { | |
| "name": "The Pythagorean Theorem and Its Converse" | |
| } | |
| ] | |
| } | |
| ] | |
| } | |
| ] | |
| } |
hi , i am not a developer , can any one please help in a script or developing family tree website please ?
adnannazzal [ at ] elin.jo
Can we covert this tree structure to cluster(circular) structure?
This not working in IE8 and Chrome, anyone please help me to rectify that issue and how can we add the z-index?
There is some issue in the code in updating the nodes http://bl.ocks.org/tchaymore/1249394
If I go back to the parent node twice I'm unable to go down further into the child.
For example assume the tree looks like A--------->B------------->C
If I click B, the updated tree is A--------->B
and If I click A, the updated tree is A
Now If I want to go back to see C, the code is not function, Could you please look into it, I tried to fix it but I'm unable to do it. Once if it is done I will let you know.
Is it possible to add a picture to every node (i.e. instead of the blue little circles or next to the text or instead of the text). If yes, how could it be done?
Many thanks!