htmlgrid 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/History.txt +6 -0
- data/LICENCE.txt +515 -0
- data/Manifest.txt +82 -0
- data/README.txt +30 -0
- data/Rakefile +28 -0
- data/ext/htmlgrid/MANIFEST +3 -0
- data/ext/htmlgrid/Makefile +150 -0
- data/ext/htmlgrid/extconf.rb +33 -0
- data/ext/htmlgrid/grid.c +881 -0
- data/ext/htmlgrid/grid.o +0 -0
- data/ext/htmlgrid/htmlgrid.c +30 -0
- data/ext/htmlgrid/htmlgrid.o +0 -0
- data/ext/htmlgrid/htmlgrid.so +0 -0
- data/ext/htmlgrid/include/grid.h +79 -0
- data/ext/htmlgrid/include/htmlgrid.h +33 -0
- data/install.rb +1098 -0
- data/lib/htmlgrid/booleanvalue.rb +41 -0
- data/lib/htmlgrid/button.rb +36 -0
- data/lib/htmlgrid/centeredcomposite.rb +47 -0
- data/lib/htmlgrid/component.rb +232 -0
- data/lib/htmlgrid/composite.rb +350 -0
- data/lib/htmlgrid/datevalue.rb +39 -0
- data/lib/htmlgrid/div.rb +37 -0
- data/lib/htmlgrid/divcomposite.rb +52 -0
- data/lib/htmlgrid/divform.rb +35 -0
- data/lib/htmlgrid/divlist.rb +26 -0
- data/lib/htmlgrid/divtemplate.rb +12 -0
- data/lib/htmlgrid/dojotoolkit.rb +173 -0
- data/lib/htmlgrid/errormessage.rb +70 -0
- data/lib/htmlgrid/form.rb +93 -0
- data/lib/htmlgrid/formlist.rb +42 -0
- data/lib/htmlgrid/grid.rb +286 -0
- data/lib/htmlgrid/image.rb +43 -0
- data/lib/htmlgrid/infomessage.rb +41 -0
- data/lib/htmlgrid/input.rb +59 -0
- data/lib/htmlgrid/inputcheckbox.rb +41 -0
- data/lib/htmlgrid/inputcurrency.rb +36 -0
- data/lib/htmlgrid/inputdate.rb +38 -0
- data/lib/htmlgrid/inputfile.rb +40 -0
- data/lib/htmlgrid/inputradio.rb +37 -0
- data/lib/htmlgrid/inputtext.rb +37 -0
- data/lib/htmlgrid/javascript.rb +22 -0
- data/lib/htmlgrid/label.rb +90 -0
- data/lib/htmlgrid/labeltext.rb +35 -0
- data/lib/htmlgrid/link.rb +54 -0
- data/lib/htmlgrid/list.rb +170 -0
- data/lib/htmlgrid/namedcomponent.rb +52 -0
- data/lib/htmlgrid/pass.rb +38 -0
- data/lib/htmlgrid/passthru.rb +44 -0
- data/lib/htmlgrid/popuplink.rb +66 -0
- data/lib/htmlgrid/reset.rb +36 -0
- data/lib/htmlgrid/richtext.rb +26 -0
- data/lib/htmlgrid/select.rb +53 -0
- data/lib/htmlgrid/span.rb +37 -0
- data/lib/htmlgrid/spancomposite.rb +45 -0
- data/lib/htmlgrid/spanlist.rb +15 -0
- data/lib/htmlgrid/staticinput.rb +40 -0
- data/lib/htmlgrid/submit.rb +36 -0
- data/lib/htmlgrid/template.rb +130 -0
- data/lib/htmlgrid/text.rb +36 -0
- data/lib/htmlgrid/textarea.rb +49 -0
- data/lib/htmlgrid/ulcomposite.rb +49 -0
- data/lib/htmlgrid/ullist.rb +15 -0
- data/lib/htmlgrid/urllink.rb +65 -0
- data/lib/htmlgrid/value.rb +36 -0
- data/test/rebuild.rb +39 -0
- data/test/stub/cgi.rb +44 -0
- data/test/suite.rb +32 -0
- data/test/test_component.rb +138 -0
- data/test/test_composite.rb +201 -0
- data/test/test_datevalue.rb +60 -0
- data/test/test_form.rb +123 -0
- data/test/test_formlist.rb +111 -0
- data/test/test_grid.rb +395 -0
- data/test/test_input.rb +70 -0
- data/test/test_label.rb +116 -0
- data/test/test_list.rb +146 -0
- data/test/test_select.rb +78 -0
- data/test/test_template.rb +97 -0
- data/test/test_text.rb +63 -0
- data/usage-en.txt +112 -0
- data/widget/Tooltip.js +85 -0
- metadata +180 -0
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
#
|
4
|
+
# HtmlGrid -- HyperTextMarkupLanguage Framework
|
5
|
+
# Copyright (C) 2003 ywesee - intellectual capital connected
|
6
|
+
# Andreas Schrafl, Benjamin Fay, Hannes Wyss, Markus Huggler
|
7
|
+
#
|
8
|
+
# This library is free software; you can redistribute it and/or
|
9
|
+
# modify it under the terms of the GNU Lesser General Public
|
10
|
+
# License as published by the Free Software Foundation; either
|
11
|
+
# version 2.1 of the License, or (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This library is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
16
|
+
# Lesser General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU Lesser General Public
|
19
|
+
# License along with this library; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
21
|
+
#
|
22
|
+
# ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
|
23
|
+
# htmlgrid@ywesee.com, www.ywesee.com/htmlgrid
|
24
|
+
#
|
25
|
+
# DateValue -- htmlgrid -- 10.03.2003 -- hwyss@ywesee.com
|
26
|
+
|
27
|
+
require 'htmlgrid/namedcomponent'
|
28
|
+
|
29
|
+
module HtmlGrid
|
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
|
+
end
|
data/lib/htmlgrid/div.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
#
|
4
|
+
# HtmlGrid -- HyperTextMarkupLanguage Framework
|
5
|
+
# Copyright (C) 2003 ywesee - intellectual capital connected
|
6
|
+
# Andreas Schrafl, Benjamin Fay, Hannes Wyss, Markus Huggler
|
7
|
+
#
|
8
|
+
# This library is free software; you can redistribute it and/or
|
9
|
+
# modify it under the terms of the GNU Lesser General Public
|
10
|
+
# License as published by the Free Software Foundation; either
|
11
|
+
# version 2.1 of the License, or (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This library is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
16
|
+
# Lesser General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU Lesser General Public
|
19
|
+
# License along with this library; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
21
|
+
#
|
22
|
+
# ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
|
23
|
+
# htmlgrid@ywesee.com, www.ywesee.com
|
24
|
+
#
|
25
|
+
# Div -- oddb -- 12.11.2004 -- jlang@ywesee.com, usenguel@ywesee.com
|
26
|
+
|
27
|
+
require 'htmlgrid/component'
|
28
|
+
|
29
|
+
module HtmlGrid
|
30
|
+
class Div < Component
|
31
|
+
def to_html(context)
|
32
|
+
context.div(@attributes) {
|
33
|
+
super << dynamic_html(context)
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
# DivComposite -- HtmlGrid -- 19.04.2005 -- hwyss@ywesee.com
|
4
|
+
|
5
|
+
require 'htmlgrid/composite'
|
6
|
+
|
7
|
+
module HtmlGrid
|
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
|
+
def to_html(context)
|
37
|
+
res = ''
|
38
|
+
@grid.each_with_index { |div, idx|
|
39
|
+
res << context.div(tag_attributes(idx)) {
|
40
|
+
div.flatten.inject('') { |html, item|
|
41
|
+
html << if(item.respond_to?(:to_html))
|
42
|
+
item.to_html(context)
|
43
|
+
else
|
44
|
+
item.to_s
|
45
|
+
end
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
res
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
#
|
4
|
+
# HtmlGrid -- HyperTextMarkupLanguage Framework
|
5
|
+
# Copyright (C) 2003 ywesee - intellectual capital connected
|
6
|
+
# Andreas Schrafl, Benjamin Fay, Hannes Wyss, Markus Huggler
|
7
|
+
#
|
8
|
+
# This library is free software; you can redistribute it and/or
|
9
|
+
# modify it under the terms of the GNU Lesser General Public
|
10
|
+
# License as published by the Free Software Foundation; either
|
11
|
+
# version 2.1 of the License, or (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This library is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
16
|
+
# Lesser General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU Lesser General Public
|
19
|
+
# License along with this library; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
21
|
+
#
|
22
|
+
# ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
|
23
|
+
# htmlgrid@ywesee.com, www.ywesee.com/htmlgrid
|
24
|
+
#
|
25
|
+
# Form -- htmlgrid -- 23.10.2002 -- hwyss@ywesee.com
|
26
|
+
|
27
|
+
require 'htmlgrid/form'
|
28
|
+
require 'htmlgrid/divcomposite'
|
29
|
+
require 'htmlgrid/submit'
|
30
|
+
|
31
|
+
module HtmlGrid
|
32
|
+
class DivForm < DivComposite
|
33
|
+
include FormMethods
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
# HtmlGrid::DivList -- davaz.com -- 20.09.2005 -- mhuggler@ywesee.com
|
4
|
+
|
5
|
+
require 'htmlgrid/divcomposite'
|
6
|
+
|
7
|
+
module HtmlGrid
|
8
|
+
class DivList < HtmlGrid::DivComposite
|
9
|
+
def compose
|
10
|
+
@model.each_with_index { |item, idx|
|
11
|
+
@list_index = idx
|
12
|
+
super(item)
|
13
|
+
}
|
14
|
+
=begin
|
15
|
+
if(header = self.class.const_get(:HEADER))
|
16
|
+
@grid.push(create(header, @model, @session))
|
17
|
+
@css_grid.push(nil)
|
18
|
+
end
|
19
|
+
if(footer = self.class.const_get(:FOOTER))
|
20
|
+
@grid.push(create(footer, @model, @session))
|
21
|
+
@css_grid.push(nil)
|
22
|
+
end
|
23
|
+
=end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
# DivTemplate -- htmlgrid -- 04.05.2005 -- hwyss@ywesee.com
|
4
|
+
|
5
|
+
require 'htmlgrid/divcomposite'
|
6
|
+
require 'htmlgrid/template'
|
7
|
+
|
8
|
+
module HtmlGrid
|
9
|
+
class DivTemplate < DivComposite
|
10
|
+
include TemplateMethods
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,173 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
# HtmlGrid::DojoToolkit -- davaz.com -- 14.03.2006 -- mhuggler@ywesee.com
|
4
|
+
|
5
|
+
require 'htmlgrid/component'
|
6
|
+
require 'htmlgrid/div'
|
7
|
+
|
8
|
+
module HtmlGrid
|
9
|
+
class Component
|
10
|
+
@@msie_ptrn = /MSIE\s*(\d)/
|
11
|
+
attr_accessor :dojo_tooltip
|
12
|
+
def dojo_9?
|
13
|
+
defined?(::DOJO_VERSION) && ::DOJO_VERSION >= '0.9'
|
14
|
+
end
|
15
|
+
def dojo_tag(widget, args={}, inner_html='')
|
16
|
+
# <dojo:#{widget} ...> does not work on konqueror as of
|
17
|
+
# 02.06.2006. In combination with DOJO_DEBUG = true it even
|
18
|
+
# hangs konqueror.
|
19
|
+
=begin
|
20
|
+
dojo_tag = "<div dojoType=\"#{widget}\""
|
21
|
+
args.each { |key, value|
|
22
|
+
if(value.is_a?(Array))
|
23
|
+
dojo_tag << " #{key}=\"#{value.join(';')}\""
|
24
|
+
else
|
25
|
+
dojo_tag << " #{key}=\"#{value}\""
|
26
|
+
end
|
27
|
+
}
|
28
|
+
dojo_tag << "></div>"
|
29
|
+
=end
|
30
|
+
div = HtmlGrid::Div.new(@model, @session, self)
|
31
|
+
div.set_attribute('dojoType', widget)
|
32
|
+
lim = dojo_9? ? "," : ";"
|
33
|
+
args.each { |key, value|
|
34
|
+
if(value.is_a?(Array))
|
35
|
+
value = value.join(lim)
|
36
|
+
end
|
37
|
+
div.set_attribute(key, value)
|
38
|
+
}
|
39
|
+
div.value = inner_html
|
40
|
+
div
|
41
|
+
end
|
42
|
+
def dojo_title=(value)
|
43
|
+
tooltip = HtmlGrid::Div.new(@model, @session, self)
|
44
|
+
tooltip.value = value
|
45
|
+
self.dojo_tooltip = tooltip
|
46
|
+
end
|
47
|
+
def dojo_parse_widgets
|
48
|
+
if(@container.respond_to?(:dojo_parse_widgets))
|
49
|
+
@container.dojo_parse_widgets
|
50
|
+
end
|
51
|
+
end
|
52
|
+
unless(method_defined?(:dojo_dynamic_html))
|
53
|
+
alias :dojo_dynamic_html :dynamic_html
|
54
|
+
def dynamic_html(context)
|
55
|
+
html = ''
|
56
|
+
attrs = {
|
57
|
+
'dojoType' => dojo_9? ? 'ywesee.widget.Tooltip' : 'tooltip',
|
58
|
+
'connectId' => css_id,
|
59
|
+
'id' => "#{css_id}_widget",
|
60
|
+
'style' => 'display: none',
|
61
|
+
}
|
62
|
+
unless((match = @@msie_ptrn.match(@session.user_agent)) \
|
63
|
+
&& match[1].to_i < 7)
|
64
|
+
attrs.update({
|
65
|
+
'toggle' => 'fade',
|
66
|
+
'toggleDuration' => '500',
|
67
|
+
})
|
68
|
+
end
|
69
|
+
if(@dojo_tooltip.is_a?(String))
|
70
|
+
attrs.store('href', dojo_9? ? "'#@dojo_tooltip'" : @dojo_tooltip)
|
71
|
+
html << context.div(attrs)
|
72
|
+
elsif(@dojo_tooltip.respond_to?(:to_html))
|
73
|
+
@dojo_tooltip.attributes.update(attrs)
|
74
|
+
html << @dojo_tooltip.to_html(context)
|
75
|
+
end
|
76
|
+
unless(html.empty? || dojo_parse_widgets)
|
77
|
+
html << context.script('type' => 'text/javascript') {
|
78
|
+
"djConfig.searchIds.push('#{css_id}')"
|
79
|
+
}
|
80
|
+
end
|
81
|
+
dojo_dynamic_html(context) << html
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
module DojoToolkit
|
86
|
+
module DojoTemplate
|
87
|
+
DOJO_DEBUG = false
|
88
|
+
DOJO_BACK_BUTTON = false
|
89
|
+
DOJO_ENCODING = nil
|
90
|
+
DOJO_PARSE_WIDGETS = true
|
91
|
+
DOJO_PREFIX = []
|
92
|
+
DOJO_REQUIRE = []
|
93
|
+
def dynamic_html_headers(context)
|
94
|
+
headers = super
|
95
|
+
encoding = self.class::DOJO_ENCODING
|
96
|
+
encoding ||= if RUBY_VERSION >= '1.9'
|
97
|
+
Encoding.default_external
|
98
|
+
else
|
99
|
+
$KCODE == 'UTF8' ? 'UTF-8' : 'ISO-8859-1'
|
100
|
+
end
|
101
|
+
dojo_path = @lookandfeel.resource_global(:dojo_js)
|
102
|
+
args = {
|
103
|
+
'type' => 'text/javascript',
|
104
|
+
}
|
105
|
+
headers << context.script(args.dup) {
|
106
|
+
"djConfig = {
|
107
|
+
isDebug: #{self.class::DOJO_DEBUG},
|
108
|
+
parseWidgets: #{dojo_parse_widgets},
|
109
|
+
preventBackButtonFix: #{!self.class::DOJO_BACK_BUTTON},
|
110
|
+
bindEncoding: '#{encoding}',
|
111
|
+
searchIds: [],
|
112
|
+
urchin: ''
|
113
|
+
};"
|
114
|
+
}
|
115
|
+
if(dojo_9?)
|
116
|
+
dojo_path ||= '/resources/dojo/dojo/dojo.js'
|
117
|
+
config = [ "parseOnLoad:true",
|
118
|
+
"isDebug:#{self.class::DOJO_DEBUG}",
|
119
|
+
"preventBackButtonFix:#{!self.class::DOJO_BACK_BUTTON}",
|
120
|
+
"bindEncoding:'#{encoding}'",
|
121
|
+
"searchIds:[]",
|
122
|
+
"urchin:''" ].join(',')
|
123
|
+
args.store('djConfig', config)
|
124
|
+
else
|
125
|
+
dojo_path ||= '/resources/dojo/dojo.js'
|
126
|
+
end
|
127
|
+
args.store('src', dojo_path)
|
128
|
+
headers << context.script(args)
|
129
|
+
unless(self.class::DOJO_PREFIX.empty?)
|
130
|
+
register = dojo_9? ? 'registerModulePath' : 'setModulePrefix'
|
131
|
+
args = {
|
132
|
+
'type' => 'text/javascript',
|
133
|
+
}
|
134
|
+
headers << context.script(args) {
|
135
|
+
self.class::DOJO_PREFIX.collect { |prefix, path|
|
136
|
+
"dojo.#{register}('#{prefix}', '#{path}');"
|
137
|
+
}.join
|
138
|
+
}
|
139
|
+
end
|
140
|
+
args = {
|
141
|
+
'type' => 'text/javascript',
|
142
|
+
}
|
143
|
+
headers << context.script(args) {
|
144
|
+
script = ''
|
145
|
+
self.class::DOJO_REQUIRE.each { |req|
|
146
|
+
script << "dojo.require('#{req}');"
|
147
|
+
}
|
148
|
+
if(@dojo_onloads)
|
149
|
+
@dojo_onloads.each { |onload|
|
150
|
+
script << "dojo.addOnLoad(function() { #{onload} });"
|
151
|
+
}
|
152
|
+
end
|
153
|
+
script
|
154
|
+
}
|
155
|
+
if(dojo_9?)
|
156
|
+
dojo_dir = File.dirname(dojo_path)
|
157
|
+
headers << context.style(:type => "text/css") { <<-EOS
|
158
|
+
@import "#{File.join(dojo_dir, "/resources/dojo.css")}";
|
159
|
+
@import "#{File.join(dojo_dir, "../dijit/themes/tundra/tundra.css")}";
|
160
|
+
EOS
|
161
|
+
}
|
162
|
+
end
|
163
|
+
headers
|
164
|
+
end
|
165
|
+
def dojo_parse_widgets
|
166
|
+
self.class::DOJO_PARSE_WIDGETS
|
167
|
+
end
|
168
|
+
def onload=(script)
|
169
|
+
(@dojo_onloads ||= []).push(script)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
#
|
4
|
+
# HtmlGrid -- HyperTextMarkupLanguage Framework
|
5
|
+
# Copyright (C) 2003 ywesee - intellectual capital connected
|
6
|
+
# Andreas Schrafl, Benjamin Fay, Hannes Wyss, Markus Huggler
|
7
|
+
#
|
8
|
+
# This library is free software; you can redistribute it and/or
|
9
|
+
# modify it under the terms of the GNU Lesser General Public
|
10
|
+
# License as published by the Free Software Foundation; either
|
11
|
+
# version 2.1 of the License, or (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This library is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
16
|
+
# Lesser General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU Lesser General Public
|
19
|
+
# License along with this library; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
21
|
+
#
|
22
|
+
# ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
|
23
|
+
# htmlgrid@ywesee.com, www.ywesee.com/htmlgrid
|
24
|
+
#
|
25
|
+
# ErrorMessage -- htmlgrid -- 10.04.2003 -- benfay@ywesee.com
|
26
|
+
|
27
|
+
module HtmlGrid
|
28
|
+
module ErrorMessage
|
29
|
+
private
|
30
|
+
def error_message(ypos = 0)
|
31
|
+
@displayed_messages = []
|
32
|
+
if(@session.warning?)
|
33
|
+
__messages(@session.warnings, 'warning', ypos)
|
34
|
+
end
|
35
|
+
if(@session.error?)
|
36
|
+
__messages(@session.errors, 'processingerror', ypos)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
def error_text(obj)
|
40
|
+
message = obj.message
|
41
|
+
txt = HtmlGrid::Text.new(message, @model, @session, self)
|
42
|
+
if(txt.value.nil?)
|
43
|
+
txt.value = @lookandfeel.lookup(message, escape(obj.value))
|
44
|
+
end
|
45
|
+
if(txt.value.nil? && (match = /^(._[^_]+)_(.*)$/.match(message.to_s)) \
|
46
|
+
&& (label = @lookandfeel.lookup(match[2])))
|
47
|
+
txt.value = @lookandfeel.lookup(match[1], label)
|
48
|
+
end
|
49
|
+
txt
|
50
|
+
end
|
51
|
+
def __message(obj, css_class, ypos=0)
|
52
|
+
@displayed_messages ||= []
|
53
|
+
message = obj.message
|
54
|
+
unless(@displayed_messages.include?(message))
|
55
|
+
@displayed_messages.push(message)
|
56
|
+
txt = error_text(obj)
|
57
|
+
unless(txt.value.nil?)
|
58
|
+
insert_row(ypos, txt, css_class)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
def __messages(ary, css_class, ypos=0)
|
63
|
+
ary.sort_by { |item|
|
64
|
+
(components.index(item.key) || [-1,-1]).reverse
|
65
|
+
}.reverse.each { |item|
|
66
|
+
__message(item, css_class, ypos)
|
67
|
+
}
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
#
|
4
|
+
# HtmlGrid -- HyperTextMarkupLanguage Framework
|
5
|
+
# Copyright (C) 2003 ywesee - intellectual capital connected
|
6
|
+
# Andreas Schrafl, Benjamin Fay, Hannes Wyss, Markus Huggler
|
7
|
+
#
|
8
|
+
# This library is free software; you can redistribute it and/or
|
9
|
+
# modify it under the terms of the GNU Lesser General Public
|
10
|
+
# License as published by the Free Software Foundation; either
|
11
|
+
# version 2.1 of the License, or (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This library is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
16
|
+
# Lesser General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU Lesser General Public
|
19
|
+
# License along with this library; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
21
|
+
#
|
22
|
+
# ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
|
23
|
+
# htmlgrid@ywesee.com, www.ywesee.com/htmlgrid
|
24
|
+
#
|
25
|
+
# Form -- htmlgrid -- 23.10.2002 -- hwyss@ywesee.com
|
26
|
+
|
27
|
+
require 'htmlgrid/composite'
|
28
|
+
require 'htmlgrid/submit'
|
29
|
+
|
30
|
+
module HtmlGrid
|
31
|
+
module FormMethods
|
32
|
+
AUTOFILL = false
|
33
|
+
if RUBY_VERSION >= '1.9'
|
34
|
+
ACCEPT_CHARSET = Encoding.default_external || 'UTF-8'
|
35
|
+
else
|
36
|
+
ACCEPT_CHARSET = $KCODE == 'UTF8' ? 'UTF-8' : 'ISO-8859-1'
|
37
|
+
end
|
38
|
+
EVENT = nil
|
39
|
+
FORM_ACTION = nil
|
40
|
+
FORM_METHOD = 'POST'
|
41
|
+
FORM_NAME = 'stdform'
|
42
|
+
TAG_METHOD = :form
|
43
|
+
def autofill?
|
44
|
+
self.class.const_get(:AUTOFILL)
|
45
|
+
end
|
46
|
+
def event
|
47
|
+
self::class::EVENT
|
48
|
+
end
|
49
|
+
def formname
|
50
|
+
if(defined? self::class::FORM_NAME)
|
51
|
+
self::class::FORM_NAME
|
52
|
+
end
|
53
|
+
end
|
54
|
+
def onsubmit=(onsubmit)
|
55
|
+
@form_properties["onSubmit"] = onsubmit
|
56
|
+
end
|
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
|
+
private
|
63
|
+
def hidden_fields(context)
|
64
|
+
'' <<
|
65
|
+
context.hidden('flavor', @lookandfeel.flavor) <<
|
66
|
+
context.hidden('language', @lookandfeel.language) <<
|
67
|
+
context.hidden({'NAME' => 'event', 'ID' => 'event',
|
68
|
+
'VALUE' => event.to_s}) <<
|
69
|
+
context.hidden('state_id', @session.state.object_id.to_s)
|
70
|
+
end
|
71
|
+
def init
|
72
|
+
@form_properties = {}
|
73
|
+
if(defined? self::class::FORM_CSS_CLASS)
|
74
|
+
@form_properties.store('class', self::class::FORM_CSS_CLASS)
|
75
|
+
end
|
76
|
+
if(defined? self::class::FORM_NAME)
|
77
|
+
@form_properties.store('NAME', self::class::FORM_NAME)
|
78
|
+
end
|
79
|
+
if(defined? self::class::FORM_ID)
|
80
|
+
@form_properties.store('ID', self::class::FORM_ID)
|
81
|
+
end
|
82
|
+
super
|
83
|
+
@form_properties.update({
|
84
|
+
'METHOD' => self::class::FORM_METHOD.dup,
|
85
|
+
'ACTION' => (self::class::FORM_ACTION || @lookandfeel.base_url),
|
86
|
+
'ACCEPT-CHARSET' => self::class::ACCEPT_CHARSET,
|
87
|
+
})
|
88
|
+
end
|
89
|
+
end
|
90
|
+
class Form < Composite
|
91
|
+
include FormMethods
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
#
|
4
|
+
# HtmlGrid -- HyperTextMarkupLanguage Framework
|
5
|
+
# Copyright (C) 2003 ywesee - intellectual capital connected
|
6
|
+
# Andreas Schrafl, Benjamin Fay, Hannes Wyss, Markus Huggler
|
7
|
+
#
|
8
|
+
# This library is free software; you can redistribute it and/or
|
9
|
+
# modify it under the terms of the GNU Lesser General Public
|
10
|
+
# License as published by the Free Software Foundation; either
|
11
|
+
# version 2.1 of the License, or (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This library is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
16
|
+
# Lesser General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU Lesser General Public
|
19
|
+
# License along with this library; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
21
|
+
#
|
22
|
+
# ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
|
23
|
+
# htmlgrid@ywesee.com, www.ywesee.com/htmlgrid
|
24
|
+
#
|
25
|
+
# FormList -- htmlgrid -- 25.03.2003 -- aschrafl@ywesee.com
|
26
|
+
|
27
|
+
require 'htmlgrid/list'
|
28
|
+
require 'htmlgrid/form'
|
29
|
+
require 'htmlgrid/value'
|
30
|
+
require 'htmlgrid/button'
|
31
|
+
|
32
|
+
module HtmlGrid
|
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
|
+
end
|