html-table 1.2.2
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 +72 -0
- data/MANIFEST +41 -0
- data/README +137 -0
- data/doc/attributes.rdoc +143 -0
- data/doc/table.rdoc +157 -0
- data/doc/table_body.rdoc +9 -0
- data/doc/table_caption.rdoc +9 -0
- data/doc/table_colgroup.rdoc +8 -0
- data/doc/table_colgroup_col.rdoc +9 -0
- data/doc/table_foot.rdoc +8 -0
- data/doc/table_head.rdoc +11 -0
- data/doc/table_row.rdoc +105 -0
- data/doc/table_row_data.rdoc +92 -0
- data/doc/table_row_header.rdoc +7 -0
- data/lib/html/attribute_handler.rb +308 -0
- data/lib/html/body.rb +34 -0
- data/lib/html/caption.rb +40 -0
- data/lib/html/col.rb +33 -0
- data/lib/html/colgroup.rb +99 -0
- data/lib/html/data.rb +56 -0
- data/lib/html/foot.rb +43 -0
- data/lib/html/head.rb +42 -0
- data/lib/html/header.rb +56 -0
- data/lib/html/html_handler.rb +94 -0
- data/lib/html/row.rb +129 -0
- data/lib/html/table.rb +227 -0
- data/lib/html/tablesection.rb +42 -0
- data/lib/html/tag_handler.rb +64 -0
- data/test/tc_attribute_handler.rb +259 -0
- data/test/tc_body.rb +97 -0
- data/test/tc_caption.rb +90 -0
- data/test/tc_col.rb +50 -0
- data/test/tc_colgroup.rb +99 -0
- data/test/tc_data.rb +87 -0
- data/test/tc_foot.rb +118 -0
- data/test/tc_head.rb +114 -0
- data/test/tc_header.rb +87 -0
- data/test/tc_html_handler.rb +47 -0
- data/test/tc_row.rb +138 -0
- data/test/tc_table.rb +163 -0
- data/test/tc_tablesection.rb +52 -0
- data/test/ts_all.rb +23 -0
- metadata +96 -0
data/doc/table_body.rdoc
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
== Description
|
2
|
+
A Table::Body object represents a single <TBODY></TBODY> instance for an
|
3
|
+
HTML Table.
|
4
|
+
== Notes
|
5
|
+
In virtually every respect the Table::Body class is identical to
|
6
|
+
the Table or Table::Row class. Unlike Table::Foot or Table::Head, there
|
7
|
+
can be more than one instance (i.e. it's not a singleton class).
|
8
|
+
|
9
|
+
A Table::Body contains Table::Row objects.
|
@@ -0,0 +1,9 @@
|
|
1
|
+
== Description
|
2
|
+
A Table::Caption object represents a single <CAPTION></CAPTION> instance
|
3
|
+
for an HTML Table.
|
4
|
+
== Notes
|
5
|
+
The Table::Caption class is virtually identical to the Table::Row::Data
|
6
|
+
class. There is one important behavioral difference, however. First,
|
7
|
+
there can only be one Table::Caption. If you attempt to add a second one,
|
8
|
+
it will merely overwrite the existing one. Second, a Table::Caption is
|
9
|
+
always bumped to index 0.
|
@@ -0,0 +1,8 @@
|
|
1
|
+
== Description
|
2
|
+
A Table::ColGroup object represents a single <COLGROUP></COLGROUP>
|
3
|
+
instance for an HTML Table.
|
4
|
+
|
5
|
+
== Notes
|
6
|
+
In virtually every respect the Table::ColGroup class is identical to the
|
7
|
+
Table::Row class. The only difference, beyond the begin and end tags, is
|
8
|
+
that a ColGroup may only contain instances of the Col class.
|
@@ -0,0 +1,9 @@
|
|
1
|
+
== Description
|
2
|
+
A Table::ColGroup::Col object represents a single <COL> instance for an
|
3
|
+
HTML Table.
|
4
|
+
|
5
|
+
== Notes
|
6
|
+
In virtually every respect the Table::ColGroup::Col class is identical to
|
7
|
+
the Table::Row::Data class. The only differences are that a
|
8
|
+
Table::ColGroup::Col instance does not contain any content, nor does it
|
9
|
+
include an end tag.
|
data/doc/table_foot.rdoc
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
== Description
|
2
|
+
A Table::Foot object represents a single <TFOOT></TFOOT> instance for an
|
3
|
+
HTML Table.
|
4
|
+
== Notes
|
5
|
+
In virtually every respect the Table::Foot class is identical to
|
6
|
+
the Table or Table::Row class. There is one significant difference.
|
7
|
+
The Table::Foot class is a singleton. There can be only one
|
8
|
+
Table::Foot instance per table.
|
data/doc/table_head.rdoc
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
== Description
|
2
|
+
A Table::Head object represents a single <THEAD></THEAD> instance for an
|
3
|
+
HTML Table.
|
4
|
+
|
5
|
+
== Notes
|
6
|
+
In virtually every respect the Table::Head class is identical to
|
7
|
+
the Table or Table::Row class. There are two significant differences.
|
8
|
+
First, the Table::Head class is a singleton. There can be only one
|
9
|
+
Table::Head instance per table. Second, if an instance of Table::Head
|
10
|
+
is added to a table, it will be automatically be put at index 0 (or 1
|
11
|
+
if a Table::Caption exists).
|
data/doc/table_row.rdoc
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
= Description
|
2
|
+
A Table::Row object represents a single <TR></TR> instance for an HTML
|
3
|
+
Table. Although it is nested under Table, it is not a subclass of Table.
|
4
|
+
It is, however, a subclass of Array.
|
5
|
+
|
6
|
+
== Synopsis
|
7
|
+
require "html/table"
|
8
|
+
include HTML
|
9
|
+
|
10
|
+
table = HTML::Table.new
|
11
|
+
|
12
|
+
row1 = Table::Row.new{ |r|
|
13
|
+
r.align = "left"
|
14
|
+
r.bgcolor = "green"
|
15
|
+
r.content = ["foo","bar","baz"]
|
16
|
+
}
|
17
|
+
|
18
|
+
row2 = Table::Row.new{ |r|
|
19
|
+
r.align = "right"
|
20
|
+
r.bgcolor = "blue"
|
21
|
+
r.content = "hello world"
|
22
|
+
}
|
23
|
+
|
24
|
+
table.push row1, row2
|
25
|
+
|
26
|
+
row1.content = "foofoo"
|
27
|
+
row1.configure(3){ |d| d.bgcolor = "pink" }
|
28
|
+
|
29
|
+
row1.push Table::Row::Header.new{ |h|
|
30
|
+
h.colspan = 2
|
31
|
+
h.content = "This is a table header"
|
32
|
+
}
|
33
|
+
|
34
|
+
row2.push Table::Row::Header.new{ |h|
|
35
|
+
h.colspan = 2
|
36
|
+
h.content = "This is also a table header"
|
37
|
+
}
|
38
|
+
|
39
|
+
puts table.html
|
40
|
+
|
41
|
+
#### output ####
|
42
|
+
<table>
|
43
|
+
<tr align='left' bgcolor='green'>
|
44
|
+
<td>foo</td>
|
45
|
+
<td>bar</td>
|
46
|
+
<td>baz</td>
|
47
|
+
<td bgcolor='pink'>foofoo</td>
|
48
|
+
<th colspan=2>This is a table header</th>
|
49
|
+
</tr>
|
50
|
+
<tr align='right' bgcolor='blue'>
|
51
|
+
<td>hello world</td>
|
52
|
+
<th colspan=2>This is also a table header</th>
|
53
|
+
</tr>
|
54
|
+
</table>
|
55
|
+
|
56
|
+
See the 'examples' directory for more examples.
|
57
|
+
|
58
|
+
== Mixins
|
59
|
+
Table::Row is a subclass of Array and therefore mixes in Enumerable. It
|
60
|
+
also mixes in Attribute_Handler.
|
61
|
+
|
62
|
+
== Class Methods
|
63
|
+
Table::Row.new(arg=nil)
|
64
|
+
Table::Row.new(arg=nil){ |t| ... }
|
65
|
+
Creates a new table. You can set attributes for the TableRow by passing
|
66
|
+
a block.
|
67
|
+
|
68
|
+
If +arg+ is supplied, it is automatically interpreted to be content.
|
69
|
+
This is a shortcut for Table::Row.new{ |r| r.content = '...' }.
|
70
|
+
|
71
|
+
== Instance Methods
|
72
|
+
Table::Row#[]=(index,obj)
|
73
|
+
Assigns +obj+ to index. The +obj+ must be a Table::Row::Header or
|
74
|
+
Table::Row::Data object, or a TypeError is raised.
|
75
|
+
|
76
|
+
Table::Row#content
|
77
|
+
Returns the HTML content of the TableRow instance, i.e. the stuff between
|
78
|
+
the <TR> and </TR> tags.
|
79
|
+
|
80
|
+
Table::Row#content=(args)
|
81
|
+
Because a Table::Row doesn't store any of its own content, the arguments
|
82
|
+
to this method must be a Table::Row::Data object, a Table::Row::Header
|
83
|
+
object, or a String (or an array of any of these). In the latter case,
|
84
|
+
a single Table::Row::Data object is created for each string.
|
85
|
+
|
86
|
+
Table::Row#html
|
87
|
+
Returns the entire HTML content of the TableRow instance.
|
88
|
+
|
89
|
+
Table::Row#push(obj)
|
90
|
+
Pushes +obj+ onto the Table::Row. The +obj+ must be a
|
91
|
+
Table::Row::Data or Table::Row::Header object, or a TypeError is
|
92
|
+
raised.
|
93
|
+
|
94
|
+
Table::Row#unshift(obj)
|
95
|
+
Unshifts +obj+ onto the Table::Row. The same rules for push apply
|
96
|
+
to unshift as well.
|
97
|
+
|
98
|
+
== Notes
|
99
|
+
String attributes are quoted. Numeric attributes are not.
|
100
|
+
|
101
|
+
Some attributes have type checking. Some check for valid arguments. In
|
102
|
+
the latter case, it is case-insensitive.
|
103
|
+
|
104
|
+
Using a non-standard extension (e.g. "background") will send a warning to
|
105
|
+
STDERR in $VERBOSE (-w) mode.
|
@@ -0,0 +1,92 @@
|
|
1
|
+
== Description
|
2
|
+
A Table::Row::Data object represents a single <TD></TD> instance for an HTML
|
3
|
+
Table. For purposes of html-table, it also represents a "column"
|
4
|
+
|
5
|
+
== Synopsis
|
6
|
+
require "html/table"
|
7
|
+
require HTML
|
8
|
+
|
9
|
+
Table::Row.end_tags = false
|
10
|
+
Table::Row::Data.end_tags = false
|
11
|
+
|
12
|
+
table = Table.new{ |t| t.border = 1 }
|
13
|
+
row = Table::Row.new
|
14
|
+
|
15
|
+
col1 = Table::Row::Data.new{ |d|
|
16
|
+
d.abbr = "test"
|
17
|
+
d.align = "right"
|
18
|
+
d.content = "hello world"
|
19
|
+
}
|
20
|
+
|
21
|
+
col2 = Table::Row::Data.new{ |d|
|
22
|
+
d.align = "center"
|
23
|
+
d.content = "Matz rules!"
|
24
|
+
}
|
25
|
+
|
26
|
+
col3 = Table::Row::Data.new{ |d|
|
27
|
+
d.align = "left"
|
28
|
+
d.content = "Foo!"
|
29
|
+
}
|
30
|
+
|
31
|
+
row.push col1, col2, col3
|
32
|
+
|
33
|
+
puts table.html
|
34
|
+
|
35
|
+
#### output ####
|
36
|
+
<table border=1>
|
37
|
+
<tr>
|
38
|
+
<td abbr='test' align='right'>hello world
|
39
|
+
<td align='center'>Matz rules!
|
40
|
+
<td align='left'>Foo!
|
41
|
+
</table>
|
42
|
+
|
43
|
+
See the 'examples' directory under 'doc' for more examples.
|
44
|
+
|
45
|
+
== Mixins
|
46
|
+
Table::Row::Data mixes in Attribute_Handler.
|
47
|
+
|
48
|
+
== Class Methods
|
49
|
+
Table::Row::Data.new(arg=nil)
|
50
|
+
Table::Row::Data.new(arg=nil){ |t| ... }
|
51
|
+
Creates a new table. You can set attributes for the Table::Row::Data by
|
52
|
+
passing a block.
|
53
|
+
|
54
|
+
If +arg+ is supplied, it is automatically interpreted to be content.
|
55
|
+
This is a shortcut for Table::Row::Data.new{ |d| d.content = '...' }.
|
56
|
+
|
57
|
+
Table::Row::Data.end_tags
|
58
|
+
Returns true or false to indicate whether end tags are included or not.
|
59
|
+
|
60
|
+
Table::Row::Data.end_tags=(bool)
|
61
|
+
Sets whether or not end tags are included in the html.
|
62
|
+
|
63
|
+
Table::Row::Data.indent_level
|
64
|
+
Returns the current number of spaces that <TD> tags are indented. The
|
65
|
+
default is 6.
|
66
|
+
|
67
|
+
Table::Row::Data.indent_level=(num)
|
68
|
+
Sets the number of spaces that <TD> tags are indented.
|
69
|
+
|
70
|
+
== Instance Methods
|
71
|
+
TableData#content
|
72
|
+
Returns the content of the TableData object, i.e. the stuff between <TD>
|
73
|
+
and </TD>.
|
74
|
+
|
75
|
+
Table::Row::Data#content=(string)
|
76
|
+
Sets the content for the TableData object, i.e. the stuff between <TD>
|
77
|
+
and </TD>.
|
78
|
+
|
79
|
+
Table::Row::Data#html
|
80
|
+
Returns all html content for the TableData instance.
|
81
|
+
|
82
|
+
== Notes
|
83
|
+
The end tags for Table::Row::Data objects are are the same line as the
|
84
|
+
begin tags.
|
85
|
+
|
86
|
+
String attributes are quoted. Numeric attributes are not.
|
87
|
+
|
88
|
+
Some attributes have type checking. Some check for valid arguments. In
|
89
|
+
the latter case, it is case-insensitive.
|
90
|
+
|
91
|
+
Using a non-standard extension (e.g. "background") will send a warning to
|
92
|
+
STDERR in $VERBOSE (-w) mode.
|
@@ -0,0 +1,308 @@
|
|
1
|
+
# This module creates methods for each of the various attributes associated
|
2
|
+
# with HTML tables. In some cases validation is done on the setters.
|
3
|
+
|
4
|
+
module AttributeHandler
|
5
|
+
def abbr
|
6
|
+
@abbr
|
7
|
+
end
|
8
|
+
|
9
|
+
def abbr=(string)
|
10
|
+
@abbr = string
|
11
|
+
modify_html("abbr",string)
|
12
|
+
end
|
13
|
+
|
14
|
+
def align
|
15
|
+
@align
|
16
|
+
end
|
17
|
+
|
18
|
+
def align=(position)
|
19
|
+
valid = %w/top bottom left center right/
|
20
|
+
raise ArgumentError unless valid.include?(position.downcase)
|
21
|
+
@align = position
|
22
|
+
modify_html("align",position)
|
23
|
+
end
|
24
|
+
|
25
|
+
def axis
|
26
|
+
@axis
|
27
|
+
end
|
28
|
+
|
29
|
+
def axis=(string)
|
30
|
+
@axis = string
|
31
|
+
modify_html("axis",string)
|
32
|
+
end
|
33
|
+
|
34
|
+
def background
|
35
|
+
@background
|
36
|
+
end
|
37
|
+
|
38
|
+
def background=(url)
|
39
|
+
raise TypeError unless url.kind_of?(String)
|
40
|
+
if $VERBOSE
|
41
|
+
msg = "'background' is a non-standard extension"
|
42
|
+
STDERR.puts msg
|
43
|
+
end
|
44
|
+
@background = url
|
45
|
+
modify_html("background",url)
|
46
|
+
end
|
47
|
+
|
48
|
+
def bgcolor
|
49
|
+
@bgcolor
|
50
|
+
end
|
51
|
+
|
52
|
+
def bgcolor=(color)
|
53
|
+
@bgcolor = color
|
54
|
+
modify_html("bgcolor",color)
|
55
|
+
end
|
56
|
+
|
57
|
+
def border
|
58
|
+
@border
|
59
|
+
end
|
60
|
+
|
61
|
+
# Allow either true/false or an integer
|
62
|
+
def border=(num)
|
63
|
+
if num.kind_of?(TrueClass)
|
64
|
+
modify_html("border",true)
|
65
|
+
elsif num.kind_of?(FalseClass)
|
66
|
+
# Do nothing
|
67
|
+
else
|
68
|
+
@border = num.to_i
|
69
|
+
modify_html("border",num.to_i)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def bordercolor
|
74
|
+
@bordercolor
|
75
|
+
end
|
76
|
+
|
77
|
+
def bordercolor=(color)
|
78
|
+
@bordercolor = color
|
79
|
+
if $VERBOSE
|
80
|
+
msg = "'bordercolor' is a non-standard extension"
|
81
|
+
STDERR.puts msg
|
82
|
+
end
|
83
|
+
modify_html("bordercolor",color)
|
84
|
+
end
|
85
|
+
|
86
|
+
def bordercolordark
|
87
|
+
@bordercolordark
|
88
|
+
end
|
89
|
+
|
90
|
+
def bordercolordark=(color)
|
91
|
+
@bordercolordark = color
|
92
|
+
if $VERBOSE
|
93
|
+
msg = "'bordercolordark' is a non-standard extension"
|
94
|
+
STDERR.puts msg
|
95
|
+
end
|
96
|
+
modify_html("bordercolordark",color)
|
97
|
+
end
|
98
|
+
|
99
|
+
def bordercolorlight
|
100
|
+
@bordercolorlight
|
101
|
+
end
|
102
|
+
|
103
|
+
def bordercolorlight=(color)
|
104
|
+
@bordercolorlight = color
|
105
|
+
if $VERBOSE
|
106
|
+
msg = "'bordercolorlight' is a non-standard extension"
|
107
|
+
STDERR.puts msg
|
108
|
+
end
|
109
|
+
modify_html("bordercolorlight",@bordercolorlight)
|
110
|
+
end
|
111
|
+
|
112
|
+
def cellpadding
|
113
|
+
@cellpadding
|
114
|
+
end
|
115
|
+
|
116
|
+
def cellpadding=(num)
|
117
|
+
raise ArgumentError if num.to_i < 0
|
118
|
+
@cellpadding = num.to_i
|
119
|
+
modify_html("cellpadding",@cellpadding)
|
120
|
+
end
|
121
|
+
|
122
|
+
def cellspacing
|
123
|
+
@cellspacing
|
124
|
+
end
|
125
|
+
|
126
|
+
def cellspacing=(num)
|
127
|
+
raise ArgumentError if num.to_i < 0
|
128
|
+
@cellspacing = num.to_i
|
129
|
+
modify_html("cellspacing",@cellspacing)
|
130
|
+
end
|
131
|
+
|
132
|
+
def char
|
133
|
+
@char
|
134
|
+
end
|
135
|
+
|
136
|
+
def char=(character)
|
137
|
+
raise ArgumentError if character.to_s.length > 1
|
138
|
+
@char = character.to_s
|
139
|
+
modify_html("char",character.to_s)
|
140
|
+
end
|
141
|
+
|
142
|
+
def charoff
|
143
|
+
@charoff
|
144
|
+
end
|
145
|
+
|
146
|
+
def charoff=(offset)
|
147
|
+
raise ArgumentError if offset.to_i < 0
|
148
|
+
@charoff = offset
|
149
|
+
modify_html("charoff",offset)
|
150
|
+
end
|
151
|
+
|
152
|
+
def col
|
153
|
+
@col
|
154
|
+
end
|
155
|
+
|
156
|
+
def col=(num)
|
157
|
+
raise ArgumentError if num.to_i < 0
|
158
|
+
@col = num.to_i
|
159
|
+
modify_html("col",@col)
|
160
|
+
end
|
161
|
+
|
162
|
+
def colspan
|
163
|
+
@colspan
|
164
|
+
end
|
165
|
+
|
166
|
+
def colspan=(span)
|
167
|
+
raise ArgumentError if span.to_i < 0
|
168
|
+
@colspan = span.to_i
|
169
|
+
modify_html("colspan",@colspan)
|
170
|
+
end
|
171
|
+
|
172
|
+
# Allows you to configure various attributes by row or row + column.
|
173
|
+
def configure(row,col=nil,&block)
|
174
|
+
if col
|
175
|
+
begin
|
176
|
+
yield self[row][col]
|
177
|
+
rescue NameError
|
178
|
+
msg = "No column to configure in a " + self.class.to_s + " class"
|
179
|
+
raise ArgumentError, msg
|
180
|
+
end
|
181
|
+
else
|
182
|
+
yield self[row]
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
# Returns the HTML content (i.e. text)
|
187
|
+
def content
|
188
|
+
@html_body
|
189
|
+
end
|
190
|
+
|
191
|
+
def frame
|
192
|
+
@frame
|
193
|
+
end
|
194
|
+
|
195
|
+
def frame=(type)
|
196
|
+
valid = %w/border void above below hsides lhs rhs vsides box/
|
197
|
+
raise ArgumentError unless valid.include?(type.downcase)
|
198
|
+
@frame = type
|
199
|
+
modify_html("frame",@frame)
|
200
|
+
end
|
201
|
+
|
202
|
+
def height
|
203
|
+
@height
|
204
|
+
end
|
205
|
+
|
206
|
+
def height=(num)
|
207
|
+
raise ArgumentError if num.to_i < 0
|
208
|
+
@height = num.to_i
|
209
|
+
modify_html("height",@height)
|
210
|
+
end
|
211
|
+
|
212
|
+
def hspace
|
213
|
+
@hspace
|
214
|
+
end
|
215
|
+
|
216
|
+
def hspace=(num)
|
217
|
+
raise ArgumentError if num.to_i < 0
|
218
|
+
@hspace = num.to_i
|
219
|
+
modify_html("hspace",@hspace)
|
220
|
+
end
|
221
|
+
|
222
|
+
def nowrap
|
223
|
+
@nowrap
|
224
|
+
end
|
225
|
+
|
226
|
+
def nowrap=(bool)
|
227
|
+
unless bool.kind_of?(TrueClass) || bool.kind_of?(FalseClass)
|
228
|
+
raise TypeError
|
229
|
+
end
|
230
|
+
@nowrap = bool
|
231
|
+
modify_html("nowrap",@nowrap)
|
232
|
+
end
|
233
|
+
|
234
|
+
def rowspan
|
235
|
+
@rowspan
|
236
|
+
end
|
237
|
+
|
238
|
+
def rowspan=(num)
|
239
|
+
raise ArgumentError if num.to_i < 0
|
240
|
+
@rowspan = num.to_i
|
241
|
+
modify_html("rowspan",@rowspan)
|
242
|
+
end
|
243
|
+
|
244
|
+
def rules
|
245
|
+
@rules
|
246
|
+
end
|
247
|
+
|
248
|
+
def rules=(edges)
|
249
|
+
valid = %w/all groups rows cols none/
|
250
|
+
raise ArgumentError unless valid.include?(edges.to_s.downcase)
|
251
|
+
@rules = edges
|
252
|
+
modify_html("rules",@rules)
|
253
|
+
end
|
254
|
+
|
255
|
+
def span
|
256
|
+
@span
|
257
|
+
end
|
258
|
+
|
259
|
+
def span=(num)
|
260
|
+
raise ArgumentError if num.to_i < 0
|
261
|
+
@span = num.to_i
|
262
|
+
modify_html("span",@span)
|
263
|
+
end
|
264
|
+
|
265
|
+
def summary
|
266
|
+
@summary
|
267
|
+
end
|
268
|
+
|
269
|
+
def summary=(string)
|
270
|
+
@summary = string.to_s
|
271
|
+
modify_html("summary",@summary)
|
272
|
+
end
|
273
|
+
|
274
|
+
def valign
|
275
|
+
@valign
|
276
|
+
end
|
277
|
+
|
278
|
+
def valign=(position)
|
279
|
+
valid = %w/top center bottom baseline/
|
280
|
+
raise ArgumentError unless valid.include?(position.to_s.downcase)
|
281
|
+
@valign = position
|
282
|
+
modify_html("valign",@valign)
|
283
|
+
end
|
284
|
+
|
285
|
+
def vspace=(num)
|
286
|
+
raise ArgumentError if num.to_i < 0
|
287
|
+
@vspace = num.to_i
|
288
|
+
modify_html("vspace",@vspace)
|
289
|
+
end
|
290
|
+
|
291
|
+
def vspace
|
292
|
+
@vspace
|
293
|
+
end
|
294
|
+
|
295
|
+
def width
|
296
|
+
@width
|
297
|
+
end
|
298
|
+
|
299
|
+
def width=(num)
|
300
|
+
if num =~ /%/
|
301
|
+
@width = num
|
302
|
+
else
|
303
|
+
raise ArgumentError if num.to_i < 0
|
304
|
+
@width = num.to_i
|
305
|
+
end
|
306
|
+
modify_html("width",@width)
|
307
|
+
end
|
308
|
+
end
|