opal-d3 0.0.20170205
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/Gemfile +3 -0
- data/README.md +7 -0
- data/Rakefile +31 -0
- data/d3.js +16393 -0
- data/demo/Gemfile +4 -0
- data/demo/README.md +7 -0
- data/demo/app/data/elections_2016.rb +10 -0
- data/demo/app/data/harry_potter.rb +19 -0
- data/demo/app/data/iphones.rb +29 -0
- data/demo/app/data/london_population.rb +26 -0
- data/demo/app/data/man_vs_horse.rb +55 -0
- data/demo/app/data/mtg_modern_colors.rb +96 -0
- data/demo/app/data/mtg_modern_creatures.rb +116 -0
- data/demo/app/data/olympics_2016_medals.rb +100 -0
- data/demo/app/data/paradox.rb +60 -0
- data/demo/app/data/polish_pms.rb +28 -0
- data/demo/app/data/star_trek_voyager.rb +183 -0
- data/demo/app/data/weather_in_london.rb +381 -0
- data/demo/app/elections_2016.rb +19 -0
- data/demo/app/harry_potter.rb +35 -0
- data/demo/app/iphones.rb +47 -0
- data/demo/app/london_population.rb +46 -0
- data/demo/app/london_population_area.rb +42 -0
- data/demo/app/man_vs_horse.rb +53 -0
- data/demo/app/mtg_modern_colors.rb +49 -0
- data/demo/app/mtg_modern_creatures.rb +63 -0
- data/demo/app/olympics_2016_medals.rb +54 -0
- data/demo/app/paradox.rb +57 -0
- data/demo/app/polish_pms.rb +53 -0
- data/demo/app/star_trek_voyager.rb +39 -0
- data/demo/app/weather_in_london.rb +62 -0
- data/demo/assets/d3.js +16393 -0
- data/demo/assets/style.css +0 -0
- data/demo/config.ru +39 -0
- data/demo/views/index.erb +21 -0
- data/demo/views/visualization.erb +29 -0
- data/lib/opal/d3/arc.rb +21 -0
- data/lib/opal/d3/area.rb +49 -0
- data/lib/opal/d3/axis.rb +77 -0
- data/lib/opal/d3/band_scale.rb +29 -0
- data/lib/opal/d3/collections.rb +10 -0
- data/lib/opal/d3/color.rb +78 -0
- data/lib/opal/d3/continuous_scale.rb +64 -0
- data/lib/opal/d3/creator.rb +11 -0
- data/lib/opal/d3/curve.rb +74 -0
- data/lib/opal/d3/dsv.rb +103 -0
- data/lib/opal/d3/ease.rb +319 -0
- data/lib/opal/d3/format.rb +97 -0
- data/lib/opal/d3/histograms.rb +44 -0
- data/lib/opal/d3/interpolate.rb +125 -0
- data/lib/opal/d3/line.rb +29 -0
- data/lib/opal/d3/map.rb +52 -0
- data/lib/opal/d3/misc.rb +15 -0
- data/lib/opal/d3/native.rb +84 -0
- data/lib/opal/d3/nest.rb +100 -0
- data/lib/opal/d3/ordinal_scale.rb +56 -0
- data/lib/opal/d3/path.rb +22 -0
- data/lib/opal/d3/pie.rb +23 -0
- data/lib/opal/d3/point_scale.rb +26 -0
- data/lib/opal/d3/polygon.rb +16 -0
- data/lib/opal/d3/quadtree.rb +95 -0
- data/lib/opal/d3/quantile_scale.rb +21 -0
- data/lib/opal/d3/quantize_scale.rb +23 -0
- data/lib/opal/d3/radial_area.rb +49 -0
- data/lib/opal/d3/radial_line.rb +29 -0
- data/lib/opal/d3/random.rb +12 -0
- data/lib/opal/d3/search.rb +28 -0
- data/lib/opal/d3/selection.rb +149 -0
- data/lib/opal/d3/sequential_scale.rb +96 -0
- data/lib/opal/d3/set.rb +33 -0
- data/lib/opal/d3/stack.rb +11 -0
- data/lib/opal/d3/statistics.rb +81 -0
- data/lib/opal/d3/symbol.rb +70 -0
- data/lib/opal/d3/threshold_scale.rb +23 -0
- data/lib/opal/d3/time_format.rb +48 -0
- data/lib/opal/d3/time_interval.rb +81 -0
- data/lib/opal/d3/transformations.rb +13 -0
- data/lib/opal/d3/version.rb +5 -0
- data/lib/opal/d3.rb +62 -0
- data/lib/opal-d3.rb +9 -0
- data/opal-d3.gemspec +20 -0
- data/spec/arc_spec.rb +86 -0
- data/spec/area_spec.rb +102 -0
- data/spec/axis_spec.rb +174 -0
- data/spec/band_scale_spec.rb +73 -0
- data/spec/color_spec.rb +74 -0
- data/spec/continuous_scale_spec.rb +217 -0
- data/spec/coverage_spec.rb +23 -0
- data/spec/creator_spec.rb +15 -0
- data/spec/curve_spec.rb +214 -0
- data/spec/dsv_spec.rb +194 -0
- data/spec/ease_spec.rb +370 -0
- data/spec/format_spec.rb +87 -0
- data/spec/histograms_spec.rb +61 -0
- data/spec/html/d3.js +16393 -0
- data/spec/html/index.html.erb +12 -0
- data/spec/interpolate_spec.rb +152 -0
- data/spec/line_spec.rb +58 -0
- data/spec/map_spec.rb +80 -0
- data/spec/misc_spec.rb +19 -0
- data/spec/nest_spec.rb +89 -0
- data/spec/objects_spec.rb +22 -0
- data/spec/ordinal_scale_spec.rb +59 -0
- data/spec/path_spec.rb +65 -0
- data/spec/pie_spec.rb +114 -0
- data/spec/point_scale_spec.rb +58 -0
- data/spec/polygon_spec.rb +51 -0
- data/spec/quadtree_spec.rb +128 -0
- data/spec/quantile_scale_spec.rb +24 -0
- data/spec/quantize_scale_spec.rb +40 -0
- data/spec/radial_area_spec.rb +127 -0
- data/spec/radial_line_spec.rb +54 -0
- data/spec/random_spec.rb +34 -0
- data/spec/search_spec.rb +69 -0
- data/spec/selection_data_spec.rb +71 -0
- data/spec/selection_manipulation_spec.rb +179 -0
- data/spec/selection_spec.rb +214 -0
- data/spec/sequential_scale_spec.rb +90 -0
- data/spec/set_spec.rb +57 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/stack_spec.rb +23 -0
- data/spec/statistics_spec.rb +65 -0
- data/spec/symbol_spec.rb +121 -0
- data/spec/threshold_scale_spec.rb +28 -0
- data/spec/time_format_spec.rb +99 -0
- data/spec/time_interval_spec.rb +304 -0
- data/spec/transformations_spec.rb +51 -0
- metadata +258 -0
@@ -0,0 +1,149 @@
|
|
1
|
+
module D3
|
2
|
+
class Selection
|
3
|
+
include D3::Native
|
4
|
+
alias_native :size
|
5
|
+
alias_native :empty?, :empty
|
6
|
+
alias_native :node
|
7
|
+
alias_native :nodes
|
8
|
+
|
9
|
+
def inspect
|
10
|
+
`#@native.toString()`
|
11
|
+
end
|
12
|
+
|
13
|
+
attribute_d3_block :text
|
14
|
+
attribute_d3_block :html
|
15
|
+
|
16
|
+
def data(data=nil,key=nil,&block)
|
17
|
+
if block
|
18
|
+
self.class.new @native.JS.data(block)
|
19
|
+
elsif key != nil
|
20
|
+
self.class.new @native.JS.data(data,key)
|
21
|
+
elsif data != nil
|
22
|
+
self.class.new @native.JS.data(data)
|
23
|
+
else
|
24
|
+
@native.JS.data
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def append(name=`undefined`, &block)
|
29
|
+
raise if `name !== undefined` and block_given?
|
30
|
+
name = block if block_given?
|
31
|
+
D3::Selection.new @native.JS.append(name.to_n)
|
32
|
+
end
|
33
|
+
|
34
|
+
def insert(name=`undefined`, before=`undefined`, &block)
|
35
|
+
if `name === undefined`
|
36
|
+
raise unless block_given?
|
37
|
+
D3::Selection.new @native.JS.insert(block.to_n)
|
38
|
+
elsif `before === undefined`
|
39
|
+
if block_given?
|
40
|
+
D3::Selection.new @native.JS.insert(name.to_n, block.to_n)
|
41
|
+
else
|
42
|
+
D3::Selection.new @native.JS.insert(name.to_n)
|
43
|
+
end
|
44
|
+
else
|
45
|
+
raise if block_given?
|
46
|
+
D3::Selection.new @native.JS.insert(name.to_n, before.to_n)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
alias_native_new :remove
|
51
|
+
alias_native_new :select
|
52
|
+
alias_native_new :select_all, :selectAll
|
53
|
+
alias_native_new :enter
|
54
|
+
alias_native_new :exit
|
55
|
+
alias_native :call
|
56
|
+
alias_native_chainable :raise
|
57
|
+
alias_native_chainable :lower
|
58
|
+
|
59
|
+
def merge(other)
|
60
|
+
D3::Selection.new @native.JS.merge(other.to_n)
|
61
|
+
end
|
62
|
+
|
63
|
+
def classed(classes, yesno=`undefined`, &block)
|
64
|
+
if block_given?
|
65
|
+
@native.JS.classed(classes, block)
|
66
|
+
self
|
67
|
+
elsif `yesno !== undefined`
|
68
|
+
@native.JS.classed(classes, yesno)
|
69
|
+
self
|
70
|
+
else
|
71
|
+
@native.JS.classed(classes)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def filter(other=`undefined`,&block)
|
76
|
+
if block_given?
|
77
|
+
D3::Selection.new @native.JS.filter(block)
|
78
|
+
else
|
79
|
+
D3::Selection.new @native.JS.filter(other)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def each(other=`undefined`,&block)
|
84
|
+
if block_given?
|
85
|
+
@native.JS.each(block)
|
86
|
+
else
|
87
|
+
@native.JS.each(other)
|
88
|
+
end
|
89
|
+
self
|
90
|
+
end
|
91
|
+
|
92
|
+
def property(key, value=`undefined`)
|
93
|
+
if `value === undefined`
|
94
|
+
@native.JS.property(key)
|
95
|
+
else
|
96
|
+
@native.JS.property(key, value)
|
97
|
+
self
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# Usage:
|
102
|
+
# style("foo")
|
103
|
+
# style("foo"){ value }
|
104
|
+
# style("foo", value)
|
105
|
+
# style("foo", value, priority)
|
106
|
+
def style(name, value=`undefined`, priority=`undefined`, &block)
|
107
|
+
if block
|
108
|
+
raise if `name === undefined` or `priority !== undefined` or `value !== undefined`
|
109
|
+
Selection.new @native.JS.style(name, block)
|
110
|
+
elsif `value === undefined`
|
111
|
+
@native.JS.style(name)
|
112
|
+
else
|
113
|
+
value = `value === nil ? null : value`
|
114
|
+
Selection.new @native.JS.style(name, value, priority)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# nil means something specific (reset value),
|
119
|
+
# so we need another special value
|
120
|
+
def attr(name, value=`undefined`, &block)
|
121
|
+
if block
|
122
|
+
@native.JS.attr(name, block)
|
123
|
+
self
|
124
|
+
elsif `value == undefined`
|
125
|
+
@native.JS.attr(name)
|
126
|
+
elsif value == nil
|
127
|
+
@native.JS.attr(name, `null`)
|
128
|
+
self
|
129
|
+
else
|
130
|
+
@native.JS.attr(name, value)
|
131
|
+
self
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
class << self
|
137
|
+
def selection
|
138
|
+
D3::Selection.new(@d3.JS.selection)
|
139
|
+
end
|
140
|
+
|
141
|
+
def select(selector)
|
142
|
+
D3::Selection.new(@d3.JS.select(selector))
|
143
|
+
end
|
144
|
+
|
145
|
+
def select_all(selector)
|
146
|
+
D3::Selection.new(@d3.JS.selectAll(selector))
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
module D3
|
2
|
+
class SequentialScale
|
3
|
+
include D3::Native
|
4
|
+
|
5
|
+
def call(t)
|
6
|
+
@native.call(t)
|
7
|
+
end
|
8
|
+
|
9
|
+
attribute_d3 :domain
|
10
|
+
attribute_d3 :clamp
|
11
|
+
|
12
|
+
def copy
|
13
|
+
self.class.new @native.JS.copy
|
14
|
+
end
|
15
|
+
|
16
|
+
def interpolator(&block)
|
17
|
+
if block_given?
|
18
|
+
@native.JS.interpolator(block)
|
19
|
+
self
|
20
|
+
else
|
21
|
+
@native.JS.interpolator
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class << self
|
27
|
+
def scale_sequential(&block)
|
28
|
+
raise unless block_given?
|
29
|
+
SequentialScale.new @d3.JS.scaleSequential(block)
|
30
|
+
end
|
31
|
+
|
32
|
+
def interpolate_viridis(t=nil)
|
33
|
+
if t
|
34
|
+
@d3.JS.interpolateViridis(t)
|
35
|
+
else
|
36
|
+
`#@d3.interpolateViridis`
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def interpolate_inferno(t=nil)
|
41
|
+
if t
|
42
|
+
@d3.JS.interpolateInferno(t)
|
43
|
+
else
|
44
|
+
`#@d3.interpolateInferno`
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def interpolate_magma(t=nil)
|
49
|
+
if t
|
50
|
+
@d3.JS.interpolateMagma(t)
|
51
|
+
else
|
52
|
+
`#@d3.interpolateMagma`
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def interpolate_plasma(t=nil)
|
57
|
+
if t
|
58
|
+
@d3.JS.interpolatePlasma(t)
|
59
|
+
else
|
60
|
+
`#@d3.interpolatePlasma`
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def interpolate_warm(t=nil)
|
65
|
+
if t
|
66
|
+
@d3.JS.interpolateWarm(t)
|
67
|
+
else
|
68
|
+
`#@d3.interpolateWarm`
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def interpolate_cool(t=nil)
|
73
|
+
if t
|
74
|
+
@d3.JS.interpolateCool(t)
|
75
|
+
else
|
76
|
+
`#@d3.interpolateCool`
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def interpolate_rainbow(t=nil)
|
81
|
+
if t
|
82
|
+
@d3.JS.interpolateRainbow(t)
|
83
|
+
else
|
84
|
+
`#@d3.interpolateRainbow`
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def interpolate_cubehelix_default(t=nil)
|
89
|
+
if t
|
90
|
+
@d3.JS.interpolateCubehelixDefault(t)
|
91
|
+
else
|
92
|
+
`#@d3.interpolateCubehelixDefault`
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
data/lib/opal/d3/set.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module D3
|
2
|
+
class Set
|
3
|
+
include D3::Native
|
4
|
+
alias_native :empty?, :empty
|
5
|
+
alias_native :has?, :has
|
6
|
+
alias_native :size
|
7
|
+
alias_native :values
|
8
|
+
alias_native_chainable :add
|
9
|
+
alias_native_chainable :clear
|
10
|
+
alias_native_chainable :remove
|
11
|
+
|
12
|
+
def each(&block)
|
13
|
+
@native.JS.each(block)
|
14
|
+
self
|
15
|
+
end
|
16
|
+
|
17
|
+
def inspect
|
18
|
+
"#<D3::Set: {#{ values.join(", ") }}>"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class << self
|
23
|
+
def set(array=nil, &block)
|
24
|
+
if block_given?
|
25
|
+
D3::Set.new @d3.JS.set(array, proc{|x| yield(x)})
|
26
|
+
elsif array
|
27
|
+
D3::Set.new @d3.JS.set(array)
|
28
|
+
else
|
29
|
+
D3::Set.new @d3.JS.set()
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module D3
|
2
|
+
class << self
|
3
|
+
def min(data, &block)
|
4
|
+
if block
|
5
|
+
@d3.JS.min(data, proc{|x| y=yield(x); y.nil? ? `undefined` : y})
|
6
|
+
else
|
7
|
+
@d3.JS.min(data.compact)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def max(data, &block)
|
12
|
+
if block
|
13
|
+
@d3.JS.max(data, proc{|x| y=yield(x); y.nil? ? `undefined` : y})
|
14
|
+
else
|
15
|
+
@d3.JS.max(data.compact)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def sum(data, &block)
|
20
|
+
if block
|
21
|
+
@d3.JS.sum(data, proc{|x| y=yield(x); y.nil? ? `undefined` : y})
|
22
|
+
else
|
23
|
+
@d3.JS.sum(data.compact)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def mean(data, &block)
|
28
|
+
result = if block
|
29
|
+
@d3.JS.mean(data, proc{|x| y=yield(x); y.nil? ? `undefined` : y})
|
30
|
+
else
|
31
|
+
@d3.JS.mean(data.compact)
|
32
|
+
end
|
33
|
+
`result === undefined ? nil : result`
|
34
|
+
end
|
35
|
+
|
36
|
+
def median(data, &block)
|
37
|
+
result = if block
|
38
|
+
@d3.JS.median(data, proc{|x| y=yield(x); y.nil? ? `undefined` : y})
|
39
|
+
else
|
40
|
+
@d3.JS.median(data.compact)
|
41
|
+
end
|
42
|
+
`result === undefined ? nil : result`
|
43
|
+
end
|
44
|
+
|
45
|
+
def deviation(data, &block)
|
46
|
+
result = if block
|
47
|
+
@d3.JS.deviation(data, proc{|x| y=yield(x); y.nil? ? `undefined` : y})
|
48
|
+
else
|
49
|
+
@d3.JS.deviation(data.compact)
|
50
|
+
end
|
51
|
+
`result === undefined ? nil : result`
|
52
|
+
end
|
53
|
+
|
54
|
+
def variance(data, &block)
|
55
|
+
result = if block
|
56
|
+
@d3.JS.variance(data, proc{|x| y=yield(x); y.nil? ? `undefined` : y})
|
57
|
+
else
|
58
|
+
@d3.JS.variance(data.compact)
|
59
|
+
end
|
60
|
+
`result === undefined ? nil : result`
|
61
|
+
end
|
62
|
+
|
63
|
+
def quantile(data, p, &block)
|
64
|
+
result = if block
|
65
|
+
@d3.JS.quantile(data, p, proc{|x| y=yield(x); y.nil? ? `undefined` : y})
|
66
|
+
else
|
67
|
+
@d3.JS.quantile(data.compact, p)
|
68
|
+
end
|
69
|
+
`result === undefined ? nil : result`
|
70
|
+
end
|
71
|
+
|
72
|
+
def extent(data, &block)
|
73
|
+
(a,b) = if block
|
74
|
+
@d3.JS.extent(data, proc{|x| y=yield(x); y.nil? ? `undefined` : y})
|
75
|
+
else
|
76
|
+
@d3.JS.extent(data.compact)
|
77
|
+
end
|
78
|
+
[`a === undefined ? nil : a`, `b === undefined ? nil : b`]
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module D3
|
2
|
+
class SymbolGenerator
|
3
|
+
include D3::Native
|
4
|
+
|
5
|
+
def call(*args)
|
6
|
+
@native.call(*args)
|
7
|
+
end
|
8
|
+
|
9
|
+
attribute_d3_block :size
|
10
|
+
|
11
|
+
def type(new_value=`undefined`, &block)
|
12
|
+
if block_given?
|
13
|
+
@native.JS.type{|*args| yield(*args).to_n}
|
14
|
+
self
|
15
|
+
elsif `new_value === undefined`
|
16
|
+
D3::SymbolType.new @native.JS.type
|
17
|
+
else
|
18
|
+
@native.JS.type(new_value.to_n)
|
19
|
+
self
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def type=(new_value)
|
24
|
+
@native.type(new_value.to_n)
|
25
|
+
self
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class SymbolType
|
30
|
+
include D3::Native
|
31
|
+
end
|
32
|
+
|
33
|
+
class << self
|
34
|
+
def symbol
|
35
|
+
D3::SymbolGenerator.new @d3.JS.symbol
|
36
|
+
end
|
37
|
+
|
38
|
+
def symbols
|
39
|
+
`window.d3.symbols`.map{|st| D3::SymbolType.new(st)}
|
40
|
+
end
|
41
|
+
|
42
|
+
def symbol_circle
|
43
|
+
D3::SymbolType.new `window.d3.symbolCircle`
|
44
|
+
end
|
45
|
+
|
46
|
+
def symbol_cross
|
47
|
+
D3::SymbolType.new `window.d3.symbolCross`
|
48
|
+
end
|
49
|
+
|
50
|
+
def symbol_diamond
|
51
|
+
D3::SymbolType.new `window.d3.symbolDiamond`
|
52
|
+
end
|
53
|
+
|
54
|
+
def symbol_square
|
55
|
+
D3::SymbolType.new `window.d3.symbolSquare`
|
56
|
+
end
|
57
|
+
|
58
|
+
def symbol_star
|
59
|
+
D3::SymbolType.new `window.d3.symbolStar`
|
60
|
+
end
|
61
|
+
|
62
|
+
def symbol_triangle
|
63
|
+
D3::SymbolType.new `window.d3.symbolTriangle`
|
64
|
+
end
|
65
|
+
|
66
|
+
def symbol_wye
|
67
|
+
D3::SymbolType.new `window.d3.symbolWye`
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module D3
|
2
|
+
class ThresholdScale
|
3
|
+
include D3::Native
|
4
|
+
attribute_d3 :domain
|
5
|
+
attribute_d3 :range
|
6
|
+
alias_native_new :copy
|
7
|
+
|
8
|
+
def call(t)
|
9
|
+
@native.call(t)
|
10
|
+
end
|
11
|
+
|
12
|
+
def invert_extent(t)
|
13
|
+
a,b = @native.JS.invertExtent(t)
|
14
|
+
[`a === undefined ? nil : a`, `b === undefined ? nil : b`]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class << self
|
19
|
+
def scale_threshold
|
20
|
+
D3::ThresholdScale.new @d3.JS.scaleThreshold
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module D3
|
2
|
+
class TimeFormatLocale
|
3
|
+
include D3::Native
|
4
|
+
alias_native :format, :format
|
5
|
+
alias_native :parse, :parse
|
6
|
+
alias_native :utc_format, :utcFormat
|
7
|
+
alias_native :utc_parse, :utcParse
|
8
|
+
end
|
9
|
+
|
10
|
+
class << self
|
11
|
+
alias_d3 :time_format, :timeFormat
|
12
|
+
alias_d3 :time_parse, :timeParse
|
13
|
+
alias_d3 :utc_format, :utcFormat
|
14
|
+
alias_d3 :utc_parse, :utcParse
|
15
|
+
alias_d3 :iso_format, :isoFormat
|
16
|
+
alias_d3 :iso_parse, :isoParse
|
17
|
+
|
18
|
+
def time_format_locale(spec={})
|
19
|
+
D3::TimeFormatLocale.new @d3.JS.timeFormatLocale(
|
20
|
+
{
|
21
|
+
dateTime: spec.fetch(:date_time, "%x, %X"),
|
22
|
+
date: spec.fetch(:date, "%-m/%-d/%Y"),
|
23
|
+
time: spec.fetch(:time, "%-I:%M:%S %p"),
|
24
|
+
periods: spec.fetch(:periods, ["AM", "PM"]),
|
25
|
+
days: spec.fetch(:days, ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]),
|
26
|
+
shortDays: spec.fetch(:short_days, ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]),
|
27
|
+
months: spec.fetch(:months, ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]),
|
28
|
+
shortMonths: spec.fetch(:short_months, ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]),
|
29
|
+
}.to_n
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
def time_format_default_locale(spec={})
|
34
|
+
D3::TimeFormatLocale.new @d3.JS.timeFormatDefaultLocale(
|
35
|
+
{
|
36
|
+
dateTime: spec.fetch(:date_time, "%x, %X"),
|
37
|
+
date: spec.fetch(:date, "%-m/%-d/%Y"),
|
38
|
+
time: spec.fetch(:time, "%-I:%M:%S %p"),
|
39
|
+
periods: spec.fetch(:periods, ["AM", "PM"]),
|
40
|
+
days: spec.fetch(:days, ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]),
|
41
|
+
shortDays: spec.fetch(:short_days, ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]),
|
42
|
+
months: spec.fetch(:months, ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]),
|
43
|
+
shortMonths: spec.fetch(:short_months, ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]),
|
44
|
+
}.to_n
|
45
|
+
)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module D3
|
2
|
+
class TimeInterval
|
3
|
+
include D3::Native
|
4
|
+
|
5
|
+
alias_native :round
|
6
|
+
alias_native :floor
|
7
|
+
alias_native :ceil
|
8
|
+
alias_native :offset
|
9
|
+
alias_native :range
|
10
|
+
alias_native :count
|
11
|
+
alias_native_new :every
|
12
|
+
|
13
|
+
def filter(&block)
|
14
|
+
D3::TimeInterval.new(@native.JS.filter(block))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class << self
|
19
|
+
def time_year; D3::TimeInterval.new(`window.d3.timeYear`); end
|
20
|
+
def utc_year; D3::TimeInterval.new(`window.d3.utcYear`); end
|
21
|
+
def time_month; D3::TimeInterval.new(`window.d3.timeMonth`); end
|
22
|
+
def utc_month; D3::TimeInterval.new(`window.d3.utcMonth`); end
|
23
|
+
def time_week; D3::TimeInterval.new(`window.d3.timeWeek`); end
|
24
|
+
def utc_week; D3::TimeInterval.new(`window.d3.utcWeek`); end
|
25
|
+
def time_monday; D3::TimeInterval.new(`window.d3.timeMonday`); end
|
26
|
+
def utc_monday; D3::TimeInterval.new(`window.d3.utcMonday`); end
|
27
|
+
def time_tuesday; D3::TimeInterval.new(`window.d3.timeTuesday`); end
|
28
|
+
def utc_tuesday; D3::TimeInterval.new(`window.d3.utcTuesday`); end
|
29
|
+
def time_wednesday; D3::TimeInterval.new(`window.d3.timeWednesday`); end
|
30
|
+
def utc_wednesday; D3::TimeInterval.new(`window.d3.utcWednesday`); end
|
31
|
+
def time_thursday; D3::TimeInterval.new(`window.d3.timeThursday`); end
|
32
|
+
def utc_thursday; D3::TimeInterval.new(`window.d3.utcThursday`); end
|
33
|
+
def time_friday; D3::TimeInterval.new(`window.d3.timeFriday`); end
|
34
|
+
def utc_friday; D3::TimeInterval.new(`window.d3.utcFriday`); end
|
35
|
+
def time_saturday; D3::TimeInterval.new(`window.d3.timeSaturday`); end
|
36
|
+
def utc_saturday; D3::TimeInterval.new(`window.d3.utcSaturday`); end
|
37
|
+
def time_sunday; D3::TimeInterval.new(`window.d3.timeSunday`); end
|
38
|
+
def utc_sunday; D3::TimeInterval.new(`window.d3.utcSunday`); end
|
39
|
+
def time_day; D3::TimeInterval.new(`window.d3.timeDay`); end
|
40
|
+
def utc_day; D3::TimeInterval.new(`window.d3.utcDay`); end
|
41
|
+
def time_hour; D3::TimeInterval.new(`window.d3.timeHour`); end
|
42
|
+
def utc_hour; D3::TimeInterval.new(`window.d3.utcHour`); end
|
43
|
+
def time_minute; D3::TimeInterval.new(`window.d3.timeMinute`); end
|
44
|
+
def utc_minute; D3::TimeInterval.new(`window.d3.utcMinute`); end
|
45
|
+
def time_second; D3::TimeInterval.new(`window.d3.timeSecond`); end
|
46
|
+
def utc_second; D3::TimeInterval.new(`window.d3.utcSecond`); end
|
47
|
+
def time_millisecond; D3::TimeInterval.new(`window.d3.timeMillisecond`); end
|
48
|
+
def utc_millisecond; D3::TimeInterval.new(`window.d3.utcMillisecond`); end
|
49
|
+
|
50
|
+
alias_d3 :time_years, :timeYears
|
51
|
+
alias_d3 :utc_years, :utcYears
|
52
|
+
alias_d3 :time_milliseconds, :timeMilliseconds
|
53
|
+
alias_d3 :utc_milliseconds, :utcMilliseconds
|
54
|
+
alias_d3 :time_seconds, :timeSeconds
|
55
|
+
alias_d3 :utc_seconds, :utcSeconds
|
56
|
+
alias_d3 :time_minutes, :timeMinutes
|
57
|
+
alias_d3 :utc_minutes, :utcMinutes
|
58
|
+
alias_d3 :time_hours, :timeHours
|
59
|
+
alias_d3 :utc_hours, :utcHours
|
60
|
+
alias_d3 :time_days, :timeDays
|
61
|
+
alias_d3 :utc_days, :utcDays
|
62
|
+
alias_d3 :time_weeks, :timeWeeks
|
63
|
+
alias_d3 :utc_weeks, :utcWeeks
|
64
|
+
alias_d3 :time_sundays, :timeSundays
|
65
|
+
alias_d3 :utc_sundays, :utcSundays
|
66
|
+
alias_d3 :time_mondays, :timeMondays
|
67
|
+
alias_d3 :utc_mondays, :utcMondays
|
68
|
+
alias_d3 :time_tuesdays, :timeTuesdays
|
69
|
+
alias_d3 :utc_tuesdays, :utcTuesdays
|
70
|
+
alias_d3 :time_wednesdays, :timeWednesdays
|
71
|
+
alias_d3 :utc_wednesdays, :utcWednesdays
|
72
|
+
alias_d3 :time_thursdays, :timeThursdays
|
73
|
+
alias_d3 :utc_thursdays, :utcThursdays
|
74
|
+
alias_d3 :time_fridays, :timeFridays
|
75
|
+
alias_d3 :utc_fridays, :utcFridays
|
76
|
+
alias_d3 :time_saturdays, :timeSaturdays
|
77
|
+
alias_d3 :utc_saturdays, :utcSaturdays
|
78
|
+
alias_d3 :time_months, :timeMonths
|
79
|
+
alias_d3 :utc_months, :utcMonths
|
80
|
+
end
|
81
|
+
end
|
data/lib/opal/d3.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require "opal"
|
2
|
+
require "opal-parser"
|
3
|
+
|
4
|
+
class Module
|
5
|
+
def alias_d3(ruby_name, js_name=ruby_name)
|
6
|
+
eval <<-EOF
|
7
|
+
def #{ruby_name}(*args)
|
8
|
+
@d3.JS.#{js_name}(*args)
|
9
|
+
end
|
10
|
+
EOF
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module D3
|
15
|
+
@d3 = `window.d3`
|
16
|
+
class << self
|
17
|
+
end
|
18
|
+
end
|
19
|
+
# Metaclass:
|
20
|
+
require_relative "d3/native"
|
21
|
+
|
22
|
+
# Everything else:
|
23
|
+
require_relative "d3/arc"
|
24
|
+
require_relative "d3/area"
|
25
|
+
require_relative "d3/axis"
|
26
|
+
require_relative "d3/band_scale"
|
27
|
+
require_relative "d3/collections"
|
28
|
+
require_relative "d3/color"
|
29
|
+
require_relative "d3/continuous_scale"
|
30
|
+
require_relative "d3/creator"
|
31
|
+
require_relative "d3/curve"
|
32
|
+
require_relative "d3/dsv"
|
33
|
+
require_relative "d3/ease"
|
34
|
+
require_relative "d3/format"
|
35
|
+
require_relative "d3/histograms"
|
36
|
+
require_relative "d3/interpolate"
|
37
|
+
require_relative "d3/line"
|
38
|
+
require_relative "d3/map"
|
39
|
+
require_relative "d3/misc"
|
40
|
+
require_relative "d3/nest"
|
41
|
+
require_relative "d3/ordinal_scale"
|
42
|
+
require_relative "d3/path"
|
43
|
+
require_relative "d3/pie"
|
44
|
+
require_relative "d3/point_scale"
|
45
|
+
require_relative "d3/polygon"
|
46
|
+
require_relative "d3/quadtree"
|
47
|
+
require_relative "d3/quantile_scale"
|
48
|
+
require_relative "d3/quantize_scale"
|
49
|
+
require_relative "d3/radial_area"
|
50
|
+
require_relative "d3/radial_line"
|
51
|
+
require_relative "d3/random"
|
52
|
+
require_relative "d3/search"
|
53
|
+
require_relative "d3/selection"
|
54
|
+
require_relative "d3/sequential_scale"
|
55
|
+
require_relative "d3/set"
|
56
|
+
require_relative "d3/stack"
|
57
|
+
require_relative "d3/statistics"
|
58
|
+
require_relative "d3/symbol"
|
59
|
+
require_relative "d3/threshold_scale"
|
60
|
+
require_relative "d3/time_format"
|
61
|
+
require_relative "d3/time_interval"
|
62
|
+
require_relative "d3/transformations"
|