dyi 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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"
|