htmlgrid 1.1.6 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/TooltipDialog.txt +73 -0
- data/interaction_no_inline.txt +1216 -0
- 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 -197
- 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 +86 -53
- 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 +124 -112
- 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 +141 -91
- 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 -26
- 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 +66 -55
- data/test/test_text.rb +36 -31
- metadata +20 -3
data/lib/htmlgrid/datevalue.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,18 +22,18 @@
|
|
22
22
|
# ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
|
23
23
|
# htmlgrid@ywesee.com, www.ywesee.com/htmlgrid
|
24
24
|
#
|
25
|
-
# DateValue -- htmlgrid -- 10.03.2003 -- hwyss@ywesee.com
|
25
|
+
# DateValue -- htmlgrid -- 10.03.2003 -- hwyss@ywesee.com
|
26
26
|
|
27
|
-
require
|
27
|
+
require "htmlgrid/namedcomponent"
|
28
28
|
|
29
29
|
module HtmlGrid
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
30
|
+
class DateValue < NamedComponent
|
31
|
+
LABEL = true
|
32
|
+
def to_html(context)
|
33
|
+
date = @model.send(@name)
|
34
|
+
if date.respond_to?(:strftime)
|
35
|
+
date.strftime(@lookandfeel.lookup(:date_format))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
39
|
end
|
data/lib/htmlgrid/div.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,14 +24,14 @@
|
|
24
24
|
#
|
25
25
|
# Div -- oddb -- 12.11.2004 -- jlang@ywesee.com, usenguel@ywesee.com
|
26
26
|
|
27
|
-
require
|
27
|
+
require "htmlgrid/component"
|
28
28
|
|
29
29
|
module HtmlGrid
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
30
|
+
class Div < Component
|
31
|
+
def to_html(context)
|
32
|
+
context.div(@attributes) {
|
33
|
+
super << dynamic_html(context)
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
37
37
|
end
|
@@ -1,52 +1,53 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
|
3
3
|
# DivComposite -- HtmlGrid -- 19.04.2005 -- hwyss@ywesee.com
|
4
4
|
|
5
|
-
require
|
5
|
+
require "htmlgrid/composite"
|
6
6
|
|
7
7
|
module HtmlGrid
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
8
|
+
class DivComposite < TagComposite
|
9
|
+
def compose(model = @model)
|
10
|
+
ypos = -1
|
11
|
+
xpos = 0
|
12
|
+
div = nil
|
13
|
+
components.sort_by { |matrix, component|
|
14
|
+
[matrix.at(1), matrix.at(0), matrix[2..-1]]
|
15
|
+
}.each { |matrix, component|
|
16
|
+
if (mpos = matrix.at(1).to_i) > ypos
|
17
|
+
xpos = 0
|
18
|
+
ypos = mpos
|
19
|
+
div = []
|
20
|
+
@grid.push(div)
|
21
|
+
css = {}
|
22
|
+
if (klass = css_map[ypos])
|
23
|
+
css.store("class", klass)
|
24
|
+
end
|
25
|
+
if (id = css_id_map[ypos])
|
26
|
+
css.store("id", id)
|
27
|
+
end
|
28
|
+
if (style = css_style_map[ypos])
|
29
|
+
css.store("style", style)
|
30
|
+
end
|
31
|
+
@css_grid.push(css.empty? ? nil : css)
|
32
|
+
end
|
33
|
+
div.push(label(create(component, model), component))
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_html(context)
|
38
|
+
res = ""
|
39
|
+
@grid&.each_with_index { |div, idx|
|
39
40
|
res << context.div(tag_attributes(idx)) {
|
40
|
-
div.flatten.inject(
|
41
|
-
html << if
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
div.flatten.inject("") { |html, item|
|
42
|
+
html << if item.respond_to?(:to_html)
|
43
|
+
item.to_html(context).force_encoding("utf-8")
|
44
|
+
else
|
45
|
+
item.to_s
|
46
|
+
end
|
46
47
|
}
|
47
48
|
}
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
}
|
50
|
+
res
|
51
|
+
end
|
52
|
+
end
|
52
53
|
end
|
data/lib/htmlgrid/divform.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,14 +22,14 @@
|
|
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
|
29
|
-
require
|
27
|
+
require "htmlgrid/form"
|
28
|
+
require "htmlgrid/divcomposite"
|
29
|
+
require "htmlgrid/submit"
|
30
30
|
|
31
31
|
module HtmlGrid
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
class DivForm < DivComposite
|
33
|
+
include FormMethods
|
34
|
+
end
|
35
35
|
end
|
data/lib/htmlgrid/divlist.rb
CHANGED
@@ -1,26 +1,24 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
|
3
3
|
# HtmlGrid::DivList -- davaz.com -- 20.09.2005 -- mhuggler@ywesee.com
|
4
4
|
|
5
|
-
require
|
5
|
+
require "htmlgrid/divcomposite"
|
6
6
|
|
7
7
|
module HtmlGrid
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
class DivList < HtmlGrid::DivComposite
|
9
|
+
def compose
|
10
|
+
@model&.each_with_index { |item, idx|
|
11
11
|
@list_index = idx
|
12
|
-
|
13
|
-
|
14
|
-
=
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
12
|
+
super(item)
|
13
|
+
}
|
14
|
+
# if(header = self.class.const_get(:HEADER))
|
15
|
+
# @grid.push(create(header, @model, @session))
|
16
|
+
# @css_grid.push(nil)
|
17
|
+
# end
|
18
|
+
# if(footer = self.class.const_get(:FOOTER))
|
19
|
+
# @grid.push(create(footer, @model, @session))
|
20
|
+
# @css_grid.push(nil)
|
21
|
+
# end
|
22
|
+
end
|
23
|
+
end
|
26
24
|
end
|
data/lib/htmlgrid/divtemplate.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
|
3
3
|
# DivTemplate -- htmlgrid -- 04.05.2005 -- hwyss@ywesee.com
|
4
4
|
|
5
|
-
require
|
6
|
-
require
|
5
|
+
require "htmlgrid/divcomposite"
|
6
|
+
require "htmlgrid/template"
|
7
7
|
|
8
8
|
module HtmlGrid
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
class DivTemplate < DivComposite
|
10
|
+
include TemplateMethods
|
11
|
+
end
|
12
12
|
end
|
data/lib/htmlgrid/dojotoolkit.rb
CHANGED
@@ -1,128 +1,161 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
|
3
3
|
# HtmlGrid::DojoToolkit -- davaz.com -- 06.04.2012 -- yasaka@ywesee.com
|
4
4
|
# HtmlGrid::DojoToolkit -- davaz.com -- 14.03.2006 -- mhuggler@ywesee.com
|
5
5
|
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require 'htmlgrid/template'
|
6
|
+
require "htmlgrid/component"
|
7
|
+
require "htmlgrid/div"
|
9
8
|
|
10
9
|
module HtmlGrid
|
11
10
|
class Component
|
12
11
|
@@msie_ptrn = /MSIE\s*(\d)/
|
13
12
|
attr_accessor :dojo_tooltip
|
14
|
-
|
13
|
+
# DOJO_VERSION >= 1.7.0 only (removed old version support)
|
14
|
+
def dojo_tag(widget, args = {}, inner_html = "")
|
15
15
|
div = HtmlGrid::Div.new(@model, @session, self)
|
16
|
-
div.set_attribute(
|
16
|
+
div.set_attribute("data-dojo-type", widget)
|
17
17
|
args.each { |key, value|
|
18
18
|
if value.is_a?(Array)
|
19
|
-
value = value.join(
|
19
|
+
value = value.join(",")
|
20
20
|
end
|
21
21
|
div.set_attribute(key, value)
|
22
22
|
}
|
23
23
|
div.value = inner_html
|
24
24
|
div
|
25
25
|
end
|
26
|
+
|
26
27
|
def dojo_title=(value)
|
27
28
|
tooltip = HtmlGrid::Div.new(@model, @session, self)
|
28
29
|
tooltip.value = value
|
29
30
|
self.dojo_tooltip = tooltip
|
30
31
|
end
|
32
|
+
|
31
33
|
def dojo_parse_on_load
|
32
34
|
if @container.respond_to?(:dojo_parse_on_load)
|
33
35
|
@container.dojo_parse_on_load
|
34
36
|
end
|
35
37
|
end
|
36
38
|
unless method_defined?(:dojo_dynamic_html)
|
37
|
-
|
39
|
+
alias_method :dojo_dynamic_html, :dynamic_html
|
38
40
|
def dynamic_html(context)
|
39
|
-
html =
|
41
|
+
html = ""
|
40
42
|
attrs = {
|
41
|
-
|
42
|
-
'
|
43
|
-
'
|
44
|
-
|
43
|
+
# NOTE:
|
44
|
+
# DOJO >= 1.8 has support for type name separated by '/'
|
45
|
+
# but, <= 1.7 must be separated with '.'
|
46
|
+
"data-dojo-type" => "dijit/TooltipDialog",
|
47
|
+
"data-dojo-props" => "connectId:#{css_id}",
|
48
|
+
"id" => "#{css_id}_widget",
|
49
|
+
"style" => "display: none"
|
45
50
|
}
|
46
51
|
unless (match = @@msie_ptrn.match(@session.user_agent)) \
|
47
52
|
&& match[1].to_i < 7
|
48
53
|
attrs.update({
|
49
|
-
|
50
|
-
|
54
|
+
"toggle" => "fade",
|
55
|
+
"toggleDuration" => "500"
|
51
56
|
})
|
52
57
|
end
|
53
58
|
@dojo_tooltip ||= nil
|
54
59
|
if @dojo_tooltip.is_a?(String)
|
55
|
-
if @dojo_tooltip
|
56
|
-
attrs.store(
|
60
|
+
if !/^http/.match?(@dojo_tooltip) # e.g. javascript
|
61
|
+
attrs.store("href", @dojo_tooltip.to_s)
|
57
62
|
else
|
58
|
-
attrs.store(
|
63
|
+
attrs.store("href", @dojo_tooltip)
|
59
64
|
end
|
60
65
|
html << context.div(attrs)
|
61
66
|
elsif @dojo_tooltip.respond_to?(:to_html)
|
62
67
|
@dojo_tooltip.attributes.update(attrs)
|
63
|
-
html << @dojo_tooltip.to_html(context).force_encoding(
|
68
|
+
html << @dojo_tooltip.to_html(context).force_encoding("utf-8")
|
64
69
|
end
|
65
70
|
unless html.empty? || dojo_parse_on_load
|
66
|
-
html << context.script(
|
71
|
+
html << context.script("type" => "text/javascript") {
|
72
|
+
"dojoConfig.searchIds.push('#{css_id}')"
|
73
|
+
}
|
67
74
|
end
|
68
75
|
# call original dynamic_html
|
69
76
|
dojo_dynamic_html(context) << html
|
70
77
|
end
|
71
78
|
end
|
72
79
|
end
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
80
|
+
|
81
|
+
module DojoToolkit
|
82
|
+
module DojoTemplate
|
83
|
+
DOJO_DEBUG = false
|
84
|
+
DOJO_BACK_BUTTON = false
|
77
85
|
DOJO_ENCODING = nil
|
78
86
|
DOJO_PARSE_ON_LOAD = true
|
79
|
-
|
80
|
-
|
87
|
+
DOJO_PREFIX = []
|
88
|
+
DOJO_REQUIRE = []
|
81
89
|
def dynamic_html_headers(context)
|
82
90
|
headers = super
|
83
91
|
encoding = self.class::DOJO_ENCODING
|
84
92
|
encoding ||= Encoding.default_external
|
85
93
|
dojo_path = @lookandfeel.resource_global(:dojo_js)
|
86
|
-
dojo_path ||=
|
87
|
-
args = {
|
94
|
+
dojo_path ||= "/resources/dojo/dojo/dojo.js"
|
95
|
+
args = {"type" => "text/javascript"}
|
88
96
|
packages = ""
|
89
|
-
unless
|
97
|
+
unless self.class::DOJO_PREFIX.empty?
|
90
98
|
packages = self.class::DOJO_PREFIX.collect { |prefix, path|
|
91
99
|
"{ name: '#{prefix}', location: '#{path}' }"
|
92
100
|
}.join(",")
|
93
101
|
end
|
94
|
-
|
95
|
-
|
102
|
+
config = [
|
103
|
+
"parseOnLoad: #{self.class::DOJO_PARSE_ON_LOAD}",
|
104
|
+
"isDebug: #{self.class::DOJO_DEBUG}",
|
105
|
+
"preventBackButtonFix: #{!self.class::DOJO_BACK_BUTTON}",
|
106
|
+
"bindEncoding: '#{encoding}'",
|
107
|
+
"searchIds: []",
|
108
|
+
"urchin: ''",
|
96
109
|
"has: {
|
97
|
-
'dojo-
|
110
|
+
'dojo-firebug': #{self.class::DOJO_DEBUG},
|
111
|
+
'dojo-debug-messages': #{self.class::DOJO_DEBUG}
|
98
112
|
}",
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
isDebug: true,
|
104
|
-
async: true,
|
105
|
-
urchin: '',
|
106
|
-
};
|
107
|
-
</script>)
|
113
|
+
"packages: [ #{packages} ]"
|
114
|
+
].join(",")
|
115
|
+
args.store("data-dojo-config", config)
|
116
|
+
args.store("src", dojo_path)
|
108
117
|
headers << context.script(args)
|
109
|
-
{
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
118
|
+
args = {"type" => "text/javascript"}
|
119
|
+
headers << context.script(args) {
|
120
|
+
package_paths = self.class::DOJO_REQUIRE.map { |req|
|
121
|
+
"'#{req}'"
|
122
|
+
}.join(",")
|
123
|
+
package_names = self.class::DOJO_REQUIRE.map { |req|
|
124
|
+
req.split("/").last
|
125
|
+
}.join(",")
|
126
|
+
if @dojo_onloads
|
127
|
+
onloads = ""
|
128
|
+
@dojo_onloads.each { |onload|
|
129
|
+
onloads << "#{onload}\n"
|
130
|
+
}
|
131
|
+
script =
|
132
|
+
"require([#{package_paths}], function(#{package_names}) {" \
|
133
|
+
"ready(function() {" \
|
134
|
+
"#{onloads}" \
|
135
|
+
"});" \
|
136
|
+
"});"
|
114
137
|
else
|
115
|
-
|
138
|
+
script = "require([#{package_paths}]);"
|
116
139
|
end
|
117
|
-
|
140
|
+
script
|
141
|
+
}
|
142
|
+
dojo_dir = File.dirname(dojo_path)
|
143
|
+
headers << context.style(type: "text/css") {
|
144
|
+
<<-EOS
|
145
|
+
@import "#{File.join(dojo_dir, "/resources/dojo.css")}";
|
146
|
+
@import "#{File.join(dojo_dir, "../dijit/themes/tundra/tundra.css")}";
|
147
|
+
EOS
|
148
|
+
}
|
118
149
|
headers
|
119
150
|
end
|
151
|
+
|
120
152
|
def dojo_parse_on_load
|
121
153
|
self.class::DOJO_PARSE_ON_LOAD
|
122
154
|
end
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
155
|
+
|
156
|
+
def onload=(script)
|
157
|
+
(@dojo_onloads ||= []).push(script)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
128
161
|
end
|