aurita-gui 0.1.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 +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
|