aurita-gui 0.3.5 → 0.3.6

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.
@@ -1,4 +1,16 @@
1
1
 
2
+ == 0.3.6 / 2009-01-31
3
+
4
+ * Added Selection_List_Field.
5
+ * Several minor fixes in Options_Field, and Form
6
+ * Added more specs.
7
+
8
+ == 0.3.5 / 2009-01-27
9
+
10
+ * Element instances now behave like arrays (nested content is delegated).
11
+ * Object trees now can be iterated recursively via Element#recurse { |element| ... }
12
+ * Added more specs.
13
+
2
14
  === 0.3.4 / 2009-01-26
3
15
 
4
16
  * Added retreiving elements from object tree
data/README ADDED
@@ -0,0 +1,10 @@
1
+
2
+ Current documentation is online at
3
+
4
+ http://intra.wortundform.de/aurita-gui
5
+
6
+ Mail your requests to fuchs@wortundform.de,
7
+ i'll respond within 24 hours.
8
+
9
+ have fun!
10
+ Tobi
@@ -12,14 +12,14 @@ of primitive and complex HTML elements, such as tables and forms.
12
12
  It is a core module of the Aurita application framework, but it can be used
13
13
  as stand-alone library in any context (such as rails).
14
14
  As there seems to be a lack of ruby form generators, i decided to release this
15
- part of Aurita in a single gem with no dependencies.
15
+ part of Aurita in a single gem with no dependencies on aurita itself.
16
16
  EOF
17
- s.version = '0.3.5'
17
+ s.version = '0.3.6'
18
18
  s.author = 'Tobias Fuchs'
19
- s.email = 'fuchs@atomnode.net'
19
+ s.email = 'fuchs@wortundform.de'
20
20
  s.date = Time.now
21
21
  s.files = '*.rb'
