rabuahmad commited on
Commit
28c3a11
1 Parent(s): b7e2037

Upload 3 files

Browse files
Files changed (3) hide show
  1. controller.py +19 -0
  2. taxonomy.json +194 -0
  3. templates/index.html +172 -0
controller.py ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, render_template
2
+ from flask import send_file
3
+
4
+ app = Flask(__name__)
5
+
6
+
7
+ @app.route("/")
8
+ def index():
9
+ return render_template("index.html")
10
+
11
+
12
+ @app.route("/taxonomy.json")
13
+ def loadFile():
14
+ path = "taxonomy.json"
15
+ return send_file(path, as_attachment=True)
16
+
17
+
18
+ if __name__ == "__main__":
19
+ app.run()
taxonomy.json ADDED
@@ -0,0 +1,194 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "ORKG-taxonomy",
3
+ "children": [
4
+ {
5
+ "name": "Physical Sciences and Mathematics",
6
+ "children": [
7
+ { "name": "Physics",
8
+ "children": [
9
+ { "name": "Quantum Physics" },
10
+ { "name": "Nonlinear Sciences" },
11
+ { "name": "Atomic, Molecular and Optical Physics" },
12
+ { "name": "Condensed Matter Physics" },
13
+ { "name": "Optics" },
14
+ { "name": "Fluid Dynamics" },
15
+ { "name": "Plasma and Beam Physics" },
16
+ { "name": "Biological and Chemical Physics" },
17
+ { "name": "Computational Physics" },
18
+ { "name": "Medical Physics" },
19
+ { "name": "Physics Education" },
20
+ { "name": "History and Philosophy of Physics" },
21
+ { "name": "Data Analysis, Statistics and Probability" },
22
+ { "name": "Space Physics" },
23
+ { "name": "Popular Physics" }
24
+ ]},
25
+ { "name": "Cosmology, Relativity, and Gravity" },
26
+ { "name": "Astrophysics and Astronomy",
27
+ "children": [
28
+ { "name": "The Sun and the Solar System" },
29
+ { "name": "External Galaxies" },
30
+ { "name": "Cosmology" },
31
+ { "name": "Physical Processes" },
32
+ { "name": "Instrumentation" }
33
+ ]},
34
+ { "name": "Mathematics",
35
+ "children": [
36
+ { "name": "Dynamics/Dynamical Systems" },
37
+ { "name": "Geometry and Topology" },
38
+ { "name": "Discrete Mathematics and Combinatorics" },
39
+ { "name": "Analysis" },
40
+ { "name": "Number Theory" },
41
+ { "name": "Algebraic Geometry" },
42
+ { "name": "Algebra" },
43
+ { "name": "Set Theory" },
44
+ { "name": "Logic and Foundations" },
45
+ { "name": "Complex Variables" },
46
+ { "name": "Category Theory" },
47
+ { "name": "Mathematics History and Overview" },
48
+ { "name": "Mathematical Software" }
49
+ ]},
50
+ { "name": "Computer Sciences",
51
+ "children": [
52
+ { "name": "Computer Vision and Pattern Recognition" },
53
+ { "name": "Artificial Intelligence",
54
+ "children": [
55
+ { "name": "Machine Learning" },
56
+ { "name": "Image and Video Processing" },
57
+ { "name": "Multiagent Systems" },
58
+ { "name": "Audio and Speech Processing" }
59
+ ] },
60
+ { "name": "Theory/Algorithms",
61
+ "children": [
62
+ { "name": "Computational Geometry"}
63
+ ]},
64
+ { "name": "Software Engineering" },
65
+ { "name": "Cryptography and Security" },
66
+ { "name": "Databases/Information Systems",
67
+ "children": [
68
+ { "name": "Digital Libraries" }
69
+ ] },
70
+ { "name": "Human Computer Interfaces" },
71
+ { "name": "Programming Languages/Compilers" },
72
+ { "name": "Computers and Society" },
73
+ { "name": "Information Systems, Process and Knowledge Management" },
74
+ { "name": "Computer Science and Game Theory" },
75
+ { "name": "Security and Dependability" },
76
+ { "name": "Graphics" },
77
+ { "name": "OS/Networks" }
78
+ ]},
79
+ { "name": "Statistics and Probability",
80
+ "children": [
81
+ { "name": "Statistical Methodology" },
82
+ { "name": "Applied Statistics" }
83
+ ] },
84
+ { "name": "Applied Mathematics",
85
+ "children": [
86
+ { "name": "Numerical Analysis and Computation" }
87
+ ] },
88
+ { "name": "Chemistry" },
89
+ { "name": "Earth Sciences",
90
+ "children": [
91
+ { "name": "Environmental Sciences" },
92
+ { "name": "Geophysics and Seismology" }
93
+ ] },
94
+ { "name": "Oceanography and Atmospheric Sciences and Meteorology",
95
+ "children": [
96
+ { "name": "Oceanography" },
97
+ { "name": "Atmospheric Sciences" }
98
+ ]}
99
+ ]
100
+ },
101
+ {
102
+ "name": "Engineering",
103
+ "children": [
104
+ {"name": "Information Science"},
105
+ {"name": "Operations Research, Systems Engineering and Industrial Engineering"},
106
+ {"name": "Electrical and Computer Engineering",
107
+ "children": [
108
+ {"name": "Signal Processing"},
109
+ {"name": "Controls and Control Theory"}
110
+ ]},
111
+ {"name": "Computational Engineering"},
112
+ {"name": "Nanoscience and Nanotechnology"},
113
+ {"name": "Mechanical Engineering",
114
+ "children": [
115
+ {"name": "Energy Systems"}
116
+ ]},
117
+ {"name": "Civil and Environmental Engineering"},
118
+ {"name": "Biomedical Engineering and Bioengineering",
119
+ "children": [
120
+ {"name": "Molecular, cellular, and tissue engineering",
121
+ "children": [
122
+ {"name": "Tissues and Organs"}
123
+ ]}
124
+ ]}
125
+ ]
126
+ },
127
+ {
128
+ "name": "Life Sciences",
129
+ "children": [
130
+ { "name": "Bioinformatics" },
131
+ { "name": "Ecology and Evolutionary Biology",
132
+ "children": [
133
+ { "name": "Population Biology" }
134
+ ]},
135
+ { "name": "Microbiology" },
136
+ { "name": "Nursing Pharmacology, Toxicology and Environmental Health",
137
+ "children" : [
138
+ { "name": "Toxicology" },
139
+ { "name": "Medicinal Chemistry and Pharmaceutics" }
140
+ ]},
141
+ { "name": "Animal Sciences" },
142
+ { "name": "Medicine" },
143
+ { "name": "Biology/Integrated Biology/ Integrated Biomedical Sciences",
144
+ "children": [
145
+ { "name": "Motor Control" },
146
+ { "name": "Quantitative Methods" }
147
+ ]},
148
+ { "name": "Biochemistry, Biophysics, and Structural Biology",
149
+ "children": [
150
+ { "name": "Molecular Biology"}
151
+ ]},
152
+ { "name": "Neuroscience and Neurobiology" },
153
+ { "name": "Public Health" },
154
+ { "name": "Genetics and Genomics",
155
+ "children" : [
156
+ { "name": "Genomics"}
157
+ ]},
158
+ { "name": "Cell and Developmental Biology",
159
+ "children": [
160
+ { "name": "Cell Behavior"}
161
+ ]}
162
+ ]
163
+ },
164
+ {
165
+ "name": "Social and Behavioral Sciences",
166
+ "children": [
167
+ { "name": "Linguistics",
168
+ "children": [
169
+ { "name": "Computational Linguistics" }
170
+ ] },
171
+ { "name": "Public Affairs, Public Policy and Public Administration" },
172
+ { "name": "Economics",
173
+ "children": [
174
+ { "name": "Quantitative Finance" },
175
+ { "name": "Econometrics" },
176
+ { "name": "Economic Theory" }
177
+ ] },
178
+ { "name": "Sociology",
179
+ "children": [
180
+ { "name": "Physics and Society" }
181
+ ] },
182
+ { "name": "Communication Sciences",
183
+ "children": [
184
+ { "name": "Communication Technology and New Media" }
185
+ ] },
186
+ { "name": "Science and Technology Studies" },
187
+ { "name": "Psychology" }
188
+ ]
189
+ },
190
+ {
191
+ "name": "Arts and Humanities"
192
+ }
193
+ ]
194
+ }
templates/index.html ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <meta charset="utf-8">
3
+ <style>
4
+
5
+ .node {
6
+ cursor: pointer;
7
+ }
8
+
9
+ .node circle {
10
+ fill: #fff;
11
+ stroke: steelblue;
12
+ stroke-width: 2.0px;
13
+ }
14
+
15
+ .node text {
16
+ font: 20px sans-serif;
17
+ }
18
+
19
+ .link {
20
+ fill: none;
21
+ stroke: #ccc;
22
+ stroke-width: 2.0px;
23
+ }
24
+
25
+ </style>
26
+ <body>
27
+ <!--<script src="https://cdnjs.cloudtaxonomy.com/ajax/libs/d3/3.4.5/d3.min.js" integrity="sha512-ixqLAANjnCFERy/YNIycwzbDuk3tEWaVOwepwCh65GKbt+GgnCV/dO1ne+OZXwif8q/j79PKb8RGdNu27055HA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>-->
28
+ <!--<script src="//d3js.org/d3.v3.min.js"></script>-->
29
+ <script src="https://d3js.org/d3.v3.min.js"></script>
30
+ <script>
31
+
32
+ var margin = {top: 20, right: 900, bottom: 20, left: 200},
33
+ width = 960 - margin.right - margin.left,
34
+ height = 800 - margin.top - margin.bottom;
35
+
36
+ var i = 0,
37
+ duration = 750,
38
+ root;
39
+
40
+ var tree = d3.layout.tree()
41
+ .size([height, width]);
42
+
43
+ var diagonal = d3.svg.diagonal()
44
+ .projection(function(d) { return [d.y, d.x]; });
45
+
46
+ var svg = d3.select("body").append("svg")
47
+ .attr("width", 2000)
48
+ .attr("height", height + margin.top + margin.bottom)
49
+ .append("g")
50
+ .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
51
+
52
+ d3.json("taxonomy.json", function(error, taxonomy) {
53
+ if (error) throw error;
54
+
55
+ root = taxonomy;
56
+ root.x0 = height / 2;
57
+ root.y0 = 0;
58
+
59
+ function collapse(d) {
60
+ if (d.children) {
61
+ d._children = d.children;
62
+ d._children.forEach(collapse);
63
+ d.children = null;
64
+ }
65
+ }
66
+
67
+ root.children.forEach(collapse);
68
+ update(root);
69
+ });
70
+
71
+ d3.select(self.frameElement).style("height", "800px");
72
+
73
+ function update(source) {
74
+
75
+ // Compute the new tree layout.
76
+ var nodes = tree.nodes(root).reverse(),
77
+ links = tree.links(nodes);
78
+
79
+ // Normalize for fixed-depth.
80
+ nodes.forEach(function(d) { d.y = d.depth * 180; });
81
+
82
+ // Update the nodes…
83
+ var node = svg.selectAll("g.node")
84
+ .data(nodes, function(d) { return d.id || (d.id = ++i); });
85
+
86
+ // Enter any new nodes at the parent's previous position.
87
+ var nodeEnter = node.enter().append("g")
88
+ .attr("class", "node")
89
+ .attr("transform", function(d) { return "translate(" + source.y0 + "," + source.x0 + ")"; })
90
+ .on("click", click);
91
+
92
+ nodeEnter.append("circle")
93
+ .attr("r", 1e-6)
94
+ .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; });
95
+
96
+ nodeEnter.append("text")
97
+ .attr("x", function(d) { return d.children || d._children ? -10 : 10; })
98
+ .attr("dy", ".35em")
99
+ .attr("text-anchor", function(d) { return d.children || d._children ? "end" : "start"; })
100
+ .text(function(d) { return d.name; })
101
+ .style("fill-opacity", 1e-6);
102
+
103
+ // Transition nodes to their new position.
104
+ var nodeUpdate = node.transition()
105
+ .duration(duration)
106
+ .attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; });
107
+
108
+ nodeUpdate.select("circle")
109
+ .attr("r", 4.5)
110
+ .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; });
111
+
112
+ nodeUpdate.select("text")
113
+ .style("fill-opacity", 1);
114
+
115
+ // Transition exiting nodes to the parent's new position.
116
+ var nodeExit = node.exit().transition()
117
+ .duration(duration)
118
+ .attr("transform", function(d) { return "translate(" + source.y + "," + source.x + ")"; })
119
+ .remove();
120
+
121
+ nodeExit.select("circle")
122
+ .attr("r", 1e-6);
123
+
124
+ nodeExit.select("text")
125
+ .style("fill-opacity", 1e-6);
126
+
127
+ // Update the links…
128
+ var link = svg.selectAll("path.link")
129
+ .data(links, function(d) { return d.target.id; });
130
+
131
+ // Enter any new links at the parent's previous position.
132
+ link.enter().insert("path", "g")
133
+ .attr("class", "link")
134
+ .attr("d", function(d) {
135
+ var o = {x: source.x0, y: source.y0};
136
+ return diagonal({source: o, target: o});
137
+ });
138
+
139
+ // Transition links to their new position.
140
+ link.transition()
141
+ .duration(duration)
142
+ .attr("d", diagonal);
143
+
144
+ // Transition exiting nodes to the parent's new position.
145
+ link.exit().transition()
146
+ .duration(duration)
147
+ .attr("d", function(d) {
148
+ var o = {x: source.x, y: source.y};
149
+ return diagonal({source: o, target: o});
150
+ })
151
+ .remove();
152
+
153
+ // Stash the old positions for transition.
154
+ nodes.forEach(function(d) {
155
+ d.x0 = d.x;
156
+ d.y0 = d.y;
157
+ });
158
+ }
159
+
160
+ // Toggle children on click.
161
+ function click(d) {
162
+ if (d.children) {
163
+ d._children = d.children;
164
+ d.children = null;
165
+ } else {
166
+ d.children = d._children;
167
+ d._children = null;
168
+ }
169
+ update(d);
170
+ }
171
+
172
+ </script>