aurita-gui 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +7 -0
- data/LICENSE +19 -0
- data/aurita-gui-0.1.0.gem +0 -0
- data/aurita-gui.gemspec +37 -0
- data/lib/aurita-gui.rb +6 -0
- data/lib/aurita-gui/button.rb +85 -0
- data/lib/aurita-gui/element.rb +161 -0
- data/lib/aurita-gui/form.rb +232 -0
- data/lib/aurita-gui/form/checkbox_field.rb +34 -0
- data/lib/aurita-gui/form/date_field.rb +94 -0
- data/lib/aurita-gui/form/datetime_field.rb +101 -0
- data/lib/aurita-gui/form/fieldset.rb +55 -0
- data/lib/aurita-gui/form/file_field.rb +30 -0
- data/lib/aurita-gui/form/form_error.rb +10 -0
- data/lib/aurita-gui/form/form_field.rb +93 -0
- data/lib/aurita-gui/form/hidden_field.rb +43 -0
- data/lib/aurita-gui/form/input_field.rb +29 -0
- data/lib/aurita-gui/form/options_field.rb +115 -0
- data/lib/aurita-gui/form/radio_field.rb +35 -0
- data/lib/aurita-gui/form/select_field.rb +34 -0
- data/lib/aurita-gui/form/textarea_field.rb +22 -0
- data/lib/aurita-gui/html.rb +119 -0
- data/lib/aurita-gui/table.rb +192 -0
- data/test/tc_form.rb +30 -0
- data/test/tc_table.rb +23 -0
- metadata +86 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
require('aurita-gui/form/options_field')
|
3
|
+
|
4
|
+
module Aurita
|
5
|
+
module GUI
|
6
|
+
|
7
|
+
class Checkbox_Field < Options_Field
|
8
|
+
def option_elements
|
9
|
+
options = []
|
10
|
+
@option_elements.each { |option|
|
11
|
+
if option.kind_of? Hash then
|
12
|
+
option.each_pair { |k,v|
|
13
|
+
options << HTML.input(:type => :checkbox, :value => k, :name => @attrib[:name] ) { v }
|
14
|
+
}
|
15
|
+
elsif option.kind_of? Element then
|
16
|
+
option.name = @attrib[:name]
|
17
|
+
option.tag = :input
|
18
|
+
option.type = :checkbox
|
19
|
+
options << option
|
20
|
+
end
|
21
|
+
}
|
22
|
+
options
|
23
|
+
end
|
24
|
+
|
25
|
+
def element
|
26
|
+
HTML.ul(:class => :checkbox_options) {
|
27
|
+
option_elements().map { |o| HTML.li() { o } }
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
|
2
|
+
require('aurita-gui/form/form_field')
|
3
|
+
require('aurita-gui/form/select_field')
|
4
|
+
|
5
|
+
module Aurita
|
6
|
+
module GUI
|
7
|
+
|
8
|
+
class Date_Field < Form_Field
|
9
|
+
attr_accessor :day, :month, :year, :years, :day_element, :month_element, :year_element, :date_format
|
10
|
+
|
11
|
+
def initialize(params, &block)
|
12
|
+
@date_format = params[:date_format]
|
13
|
+
@date_format ||= 'mdy'
|
14
|
+
@year_range = params[:year_range]
|
15
|
+
|
16
|
+
params.delete(:date_format)
|
17
|
+
params.delete(:date)
|
18
|
+
params.delete(:day)
|
19
|
+
params.delete(:month)
|
20
|
+
params.delete(:year)
|
21
|
+
params.delete(:year_range)
|
22
|
+
super(params, &block)
|
23
|
+
end
|
24
|
+
|
25
|
+
def year_element
|
26
|
+
if !@year_element then
|
27
|
+
@year_element = Select_Field.new(:name => @attrib[:name] + '_year',
|
28
|
+
:class => :year_select,
|
29
|
+
:value => @year, :options => @year_range)
|
30
|
+
end
|
31
|
+
@year_element
|
32
|
+
end
|
33
|
+
def month_element
|
34
|
+
if !@month_element then
|
35
|
+
@month_element = Select_Field.new(:name => @attrib[:name] + '_month',
|
36
|
+
:class => :month_select,
|
37
|
+
:value => @month, :options => (1..12))
|
38
|
+
end
|
39
|
+
@month_element
|
40
|
+
end
|
41
|
+
def day_element
|
42
|
+
if !@day_element then
|
43
|
+
@day_element = Select_Field.new(:name => @attrib[:name] + '_day',
|
44
|
+
:class => :day_select,
|
45
|
+
:value => @day, :options => (1..31))
|
46
|
+
end
|
47
|
+
@day_element
|
48
|
+
end
|
49
|
+
|
50
|
+
def element
|
51
|
+
select_fields = []
|
52
|
+
@date_format.scan(/./).each { |c|
|
53
|
+
case c
|
54
|
+
when 'y' then
|
55
|
+
select_fields << year_element()
|
56
|
+
when 'm' then
|
57
|
+
select_fields << month_element()
|
58
|
+
when 'd' then
|
59
|
+
select_fields << day_element()
|
60
|
+
end
|
61
|
+
}
|
62
|
+
HTML.div(@attrib) {
|
63
|
+
select_fields
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
def value=(date)
|
68
|
+
case date
|
69
|
+
when Hash then
|
70
|
+
@value = date
|
71
|
+
when Datetime then
|
72
|
+
@value = { :year => date.year,
|
73
|
+
:month => date.month,
|
74
|
+
:day => date.day }
|
75
|
+
when Date then
|
76
|
+
@value = { :year => date.year,
|
77
|
+
:month => date.month,
|
78
|
+
:day => date.day }
|
79
|
+
when String then
|
80
|
+
date = Datetime.strptime(date)
|
81
|
+
@value = { :year => date.year,
|
82
|
+
:month => date.month,
|
83
|
+
:day => date.day }
|
84
|
+
else
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def value
|
89
|
+
{ :day => @day, :month => @month, :year => @year }
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
|
2
|
+
require('aurita-gui/form/date_field')
|
3
|
+
require('aurita-gui/form/select_field')
|
4
|
+
|
5
|
+
module Aurita
|
6
|
+
module GUI
|
7
|
+
|
8
|
+
class Datetime_Field < Date_Field
|
9
|
+
attr_accessor :hour, :minute, :second, :hour_element, :minute_element, :second_element, :time_format
|
10
|
+
|
11
|
+
def initialize(params, &block)
|
12
|
+
@time_format = params[:time_format]
|
13
|
+
@time_format ||= 'hms'
|
14
|
+
|
15
|
+
params.delete(:time_format)
|
16
|
+
params.delete(:hour)
|
17
|
+
params.delete(:minute)
|
18
|
+
params.delete(:second)
|
19
|
+
super(params, &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def hour_element
|
23
|
+
if !@hour_element then
|
24
|
+
@hour_element = Select_Field.new(:name => @attrib[:name] + '_hour',
|
25
|
+
:class => :hour_select,
|
26
|
+
:value => @hour, :options => (0..23))
|
27
|
+
end
|
28
|
+
@hour_element
|
29
|
+
end
|
30
|
+
def minute_element
|
31
|
+
if !@minute_element then
|
32
|
+
@minute_element = Select_Field.new(:name => @attrib[:name] + '_minute',
|
33
|
+
:class => :minute_select,
|
34
|
+
:value => @minute, :options => (0..59))
|
35
|
+
end
|
36
|
+
@minute_element
|
37
|
+
end
|
38
|
+
def second_element
|
39
|
+
if !@second_element then
|
40
|
+
@second_element = Select_Field.new(:name => @attrib[:name] + '_second',
|
41
|
+
:class => :second_select,
|
42
|
+
:value => @second, :options => (0..59))
|
43
|
+
end
|
44
|
+
@second_element
|
45
|
+
end
|
46
|
+
|
47
|
+
def element
|
48
|
+
select_fields = []
|
49
|
+
@date_format.scan(/./).each { |c|
|
50
|
+
case c
|
51
|
+
when 'y' then
|
52
|
+
select_fields << year_element()
|
53
|
+
when 'm' then
|
54
|
+
select_fields << month_element()
|
55
|
+
when 'd' then
|
56
|
+
select_fields << day_element()
|
57
|
+
end
|
58
|
+
}
|
59
|
+
@time_format.scan(/./).each { |c|
|
60
|
+
case c
|
61
|
+
when 'h' then
|
62
|
+
select_fields << hour_element()
|
63
|
+
when 'm' then
|
64
|
+
select_fields << minute_element()
|
65
|
+
when 's' then
|
66
|
+
select_fields << second_element()
|
67
|
+
end
|
68
|
+
}
|
69
|
+
HTML.div(@attrib) {
|
70
|
+
select_fields
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
def value=(date)
|
75
|
+
case date
|
76
|
+
when Hash then
|
77
|
+
@value = date
|
78
|
+
when Datetime then
|
79
|
+
@value = { :hour => date.hour,
|
80
|
+
:minute => date.month,
|
81
|
+
:second => date.second }
|
82
|
+
when Date then
|
83
|
+
@value = { :hour => date.hour,
|
84
|
+
:minute => date.minute,
|
85
|
+
:second => date.second }
|
86
|
+
when String then
|
87
|
+
# date = Datetime.strptime(date)
|
88
|
+
# @value = { :hour => date.hour,
|
89
|
+
# :minute => date.minute,
|
90
|
+
# :second => date.second }
|
91
|
+
else
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def value
|
96
|
+
super().update(:second => @second, :minute => @minute, :hour => @hour)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
|
2
|
+
require('aurita-gui/element')
|
3
|
+
|
4
|
+
module Aurita
|
5
|
+
module GUI
|
6
|
+
|
7
|
+
class Fieldset < Element
|
8
|
+
attr_accessor :legend, :label, :name
|
9
|
+
|
10
|
+
def initialize(params, &block)
|
11
|
+
params[:tag] = :fieldset
|
12
|
+
@name = params[:name]
|
13
|
+
@elements = []
|
14
|
+
if block_given? then
|
15
|
+
yield.each { |field_element|
|
16
|
+
add(field_element)
|
17
|
+
}
|
18
|
+
end
|
19
|
+
legend_element = params[:legend]
|
20
|
+
legend_element ||= params[:label]
|
21
|
+
set_legend(legend_element)
|
22
|
+
params.delete(:legend)
|
23
|
+
params.delete(:label)
|
24
|
+
params.delete(:name)
|
25
|
+
super(params, &block)
|
26
|
+
end
|
27
|
+
alias legend label
|
28
|
+
|
29
|
+
def legend=(field)
|
30
|
+
if field.kind_of? Aurita::GUI::Element then
|
31
|
+
@legend = field
|
32
|
+
else
|
33
|
+
@legend = HTML.legend { field }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
alias set_legend legend=
|
37
|
+
alias label= legend=
|
38
|
+
|
39
|
+
def add(field_element)
|
40
|
+
@elements << field_element
|
41
|
+
end
|
42
|
+
|
43
|
+
def content
|
44
|
+
if @legend then
|
45
|
+
@content = [ @legend, @elements ]
|
46
|
+
else
|
47
|
+
@content = @elements
|
48
|
+
end
|
49
|
+
return @content
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
require('aurita-gui/form/form_field')
|
3
|
+
|
4
|
+
module Aurita
|
5
|
+
module GUI
|
6
|
+
|
7
|
+
# Usage:
|
8
|
+
#
|
9
|
+
# Like Input_Field, but skipping attribute @value,
|
10
|
+
# as file input fields do not support default values
|
11
|
+
# (for good reason).
|
12
|
+
#
|
13
|
+
# i = File_Field.new(:name => :the_file,
|
14
|
+
# :label => 'Choose file')
|
15
|
+
#
|
16
|
+
class File_Field < Form_Field
|
17
|
+
def initialize(params)
|
18
|
+
params[:tag] = :input
|
19
|
+
params[:type] = :file unless params[:type]
|
20
|
+
params.delete(:value)
|
21
|
+
super(params)
|
22
|
+
end
|
23
|
+
def element
|
24
|
+
HTML.input(@attrib)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
|
2
|
+
require('aurita-gui/element')
|
3
|
+
require('aurita-gui/html')
|
4
|
+
require('aurita-gui/form/form_error')
|
5
|
+
|
6
|
+
module Aurita
|
7
|
+
module GUI
|
8
|
+
|
9
|
+
# Class Form_Field is an abstract base class for
|
10
|
+
# built-in form fields (Input_Field, Hidden_Field,
|
11
|
+
# Radio_Field, Checkbox_Field, Select_Field,
|
12
|
+
# Textarea_Field) or any custom form field type.
|
13
|
+
# It is a wrapper for GUI::Element, extending it
|
14
|
+
# by parameters @name, @label and @value.
|
15
|
+
#
|
16
|
+
# Usage:
|
17
|
+
#
|
18
|
+
# i = Input_Field.new(:name => :description,
|
19
|
+
# :label => 'Description',
|
20
|
+
# :value => 'Lorem ipsum dolor')
|
21
|
+
#
|
22
|
+
# Apart from this special attributes, Form_Field instances
|
23
|
+
# behave like any GUI::Element:
|
24
|
+
#
|
25
|
+
# i.onclick = "alert('i have been clicked');"
|
26
|
+
# i.class = 'css_class'
|
27
|
+
#
|
28
|
+
#
|
29
|
+
class Form_Field < Element
|
30
|
+
|
31
|
+
attr_accessor :type, :form, :label, :value
|
32
|
+
|
33
|
+
def initialize(params)
|
34
|
+
# @value = params[:value]
|
35
|
+
raise Form_Error.new('Must provide parameter :name for ' << self.class.to_s) unless params[:name]
|
36
|
+
@form = params[:parent]
|
37
|
+
@form ||= params[:form]
|
38
|
+
@label = params[:label]
|
39
|
+
# Get value from params unless set by derived constructor:
|
40
|
+
@value = params[:value] unless @value
|
41
|
+
# Do not delete parameter value, as it is a
|
42
|
+
# standard for <input> elements.
|
43
|
+
# Field types not supporting the value attribute
|
44
|
+
# (Textarea_Field, Option_Field, ...)
|
45
|
+
# must delete it themselves.
|
46
|
+
@readonly = false
|
47
|
+
params.delete(:form)
|
48
|
+
params.delete(:parent)
|
49
|
+
params.delete(:label)
|
50
|
+
params[:parent] = @form
|
51
|
+
super(params)
|
52
|
+
end
|
53
|
+
|
54
|
+
def form=(form_instance)
|
55
|
+
@form = form_instance
|
56
|
+
@params[:parent] = @form
|
57
|
+
end
|
58
|
+
|
59
|
+
def element
|
60
|
+
raise Form_Error.new('Cannot render abstract class Form_Field')
|
61
|
+
end
|
62
|
+
def readonly_element
|
63
|
+
HTML.div(@attrib) { @value }
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_s
|
67
|
+
return element().string unless @readonly
|
68
|
+
return readonly_element().string
|
69
|
+
end
|
70
|
+
alias string to_s
|
71
|
+
|
72
|
+
def editable!
|
73
|
+
@reaonly = false
|
74
|
+
end
|
75
|
+
def readonly!
|
76
|
+
@attrib[:class] = @attrib[:class].to_s << ' readonly'
|
77
|
+
@readonly = true
|
78
|
+
end
|
79
|
+
def readonly?
|
80
|
+
@readonly
|
81
|
+
end
|
82
|
+
def disable!
|
83
|
+
@attrib[:disabled] = true
|
84
|
+
end
|
85
|
+
def enable!
|
86
|
+
@attrib.delete(:disabled)
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
|
2
|
+
require('aurita-gui/form/form_field')
|
3
|
+
|
4
|
+
module Aurita
|
5
|
+
module GUI
|
6
|
+
|
7
|
+
# Usage:
|
8
|
+
#
|
9
|
+
# i = Hidden_Field.new(:name => :description,
|
10
|
+
# :label => 'Description',
|
11
|
+
# :value => 'Lorem ipsum dolor')
|
12
|
+
#
|
13
|
+
# Tag attributes like onclick, onchange, class etc.
|
14
|
+
# can be set, but will either be ignored or have
|
15
|
+
# no effect.
|
16
|
+
#
|
17
|
+
class Hidden_Field < Form_Field
|
18
|
+
def initialize(params, &block)
|
19
|
+
params[:tag] = :input
|
20
|
+
params[:type] = :hidden
|
21
|
+
if block_given? then
|
22
|
+
params[:value] = yield
|
23
|
+
end
|
24
|
+
super(params)
|
25
|
+
end
|
26
|
+
def element
|
27
|
+
HTML.input(@attrib)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class Form < Element
|
32
|
+
|
33
|
+
def add_hidden(params)
|
34
|
+
params.each_pair { |k,v|
|
35
|
+
add(Hidden_Field.new(:name => k, :value => v))
|
36
|
+
}
|
37
|
+
end
|
38
|
+
alias add_hidden_fields add_hidden
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|