aurita-gui 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,10 @@
1
+
2
+ module Aurita
3
+ module GUI
4
+
5
+ class Form_Error < ::Exception
6
+ end
7
+
8
+ end
9
+ end
10
+
@@ -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