htmlgrid 1.2.0 → 1.2.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.
- checksums.yaml +4 -4
- data/lib/htmlgrid/booleanvalue.rb +14 -14
- data/lib/htmlgrid/button.rb +9 -9
- data/lib/htmlgrid/centeredcomposite.rb +21 -20
- data/lib/htmlgrid/component.rb +214 -199
- data/lib/htmlgrid/composite.rb +332 -301
- data/lib/htmlgrid/datevalue.rb +12 -12
- data/lib/htmlgrid/div.rb +9 -9
- data/lib/htmlgrid/divcomposite.rb +44 -43
- data/lib/htmlgrid/divform.rb +8 -8
- data/lib/htmlgrid/divlist.rb +17 -19
- data/lib/htmlgrid/divtemplate.rb +6 -6
- data/lib/htmlgrid/dojotoolkit.rb +54 -48
- data/lib/htmlgrid/errormessage.rb +47 -43
- data/lib/htmlgrid/form.rb +70 -62
- data/lib/htmlgrid/formlist.rb +14 -14
- data/lib/htmlgrid/grid.rb +111 -67
- data/lib/htmlgrid/image.rb +17 -16
- data/lib/htmlgrid/infomessage.rb +15 -14
- data/lib/htmlgrid/input.rb +34 -32
- data/lib/htmlgrid/inputcheckbox.rb +13 -13
- data/lib/htmlgrid/inputcurrency.rb +9 -9
- data/lib/htmlgrid/inputdate.rb +11 -11
- data/lib/htmlgrid/inputfile.rb +13 -12
- data/lib/htmlgrid/inputradio.rb +9 -9
- data/lib/htmlgrid/inputtext.rb +10 -10
- data/lib/htmlgrid/javascript.rb +17 -16
- data/lib/htmlgrid/label.rb +53 -49
- data/lib/htmlgrid/labeltext.rb +8 -8
- data/lib/htmlgrid/link.rb +31 -27
- data/lib/htmlgrid/list.rb +121 -110
- data/lib/htmlgrid/namedcomponent.rb +28 -25
- data/lib/htmlgrid/pass.rb +11 -11
- data/lib/htmlgrid/passthru.rb +20 -17
- data/lib/htmlgrid/popuplink.rb +41 -39
- data/lib/htmlgrid/reset.rb +8 -8
- data/lib/htmlgrid/richtext.rb +22 -20
- data/lib/htmlgrid/select.rb +28 -26
- data/lib/htmlgrid/span.rb +9 -9
- data/lib/htmlgrid/spancomposite.rb +18 -18
- data/lib/htmlgrid/spanlist.rb +9 -9
- data/lib/htmlgrid/staticinput.rb +14 -13
- data/lib/htmlgrid/submit.rb +9 -9
- data/lib/htmlgrid/template.rb +120 -105
- data/lib/htmlgrid/text.rb +9 -9
- data/lib/htmlgrid/textarea.rb +19 -17
- data/lib/htmlgrid/ulcomposite.rb +22 -22
- data/lib/htmlgrid/ullist.rb +9 -9
- data/lib/htmlgrid/urllink.rb +38 -36
- data/lib/htmlgrid/value.rb +9 -9
- data/lib/htmlgrid/version.rb +2 -2
- data/test/stub/cgi.rb +10 -7
- data/test/suite.rb +3 -3
- data/test/test_add_row.rb +12 -13
- data/test/test_component.rb +121 -100
- data/test/test_composite.rb +85 -46
- data/test/test_datevalue.rb +28 -24
- data/test/test_divlist.rb +126 -0
- data/test/test_dojotoolkit.rb +41 -27
- data/test/test_form.rb +89 -73
- data/test/test_formlist.rb +77 -65
- data/test/test_grid.rb +256 -208
- data/test/test_input.rb +37 -31
- data/test/test_interaction_list.rb +106 -70
- data/test/test_label.rb +91 -77
- data/test/test_list.rb +110 -95
- data/test/test_select.rb +35 -30
- data/test/test_template.rb +63 -55
- data/test/test_text.rb +36 -31
- metadata +17 -2
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
|
3
3
|
#
|
4
4
|
# HtmlGrid -- HyperTextMarkupLanguage Framework
|
5
5
|
# Copyright (C) 2003 ywesee - intellectual capital connected
|
@@ -25,46 +25,50 @@
|
|
25
25
|
# ErrorMessage -- htmlgrid -- 10.04.2003 -- benfay@ywesee.com
|
26
26
|
|
27
27
|
module HtmlGrid
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
28
|
+
module ErrorMessage
|
29
|
+
private
|
30
|
+
|
31
|
+
def error_message(ypos = 0)
|
32
|
+
@displayed_messages = []
|
33
|
+
if @session.warning?
|
34
|
+
__messages(@session.warnings, "warning", ypos)
|
35
|
+
end
|
36
|
+
if @session.error?
|
37
|
+
__messages(@session.errors, "processingerror", ypos)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def error_text(obj)
|
42
|
+
message = obj.message
|
43
|
+
txt = HtmlGrid::Text.new(message, @model, @session, self)
|
44
|
+
if txt.value.nil?
|
45
|
+
txt.value = @lookandfeel.lookup(message, escape(obj.value))
|
46
|
+
end
|
47
|
+
if txt.value.nil? && (match = /^(._[^_]+)_(.*)$/.match(message.to_s)) \
|
48
|
+
&& (label = @lookandfeel.lookup(match[2]))
|
49
|
+
txt.value = @lookandfeel.lookup(match[1], label)
|
50
|
+
end
|
51
|
+
txt
|
52
|
+
end
|
53
|
+
|
54
|
+
def __message(obj, css_class, ypos = 0)
|
55
|
+
@displayed_messages ||= []
|
56
|
+
message = obj.message
|
57
|
+
unless @displayed_messages.include?(message)
|
58
|
+
@displayed_messages.push(message)
|
59
|
+
txt = error_text(obj)
|
60
|
+
unless txt.value.nil?
|
61
|
+
insert_row(ypos, txt, css_class)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def __messages(ary, css_class, ypos = 0)
|
67
|
+
ary.sort_by { |item|
|
68
|
+
(components.key(item.key) || [-1, -1]).reverse
|
69
|
+
}.reverse_each { |item|
|
70
|
+
__message(item, css_class, ypos)
|
71
|
+
}
|
72
|
+
end
|
73
|
+
end
|
70
74
|
end
|
data/lib/htmlgrid/form.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
|
3
3
|
#
|
4
4
|
# HtmlGrid -- HyperTextMarkupLanguage Framework
|
5
5
|
# Copyright (C) 2003 ywesee - intellectual capital connected
|
@@ -22,68 +22,76 @@
|
|
22
22
|
# ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
|
23
23
|
# htmlgrid@ywesee.com, www.ywesee.com/htmlgrid
|
24
24
|
#
|
25
|
-
# Form -- htmlgrid -- 23.10.2002 -- hwyss@ywesee.com
|
25
|
+
# Form -- htmlgrid -- 23.10.2002 -- hwyss@ywesee.com
|
26
26
|
|
27
|
-
require
|
28
|
-
require
|
27
|
+
require "htmlgrid/composite"
|
28
|
+
require "htmlgrid/submit"
|
29
29
|
|
30
30
|
module HtmlGrid
|
31
|
-
|
32
|
-
|
33
|
-
ACCEPT_CHARSET =
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
31
|
+
module FormMethods
|
32
|
+
AUTOFILL = false
|
33
|
+
ACCEPT_CHARSET = "UTF-8"
|
34
|
+
EVENT = nil
|
35
|
+
FORM_ACTION = nil
|
36
|
+
FORM_METHOD = "POST"
|
37
|
+
FORM_NAME = "stdform"
|
38
|
+
TAG_METHOD = :form
|
39
|
+
def autofill?
|
40
|
+
self.class.const_get(:AUTOFILL)
|
41
|
+
end
|
42
|
+
|
43
|
+
def event
|
44
|
+
self.class::EVENT
|
45
|
+
end
|
46
|
+
|
47
|
+
def formname
|
48
|
+
if defined? self.class::FORM_NAME
|
49
|
+
self.class::FORM_NAME
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def onsubmit=(onsubmit)
|
54
|
+
@form_properties["onSubmit"] = onsubmit
|
55
|
+
end
|
56
|
+
|
57
|
+
def to_html(context)
|
58
|
+
context.send(self.class::TAG_METHOD, @form_properties) {
|
59
|
+
super << context.div("style" => "display:none") { hidden_fields(context) }
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def hidden_fields(context)
|
66
|
+
"" <<
|
67
|
+
context.hidden("flavor", @lookandfeel.flavor) <<
|
68
|
+
context.hidden("language", @lookandfeel.language) <<
|
69
|
+
context.hidden({"NAME" => "event", "ID" => "event",
|
70
|
+
"VALUE" => event.to_s}) <<
|
71
|
+
context.hidden("state_id", @session.state.object_id.to_s)
|
72
|
+
end
|
73
|
+
|
74
|
+
def init
|
75
|
+
@form_properties = {}
|
76
|
+
if defined? self.class::FORM_CSS_CLASS
|
77
|
+
@form_properties.store("class", self.class::FORM_CSS_CLASS)
|
78
|
+
end
|
79
|
+
if defined? self.class::FORM_NAME
|
80
|
+
@form_properties.store("NAME", self.class::FORM_NAME)
|
81
|
+
end
|
82
|
+
if defined? self.class::FORM_ID
|
83
|
+
@form_properties.store("ID", self.class::FORM_ID)
|
84
|
+
end
|
85
|
+
super
|
86
|
+
@form_properties.update({
|
87
|
+
"METHOD" => self.class::FORM_METHOD.dup,
|
88
|
+
"ACTION" => (self.class::FORM_ACTION || @lookandfeel.base_url),
|
89
|
+
"ACCEPT-CHARSET" => self.class::ACCEPT_CHARSET
|
90
|
+
})
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
class Form < Composite
|
95
|
+
include FormMethods
|
96
|
+
end
|
89
97
|
end
|
data/lib/htmlgrid/formlist.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
|
3
3
|
#
|
4
4
|
# HtmlGrid -- HyperTextMarkupLanguage Framework
|
5
5
|
# Copyright (C) 2003 ywesee - intellectual capital connected
|
@@ -24,19 +24,19 @@
|
|
24
24
|
#
|
25
25
|
# FormList -- htmlgrid -- 25.03.2003 -- aschrafl@ywesee.com
|
26
26
|
|
27
|
-
require
|
28
|
-
require
|
29
|
-
require
|
30
|
-
require
|
27
|
+
require "htmlgrid/list"
|
28
|
+
require "htmlgrid/form"
|
29
|
+
require "htmlgrid/value"
|
30
|
+
require "htmlgrid/button"
|
31
31
|
|
32
32
|
module HtmlGrid
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
33
|
+
class FormList < List
|
34
|
+
include FormMethods
|
35
|
+
DEFAULT_CLASS = Value
|
36
|
+
EVENT = :new_item
|
37
|
+
def compose_footer(matrix)
|
38
|
+
@grid.add(submit, *matrix)
|
39
|
+
@grid.set_colspan(*matrix)
|
40
|
+
end
|
41
|
+
end
|
42
42
|
end
|
data/lib/htmlgrid/grid.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
|
3
3
|
#
|
4
4
|
# HtmlGrid -- HyperTextMarkupLanguage Framework
|
5
5
|
# Copyright (C) 2003 ywesee - intellectual capital connected
|
@@ -27,118 +27,141 @@
|
|
27
27
|
module HtmlGrid
|
28
28
|
class Grid
|
29
29
|
attr_accessor :width, :height
|
30
|
+
|
30
31
|
private
|
32
|
+
|
31
33
|
class Row
|
32
34
|
class Field
|
33
35
|
attr_reader :components, :tag
|
34
36
|
ALLOWED_ATTRIBUTES = [
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
"align",
|
38
|
+
"class",
|
39
|
+
"colspan",
|
40
|
+
"style",
|
41
|
+
"tag",
|
42
|
+
"title"
|
41
43
|
]
|
42
44
|
def initialize
|
43
45
|
@components = []
|
44
46
|
@attributes = {}
|
45
47
|
@tag = nil
|
46
48
|
end
|
49
|
+
|
47
50
|
def add(item)
|
48
|
-
if
|
51
|
+
if item.is_a? Array
|
49
52
|
@components += item
|
50
53
|
else
|
51
54
|
@components.push item
|
52
55
|
end
|
53
56
|
end
|
57
|
+
|
54
58
|
def add_background
|
55
59
|
compose
|
56
|
-
@components.each { |component|
|
60
|
+
@components.each { |component|
|
57
61
|
component.add_background
|
58
62
|
}
|
59
|
-
if
|
60
|
-
@attributes["class"] += "-bg" unless @attributes["class"]
|
63
|
+
if @attributes["class"]
|
64
|
+
@attributes["class"] += "-bg" unless /-bg/.match?(@attributes["class"])
|
61
65
|
else
|
62
66
|
@attributes["class"] = "bg"
|
63
67
|
end
|
64
68
|
end
|
69
|
+
|
65
70
|
def add_attribute(key, value)
|
66
71
|
@attributes.store(key.to_s, value.to_s)
|
67
72
|
end
|
73
|
+
|
68
74
|
def add_component_style(style)
|
69
|
-
@components.each { |cmp|
|
75
|
+
@components.each { |cmp|
|
70
76
|
cmp.set_attribute("class", style) if cmp.respond_to?(:set_attribute)
|
71
77
|
}
|
72
78
|
end
|
79
|
+
|
73
80
|
def add_style(style)
|
74
81
|
@attributes["class"] = style
|
75
82
|
end
|
83
|
+
|
76
84
|
def attribute(key)
|
77
85
|
@attributes[key]
|
78
86
|
end
|
87
|
+
|
79
88
|
def colspan
|
80
89
|
@attributes.fetch("colspan", 1).to_i
|
81
90
|
end
|
91
|
+
|
82
92
|
def colspan=(span)
|
83
93
|
@attributes["colspan"] = span.to_s if span.to_i > 1
|
84
94
|
end
|
95
|
+
|
85
96
|
def component_html(cgi)
|
86
|
-
html =
|
97
|
+
html = ""
|
87
98
|
@components.each { |component|
|
88
|
-
if component.respond_to? :to_html
|
89
|
-
|
99
|
+
html << if component.respond_to? :to_html
|
100
|
+
component.to_html(cgi).to_s.dup.force_encoding("utf-8")
|
90
101
|
else
|
91
|
-
|
102
|
+
component.to_s
|
92
103
|
end
|
93
104
|
}
|
94
105
|
html = " " if html.empty?
|
95
106
|
html
|
96
107
|
end
|
108
|
+
|
97
109
|
def tag=(tag)
|
98
110
|
@tag = tag.to_s.downcase
|
99
111
|
end
|
112
|
+
|
100
113
|
def to_html(context)
|
101
|
-
if
|
102
|
-
context.send(@tag, @attributes) {
|
103
|
-
component_html(context)
|
114
|
+
if @tag && context.respond_to?(@tag)
|
115
|
+
context.send(@tag, @attributes) {
|
116
|
+
component_html(context)
|
117
|
+
}
|
104
118
|
else
|
105
119
|
context.td(@attributes) {
|
106
|
-
component_html(context)
|
120
|
+
component_html(context)
|
121
|
+
}
|
107
122
|
end
|
108
123
|
end
|
109
124
|
end
|
110
|
-
|
125
|
+
|
126
|
+
# Row
|
127
|
+
def initialize
|
111
128
|
@width = 1
|
112
129
|
@fields = [Field.new]
|
113
130
|
@attributes = {}
|
114
131
|
end
|
132
|
+
|
115
133
|
def initialize_row w
|
116
|
-
if
|
117
|
-
@width.upto(w-1) { |ii| @fields[ii] ||= Field.new }
|
134
|
+
if w > @width
|
135
|
+
@width.upto(w - 1) { |ii| @fields[ii] ||= Field.new }
|
118
136
|
@width = w
|
119
137
|
end
|
120
138
|
end
|
139
|
+
|
121
140
|
def add(item, x)
|
122
141
|
(@fields[x] ||= Field.new).add item
|
123
142
|
end
|
124
|
-
|
125
|
-
|
143
|
+
|
144
|
+
def each_field(x, w = 1)
|
145
|
+
x.upto([x + w, @width].min - 1) { |xx|
|
126
146
|
yield(@fields[xx])
|
127
147
|
}
|
128
148
|
end
|
149
|
+
|
129
150
|
def to_html cgi
|
130
151
|
cgi.tr(@attributes) {
|
131
152
|
field_html(cgi)
|
132
153
|
}
|
133
154
|
end
|
134
|
-
|
155
|
+
|
156
|
+
def field_attribute(key, x = 0)
|
135
157
|
@fields[x].attribute(key)
|
136
158
|
end
|
159
|
+
|
137
160
|
def field_html(cgi)
|
138
161
|
html = ""
|
139
162
|
span = 1
|
140
163
|
@fields.each { |field|
|
141
|
-
if
|
164
|
+
if span < 2
|
142
165
|
html << field.to_html(cgi)
|
143
166
|
span = field.colspan
|
144
167
|
else
|
@@ -147,29 +170,33 @@ module HtmlGrid
|
|
147
170
|
}
|
148
171
|
html
|
149
172
|
end
|
173
|
+
|
150
174
|
def set_attributes(attr)
|
151
175
|
@attributes = attr
|
152
176
|
end
|
177
|
+
|
153
178
|
def [](x)
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
nil
|
158
|
-
end
|
179
|
+
@fields[x]
|
180
|
+
rescue
|
181
|
+
nil
|
159
182
|
end
|
160
183
|
end
|
184
|
+
|
161
185
|
public
|
162
|
-
|
186
|
+
|
187
|
+
# Grid
|
188
|
+
def initialize(attributes = {})
|
163
189
|
@height = 1
|
164
190
|
@width = 1
|
165
191
|
@rows = [Row.new]
|
166
192
|
@attributes = {
|
167
|
-
"cellspacing" =>
|
193
|
+
"cellspacing" => "0"
|
168
194
|
}.update(attributes)
|
169
195
|
end
|
196
|
+
|
170
197
|
def initialize_grid(w, h)
|
171
|
-
if
|
172
|
-
floor =
|
198
|
+
if w > @width || h > @height
|
199
|
+
floor = w > @width ? 0 : @height
|
173
200
|
@width = [w, @width].max
|
174
201
|
@height = [h, @height].max
|
175
202
|
floor.upto(@height - 1) { |ii|
|
@@ -177,13 +204,14 @@ module HtmlGrid
|
|
177
204
|
}
|
178
205
|
end
|
179
206
|
end
|
180
|
-
|
181
|
-
|
182
|
-
|
207
|
+
|
208
|
+
def add(arg, x, y, col = false)
|
209
|
+
if arg.is_a?(Enumerable)
|
210
|
+
if arg.is_a?(String)
|
183
211
|
add_field(arg, x, y)
|
184
|
-
elsif arg.
|
212
|
+
elsif arg.is_a?(Array)
|
185
213
|
arg.each do |item|
|
186
|
-
add_field(item, x
|
214
|
+
add_field(item, x || "", y)
|
187
215
|
end
|
188
216
|
elsif col
|
189
217
|
add_column(arg, x, y)
|
@@ -194,16 +222,19 @@ module HtmlGrid
|
|
194
222
|
add_field(arg, x, y)
|
195
223
|
end
|
196
224
|
end
|
197
|
-
|
225
|
+
|
226
|
+
def add_attribute(key, value, x, y, w = 1, h = 1)
|
198
227
|
each_field(x, y, w, h) { |field|
|
199
228
|
field.add_attribute(key, value)
|
200
229
|
}
|
201
230
|
end
|
202
|
-
|
231
|
+
|
232
|
+
def add_background(x, y, w = 1, h = 1)
|
203
233
|
each_field(x, y, w, h) { |field|
|
204
234
|
field.add_background(x, w)
|
205
235
|
}
|
206
236
|
end
|
237
|
+
|
207
238
|
def add_column(arg, x, y)
|
208
239
|
offset = 0
|
209
240
|
arg.each do |item|
|
@@ -211,15 +242,18 @@ module HtmlGrid
|
|
211
242
|
offset = offset.next
|
212
243
|
end
|
213
244
|
end
|
214
|
-
|
245
|
+
|
246
|
+
def add_component_style(style, x, y, w = 1, h = 1)
|
215
247
|
each_field(x, y, w, h) { |field|
|
216
248
|
field.add_component_style(style)
|
217
249
|
}
|
218
250
|
end
|
251
|
+
|
219
252
|
def add_field(arg, x, y)
|
220
|
-
initialize_grid(x+1, y+1)
|
253
|
+
initialize_grid(x + 1, y + 1)
|
221
254
|
(@rows[y] ||= Row.new).add(arg, x)
|
222
255
|
end
|
256
|
+
|
223
257
|
def add_row(arg, x, y)
|
224
258
|
offset = 0
|
225
259
|
arg.each do |item|
|
@@ -227,65 +261,75 @@ module HtmlGrid
|
|
227
261
|
offset = offset.next
|
228
262
|
end
|
229
263
|
end
|
230
|
-
|
264
|
+
|
265
|
+
def add_style(style, x, y, w = 1, h = 1)
|
231
266
|
each_field(x, y, w, h) { |field|
|
232
267
|
field.add_style(style)
|
233
268
|
}
|
234
269
|
end
|
235
|
-
|
236
|
-
|
237
|
-
|
270
|
+
|
271
|
+
def add_tag(tag, x, y, w = 1, h = 1)
|
272
|
+
initialize_grid(x + w, y + h)
|
273
|
+
each_field(x, y, w, h) { |field|
|
238
274
|
field.tag = tag
|
239
275
|
}
|
240
276
|
end
|
241
|
-
|
242
|
-
|
243
|
-
|
277
|
+
|
278
|
+
def each_field(x, y, w = 1, h = 1)
|
279
|
+
y.upto([y + h, @height].min - 1) { |yy|
|
280
|
+
@rows[yy].each_field(x, w) { |field|
|
244
281
|
yield(field)
|
245
282
|
}
|
246
283
|
}
|
247
284
|
end
|
248
|
-
|
285
|
+
|
286
|
+
def field_attribute(key, x = 0, y = 0)
|
249
287
|
@rows[y].field_attribute(key, x)
|
250
288
|
end
|
251
|
-
|
252
|
-
|
289
|
+
|
290
|
+
def insert_row(y = 0, arg = nil)
|
291
|
+
@rows[y, 0] = Row.new
|
253
292
|
@height += 1
|
254
293
|
add(arg, 0, y)
|
255
294
|
end
|
256
|
-
|
295
|
+
|
296
|
+
def push(arg, x = 0, y = height)
|
257
297
|
add(arg, x, y)
|
258
|
-
set_colspan(x,y)
|
298
|
+
set_colspan(x, y)
|
259
299
|
end
|
300
|
+
|
260
301
|
def set_attribute(key, value)
|
261
302
|
@attributes[key] = value
|
262
303
|
end
|
304
|
+
|
263
305
|
def set_attributes(hash)
|
264
306
|
@attributes.update(hash)
|
265
307
|
end
|
266
|
-
|
308
|
+
|
309
|
+
def set_colspan(x = 0, y = 0, span = (@width - x))
|
267
310
|
span = span.to_i
|
268
|
-
initialize_grid(x+span, y+1)
|
269
|
-
self[x,y].colspan = span
|
311
|
+
initialize_grid(x + span, y + 1)
|
312
|
+
self[x, y].colspan = span
|
270
313
|
end
|
271
|
-
|
314
|
+
|
315
|
+
def set_row_attributes(attr = {}, y = 0, offset = 0)
|
272
316
|
# TODO
|
273
317
|
# At the moment, offset value is not used
|
274
318
|
# But probably offset value is used in grid.c
|
275
319
|
initialize_grid(offset, y + 1)
|
276
320
|
@rows[y].set_attributes(attr)
|
277
321
|
end
|
322
|
+
|
278
323
|
def to_html(cgi)
|
279
324
|
cgi.table(@attributes) {
|
280
|
-
@rows.collect { |row| row.to_html(cgi).force_encoding(
|
325
|
+
@rows.collect { |row| row.to_html(cgi).force_encoding("utf-8") }.join
|
281
326
|
}
|
282
327
|
end
|
328
|
+
|
283
329
|
def [](x, y)
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
nil
|
288
|
-
end
|
330
|
+
@rows[y][x]
|
331
|
+
rescue
|
332
|
+
nil
|
289
333
|
end
|
290
334
|
end
|
291
335
|
end
|