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.
@@ -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