dyi 0.0.2 → 1.0.0
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 +13 -0
- data/examples/animation.rb +28 -0
- data/examples/class_diagram.rb +1 -1
- data/examples/css.rb +34 -0
- data/examples/line_and_bar.rb +1 -2
- data/examples/line_chart.rb +5 -6
- data/examples/logo.rb +1 -1
- data/examples/pie_chart.rb +11 -4
- data/examples/simple_shapes.rb +1 -1
- data/lib/dyi.rb +8 -2
- data/lib/dyi/animation.rb +259 -0
- data/lib/dyi/canvas.rb +202 -0
- data/lib/dyi/chart.rb +2 -0
- data/lib/dyi/chart/array_reader.rb +112 -63
- data/lib/dyi/chart/axis_util.rb +298 -0
- data/lib/dyi/chart/base.rb +188 -466
- data/lib/dyi/chart/csv_reader.rb +0 -4
- data/lib/dyi/chart/legend.rb +82 -0
- data/lib/dyi/chart/line_chart.rb +31 -23
- data/lib/dyi/chart/pie_chart.rb +237 -30
- data/lib/dyi/color.rb +1 -1
- data/lib/dyi/drawing.rb +8 -1
- data/lib/dyi/drawing/clipping.rb +14 -1
- data/lib/dyi/drawing/pen.rb +12 -2
- data/lib/dyi/element.rb +167 -0
- data/lib/dyi/event.rb +148 -0
- data/lib/dyi/formatter/base.rb +43 -3
- data/lib/dyi/formatter/eps_formatter.rb +2 -2
- data/lib/dyi/formatter/svg_formatter.rb +430 -74
- data/lib/dyi/painting.rb +6 -1
- data/lib/dyi/script.rb +29 -0
- data/lib/dyi/script/ecmascript.rb +273 -0
- data/lib/dyi/script/simple_script.rb +94 -0
- data/lib/dyi/shape.rb +5 -1331
- data/lib/dyi/shape/base.rb +612 -0
- data/lib/dyi/shape/path.rb +902 -0
- data/lib/dyi/stylesheet.rb +86 -0
- data/lib/ironruby.rb +11 -11
- metadata +17 -4
- data/lib/dyi/drawing/canvas.rb +0 -100
data/lib/dyi/color.rb
CHANGED
@@ -23,7 +23,7 @@ module DYI #:nodoc:
|
|
23
23
|
|
24
24
|
class Color
|
25
25
|
@@named_colors = {'aliceblue'=>[240,248,255],'antiquewhite'=>[250,235,215],'aqua'=>[0,255,255],'aquamarine'=>[127,255,212],'azure'=>[240,255,255],'beige'=>[245,245,220],'bisque'=>[255,228,196],'black'=>[0,0,0],'blanchedalmond'=>[255,235,205],'blue'=>[0,0,255],'blueviolet'=>[138,43,226],'brown'=>[165,42,42],'burlywood'=>[222,184,135],'cadetblue'=>[95,158,160],'chartreuse'=>[127,255,0],'chocolate'=>[210,105,30],'coral'=>[255,127,80],'cornflowerblue'=>[100,149,237],'cornsilk'=>[255,248,220],'crimson'=>[220,20,60],'cyan'=>[0,255,255],'darkblue'=>[0,0,139],'darkcyan'=>[0,139,139],'darkgoldenrod'=>[184,134,11],'darkgray'=>[169,169,169],'darkgreen'=>[0,100,0],'darkgrey'=>[169,169,169],'darkkhaki'=>[189,183,107],'darkmagenta'=>[139,0,139],'darkolivegreen'=>[85,107,47],'darkorange'=>[255,140,0],'darkorchid'=>[153,50,204],'darkred'=>[139,0,0],'darksalmon'=>[233,150,122],'darkseagreen'=>[143,188,143],'darkslateblue'=>[72,61,139],'darkslategray'=>[47,79,79],'darkslategrey'=>[47,79,79],'darkturquoise'=>[0,206,209],'darkviolet'=>[148,0,211],'deeppink'=>[255,20,147],'deepskyblue'=>[0,191,255],'dimgray'=>[105,105,105],'dimgrey'=>[105,105,105],'dodgerblue'=>[30,144,255],'firebrick'=>[178,34,34],'floralwhite'=>[255,250,240],'forestgreen'=>[34,139,34],'fuchsia'=>[255,0,255],'gainsboro'=>[220,220,220],'ghostwhite'=>[248,248,255],'gold'=>[255,215,0],'goldenrod'=>[218,165,32],'gray'=>[128,128,128],'grey'=>[128,128,128],'green'=>[0,128,0],'greenyellow'=>[173,255,47],'honeydew'=>[240,255,240],'hotpink'=>[255,105,180],'indianred'=>[205,92,92],'indigo'=>[75,0,130],'ivory'=>[255,255,240],'khaki'=>[240,230,140],'lavender'=>[230,230,250],'lavenderblush'=>[255,240,245],'lawngreen'=>[124,252,0],'lemonchiffon'=>[255,250,205],'lightblue'=>[173,216,230],'lightcoral'=>[240,128,128],'lightcyan'=>[224,255,255],'lightgoldenrodyellow'=>[250,250,210],'lightgray'=>[211,211,211],'lightgreen'=>[144,238,144],'lightgrey'=>[211,211,211],'lightpink'=>[255,182,193],'lightsalmon'=>[255,160,122],'lightseagreen'=>[32,178,170],'lightskyblue'=>[135,206,250],'lightslategray'=>[119,136,153],'lightslategrey'=>[119,136,153],'lightsteelblue'=>[176,196,222],'lightyellow'=>[255,255,224],'lime'=>[0,255,0],'limegreen'=>[50,205,50],'linen'=>[250,240,230],'magenta'=>[255,0,255],'maroon'=>[128,0,0],'mediumaquamarine'=>[102,205,170],'mediumblue'=>[0,0,205],'mediumorchid'=>[186,85,211],'mediumpurple'=>[147,112,219],'mediumseagreen'=>[60,179,113],'mediumslateblue'=>[123,104,238],'mediumspringgreen'=>[0,250,154],'mediumturquoise'=>[72,209,204],'mediumvioletred'=>[199,21,133],'midnightblue'=>[25,25,112],'mintcream'=>[245,255,250],'mistyrose'=>[255,228,225],'moccasin'=>[255,228,181],'navajowhite'=>[255,222,173],'navy'=>[0,0,128],'oldlace'=>[253,245,230],'olive'=>[128,128,0],'olivedrab'=>[107,142,35],'orange'=>[255,165,0],'orangered'=>[255,69,0],'orchid'=>[218,112,214],'palegoldenrod'=>[238,232,170],'palegreen'=>[152,251,152],'paleturquoise'=>[175,238,238],'palevioletred'=>[219,112,147],'papayawhip'=>[255,239,213],'peachpuff'=>[255,218,185],'peru'=>[205,133,63],'pink'=>[255,192,203],'plum'=>[221,160,221],'powderblue'=>[176,224,230],'purple'=>[128,0,128],'red'=>[255,0,0],'rosybrown'=>[188,143,143],'royalblue'=>[65,105,225],'saddlebrown'=>[139,69,19],'salmon'=>[250,128,114],'sandybrown'=>[244,164,96],'seagreen'=>[46,139,87],'seashell'=>[255,245,238],'sienna'=>[160,82,45],'silver'=>[192,192,192],'skyblue'=>[135,206,235],'slateblue'=>[106,90,205],'slategray'=>[112,128,144],'slategrey'=>[112,128,144],'snow'=>[255,250,250],'springgreen'=>[0,255,127],'steelblue'=>[70,130,180],'tan'=>[210,180,140],'teal'=>[0,128,128],'thistle'=>[216,191,216],'tomato'=>[255,99,71],'turquoise'=>[64,224,208],'violet'=>[238,130,238],'wheat'=>[245,222,179],'white'=>[255,255,255],'whitesmoke'=>[245,245,245],'yellow'=>[255,255,0],'yellowgreen'=>[154,205,50]}
|
26
|
-
@@default_format = ['
|
26
|
+
@@default_format = ['#%02X%02X%02X', false]
|
27
27
|
attr_reader :name
|
28
28
|
|
29
29
|
# :call-seq:
|
data/lib/dyi/drawing.rb
CHANGED
@@ -21,7 +21,6 @@
|
|
21
21
|
|
22
22
|
%w(
|
23
23
|
|
24
|
-
canvas
|
25
24
|
pen
|
26
25
|
pen_3d
|
27
26
|
clipping
|
@@ -30,3 +29,11 @@ color_effect
|
|
30
29
|
).each do |file_name|
|
31
30
|
require File.join(File.dirname(__FILE__), 'drawing', file_name)
|
32
31
|
end
|
32
|
+
|
33
|
+
module DYI
|
34
|
+
module Drawing
|
35
|
+
# DYI::Drawing::Canvas is depricated; use DYI::Canvas
|
36
|
+
# @deprecated
|
37
|
+
Canvas = DYI::Canvas
|
38
|
+
end
|
39
|
+
end
|
data/lib/dyi/drawing/clipping.rb
CHANGED
@@ -22,15 +22,28 @@
|
|
22
22
|
module DYI #:nodoc:
|
23
23
|
module Drawing #:nodoc:
|
24
24
|
|
25
|
-
class Clipping
|
25
|
+
class Clipping < Element
|
26
26
|
RULES = ['nonzero', 'evenodd']
|
27
27
|
attr_reader :rule, :shapes
|
28
|
+
attr_reader :canvas
|
28
29
|
|
29
30
|
def initialize(*shapes)
|
30
31
|
@shapes = shapes
|
31
32
|
@rules = Array.new(shapes.size)
|
32
33
|
end
|
33
34
|
|
35
|
+
def child_elements
|
36
|
+
@shapes
|
37
|
+
end
|
38
|
+
|
39
|
+
def set_canvas(canvas)
|
40
|
+
if @canvas.nil?
|
41
|
+
@canvas = canvas
|
42
|
+
elsif @canvas != canvas
|
43
|
+
raise Arguments, "the clipping is registered to another canvas"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
34
47
|
def add_shape(shape, rule=nil)
|
35
48
|
raise ArgumentError, "\"#{rule}\" is invalid rule" if rule && !RULES.include?(rule)
|
36
49
|
unless @shapes.include?(shape)
|
data/lib/dyi/drawing/pen.rb
CHANGED
@@ -104,6 +104,16 @@ module DYI #:nodoc:
|
|
104
104
|
Shape::Ellipse.create_on_center_radius(center_point, radius_x, radius_y, merge_option(options)).draw_on(canvas)
|
105
105
|
end
|
106
106
|
|
107
|
+
# @since 1.0.0
|
108
|
+
def draw_image(canvas, left_top_point, width, height, file_path, options={})
|
109
|
+
Shape::Image.new(left_top_point, width, height, file_path, merge_option(options)).draw_on(canvas)
|
110
|
+
end
|
111
|
+
|
112
|
+
# @since 1.0.0
|
113
|
+
def import_image(canvas, left_top_point, width, height, image_uri, options={})
|
114
|
+
Shape::ImageReference.new(left_top_point, width, height, image_uri, merge_option(options)).draw_on(canvas)
|
115
|
+
end
|
116
|
+
|
107
117
|
def draw_sector(canvas, center_point, radius_x, radius_y, start_angle, center_angle, options={})
|
108
118
|
raise ArgumentError, "center_angle is out of range: #{center_angle}" if center_angle.abs > 360
|
109
119
|
center_point = Coordinate.new(center_point)
|
@@ -142,7 +152,7 @@ module DYI #:nodoc:
|
|
142
152
|
#:stopdoc:
|
143
153
|
ALIAS_ATTRIBUTES =
|
144
154
|
Painting::IMPLEMENT_ATTRIBUTES.inject({}) do |hash, key|
|
145
|
-
hash[$'.empty? ? :color : $'.to_sym] = key if key.to_s =~ /^(stroke_|stroke$)/
|
155
|
+
hash[$'.empty? ? :color : $'.to_sym] = key if key.to_s =~ /^(stroke_|stroke$)/ && key != :stroke_opacity
|
146
156
|
hash
|
147
157
|
end
|
148
158
|
#:startdoc:
|
@@ -193,7 +203,7 @@ module DYI #:nodoc:
|
|
193
203
|
#:stopdoc:
|
194
204
|
ALIAS_ATTRIBUTES =
|
195
205
|
Painting::IMPLEMENT_ATTRIBUTES.inject({}) do |hash, key|
|
196
|
-
hash[$'.empty? ? :color : $'.to_sym] = key if key.to_s =~ /^(fill_|fill$)/
|
206
|
+
hash[$'.empty? ? :color : $'.to_sym] = key if key.to_s =~ /^(fill_|fill$)/ && key != :fill_opacity
|
197
207
|
hash
|
198
208
|
end
|
199
209
|
#:startdoc:
|
data/lib/dyi/element.rb
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
# -*- encoding: UTF-8 -*-
|
2
|
+
|
3
|
+
# Copyright (c) 2009-2011 Sound-F Co., Ltd. All rights reserved.
|
4
|
+
#
|
5
|
+
# Author:: Mamoru Yuo
|
6
|
+
#
|
7
|
+
# This file is part of DYI.
|
8
|
+
#
|
9
|
+
# DYI is free software: you can redistribute it and/or modify it
|
10
|
+
# under the terms of the GNU General Public License as published by
|
11
|
+
# the Free Software Foundation, either version 3 of the License, or
|
12
|
+
# (at your option) any later version.
|
13
|
+
#
|
14
|
+
# DYI is distributed in the hope that it will be useful,
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
# GNU General Public License for more details.
|
18
|
+
#
|
19
|
+
# You should have received a copy of the GNU General Public License
|
20
|
+
# along with DYI. If not, see <http://www.gnu.org/licenses/>.
|
21
|
+
#
|
22
|
+
# == Overview
|
23
|
+
#
|
24
|
+
# This file provides the DYI::Element class, which is abstract base class of
|
25
|
+
# DYI::Canvas and DYI::Shape::Base.
|
26
|
+
#
|
27
|
+
# @since 1.0.0
|
28
|
+
|
29
|
+
module DYI #:nodoc:
|
30
|
+
|
31
|
+
class Element
|
32
|
+
extend AttributeCreator
|
33
|
+
ID_REGEXP = /\A[:A-Z_a-z][\-\.0-9:A-Z_a-z]*\z/
|
34
|
+
|
35
|
+
# Returns id for the element. If the element has no id yet, makes id and
|
36
|
+
# returns it.
|
37
|
+
# @return [String] id for the element
|
38
|
+
def id
|
39
|
+
@id ||= canvas && canvas.publish_shape_id
|
40
|
+
end
|
41
|
+
|
42
|
+
alias publish_id id
|
43
|
+
|
44
|
+
# Returns id of the element. If the element has no id yet, returns nil.
|
45
|
+
# @return [String] id for the element if it has id, nil if not
|
46
|
+
def inner_id
|
47
|
+
@id
|
48
|
+
end
|
49
|
+
|
50
|
+
# Sets id for the element.
|
51
|
+
# @param [String] value id for the element
|
52
|
+
# @return [String] id that is given
|
53
|
+
# @raise [ArgumentError] value is empty or illegal format
|
54
|
+
def id=(value)
|
55
|
+
# TODO: veryfy that the id is unique.
|
56
|
+
raise ArgumentError, "`#{value}' is empty" if value.to_s.size == 0
|
57
|
+
raise ArgumentError, "`#{value}' is a illegal id" if value.to_s !~ ID_REGEXP
|
58
|
+
@id = value.to_s
|
59
|
+
end
|
60
|
+
|
61
|
+
# Returns the canvas where the shape is drawn
|
62
|
+
# @return [Canvas] the canvas where the shape is drawn
|
63
|
+
def canvas
|
64
|
+
current_node = self
|
65
|
+
loop do
|
66
|
+
return current_node if current_node.nil? || current_node.root_element?
|
67
|
+
current_node = current_node.parent
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def child_elements
|
72
|
+
[]
|
73
|
+
end
|
74
|
+
|
75
|
+
def include_external_file?
|
76
|
+
false
|
77
|
+
end
|
78
|
+
|
79
|
+
# @return [Boolean] whether the element has a URI reference
|
80
|
+
def has_uri_reference?
|
81
|
+
false
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
class GraphicalElement < Element
|
86
|
+
attr_reader :css_class
|
87
|
+
CLASS_REGEXP = /\A[A-Z_a-z][\-0-9A-Z_a-z]*\z/
|
88
|
+
|
89
|
+
def css_class=(css_class)
|
90
|
+
classes = css_class.to_s.split(/\s+/)
|
91
|
+
classes.each do |c|
|
92
|
+
if c.to_s !~ CLASS_REGEXP
|
93
|
+
raise ArgumentError, "`#{c}' is a illegal class-name"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
@css_class = classes.join(' ')
|
97
|
+
end
|
98
|
+
|
99
|
+
def css_classes
|
100
|
+
css_class.split(/\s+/)
|
101
|
+
end
|
102
|
+
|
103
|
+
def add_css_class(css_class)
|
104
|
+
if css_class.to_s !~ CLASS_REGEXP
|
105
|
+
raise ArgumentError, "`#{css_class}' is a illegal class-name"
|
106
|
+
end
|
107
|
+
unless css_classes.include?(css_class.to_s)
|
108
|
+
@css_class += " #{css_class}"
|
109
|
+
css_class
|
110
|
+
end
|
111
|
+
nil
|
112
|
+
end
|
113
|
+
|
114
|
+
def remove_css_class(css_class)
|
115
|
+
classes = css_classes
|
116
|
+
if classes.delete(css_class.to_s)
|
117
|
+
@css_class = classes.join(' ')
|
118
|
+
css_class
|
119
|
+
else
|
120
|
+
nil
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
# Returns event listeners that is associated with the element
|
125
|
+
def event_listeners
|
126
|
+
@event_listeners ||= {}
|
127
|
+
end
|
128
|
+
|
129
|
+
# Adds a animation of painting to the element
|
130
|
+
# @param [Event] an event that is set to the element
|
131
|
+
# @return [void]
|
132
|
+
def set_event(event)
|
133
|
+
@events ||= []
|
134
|
+
@events << event
|
135
|
+
publish_id
|
136
|
+
end
|
137
|
+
|
138
|
+
# @return [Boolean] whether event is set to the element
|
139
|
+
def event_target?
|
140
|
+
!(@events.nil? || @events.empty?)
|
141
|
+
end
|
142
|
+
|
143
|
+
# Associates the element with a event listener
|
144
|
+
# @param [Symbol] event_name a event name
|
145
|
+
# @param [Script::SimpleScript|String] event_listener a event listener
|
146
|
+
# @return [void]
|
147
|
+
def add_event_listener(event_name, event_listener)
|
148
|
+
if event_listeners.key?(event_name)
|
149
|
+
unless event_listeners[event_name].include?(event_listener)
|
150
|
+
event_listeners[event_name] << event_listener
|
151
|
+
end
|
152
|
+
else
|
153
|
+
event_listeners[event_name] = [event_listener]
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
# Removes asociation with given event listener
|
158
|
+
# @param [Symbol] event_name a event name
|
159
|
+
# @param [Script::SimpleScript|String] event_listener a event listener
|
160
|
+
# @return [void]
|
161
|
+
def remove_event_listener(event_name, event_listener)
|
162
|
+
if event_listeners.key?(event_name)
|
163
|
+
event_listeners[event_name].delete(event_listener)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
data/lib/dyi/event.rb
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
# -*- encoding: UTF-8 -*-
|
2
|
+
|
3
|
+
# Copyright (c) 2009-2011 Sound-F Co., Ltd. All rights reserved.
|
4
|
+
#
|
5
|
+
# Author:: Mamoru Yuo
|
6
|
+
#
|
7
|
+
# This file is part of DYI.
|
8
|
+
#
|
9
|
+
# DYI is free software: you can redistribute it and/or modify it
|
10
|
+
# under the terms of the GNU General Public License as published by
|
11
|
+
# the Free Software Foundation, either version 3 of the License, or
|
12
|
+
# (at your option) any later version.
|
13
|
+
#
|
14
|
+
# DYI is distributed in the hope that it will be useful,
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
# GNU General Public License for more details.
|
18
|
+
#
|
19
|
+
# You should have received a copy of the GNU General Public License
|
20
|
+
# along with DYI. If not, see <http://www.gnu.org/licenses/>.
|
21
|
+
#
|
22
|
+
# == Overview
|
23
|
+
#
|
24
|
+
# This file provides the DYI::Event class, which provides event supports for
|
25
|
+
# DYI. The event becomes effective only when it is output by SVG format.
|
26
|
+
#
|
27
|
+
# See the documentation to the DYI::Length class for more details and
|
28
|
+
# examples of usage.
|
29
|
+
#
|
30
|
+
# @since 1.0.0
|
31
|
+
|
32
|
+
module DYI
|
33
|
+
|
34
|
+
# Class representing a event. The event becomes effective only when it is
|
35
|
+
# output by SVG format.
|
36
|
+
class Event
|
37
|
+
IMPLEMENT_EVENTS = [:focusin,:focusout,:click,:mousedown,:mouseup,
|
38
|
+
:mouseover,:mousemove,:mouseout,:load]
|
39
|
+
|
40
|
+
# @return [Symbol] event name
|
41
|
+
attr_reader :event_name
|
42
|
+
|
43
|
+
# @return [GraphicalElement] an element to which the event applied
|
44
|
+
attr_reader :target
|
45
|
+
|
46
|
+
# @return [Array] a list of event listener
|
47
|
+
attr_reader :listeners
|
48
|
+
|
49
|
+
# @param [Symbol] event_name event name, one of followings: focusin,
|
50
|
+
# focusout, click, mousedown, mouseup, mouseover,
|
51
|
+
# mousemove, mouseout, load
|
52
|
+
# @param [GraphicalElement] target a element to which the event applied
|
53
|
+
# @raise [ArgumentError] unknown event name is given
|
54
|
+
def initialize(event_name, target)
|
55
|
+
event_name = event_name.to_sym
|
56
|
+
unless IMPLEMENT_EVENTS.include?(event_name)
|
57
|
+
raise ArgumentError, "`#{event_name}' is unknown event"
|
58
|
+
end
|
59
|
+
@event_name = event_name
|
60
|
+
@listeners = []
|
61
|
+
(@target = target).set_event(self)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Sets a event listener.
|
65
|
+
# @param [Script::EcmaScript::EventListener] event_listener a script to be
|
66
|
+
# called when the event occurs
|
67
|
+
# @return [void]
|
68
|
+
def set_listener(event_listener)
|
69
|
+
target.add_event_listener(event_name, event_listener)
|
70
|
+
event_listener.related_to(self)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Removes a event listener.
|
74
|
+
# @param [Script::EcmaScript::EventListener] event_listener a script that
|
75
|
+
# is removed
|
76
|
+
# @return [void]
|
77
|
+
def remove_listener(event_listener)
|
78
|
+
target.remove_event_listener(event_name, event_listener)
|
79
|
+
event_listener.unrelated_to(self)
|
80
|
+
end
|
81
|
+
|
82
|
+
class << self
|
83
|
+
|
84
|
+
# Creates a new focus-in event.
|
85
|
+
# @param target (see Event#initialize)
|
86
|
+
# @return [Event] a new focus-in event
|
87
|
+
def focusin(target)
|
88
|
+
new(:focusin, target)
|
89
|
+
end
|
90
|
+
|
91
|
+
# Creates a new focus-out event.
|
92
|
+
# @param target (see Event#initialize)
|
93
|
+
# @return [Event] a new focus-out event
|
94
|
+
def focusout(target)
|
95
|
+
new(:focusout, target)
|
96
|
+
end
|
97
|
+
|
98
|
+
# Creates a new click event.
|
99
|
+
# @param target (see Event#initialize)
|
100
|
+
# @return [Event] a new click event
|
101
|
+
def click(target)
|
102
|
+
new(:click, target)
|
103
|
+
end
|
104
|
+
|
105
|
+
# Creates a new mouse-down event.
|
106
|
+
# @param target (see Event#initialize)
|
107
|
+
# @return [Event] a new mouse-down event
|
108
|
+
def mousedown(target)
|
109
|
+
new(:mousedown, target)
|
110
|
+
end
|
111
|
+
|
112
|
+
# Creates a new mouse-up event.
|
113
|
+
# @param target (see Event#initialize)
|
114
|
+
# @return [Event] a new mouse-up event
|
115
|
+
def mouseup(target)
|
116
|
+
new(:mouseup, target)
|
117
|
+
end
|
118
|
+
|
119
|
+
# Creates a new mouse-over event.
|
120
|
+
# @param target (see Event#initialize)
|
121
|
+
# @return [Event] a new mouse-over event
|
122
|
+
def mouseover(target)
|
123
|
+
new(:mouseover, target)
|
124
|
+
end
|
125
|
+
|
126
|
+
# Creates a new mouse-move event.
|
127
|
+
# @param target (see Event#initialize)
|
128
|
+
# @return [Event] a new mouse-move event
|
129
|
+
def mousemove(target)
|
130
|
+
new(:mousemove, target)
|
131
|
+
end
|
132
|
+
|
133
|
+
# Creates a new mouse-out event.
|
134
|
+
# @param target (see Event#initialize)
|
135
|
+
# @return [Event] a new mouse-out event
|
136
|
+
def mouseout(target)
|
137
|
+
new(:mouseout, target)
|
138
|
+
end
|
139
|
+
|
140
|
+
# Creates a new load event.
|
141
|
+
# @param target (see Event#initialize)
|
142
|
+
# @return [Event] a new load event
|
143
|
+
def load(target)
|
144
|
+
new(:load, target)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
data/lib/dyi/formatter/base.rb
CHANGED
@@ -75,6 +75,10 @@ module DYI #:nodoc:
|
|
75
75
|
raise NotImplementedError
|
76
76
|
end
|
77
77
|
|
78
|
+
# @since 1.0.0
|
79
|
+
def write_image(shape, io)
|
80
|
+
end
|
81
|
+
|
78
82
|
def write_text(shape, io)
|
79
83
|
raise NotImplementedError
|
80
84
|
end
|
@@ -170,10 +174,28 @@ module DYI #:nodoc:
|
|
170
174
|
@level = level
|
171
175
|
end
|
172
176
|
|
173
|
-
def
|
177
|
+
def xml_instruction
|
174
178
|
%Q{<?xml version="1.0" encoding="UTF-8"?>}
|
175
179
|
end
|
176
180
|
|
181
|
+
def stylesheet_instruction(stylesheet)
|
182
|
+
styles = []
|
183
|
+
styles << '<?xml-stylesheet href="'
|
184
|
+
styles << stylesheet.href
|
185
|
+
styles << '" type="'
|
186
|
+
styles << stylesheet.content_type
|
187
|
+
if stylesheet.title
|
188
|
+
styles << '" title="'
|
189
|
+
styles << stylesheet.title
|
190
|
+
end
|
191
|
+
if stylesheet.media
|
192
|
+
styles << '" media="'
|
193
|
+
styles << stylesheet.media
|
194
|
+
end
|
195
|
+
styles << '"?>'
|
196
|
+
styles.join
|
197
|
+
end
|
198
|
+
|
177
199
|
def generator_comment
|
178
200
|
%Q{<!-- Create with DYI #{DYI::VERSION} (#{DYI::URL}) -->}
|
179
201
|
end
|
@@ -183,8 +205,13 @@ module DYI #:nodoc:
|
|
183
205
|
end
|
184
206
|
|
185
207
|
def puts(io=$>)
|
186
|
-
if @canvas.
|
187
|
-
puts_line(io) {io <<
|
208
|
+
if @canvas.root_element?
|
209
|
+
puts_line(io) {io << xml_instruction}
|
210
|
+
@canvas.stylesheets.each do |stylesheet|
|
211
|
+
if stylesheet.include_external_file?
|
212
|
+
puts_line(io) {io << stylesheet_instruction(stylesheet)}
|
213
|
+
end
|
214
|
+
end
|
188
215
|
puts_line(io) {io << generator_comment}
|
189
216
|
declaration.each_line do |dec|
|
190
217
|
puts_line(io) {io << dec}
|
@@ -240,6 +267,19 @@ module DYI #:nodoc:
|
|
240
267
|
ensure
|
241
268
|
@level -= 1
|
242
269
|
end
|
270
|
+
|
271
|
+
# @since 1.0.0
|
272
|
+
def create_cdata_node(io, tag_name, attributes={}, &block) #:nodoc:
|
273
|
+
puts_line(io) {
|
274
|
+
io << '<' << tag_name
|
275
|
+
attributes.each do |key, value|
|
276
|
+
io << ' ' << key << '="' << attr_escape(value) << '"'
|
277
|
+
end
|
278
|
+
io << '><![CDATA['
|
279
|
+
}
|
280
|
+
yield
|
281
|
+
puts_line(io) {io << ']]></' << tag_name << '>'}
|
282
|
+
end
|
243
283
|
end
|
244
284
|
end
|
245
285
|
end
|