tree.rb 0.3.8 → 0.3.9
Sign up to get free protection for your applications and to get access to all the features.
- data/examples/d3js_layout_partition/data.js +787 -0
- data/examples/d3js_layout_partition/index.html +119 -0
- data/examples/d3js_layout_partition/run.sh +2 -0
- data/examples/{d3_treemap → d3js_layout_partition}/style.css +0 -0
- data/examples/d3js_layout_treemap/data.js +787 -0
- data/examples/d3js_layout_treemap/index.html +179 -0
- data/examples/d3js_layout_treemap/run.sh +2 -0
- data/examples/d3js_layout_treemap/style.css +89 -0
- data/examples/{directory_walker/directory_without_subdirectory.rb → ruby_examples/find_directory_without_subdirectory.rb} +2 -2
- data/examples/{directory_walker → ruby_examples}/find_files.rb +2 -2
- data/examples/{directory_walker → ruby_examples}/print_files.rb +2 -2
- data/lib/tree_rb/cli/cli_tree.rb +25 -11
- data/lib/tree_rb/erb_render.rb +21 -0
- data/lib/tree_rb/version.rb +1 -1
- data/lib/tree_rb_cli.rb +2 -0
- metadata +14 -14
- data/examples/d3_treemap/d3.js +0 -4149
- data/examples/d3_treemap/d3.layout.js +0 -1890
- data/examples/d3_treemap/d3_tree_rb_output.json +0 -380
- data/examples/d3_treemap/d3_treemap.html +0 -177
- data/examples/d3_treemap/prova.html +0 -84
- data/examples/prova/flare.js +0 -381
- data/examples/prova/prova.html +0 -99
- data/examples/prova1/prova1.html +0 -22
@@ -0,0 +1,179 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
5
|
+
|
6
|
+
<link type="text/css" rel="stylesheet" href="style.css">
|
7
|
+
|
8
|
+
<script src="http://d3js.org/d3.v2.js"></script>
|
9
|
+
<script src="data.js"></script>
|
10
|
+
|
11
|
+
<style type="text/css">
|
12
|
+
|
13
|
+
.chart {
|
14
|
+
display: block;
|
15
|
+
margin: auto;
|
16
|
+
margin-top: 40px;
|
17
|
+
}
|
18
|
+
|
19
|
+
text {
|
20
|
+
font-size: 11px;
|
21
|
+
}
|
22
|
+
|
23
|
+
rect {
|
24
|
+
fill: none;
|
25
|
+
}
|
26
|
+
|
27
|
+
</style>
|
28
|
+
</head>
|
29
|
+
|
30
|
+
<body>
|
31
|
+
<div id="body">
|
32
|
+
|
33
|
+
|
34
|
+
<div id="footer">
|
35
|
+
d3.layout.treemap
|
36
|
+
<div class="hint">click or option-click to descend or ascend</div>
|
37
|
+
<div><select>
|
38
|
+
<option value="size">Size</option>
|
39
|
+
<option value="count">Count</option>
|
40
|
+
</select></div>
|
41
|
+
</div>
|
42
|
+
|
43
|
+
|
44
|
+
</div>
|
45
|
+
|
46
|
+
<script type="text/javascript">
|
47
|
+
|
48
|
+
|
49
|
+
var w = 1280 - 80,
|
50
|
+
h = 800 - 180,
|
51
|
+
x = d3.scale.linear().range([0, w]),
|
52
|
+
y = d3.scale.linear().range([0, h]),
|
53
|
+
color = d3.scale.category20c(),
|
54
|
+
root,
|
55
|
+
node;
|
56
|
+
|
57
|
+
var treemap = d3.layout.treemap()
|
58
|
+
.round(false)
|
59
|
+
.size([w, h])
|
60
|
+
.sticky(true)
|
61
|
+
.value(function (d) {
|
62
|
+
return d.size;
|
63
|
+
});
|
64
|
+
|
65
|
+
var svg = d3
|
66
|
+
.select("#body")
|
67
|
+
.append("div")
|
68
|
+
.attr("class", "chart")
|
69
|
+
.style("width", w + "px")
|
70
|
+
.style("height", h + "px")
|
71
|
+
.append("svg:svg")
|
72
|
+
.attr("width", w)
|
73
|
+
.attr("height", h)
|
74
|
+
.append("svg:g")
|
75
|
+
.attr("transform", "translate(.5,.5)");
|
76
|
+
|
77
|
+
function size(d) {
|
78
|
+
return d.size;
|
79
|
+
}
|
80
|
+
|
81
|
+
function count(d) {
|
82
|
+
return 1;
|
83
|
+
}
|
84
|
+
|
85
|
+
function zoom(d) {
|
86
|
+
var kx = w / d.dx, ky = h / d.dy;
|
87
|
+
x.domain([d.x, d.x + d.dx]);
|
88
|
+
y.domain([d.y, d.y + d.dy]);
|
89
|
+
|
90
|
+
var t = svg.selectAll("g.cell").transition()
|
91
|
+
.duration(d3.event.altKey ? 7500 : 750)
|
92
|
+
.attr("transform", function (d) {
|
93
|
+
return "translate(" + x(d.x) + "," + y(d.y) + ")";
|
94
|
+
});
|
95
|
+
|
96
|
+
t.select("rect")
|
97
|
+
.attr("width", function (d) {
|
98
|
+
return kx * d.dx - 1;
|
99
|
+
})
|
100
|
+
.attr("height", function (d) {
|
101
|
+
return ky * d.dy - 1;
|
102
|
+
})
|
103
|
+
|
104
|
+
t.select("text")
|
105
|
+
.attr("x", function (d) {
|
106
|
+
return kx * d.dx / 2;
|
107
|
+
})
|
108
|
+
.attr("y", function (d) {
|
109
|
+
return ky * d.dy / 2;
|
110
|
+
})
|
111
|
+
.style("opacity", function (d) {
|
112
|
+
return kx * d.dx > d.w ? 1 : 0;
|
113
|
+
});
|
114
|
+
|
115
|
+
node = d;
|
116
|
+
d3.event.stopPropagation();
|
117
|
+
}
|
118
|
+
|
119
|
+
|
120
|
+
node = root = data;
|
121
|
+
|
122
|
+
var nodes = treemap.nodes(root)
|
123
|
+
.filter(function (d) {
|
124
|
+
return !d.children;
|
125
|
+
});
|
126
|
+
|
127
|
+
var cell = svg.selectAll("g")
|
128
|
+
.data(nodes)
|
129
|
+
.enter().append("svg:g")
|
130
|
+
.attr("class", "cell")
|
131
|
+
.attr("transform", function (d) {
|
132
|
+
return "translate(" + d.x + "," + d.y + ")";
|
133
|
+
})
|
134
|
+
.on("click", function (d) {
|
135
|
+
return zoom(node == d.parent ? root : d.parent);
|
136
|
+
});
|
137
|
+
|
138
|
+
cell.append("svg:rect")
|
139
|
+
.attr("width", function (d) {
|
140
|
+
return d.dx - 1;
|
141
|
+
})
|
142
|
+
.attr("height", function (d) {
|
143
|
+
return d.dy - 1;
|
144
|
+
})
|
145
|
+
.style("fill", function (d) {
|
146
|
+
return color(d.parent.name);
|
147
|
+
});
|
148
|
+
|
149
|
+
cell.append("svg:text")
|
150
|
+
.attr("x", function (d) {
|
151
|
+
return d.dx / 2;
|
152
|
+
})
|
153
|
+
.attr("y", function (d) {
|
154
|
+
return d.dy / 2;
|
155
|
+
})
|
156
|
+
.attr("dy", ".35em")
|
157
|
+
.attr("text-anchor", "middle")
|
158
|
+
.text(function (d) {
|
159
|
+
return d.name;
|
160
|
+
})
|
161
|
+
.style("opacity", function (d) {
|
162
|
+
d.w = this.getComputedTextLength();
|
163
|
+
return d.dx > d.w ? 1 : 0;
|
164
|
+
});
|
165
|
+
|
166
|
+
d3.select(window).on("click", function () {
|
167
|
+
zoom(root);
|
168
|
+
});
|
169
|
+
|
170
|
+
d3.select("select").on("change", function () {
|
171
|
+
d3_treemap.value(this.value == "size" ? size : count).nodes(root);
|
172
|
+
zoom(node);
|
173
|
+
});
|
174
|
+
|
175
|
+
|
176
|
+
</script>
|
177
|
+
|
178
|
+
</body>
|
179
|
+
</html>
|
@@ -0,0 +1,89 @@
|
|
1
|
+
body {
|
2
|
+
background: url(texture-noise.png);
|
3
|
+
overflow: hidden;
|
4
|
+
margin: 0;
|
5
|
+
font-size: 14px;
|
6
|
+
font-family: "Helvetica Neue", Helvetica;
|
7
|
+
}
|
8
|
+
|
9
|
+
#chart, #header, #footer {
|
10
|
+
position: absolute;
|
11
|
+
top: 0;
|
12
|
+
}
|
13
|
+
|
14
|
+
#header, #footer {
|
15
|
+
z-index: 1;
|
16
|
+
display: block;
|
17
|
+
font-size: 36px;
|
18
|
+
font-weight: 300;
|
19
|
+
text-shadow: 0 1px 0 #fff;
|
20
|
+
}
|
21
|
+
|
22
|
+
#header.inverted, #footer.inverted {
|
23
|
+
color: #fff;
|
24
|
+
text-shadow: 0 1px 4px #000;
|
25
|
+
}
|
26
|
+
|
27
|
+
#header {
|
28
|
+
top: 80px;
|
29
|
+
left: 140px;
|
30
|
+
width: 1000px;
|
31
|
+
}
|
32
|
+
|
33
|
+
#footer {
|
34
|
+
top: 680px;
|
35
|
+
right: 140px;
|
36
|
+
text-align: right;
|
37
|
+
}
|
38
|
+
|
39
|
+
rect {
|
40
|
+
fill: none;
|
41
|
+
pointer-events: all;
|
42
|
+
}
|
43
|
+
|
44
|
+
pre {
|
45
|
+
font-size: 18px;
|
46
|
+
}
|
47
|
+
|
48
|
+
line {
|
49
|
+
stroke: #000;
|
50
|
+
stroke-width: 1.5px;
|
51
|
+
}
|
52
|
+
|
53
|
+
.string, .regexp {
|
54
|
+
color: #f39;
|
55
|
+
}
|
56
|
+
|
57
|
+
.keyword {
|
58
|
+
color: #00c;
|
59
|
+
}
|
60
|
+
|
61
|
+
.comment {
|
62
|
+
color: #777;
|
63
|
+
font-style: oblique;
|
64
|
+
}
|
65
|
+
|
66
|
+
.number {
|
67
|
+
color: #369;
|
68
|
+
}
|
69
|
+
|
70
|
+
.class, .special {
|
71
|
+
color: #1181B8;
|
72
|
+
}
|
73
|
+
|
74
|
+
a:link, a:visited {
|
75
|
+
color: #000;
|
76
|
+
text-decoration: none;
|
77
|
+
}
|
78
|
+
|
79
|
+
a:hover {
|
80
|
+
color: #666;
|
81
|
+
}
|
82
|
+
|
83
|
+
.hint {
|
84
|
+
position: absolute;
|
85
|
+
right: 0;
|
86
|
+
width: 1280px;
|
87
|
+
font-size: 12px;
|
88
|
+
color: #999;
|
89
|
+
}
|
@@ -3,7 +3,7 @@ require 'ostruct'
|
|
3
3
|
|
4
4
|
cwd = File.expand_path( File.join( File.dirname(__FILE__), "..", "..", "lib" ) )
|
5
5
|
$:.unshift(cwd) unless $:.include?(cwd)
|
6
|
-
require '
|
6
|
+
require 'tree_rb'
|
7
7
|
|
8
8
|
#
|
9
9
|
# Find directories without subdirectories
|
@@ -31,7 +31,7 @@ class DirWithoutSubDir < TreeRb::BasicTreeNodeVisitor
|
|
31
31
|
|
32
32
|
end
|
33
33
|
|
34
|
-
dtw = TreeRb::DirTreeWalker.new( ".." )
|
34
|
+
dtw = TreeRb::DirTreeWalker.new( File.join("..", ".." ))
|
35
35
|
dtw.ignore /^\./
|
36
36
|
dtw.visit_file=false
|
37
37
|
dtw.run( DirWithoutSubDir.new )
|
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
cwd = File.expand_path( File.join( File.dirname(__FILE__), "..", "..", "lib" ) )
|
4
4
|
$:.unshift(cwd) unless $:.include?(cwd)
|
5
|
-
require '
|
5
|
+
require 'tree_rb'
|
6
6
|
include TreeRb
|
7
7
|
|
8
8
|
class MyVisitor < BasicTreeNodeVisitor
|
9
9
|
def visit_leaf( pathname )
|
10
|
-
puts pathname
|
10
|
+
puts "found: #{pathname}"
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -1,12 +1,12 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
cwd = File.expand_path( File.join( File.dirname(__FILE__), "..", "..", "lib" ) )
|
3
3
|
$:.unshift(cwd) unless $:.include?(cwd)
|
4
|
-
require '
|
4
|
+
require 'tree_rb'
|
5
5
|
include TreeRb
|
6
6
|
|
7
7
|
dtw = DirTreeWalker.new( :ignore => ".git" )
|
8
8
|
dtw.run ".." do
|
9
9
|
on_leaf do |pathname|
|
10
|
-
puts pathname
|
10
|
+
puts "- #{pathname}"
|
11
11
|
end
|
12
12
|
end
|
data/lib/tree_rb/cli/cli_tree.rb
CHANGED
@@ -23,12 +23,12 @@ module TreeRb
|
|
23
23
|
parser.separator ""
|
24
24
|
parser.separator "Generic options: "
|
25
25
|
|
26
|
-
parser.
|
26
|
+
parser.on("--help", "Show this message") do
|
27
27
|
puts parser
|
28
28
|
options[:exit] = 1
|
29
29
|
end
|
30
30
|
|
31
|
-
parser.
|
31
|
+
parser.on("--version", "Show the version") do
|
32
32
|
puts "tree.rb version #{TreeRb::VERSION}"
|
33
33
|
options[:exit] = 1
|
34
34
|
end
|
@@ -74,11 +74,10 @@ module TreeRb
|
|
74
74
|
options[:show_indentation] = false
|
75
75
|
end
|
76
76
|
|
77
|
-
algos = %w[build-dir print-dir json
|
78
|
-
algo_aliases = { "b" => "build-dir", "v" => "print-dir", "j" => "json", "y" => "yaml", "s" => "sqlite" }
|
79
|
-
|
80
|
-
|
81
|
-
parser.on("--format ALGO", algos, algo_aliases, "select an algo", " (#{algo_list})") do |algo|
|
77
|
+
algos = %w[build-dir print-dir json d3js html_partition yaml sqlite]
|
78
|
+
# algo_aliases = { "b" => "build-dir", "v" => "print-dir", "j" => "json", "y" => "yaml", "s" => "sqlite" }
|
79
|
+
# algo_list = (algo_aliases.keys + algos).join(',')
|
80
|
+
parser.on("--format ALGO", algos, "select an algo", " (#{algos})") do |algo|
|
82
81
|
options[:algo] = algo
|
83
82
|
end
|
84
83
|
|
@@ -129,7 +128,7 @@ module TreeRb
|
|
129
128
|
parser.on("-h",
|
130
129
|
"Print the size of each file but in a more human readable way,",
|
131
130
|
" e.g. appending a size letter for kilobytes (K), megabytes (M),",
|
132
|
-
" gigabytes (G),
|
131
|
+
" gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).") do
|
133
132
|
options[:show_size_human] = true
|
134
133
|
end
|
135
134
|
|
@@ -151,7 +150,7 @@ module TreeRb
|
|
151
150
|
end
|
152
151
|
|
153
152
|
options[:show_report] = true
|
154
|
-
parser.on("--
|
153
|
+
parser.on("--no-report", "Omits printing of the file and directory report at the end of the tree listing.") do
|
155
154
|
options[:show_report] = false
|
156
155
|
end
|
157
156
|
|
@@ -265,11 +264,26 @@ module TreeRb
|
|
265
264
|
$stderr.puts "#{File.basename(__FILE__)}:#{__LINE__} #{e.to_s}"
|
266
265
|
end
|
267
266
|
|
268
|
-
when '
|
267
|
+
when 'd3js'
|
269
268
|
visitor = DirectoryToHash2Visitor.new(dirname)
|
270
269
|
root = dtw.run(visitor).root
|
271
270
|
begin
|
272
|
-
|
271
|
+
str_json = JSON.pretty_generate(root)
|
272
|
+
str_json = "var data = " + str_json
|
273
|
+
output.puts str_json
|
274
|
+
rescue JSON::NestingError => e
|
275
|
+
$stderr.puts "#{File.basename(__FILE__)}:#{__LINE__} #{e.to_s}"
|
276
|
+
end
|
277
|
+
|
278
|
+
when 'html_partition'
|
279
|
+
visitor = DirectoryToHash2Visitor.new(dirname)
|
280
|
+
root = dtw.run(visitor).root
|
281
|
+
begin
|
282
|
+
str_json = JSON.pretty_generate(root)
|
283
|
+
str_json = "var data = " + str_json
|
284
|
+
|
285
|
+
render = ErbRender.new("d3js_layout_partition.erb", str_json)
|
286
|
+
output.puts render.render
|
273
287
|
rescue JSON::NestingError => e
|
274
288
|
$stderr.puts "#{File.basename(__FILE__)}:#{__LINE__} #{e.to_s}"
|
275
289
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
module TreeRb
|
3
|
+
|
4
|
+
class ErbRender
|
5
|
+
include ERB::Util
|
6
|
+
attr_accessor :json_str
|
7
|
+
|
8
|
+
def initialize(template_name, json_str)
|
9
|
+
@template_name = template_name
|
10
|
+
@json_str = json_str
|
11
|
+
end
|
12
|
+
|
13
|
+
def render()
|
14
|
+
template_file_name = File.join(File.dirname(__FILE__), "templates", @template_name)
|
15
|
+
template = File.read(template_file_name)
|
16
|
+
ERB.new(template).result(binding)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end # end module
|
data/lib/tree_rb/version.rb
CHANGED
data/lib/tree_rb_cli.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tree.rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -169,6 +169,7 @@ files:
|
|
169
169
|
- lib/tree_rb/tree_node_visitor.rb
|
170
170
|
- lib/tree_rb/tree_node.rb
|
171
171
|
- lib/tree_rb/basic_tree_node_visitor.rb
|
172
|
+
- lib/tree_rb/erb_render.rb
|
172
173
|
- lib/tree_rb/version.rb
|
173
174
|
- lib/treevisitor.rb
|
174
175
|
- lib/tree_rb.rb
|
@@ -176,23 +177,22 @@ files:
|
|
176
177
|
- tasks/tree_rb.rake
|
177
178
|
- tasks/rspec.rake
|
178
179
|
- tasks/yard.rake
|
179
|
-
- examples/
|
180
|
-
- examples/
|
181
|
-
- examples/
|
182
|
-
- examples/
|
183
|
-
- examples/
|
184
|
-
- examples/
|
185
|
-
- examples/
|
186
|
-
- examples/d3_treemap/d3_treemap.html
|
187
|
-
- examples/d3_treemap/prova.html
|
188
|
-
- examples/d3_treemap/d3_tree_rb_output.json
|
189
|
-
- examples/d3_treemap/d3.layout.js
|
190
|
-
- examples/prova1/prova1.html
|
180
|
+
- examples/d3js_layout_partition/data.js
|
181
|
+
- examples/d3js_layout_partition/style.css
|
182
|
+
- examples/d3js_layout_partition/index.html
|
183
|
+
- examples/d3js_layout_partition/run.sh
|
184
|
+
- examples/ruby_examples/print_files.rb
|
185
|
+
- examples/ruby_examples/find_directory_without_subdirectory.rb
|
186
|
+
- examples/ruby_examples/find_files.rb
|
191
187
|
- examples/protovis/treevisitor.png
|
192
188
|
- examples/protovis/protovis-r3.2.js
|
193
189
|
- examples/protovis/index.html
|
194
190
|
- examples/protovis/treevisitor.js
|
195
191
|
- examples/protovis/directory_to_json_visitor.rb
|
192
|
+
- examples/d3js_layout_treemap/data.js
|
193
|
+
- examples/d3js_layout_treemap/style.css
|
194
|
+
- examples/d3js_layout_treemap/index.html
|
195
|
+
- examples/d3js_layout_treemap/run.sh
|
196
196
|
- spec/spec_helper.rb
|
197
197
|
- spec/tree_rb/cli/cli_tree_sqlite_spec.rb
|
198
198
|
- spec/tree_rb/cli/cli_tree_digest_spec.rb
|