dyi 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +5 -0
- data/README +8 -3
- data/lib/dyi/canvas.rb +14 -30
- data/lib/dyi/chart/array_reader.rb +2 -2
- data/lib/dyi/chart/base.rb +2 -2
- data/lib/dyi/chart/csv_reader.rb +2 -2
- data/lib/dyi/chart/pie_chart.rb +0 -1
- data/lib/dyi/coordinate.rb +1 -1
- data/lib/dyi/drawing/pen.rb +3 -3
- data/lib/dyi/drawing/pen_3d.rb +2 -2
- data/lib/dyi/element.rb +9 -5
- data/lib/dyi/event.rb +15 -4
- data/lib/dyi/formatter/eps_formatter.rb +1 -1
- data/lib/dyi/formatter/svg_formatter.rb +13 -2
- data/lib/dyi/length.rb +1 -1
- data/lib/dyi/script/ecmascript.rb +8 -5
- data/lib/dyi/shape/base.rb +1 -1
- metadata +4 -4
data/CHANGES
CHANGED
data/README
CHANGED
@@ -23,6 +23,11 @@ along with DYI. If not, see <http://www.gnu.org/licenses/>.
|
|
23
23
|
|
24
24
|
== Support
|
25
25
|
|
26
|
-
We
|
27
|
-
|
28
|
-
|
26
|
+
We support DYI using SourceForge.net. URL of DYI Project is
|
27
|
+
"http://sourceforge.net/projects/dyi/". This page has a tracker
|
28
|
+
and forums.
|
29
|
+
|
30
|
+
We are also preparing the Japanese mailing list. More infomation
|
31
|
+
about the mailing list is indicated to
|
32
|
+
<http://open-dyi.org/contents.html#community> in Japanese,
|
33
|
+
including how to join it.
|
data/lib/dyi/canvas.rb
CHANGED
@@ -27,7 +27,7 @@ module DYI #:nodoc:
|
|
27
27
|
attr_reader *IMPLEMENT_ATTRIBUTES
|
28
28
|
attr_reader :child_elements
|
29
29
|
# @since 1.0.0
|
30
|
-
attr_reader :event_listeners, :stylesheets
|
30
|
+
attr_reader :event_listeners, :stylesheets, :scripts
|
31
31
|
|
32
32
|
def initialize(width, height,
|
33
33
|
real_width = nil, real_height = nil,
|
@@ -84,11 +84,6 @@ module DYI #:nodoc:
|
|
84
84
|
self
|
85
85
|
end
|
86
86
|
|
87
|
-
# @since 1.0.0
|
88
|
-
def event_listeners
|
89
|
-
@event_listeners ||= {}
|
90
|
-
end
|
91
|
-
|
92
87
|
def write_as(formatter, io=$>)
|
93
88
|
formatter.write_canvas(self, io)
|
94
89
|
end
|
@@ -133,14 +128,21 @@ module DYI #:nodoc:
|
|
133
128
|
@receive_event
|
134
129
|
end
|
135
130
|
|
136
|
-
# @
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
131
|
+
# @overload add_script(script)
|
132
|
+
# Registers a script object with this canvas
|
133
|
+
# @param [Script::SimpleScript] script a script that is registered
|
134
|
+
# @overload add_script(script_body, content_type='application/ecmascript')
|
135
|
+
# Registers a script. Create a script object and Registers it with this
|
136
|
+
# canvas.
|
137
|
+
# @param [String] script_body a string that is script body
|
138
|
+
# @param [String] content_type a content-type of the script
|
141
139
|
# @since 1.0.0
|
142
140
|
def add_script(script_body, content_type = 'application/ecmascript')
|
143
|
-
|
141
|
+
if script_body.respond_to?(:include_external_file?)
|
142
|
+
@scripts << script_body unless @scripts.include?(script_body)
|
143
|
+
else
|
144
|
+
@scripts << Script::SimpleScript.new(script_body, content_type)
|
145
|
+
end
|
144
146
|
end
|
145
147
|
|
146
148
|
# @since 1.0.0
|
@@ -169,24 +171,6 @@ module DYI #:nodoc:
|
|
169
171
|
end
|
170
172
|
end
|
171
173
|
|
172
|
-
# @since 1.0.0
|
173
|
-
def add_event_listener(event_name, event_listener)
|
174
|
-
if event_listeners.key?(event_name)
|
175
|
-
unless event_listeners[event_name].include?(event_listener)
|
176
|
-
event_listeners[event_name] << event_listener
|
177
|
-
end
|
178
|
-
else
|
179
|
-
event_listeners[event_name] = [event_listener]
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
# @since 1.0.0
|
184
|
-
def remove_event_listener(event_name, event_listener)
|
185
|
-
if event_listeners.key?(event_name)
|
186
|
-
event_listeners[event_name].delete(event_listener)
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
174
|
private
|
191
175
|
|
192
176
|
def get_formatter(format=nil) #:nodoc:
|
@@ -32,7 +32,7 @@ module DYI #:nodoc:
|
|
32
32
|
# @return [Array] array of a struct
|
33
33
|
# @since 1.0.0
|
34
34
|
def records
|
35
|
-
@records.
|
35
|
+
@records.clone
|
36
36
|
end
|
37
37
|
|
38
38
|
# @return [Integer] number of the records
|
@@ -70,7 +70,7 @@ module DYI #:nodoc:
|
|
70
70
|
|
71
71
|
# @since 1.0.0
|
72
72
|
def has_field?(field_name)
|
73
|
-
@schema.members.include?(field_name.to_s)
|
73
|
+
@schema.members.include?(RUBY_VERSION >= '1.9' ? field_name.to_sym : field_name.to_s)
|
74
74
|
end
|
75
75
|
|
76
76
|
# @return [void]
|
data/lib/dyi/chart/base.rb
CHANGED
@@ -265,8 +265,8 @@ module DYI #:nodoc:
|
|
265
265
|
end
|
266
266
|
|
267
267
|
def chart_color(index) #:nodoc:
|
268
|
-
if data.has_field?(:color)
|
269
|
-
color
|
268
|
+
if data.has_field?(:color)
|
269
|
+
color = Color.new_or_nil(data.records[index].color)
|
270
270
|
end
|
271
271
|
if color.nil? && respond_to?(:chart_colors) && chart_colors
|
272
272
|
color = chart_colors[index]
|
data/lib/dyi/chart/csv_reader.rb
CHANGED
@@ -29,7 +29,7 @@ module DYI #:nodoc:
|
|
29
29
|
|
30
30
|
class CsvReader < ArrayReader
|
31
31
|
def read(path, options={})
|
32
|
-
options = options.
|
32
|
+
options = options.clone
|
33
33
|
@date_format = options.delete(:date_format)
|
34
34
|
@datetime_format = options.delete(:datetime_format)
|
35
35
|
nkf_options =
|
@@ -56,7 +56,7 @@ module DYI #:nodoc:
|
|
56
56
|
if type.is_a?(Symbol) || type.is_a?(String)
|
57
57
|
case type.to_sym
|
58
58
|
when :string
|
59
|
-
value
|
59
|
+
value
|
60
60
|
when :number, :decimal
|
61
61
|
value ? BigDecimal.new(value) : nil
|
62
62
|
when :float
|
data/lib/dyi/chart/pie_chart.rb
CHANGED
@@ -268,7 +268,6 @@ module DYI #:nodoc:
|
|
268
268
|
format_string(format, record, toatal)
|
269
269
|
end
|
270
270
|
end
|
271
|
-
require 'pp'
|
272
271
|
max_lengths = legend_labels.inject(Array.new(formats.size, 0)) do |maxs, labels|
|
273
272
|
(0...formats.size).each do |i|
|
274
273
|
maxs[i] = labels[i].bytesize if maxs[i] < labels[i].bytesize
|
data/lib/dyi/coordinate.rb
CHANGED
data/lib/dyi/drawing/pen.rb
CHANGED
@@ -45,7 +45,7 @@ module DYI #:nodoc:
|
|
45
45
|
Painting::IMPLEMENT_ATTRIBUTES.each do |painting_attr|
|
46
46
|
define_method(painting_attr) {| | @painting.__send__(painting_attr)}
|
47
47
|
define_method("#{painting_attr}=".to_sym) {|value|
|
48
|
-
@painting = @painting.
|
48
|
+
@painting = @painting.clone
|
49
49
|
@painting.__send__("#{painting_attr}=".to_sym, value)
|
50
50
|
}
|
51
51
|
end
|
@@ -158,7 +158,7 @@ module DYI #:nodoc:
|
|
158
158
|
#:startdoc:
|
159
159
|
|
160
160
|
def initialize(options={})
|
161
|
-
options = options.
|
161
|
+
options = options.clone
|
162
162
|
ALIAS_ATTRIBUTES.each do |key, value|
|
163
163
|
options[value] = options.delete(key) if options.key?(key) && !options.key?(value)
|
164
164
|
end
|
@@ -209,7 +209,7 @@ module DYI #:nodoc:
|
|
209
209
|
#:startdoc:
|
210
210
|
|
211
211
|
def initialize(options={})
|
212
|
-
options = options.
|
212
|
+
options = options.clone
|
213
213
|
ALIAS_ATTRIBUTES.each do |key, value|
|
214
214
|
options[value] = options.delete(key) if options.key?(key) && !options.key?(value)
|
215
215
|
end
|
data/lib/dyi/drawing/pen_3d.rb
CHANGED
@@ -143,10 +143,10 @@ module DYI #:nodoc:
|
|
143
143
|
radius_y = ry
|
144
144
|
|
145
145
|
shape = Shape::ShapeGroup.draw_on(canvas)
|
146
|
-
top_painting = @painting.
|
146
|
+
top_painting = @painting.clone
|
147
147
|
top_painting.fill = top_color
|
148
148
|
Shape::Ellipse.create_on_center_radius(Coordinate.new(left_top_point) + [width.quo(2), 0], radius_x, radius_y, merge_option(:painting => top_painting)).draw_on(shape)
|
149
|
-
body_painting = @painting.
|
149
|
+
body_painting = @painting.clone
|
150
150
|
body_painting.fill = body_gradient(canvas)
|
151
151
|
Shape::Path.draw(left_top_point, merge_option(:painting => body_painting)) {|path|
|
152
152
|
path.rarc_to([width, 0], radius_x, radius_y, 0, false, false)
|
data/lib/dyi/element.rb
CHANGED
@@ -87,6 +87,7 @@ module DYI #:nodoc:
|
|
87
87
|
CLASS_REGEXP = /\A[A-Z_a-z][\-0-9A-Z_a-z]*\z/
|
88
88
|
|
89
89
|
def css_class=(css_class)
|
90
|
+
return @css_class = nil if css_class.nil?
|
90
91
|
classes = css_class.to_s.split(/\s+/)
|
91
92
|
classes.each do |c|
|
92
93
|
if c.to_s !~ CLASS_REGEXP
|
@@ -97,7 +98,7 @@ module DYI #:nodoc:
|
|
97
98
|
end
|
98
99
|
|
99
100
|
def css_classes
|
100
|
-
css_class.split(/\s+/)
|
101
|
+
css_class.to_s.split(/\s+/)
|
101
102
|
end
|
102
103
|
|
103
104
|
def add_css_class(css_class)
|
@@ -105,7 +106,7 @@ module DYI #:nodoc:
|
|
105
106
|
raise ArgumentError, "`#{css_class}' is a illegal class-name"
|
106
107
|
end
|
107
108
|
unless css_classes.include?(css_class.to_s)
|
108
|
-
@css_class
|
109
|
+
@css_class = css_classes.push(scc_class).join(' ')
|
109
110
|
css_class
|
110
111
|
end
|
111
112
|
nil
|
@@ -114,7 +115,7 @@ module DYI #:nodoc:
|
|
114
115
|
def remove_css_class(css_class)
|
115
116
|
classes = css_classes
|
116
117
|
if classes.delete(css_class.to_s)
|
117
|
-
@css_class = classes.join(' ')
|
118
|
+
@css_class = classes.empty? ? nil : classes.join(' ')
|
118
119
|
css_class
|
119
120
|
else
|
120
121
|
nil
|
@@ -142,21 +143,24 @@ module DYI #:nodoc:
|
|
142
143
|
|
143
144
|
# Associates the element with a event listener
|
144
145
|
# @param [Symbol] event_name a event name
|
145
|
-
# @param [Script::SimpleScript
|
146
|
+
# @param [Script::SimpleScript] event_listener a event listener
|
146
147
|
# @return [void]
|
147
148
|
def add_event_listener(event_name, event_listener)
|
149
|
+
event_listener.related_to(DYI::Event.new(event_name, self))
|
148
150
|
if event_listeners.key?(event_name)
|
149
151
|
unless event_listeners[event_name].include?(event_listener)
|
150
152
|
event_listeners[event_name] << event_listener
|
153
|
+
canvas.add_script(event_listener)
|
151
154
|
end
|
152
155
|
else
|
153
156
|
event_listeners[event_name] = [event_listener]
|
157
|
+
canvas.add_script(event_listener)
|
154
158
|
end
|
155
159
|
end
|
156
160
|
|
157
161
|
# Removes asociation with given event listener
|
158
162
|
# @param [Symbol] event_name a event name
|
159
|
-
# @param [Script::SimpleScript
|
163
|
+
# @param [Script::SimpleScript] event_listener a event listener
|
160
164
|
# @return [void]
|
161
165
|
def remove_event_listener(event_name, event_listener)
|
162
166
|
if event_listeners.key?(event_name)
|
data/lib/dyi/event.rb
CHANGED
@@ -43,9 +43,6 @@ module DYI
|
|
43
43
|
# @return [GraphicalElement] an element to which the event applied
|
44
44
|
attr_reader :target
|
45
45
|
|
46
|
-
# @return [Array] a list of event listener
|
47
|
-
attr_reader :listeners
|
48
|
-
|
49
46
|
# @param [Symbol] event_name event name, one of followings: focusin,
|
50
47
|
# focusout, click, mousedown, mouseup, mouseover,
|
51
48
|
# mousemove, mouseout, load
|
@@ -57,7 +54,6 @@ module DYI
|
|
57
54
|
raise ArgumentError, "`#{event_name}' is unknown event"
|
58
55
|
end
|
59
56
|
@event_name = event_name
|
60
|
-
@listeners = []
|
61
57
|
(@target = target).set_event(self)
|
62
58
|
end
|
63
59
|
|
@@ -79,6 +75,21 @@ module DYI
|
|
79
75
|
event_listener.unrelated_to(self)
|
80
76
|
end
|
81
77
|
|
78
|
+
# @since 1.0.1
|
79
|
+
def ==(other)
|
80
|
+
event_name == other.event_name && target == other.target
|
81
|
+
end
|
82
|
+
|
83
|
+
# @since 1.0.1
|
84
|
+
def eql?(other)
|
85
|
+
self == other
|
86
|
+
end
|
87
|
+
|
88
|
+
# @since 1.0.1
|
89
|
+
def hash
|
90
|
+
event_name.hash ^ target.hash
|
91
|
+
end
|
92
|
+
|
82
93
|
class << self
|
83
94
|
|
84
95
|
# Creates a new focus-in event.
|
@@ -384,7 +384,7 @@ module DYI #:nodoc:
|
|
384
384
|
def clip_path(io, shape) #:nodoc:
|
385
385
|
if shape.respond_to?(:clipping) && shape.clipping
|
386
386
|
shape.clipping.each_shapes do |shape, rule|
|
387
|
-
s = shape.
|
387
|
+
s = shape.clone
|
388
388
|
s.painting.fill = nil
|
389
389
|
s.painting.stroke = nil
|
390
390
|
s.write_as(self, io) {
|
@@ -67,7 +67,7 @@ module DYI #:nodoc:
|
|
67
67
|
unless listeners.empty?
|
68
68
|
methods = listeners.map do |listener|
|
69
69
|
if listener.name
|
70
|
-
"#{listener.name}(
|
70
|
+
"#{listener.name}(evt)"
|
71
71
|
end
|
72
72
|
end
|
73
73
|
attrs["on#{event_name}"] = methods.compact.join(';')
|
@@ -405,6 +405,17 @@ module DYI #:nodoc:
|
|
405
405
|
|
406
406
|
# @since 1.0.0
|
407
407
|
def write_node(shape, io, attrs, tag_name, &create_child_node)
|
408
|
+
shape.event_listeners.each do |event_name, listeners|
|
409
|
+
unless listeners.empty?
|
410
|
+
methods = listeners.inject([]) do |array, listener|
|
411
|
+
if listener.name
|
412
|
+
array << "#{listener.name}(evt)"
|
413
|
+
end
|
414
|
+
array
|
415
|
+
end
|
416
|
+
attrs["on#{event_name}"] = methods.join(';') unless methods.empty?
|
417
|
+
end
|
418
|
+
end
|
408
419
|
if shape.anchor_href
|
409
420
|
link_attrs = {:'xlink:href' => shape.anchor_href}
|
410
421
|
link_attrs[:target] = shape.anchor_target if shape.anchor_target
|
@@ -535,7 +546,7 @@ module DYI #:nodoc:
|
|
535
546
|
def common_attributes(shape) #:nodoc:
|
536
547
|
attributes = {}
|
537
548
|
create_style(shape, attributes)
|
538
|
-
attributes[:class] = shape.css_class
|
549
|
+
attributes[:class] = shape.css_class if shape.css_class
|
539
550
|
transform = create_transform(shape)
|
540
551
|
attributes[:transform] = transform if transform
|
541
552
|
attributes[:'clip-path'] = "url(##{shape.clipping.id})" if shape.clipping
|
data/lib/dyi/length.rb
CHANGED
@@ -392,7 +392,7 @@ module DYI #:nodoc:
|
|
392
392
|
# +U+:: (unit placeholder) Placeholder '+U+' is replaced as a unit. If
|
393
393
|
# the unit is user unit, '+U+' is replece as empty string.
|
394
394
|
def default_format=(fromat)
|
395
|
-
@@default_format = fromat.
|
395
|
+
@@default_format = fromat.clone
|
396
396
|
end
|
397
397
|
end
|
398
398
|
end
|
@@ -28,7 +28,8 @@
|
|
28
28
|
|
29
29
|
module DYI
|
30
30
|
module Script
|
31
|
-
# Module for using ECMAScript.
|
31
|
+
# Module for using ECMAScript. The script generated by this module comfirms
|
32
|
+
# to ECMAScript 5.1 (Ecma International Standard ECMA-262).
|
32
33
|
module EcmaScript
|
33
34
|
|
34
35
|
# This Module includes helper methods for generating a client-script.
|
@@ -227,7 +228,9 @@ module DYI
|
|
227
228
|
# @param [Event] event an event that is related to
|
228
229
|
# @return [void]
|
229
230
|
def related_to(event)
|
230
|
-
@events
|
231
|
+
unless @events.include?(event)
|
232
|
+
@events << event
|
233
|
+
end
|
231
234
|
end
|
232
235
|
|
233
236
|
# Removes the relation to an event.
|
@@ -243,13 +246,13 @@ module DYI
|
|
243
246
|
super
|
244
247
|
else
|
245
248
|
parts = []
|
246
|
-
parts << "
|
249
|
+
parts << "addEventListener(\"load\", function(evt) {\n"
|
247
250
|
@events.each do |event|
|
248
251
|
if event.event_name == :load
|
249
252
|
parts << @body
|
250
253
|
elsif
|
251
254
|
if event.target.root_element?
|
252
|
-
parts << ' document.
|
255
|
+
parts << ' document.documentElement.addEventListener("'
|
253
256
|
else
|
254
257
|
parts << ' document.getElementById("'
|
255
258
|
parts << event.target.id
|
@@ -263,7 +266,7 @@ module DYI
|
|
263
266
|
parts << " }, false);\n"
|
264
267
|
end
|
265
268
|
end
|
266
|
-
parts << "},
|
269
|
+
parts << "}, false);\n"
|
267
270
|
parts.join
|
268
271
|
end
|
269
272
|
end
|
data/lib/dyi/shape/base.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dyi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 1
|
10
|
+
version: 1.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Yuo
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-09-
|
18
|
+
date: 2011-09-28 00:00:00 Z
|
19
19
|
dependencies: []
|
20
20
|
|
21
21
|
description: " DYI is a 2D graphics library, very rich and expressive.\n DYI have been optimized for SVG format, but it is also possible\n to output other format; for example, EPS.\n"
|