22
- # s.add_dependency('postgres', '>= 0.1')
22
+ s.add_dependency('arrayfields', '>= 4.6.0')
23
23
  s.files = FileList['*',
24
24
  'lib/*',
25
25
  'lib/aurita-gui/*',
@@ -0,0 +1,15 @@
1
+
2
+ require 'rubygems'
3
+ require 'aurita-gui'
4
+
5
+ include Aurita::GUI
6
+
7
+ puts Builder.new {
8
+ div.outer {
9
+ div.header {
10
+ h2 { 'header here' }
11
+ div.content { 'content here' }
12
+ }
13
+ }
14
+ }.to_s
15
+
@@ -471,6 +471,43 @@ module GUI
471
471
  end
472
472
 
473
473
  end # class
474
+
475
+ class Buffered_Element < Element
476
+
477
+ def initialize(buffer, *args, &block)
478
+ @output_buffer = buffer
479
+ super(*args, &block)
480
+ end
481
+
482
+ def method_missing(meth, value=nil, &block)
483
+ if block_given? then
484
+ @attrib[:class] = meth
485
+ @attrib.update(value) if value.is_a? Hash
486
+ c = yield
487
+ c = [ c ] unless c.is_a?(Array)
488
+ __setobj__(c)
489
+
490
+ return string()
491
+ elsif !value.nil? && !meth.to_s.include?('=') then
492
+ @attrib[:class] = meth
493
+ case value
494
+ when Hash then
495
+ @attrib.update(value)
496
+ c = value[:content]
497
+ c = [ c ] if (c && !c.is_a?(Array))
498
+ __setobj__(c) if c
499
+ when String then
500
+ __setobj__([value])
501
+ end
502
+
503
+ return string()
504
+ else
505
+ return @attrib[meth] unless value or meth.to_s.include? '='
506
+ @attrib[meth.to_s.gsub('=','').intern] = value
507
+ end
508
+ end
509
+
510
+ end
474
511
 
475
512
  end # module
476
513
  end # module
@@ -17,6 +17,7 @@ require('aurita-gui/form/file_field')
17
17
  require('aurita-gui/form/boolean_field')
18
18
  require('aurita-gui/form/text_field')
19
19
  require('aurita-gui/form/password_field')
20
+ require('aurita-gui/form/selection_list')
20
21
 
21
22
  module Aurita
22
23
  module GUI
@@ -11,6 +11,20 @@ module GUI
11
11
  params[:options] = [ 1 ]
12
12
  super(params, &block)
13
13
  end
14
+ def option_elements
15
+ elements = []
16
+ options().each_pair { |k,v|
17
+ box_attribs = { :type => :checkbox,
18
+ :value => k,
19
+ :name => @attrib[:name] }
20
+ checked = (@value && k.to_s == @value.to_s)? true : nil
21
+ box_attribs[:checked] = checked
22
+ element = []
23
+ element << HTML.input(box_attribs)
24
+ elements << element
25
+ }
26
+ elements
27
+ end
14
28
  end
15
29
 
16
30
  end
@@ -10,40 +10,23 @@ module GUI
10
10
  #
11
11
  class Checkbox_Field < Options_Field
12
12
  def option_elements
13
- options = []
14
- @option_elements.each { |option|
15
- if option.kind_of? Hash then
16
- # Options have been set as value/label pair, like
17
- #
18
- # @options = { 1 => 'first', 2 => 'second' }
19
- #
20
- option.each_pair { |k,v|
21
- box_attribs = { :type => :checkbox,
22
- :value => k,
23
- :name => @attrib[:name] }
24
- box_attribs[:checked] = true if (v.to_s == @value.to_s)
25
- options << HTML.input(box_attribs)
26
- }
27
- elsif option.kind_of? Element then
28
- # Option element has been built externally, like in
29
- #
30
- # @options = [ HTML.option(:class => :custom, :label => 'built manually') ]
31
- #
32
- option.name = @attrib[:name]
33
- option.tag = :input
34
- option.type = :checkbox
35
- options << option
36
- else
37
- # For @options = [ :foo, :bar, 'wombat' ],
38
- #
39
- box_attribs = { :type => :checkbox,
40
- :value => option.to_s,
41
- :name => @attrib[:name] }
42
- box_attribs[:checked] = true if (option.to_s == @value.to_s)
43
- options << HTML.input(box_attribs)
13
+ elements = []
14
+ options().each_pair { |k,v|
15
+ box_attribs = { :type => :checkbox,
16
+ :value => k,
17
+ :name => @attrib[:name] }
18
+ if @value.is_a?(Array) then
19
+ checked = (@value.map { |v| v.to_s }.include?(k))? true : nil
20
+ else
21
+ checked = (@value && k.to_s == @value.to_s)? true : nil
44
22
  end
23
+ box_attribs[:checked] = checked
24
+ element = []
25
+ element << HTML.input(box_attribs)
26
+ element << HTML.label(:for => option_id) { v } if v
27
+ elements << element
45
28
  }
46
- options
29
+ elements
47
30
  end
48
31
 
49
32
  def element
@@ -86,6 +86,7 @@ module GUI
86
86
  :month => date.month,
87
87
  :day => date.day }
88
88
  else
89
+ return
89
90
  end
90
91
  @year, @month, @day = @value[:year], @value[:month], @value[:day]
91
92
  end
@@ -140,7 +140,7 @@ module GUI
140
140
 
141
141
  # Virtual method.
142
142
  def element
143
- raise Form_Error.new('Cannot render abstract class Form_Field') unless @element
143
+ raise Form_Error.new('Form_Field@element not set') unless @element
144
144
  @element
145
145
  end
146
146
 
@@ -1,5 +1,6 @@
1
1
 
2
2
  require('aurita-gui/form/form_field')
3
+ require('arrayfields')
3
4
 
4
5
  module Aurita
5
6
  module GUI
@@ -69,14 +70,9 @@ module GUI
69
70
  # Set option values as array, labels as hash:
70
71
  #
71
72
  # s1 = Select_Field.new(:name => :test,
72
- # :label => { 'Pick one' => [ 'foo', 'bar', 'wombat' ] },
73
- # :options => [ 1,2,3 ])
74
- # Same as
75
- #
76
- # s1 = Select_Field.new(:name => :test,
77
73
  # :label => 'Pick one',
78
- # :option_labels => [ 'foo', 'bar', 'wombat' ],
79
- # :options => [ 1,2,3 ] )
74
+ # :option_labels => [ 'foo', 'bar', 'wombat' ] },
75
+ # :option_values => [ 1,2,3 ])
80
76
  # Ranges are ok, too:
81
77
  #
82
78
  # s1 = Select_Field.new(:name => :test,
@@ -93,20 +89,11 @@ module GUI
93
89
  # Change option labels using a hash.
94
90
  # Compared to using an array, this is useful
95
91
  # in case you don't know the order of option
96
- # values.
92
+ # values. You can also rename some or all option
93
+ # labels this way.
97
94
  #
98
95
  # s1.option_labels = { 1 => 'ras', 2 => 'dwa', 3 => 'tri' }
99
96
  #
100
- # Overwriting the labels field does the same,
101
- # but this way, you also can change the
102
- # field label:
103
- #
104
- # s1.label = { 'Select one' => [ 'foo', 'bar', 'wombat' ] }
105
- #
106
- # Or
107
- #
108
- # s1.label = { 'Select one' => { 1 => 'foo', 2 => 'bar', 3 => 'wombat' } }
109
- #
110
97
  # Of yourse you can replace all option values
111
98
  # and their labels at once by overwriting
112
99
  # the options field:
@@ -116,20 +103,18 @@ module GUI
116
103
  #
117
104
  class Options_Field < Form_Field
118
105
 
119
- attr_accessor :options, :options_range, :option_labels, :value
106
+ attr_accessor :option_values, :option_labels
107
+ attr_reader :value
120
108
 
121
109
  def initialize(params, &block)
122
- @options = params[:options]
123
- @options = @options.to_a if @options.kind_of? Range
124
- @options_range = params[:options_range]
125
110
  @option_labels = params[:option_labels]
126
- set_option_labels(params[:option_labels]) if params[:option_labels]
127
111
  @option_labels ||= []
128
- @options ||= {}
129
- @options_range ||= []
130
- @option_elements ||= []
112
+ @option_values = params[:option_values]
113
+ @option_values ||= []
131
114
  @value = params[:value]
132
115
 
116
+ set_options(params[:options]) if params[:options]
117
+
133
118
  if block_given? then
134
119
  yield.each { |option|
135
120
  add_option(option)
@@ -140,52 +125,74 @@ module GUI
140
125
  params.delete(:options)
141
126
  # Option fields don't have a value attribute themselves
142
127
  params.delete(:value)
143
- params.delete(:options_range)
128
+ params.delete(:option_values)
144
129
  params.delete(:option_labels)
145
130
  super(params)
146
131
  end
147
132
 
133
+ def options
134
+ @option_labels = @option_values.dup unless @option_labels.length > 0
135
+ @option_labels.fields = @option_values.map { |v| v.to_s }
136
+ @option_labels
137
+ end
138
+
139
+ def option_hash
140
+ options().to_hash
141
+ end
142
+
148
143
  def option_labels=(labels)
149
- @option_labels = labels
150
- renamed_options = {}
151
- if @options.kind_of? Hash then
152
- index = 0
153
- @options.each_pair { |value,label|
154
- renamed_options[value] = labels[value]
155
- index += 1
144
+ # [ :red, :blue, :green, :yellow ]
145
+ if labels.kind_of? Array then
146
+ @option_labels = labels
147
+ # { 0 => :red, 1 => :blue }
148
+ elsif labels.kind_of? Hash then
149
+ @option_labels ||= []
150
+ @option_values ||= []
151
+ # Ensure keys and values are strings:
152
+ labels.each_pair { |k,v|
153
+ labels.delete(k)
154
+ labels[k.to_s] = v
156
155
  }
157
- elsif @options.kind_of? Array then
158
- index = 0
159
- @options.each { |value|
160
- renamed_options[value] = labels[index]
161
- index += 1
156
+ opt_field = options()
157
+ labels.sort.each { |pair|
158
+ opt_field[pair[0].to_s] = pair[1]
162
159
  }
163
160
  end
164
- @options = renamed_options
165
- @option_elements = [ @options ]
166
161
  end
167
162
  alias set_option_labels option_labels=
168
163
 
169
164
  def add_option(option={})
170
165
  if option.kind_of? Array then
171
- @option_elements += option
172
- elsif option.kind_of? Hash then
173
- @option_elements << options
166
+ @option_values += option
174
167
  elsif option.kind_of? Range then
175
- @option_elements += option.to_a
168
+ @option_values += option.to_a
169
+ elsif option.kind_of? Hash then
170
+ # @option_elements << options
176
171
  end
177
- # @option_elements << option
178
172
  end
179
173
 
180
174
  def options=(options)
181
175
  if options.kind_of? Array then
182
- @option_elements = options
183
- elsif options.kind_of? Hash then
184
- @option_elements = [ options ]
176
+ @option_values = options
177
+ @option_labels = options
185
178
  elsif options.kind_of? Range then
186
- @option_elements = options.to_a
179
+ @option_values = options.to_a
180
+ @option_labels = options.to_a
181
+ elsif options.kind_of? Hash then
182
+ @option_values = []
183
+ @option_labels = []
184
+ options.sort.each { |pair|
185
+ @option_values << pair[0]
186
+ @option_labels << pair[1]
187
+ }
187
188
  end
188
189
  end
190
+ alias set_options options=
191
+
192
+ def value=(value)
193
+ @value = value
194
+ end
195
+ alias set_value value=
189
196
 
190
197
  def [](index)
191
198
  @option_elements[index]
@@ -195,7 +202,7 @@ module GUI
195
202
  end
196
203
 
197
204
  def element
198
- raise Form_Error.new('Method #element from Abstract class Options_Field has not been overloaded.')
205
+ raise Form_Error.new('Method #element from Abstract class Options_Field has not been overloaded in ' << self.class.to_s)
199
206
  end
200
207
 
201
208
  def content
@@ -24,24 +24,18 @@ module GUI
24
24
  class Radio_Field < Options_Field
25
25
 
26
26
  # Returns array of option elements for this
27
- # radio field.
27
+ # radio field, i.e. an array of <input type="checkbox" ... />.
28
28
  # Each option is a radio input field with
29
29
  # @name as common name attribute.
30
30
  def option_elements
31
- options = []
32
- @option_elements.each { |option|
33
- if option.kind_of? Hash then
34
- option.each_pair { |k,v|
35
- options << HTML.input(:type => :radio, :value => k, :name => @attrib[:name] ) { v }
36
- }
37
- elsif option.kind_of? Element then
38
- option.name = @attrib[:name]
39
- option.tag = :input
40
- option.type = :radio
41
- options << option
42
- end
31
+ elements = []
32
+ options().each_pair { |k,v|
33
+ element = []
34
+ element << HTML.input(:type => :radio, :value => k, :name => @attrib[:name] )
35
+ element << HTML.label(:for => option_id) { v } if v
36
+ elements << element
43
37
  }
44
- options
38
+ elements
45
39
  end
46
40
 
47
41
  # Renders this radio field to a HTML.ul element,
@@ -5,24 +5,18 @@ module Aurita
5
5
  module GUI
6
6
 
7
7
  class Select_Field < Options_Field
8
+
9
+ # Returns array of option elements for this
10
+ # select field.
8
11
  def option_elements
9
- options = []
10
- @option_elements.each { |option|
11
- if option.kind_of? Hash then
12
- option.each_pair { |k,v|
13
- selected = (@value && k.to_s == @value.to_s)? true : nil
14
- options << HTML.option(:value => k, :selected => selected) { v }
15
- }
16
- elsif option.kind_of? Element then
17
- option.tag = :option
18
- options << option
19
- else
20
- selected = (@value && option.to_s == @value.to_s)? true : nil
21
- options << HTML.option(:value => option, :selected => selected) { option }
22
- end
12
+ elements = []
13
+ options().each_pair { |k,v|
14
+ selected = (@value && k.to_s == @value.to_s)? true : nil
15
+ elements << HTML.option(:value => k, :selected => selected) { v }
23
16
  }
24
- options
17
+ elements
25
18
  end
19
+
26
20
  def element
27
21
  HTML.select(@attrib) {
28
22
  option_elements()
@@ -30,7 +24,7 @@ module GUI
30
24
  end
31
25
  def readonly_element
32
26
  HTML.div(@attrib) {
33
- @options[@value]
27
+ options()[@value]
34
28
  }
35
29
  end
36
30
  end
@@ -0,0 +1,181 @@
1
+
2
+ require('aurita-gui/form/form_field')
3
+ require('aurita-gui/form/select_field')
4
+ require('aurita-gui/form/options_field')
5
+
6
+ module Aurita
7
+ module GUI
8
+
9
+ class Selection_List_Option_Field < Form_Field
10
+ def initialize(params={})
11
+ params.delete(:selection_list_params)
12
+ super(params)
13
+ end
14
+ def element
15
+ HTML.div(:id => "selection_option_#{@attrib[:name]}_#{@value}", :class => :selection_list_option) {
16
+ HTML.label { @label.to_s } +
17
+ Hidden_Field.new(:value => @value, :name => @attrib[:name].to_s + '_selected[]')
18
+ }
19
+ end
20
+ end
21
+
22
+ # A selection list maintains a list of
23
+ # available options and a select field of
24
+ # further available options.
25
+ #
26
+ # == Example:
27
+ #
28
+ # Selection_List_Field.new(:name => :the_list,
29
+ # :value => ['10','30' ] # Active selection from options
30
+ # :options => { '10' => :blue, # List of all options
31
+ # '20' => :red,
32
+ # '30' => :green }
33
+ #
34
+ # In the example, any combination of 'blue',
35
+ # 'red' and 'green' could be selected,
36
+ # here it is 'blue' and 'green'.
37
+ # The select field contains 20 => 'red',
38
+ # the only additionally available option
39
+ # (as it is not already set in value).
40
+ #
41
+ # Use case: Assign user to categories.
42
+ # Options is all available categories,
43
+ # value is an array of category ids
44
+ # already assigned to this user.
45
+ #
46
+ # == Customization
47
+ #
48
+ # You can override the Form_Field class
49
+ # rendering the option list elements, as
50
+ # well as the Form_Field class rendering
51
+ # the select field.
52
+ #
53
+ # Use #option_field_decorator to override
54
+ # rendering of option fields.
55
+ # Default is Selection_List_Option_Field.
56
+ #
57
+ # Example for custom option field decorator:
58
+ #
59
+ # class Delete_Option_Decorator < Form_Field
60
+ # def element
61
+ # HTML.div {
62
+ # HTML.img(:src => '/images/delete.png') + @label
63
+ # }
64
+ # end
65
+ # end
66
+ #
67
+ # selection_list.option_field_decorator = Delete_Option_Decorator
68
+ #
69
+ # Example for custom select field class:
70
+ #
71
+ # Note that Selection_List_Field will initialize
72
+ # @select_field_class with parameter :options, a
73
+ # key / label map of available options.
74
+ #
75
+ # class Ajax_Selection_Field < Form_Field
76
+ # def initialize(params={})
77
+ # super(params)
78
+ # params[:onchange] = js.do_something.ajaxian.with(:this, @options)
79
+ # end
80
+ # def element
81
+ # HTML.div {
82
+ # Input_Field.new(@attrib)
83
+ # }
84
+ # end
85
+ # end
86
+ #
87
+ # selection_list.select_field_class = Ajax_Selection_Field
88
+ #
89
+ class Selection_List_Field < Options_Field
90
+
91
+ attr_accessor :option_field_decorator, :select_field_class, :selectable_options
92
+
93
+ def initialize(params={})
94
+ @option_field_decorator = params[:option_field]
95
+ @select_field_class = params[:select_field]
96
+ @option_field_decorator ||= Selection_List_Option_Field
97
+ @select_field_class ||= Select_Field
98
+ @selectable_options = params[:selectable_options]
99
+ @selectable_options ||= []
100
+
101
+ params.delete(:option_field)
102
+ params.delete(:select_field)
103
+ params.delete(:selectable_options)
104
+ super(params)
105
+ set_value(@value)
106
+ add_css_class(:selection_list_field)
107
+ end
108
+
109
+ # Set list of all options as value / label hash.
110
+ def options=(options)
111
+ super(options)
112
+ if !@selectable_options || @selectable_options.length == 0 then
113
+ options().each_pair { |value, name|
114
+ @selectable_options << value unless (@value.is_a?(Array) && @value.map { |v| v.to_s }.include?(value.to_s))
115
+ }
116
+ end
117
+ end
118
+
119
+ # Set list of active selection options as array.
120
+ def value=(value)
121
+ super(value)
122
+ @selectable_options = []
123
+ options().each_pair { |value, name|
124
+ @selectable_options << value unless @value.map { |v| v.to_s }.include? value.to_s
125
+ }
126
+ end
127
+ alias set_value value=
128
+
129
+ # Returns array of available options,
130
+ # decorated by @option_field_decorator
131
+ # (see comments on Selection_List_Field).
132
+ def option_elements
133
+ id_prefix = "#{@attrib[:id]}_" if @attrib[:id]
134
+ elements = []
135
+ options().each_pair { |opt_value, opt_label|
136
+ selected = @value.map { |v| v.to_s }.include?(opt_value.to_s)
137
+ if selected then
138
+ elements << HTML.li(:id => "#{id_prefix}#{@attrib[:name]}_#{opt_value}") {
139
+ @option_field_decorator.new(:name => @attrib[:name],
140
+ :value => opt_value,
141
+ :label => opt_label,
142
+ :parent => self)
143
+ }
144
+ end
145
+ }
146
+ elements
147
+ end
148
+
149
+ # Renders list of active options, as well
150
+ # as select field element containing additionally
151
+ # available options.
152
+ def element
153
+ select_options = {}
154
+ @selectable_options.each { |v|
155
+ select_options[v] = @option_labels[v]
156
+ }
157
+ id_prefix = "#{@attrib[:id]}_" if @attrib[:id]
158
+
159
+ if @value && @value.length > 0 then
160
+ HTML.div(@attrib) {
161
+ HTML.ul(:id => "#{id_prefix}#{@attrib[:name]}") {
162
+ option_elements()
163
+ } +
164
+ @select_field_class.new(:id => "#{id_prefix}#{@attrib[:name]}_select",
165
+ :options => select_options,
166
+ :name => "#{@attrib[:name]}" )
167
+ }
168
+ else
169
+ HTML.div(@attrib) {
170
+ @select_field_class.new(:id => "#{id_prefix}#{@attrib[:name]}_select",
171
+ :options => select_options,
172
+ :name => "#{@attrib[:name]}" )
173
+ }
174
+ end
175
+ end
176
+
177
+ end
178
+
179
+ end
180
+ end
181
+
@@ -298,11 +298,6 @@ module GUI
298
298
  Element.new(:tag => :pseudo) { self.class_eval(&block) }
299
299
  end
300
300
 
301
-
302
- def self.a(*attribs, &block)
303
- render(:a, *attribs, &block)
304
- end
305
-
306
301
  # p is defined in Kernel, so we have to
307
302
  # redirect it manually (method_missing won't be
308
303
  # triggered for it)
@@ -315,7 +310,7 @@ module GUI
315
310
  end
316
311
 
317
312
  def self.puts(arg)
318
- arg
313
+ HTML.build { arg }
319
314
  end
320
315
 
321
316
  =begin
@@ -331,6 +326,44 @@ EOC
331
326
  =end
332
327
 
333
328
  end # class
329
+
330
+ class Builder
331
+
332
+ def initialize(&block)
333
+ raise ::Exception.new('Missing block for Builder') unless block_given?
334
+ @output_buffer = ''
335
+ instance_eval(&block)
336
+ end
337
+
338
+ # Statically defined as <br /> must not have any attributes.
339
+ def br
340
+ @output_buffer << '<br />'
341
+ end
342
+
343
+ def render(meth_name, *args, &block)
344
+ raise ::Exception.new('Missing attributes for HTML.' << meth_name.inspect) unless args
345
+ e = Buffered_Element.new(@output_buffer, *args, &block)
346
+ e.tag = meth_name
347
+ @output_buffer << e.string
348
+ e
349
+ end
350
+
351
+ # p is defined in Kernel, so we have to
352
+ # redirect it manually (method_missing won't be
353
+ # triggered for it)
354
+ def p(*attribs, &block)
355
+ render(:p, *attribs, &block)
356
+ end
357
+
358
+ def method_missing(meth_name, *attribs, &block)
359
+ render(meth_name, *attribs, &block)
360
+ end
361
+
362
+ def to_s
363
+ @output_buffer
364
+ end
365
+
366
+ end
334
367
 
335
368
  end # module
336
369
  end # module
@@ -0,0 +1,12 @@
1
+
2
+ require('aurita')
3
+ Aurita.load_project :default
4
+ Aurita.import_module :gui, :custom_form_elements
5
+
6
+ include Aurita::GUI
7
+
8
+ sl = Selection_List_Field.new(:name => :the_list,
9
+ :value => ['10','30' ]
10
+ :options => { '10' => :blue, '20' => :red, '30' => :green }
11
+
12
+ puts sl.to_s.gsub('><',">\n<")
@@ -24,11 +24,11 @@ describe Aurita::GUI::Javascript, "basic rendering" do
24
24
 
25
25
  it "should extend class HTML by a helper method '.js'" do
26
26
  e = HTML.build {
27
- div.outer(:onclick => js.Wombat.alert('message')) {
27
+ div.outer(:id => :unit, :onclick => js.Wombat.alert('message')) {
28
28
  p.inner 'click me'
29
29
  }
30
30
  }
31
- e.to_s.should == '<div class="outer" onclick="Wombat.alert(\'message\'); "><p class="inner">click me</p></div>'
31
+ e[:unit].onclick.to_s.should == 'Wombat.alert(\'message\'); '
32
32
  end
33
33
 
34
34
  end
@@ -0,0 +1,44 @@
1
+
2
+ require('rubygems')
3
+ require('aurita-gui/form')
4
+
5
+ include Aurita::GUI
6
+
7
+ describe Aurita::GUI::Options_Field, "values and labels" do
8
+ before do
9
+ end
10
+
11
+ it "should allow setting option as array, using values as labels" do
12
+ s = Select_Field.new(:name => :color)
13
+ s.value = :red
14
+ s.options = [ :blue, :red, :green, :yellow ]
15
+ end
16
+
17
+ it "should allow setting values as Hash (key / value map)" do
18
+ s = Select_Field.new(:name => :color)
19
+ s.value = 20
20
+ s.options = { 10 => :blue, 20 => :red, 30 => :green, 40 => :yellow }
21
+ end
22
+
23
+ it "should be possible to set values and labels seperately" do
24
+ s = Select_Field.new(:name => :color)
25
+ s.value = 20
26
+ s.option_values = [ 10, 20, 30, 40 ]
27
+ s.option_labels = [ :apple, :orange, :pear, :banana ]
28
+ end
29
+
30
+ it "should be possible to set/rename labels with a hash, mapping { value => label }" do
31
+ s = Radio_Field.new(:name => :color)
32
+ s.value = 'foo'
33
+ s.option_values = [ 10, 'foo', 30, 40 ]
34
+ s.option_labels = { 10 => :bleu, 'foo' => :rouge }
35
+ s.options['10'].should == :bleu
36
+ s.options['10'] = :noire
37
+ s.options['10'].should == :noire
38
+ s.options['foo'].should == :rouge
39
+ s.options['30'].should == 30
40
+ s.options['40'].should == 40
41
+ s.options[s.value.to_s].should == :rouge
42
+ end
43
+
44
+ end
@@ -0,0 +1,17 @@
1
+
2
+ require('rubygems')
3
+ require('aurita-gui/form')
4
+
5
+ include Aurita::GUI
6
+
7
+ describe Aurita::GUI::Options_Field, "values and labels" do
8
+ before do
9
+ end
10
+
11
+ it "should provide the same interface as an option field" do
12
+ s = Selection_List_Field.new(:name => :the_list)
13
+ s.options = { 0 => :foo, 1 => :bar, 2 => :batz, 3 => :bla, 4 => :gna}
14
+ s.value = [ 1, 3 ]
15
+ end
16
+
17
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aurita-gui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Fuchs
@@ -9,12 +9,20 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-27 00:00:00 +01:00
12
+ date: 2009-01-31 00:00:00 +01:00
13
13
  default_executable:
14
- dependencies: []
15
-
16
- description: Aurita::GUI provides an intuitive and flexible API for object-oriented creation of primitive and complex HTML elements, such as tables and forms. It is a core module of the Aurita application framework, but it can be used as stand-alone library in any context (such as rails). As there seems to be a lack of ruby form generators, i decided to release this part of Aurita in a single gem with no dependencies.
17
- email: fuchs@atomnode.net
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: arrayfields
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 4.6.0
23
+ version:
24
+ description: Aurita::GUI provides an intuitive and flexible API for object-oriented creation of primitive and complex HTML elements, such as tables and forms. It is a core module of the Aurita application framework, but it can be used as stand-alone library in any context (such as rails). As there seems to be a lack of ruby form generators, i decided to release this part of Aurita in a single gem with no dependencies on aurita itself.
25
+ email: fuchs@wortundform.de
18
26
  executables: []
19
27
 
20
28
  extensions: []
@@ -26,6 +34,7 @@ files:
26
34
  - History.txt
27
35
  - lib
28
36
  - samples
37
+ - README
29
38
  - aurita-gui.gemspec
30
39
  - bin
31
40
  - TODO
@@ -38,9 +47,11 @@ files:
38
47
  - lib/aurita-gui/button.rb
39
48
  - lib/aurita-gui/form.rb
40
49
  - lib/aurita-gui/html.rb
50
+ - lib/aurita-gui/builtest.rb
41
51
  - lib/aurita-gui/table.rb
42
52
  - lib/aurita-gui/form
43
53
  - lib/aurita-gui/element.rb
54
+ - lib/aurita-gui/selection_list_test.rb
44
55
  - lib/aurita-gui/form/password_field.rb
45
56
  - lib/aurita-gui/form/options_field.rb
46
57
  - lib/aurita-gui/form/file_field.rb
@@ -51,6 +62,7 @@ files:
51
62
  - lib/aurita-gui/form/datetime_field.rb
52
63
  - lib/aurita-gui/form/boolean_field.rb
53
64
  - lib/aurita-gui/form/fieldset.rb
65
+ - lib/aurita-gui/form/selection_list.rb
54
66
  - lib/aurita-gui/form/select_field.rb
55
67
  - lib/aurita-gui/form/radio_field.rb
56
68
  - lib/aurita-gui/form/hidden_field.rb
@@ -67,6 +79,8 @@ files:
67
79
  - spec/javascript.rb
68
80
  - spec/form.rb
69
81
  - spec/html.rb
82
+ - spec/options.rb
83
+ - spec/selection_list.rb
70
84
  - spec/element.rb
71
85
  has_rdoc: true
72
86
  homepage: http://aurita.wortundform.de/