ui_bibz 2.0.0.alpha → 2.0.0.alpha2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTORS.md +23 -0
  3. data/Gemfile.lock +53 -43
  4. data/Rakefile +1 -0
  5. data/app/assets/javascripts/fix_bootstrap.coffee +7 -0
  6. data/app/assets/javascripts/form.coffee +65 -0
  7. data/app/assets/javascripts/interface.coffee +17 -0
  8. data/app/assets/javascripts/table.coffee +35 -0
  9. data/app/assets/javascripts/ui_bibz.coffee +24 -38
  10. data/app/assets/stylesheets/bootstrap-switch.sass +150 -0
  11. data/app/assets/stylesheets/fix-bootstrap-4.sass +33 -2
  12. data/app/assets/stylesheets/fix-dropdown-select.sass +239 -0
  13. data/app/assets/stylesheets/ui_bibz.sass +29 -18
  14. data/app/inputs/custom_inputs/autocomplete_input.rb +14 -0
  15. data/app/inputs/custom_inputs/date_picker_input.rb +2 -0
  16. data/app/inputs/custom_inputs/dropdown_select_input.rb +15 -0
  17. data/app/inputs/custom_inputs/multi_column_input.rb +51 -5
  18. data/app/inputs/custom_inputs/multi_select_input.rb +1 -1
  19. data/app/inputs/custom_inputs/surround_input.rb +3 -1
  20. data/app/inputs/custom_inputs/switch_input.rb +11 -0
  21. data/lib/ui_bibz/concerns/models/searchable.rb +6 -2
  22. data/lib/ui_bibz/helpers/ui_core_helper.rb +76 -54
  23. data/lib/ui_bibz/rails/engine.rb +9 -1
  24. data/lib/ui_bibz/ui/core/button/button_group.rb +1 -1
  25. data/lib/ui_bibz/ui/core/card/components/card_image.rb +1 -1
  26. data/lib/ui_bibz/ui/core/component.rb +1 -0
  27. data/lib/ui_bibz/ui/core/input/autocomplete_field.rb +87 -0
  28. data/lib/ui_bibz/ui/core/input/date_picker_field.rb +10 -2
  29. data/lib/ui_bibz/ui/core/input/dropdown_select_field.rb +124 -0
  30. data/lib/ui_bibz/ui/core/input/multi_select_field.rb +5 -0
  31. data/lib/ui_bibz/ui/core/input/surround_field.rb +11 -2
  32. data/lib/ui_bibz/ui/core/input/switch_field.rb +127 -0
  33. data/lib/ui_bibz/ui/ux/table/components/thead.rb +51 -0
  34. data/lib/ui_bibz/ui/ux/table/extensions/actionable.rb +1 -1
  35. data/lib/ui_bibz/ui/ux/table/extensions/sortable.rb +2 -2
  36. data/lib/ui_bibz/ui/ux/table/table.rb +47 -4
  37. data/lib/ui_bibz/ui/ux/table/table_card.rb +12 -4
  38. data/lib/ui_bibz/version.rb +1 -1
  39. data/lib/ui_bibz.rb +24 -10
  40. data/test/ui/card_test.rb +1 -1
  41. data/test/ui/input_dropdown_select_field_test.rb +78 -0
  42. data/test/ui/input_switch_field_test.rb +86 -0
  43. data/test/ui/inputs_test.rb +12 -4
  44. data/test/ui/table_test.rb +16 -0
  45. data/ui_bibz.gemspec +14 -4
  46. data/vendor/assets/stylesheets/bootstrap-switch.min.css +1 -1
  47. metadata +132 -13
  48. data/app/assets/javascripts/multi_column.coffee +0 -45
  49. data/app/inputs/custom_inputs/date_picker_input_old.rb +0 -61
  50. data/vendor/assets/javascripts/bootstrap-4.0.0-alpha.min.js +0 -7
  51. data/vendor/assets/javascripts/bootstrap-select.min.js +0 -8
  52. data/vendor/assets/stylesheets/bootstrap-4.0.0-alpha.min.css +0 -6
  53. data/vendor/assets/stylesheets/bootstrap-select.min.css +0 -6
@@ -1,5 +1,32 @@
1
1
  module UiBibz::Helpers::UiCoreHelper
2
2
 
3
+ # Button section begin ----------------------------------------------------
4
+ def button content = nil, options = nil, html_options = nil, &block
5
+ UiBibz::Ui::Core::Button.new(content, options, html_options, &block).render
6
+ end
7
+
8
+ def button_choice content = nil, options = nil, html_options = nil, &block
9
+ UiBibz::Ui::Core::ButtonChoice.new(content, options, html_options, &block).render
10
+ end
11
+
12
+ def button_dropdown name, options = nil, html_options = nil, &block
13
+ UiBibz::Ui::Core::ButtonDropdown.new(name, options, html_options).tap(&block).render
14
+ end
15
+
16
+ def button_group content = nil, options = nil, html_options = nil, &block
17
+ UiBibz::Ui::Core::ButtonGroup.new(content, options, html_options, &block).render
18
+ end
19
+
20
+ def button_link content = nil, options = nil, html_options = nil, &block
21
+ UiBibz::Ui::Core::ButtonLink.new(content, options, html_options, &block).render
22
+ end
23
+
24
+ def button_split_dropdown name, options = nil, html_options = nil, &block
25
+ UiBibz::Ui::Core::ButtonSplitDropdown.new(name, options, html_options).tap(&block).render
26
+ end
27
+ # Button section end ----------------------------------------------------
28
+
29
+ # Card section begin ----------------------------------------------------
3
30
  def card content = nil, options = nil, html_options = nil, &block
4
31
  if is_tap(content, options)
5
32
  UiBibz::Ui::Core::Card.new(content, options, html_options).tap(&block).render
@@ -19,82 +46,67 @@ module UiBibz::Helpers::UiCoreHelper
19
46
  def card_column content = nil, options = nil, html_options = nil, &block
20
47
  UiBibz::Ui::Core::CardColumn.new(content, options, html_options).tap(&block).render
21
48
  end
49
+ # Card section end ----------------------------------------------------
22
50
 
51
+ # Input section begin ----------------------------------------------------
23
52
  def date_picker_field content = nil, options = nil, html_options = nil, &block
24
53
  UiBibz::Ui::Core::DatePickerField.new(content, options, html_options, &block).render
25
54
  end
26
55
 
27
- def modal content = nil, options = nil, html_options = nil, &block
28
- UiBibz::Ui::Core::Modal.new(content, options, html_options).tap(&block).render
29
- end
30
-
31
- # Use "notify" instead of "alert" : due to "actionview (4.2.0) lib/action_view/helpers/form_helper.rb" conflict
32
- def notify content = nil, options = nil, html_options = nil, &block
33
- UiBibz::Ui::Core::Alert.new(content, options, html_options, &block).render
34
- end
35
-
36
- def stars content = nil, options = nil, html_options = nil, &block
37
- UiBibz::Ui::Core::Stars.new(content, options, html_options, &block).render
38
- end
39
-
40
- # Use "etiquette" instead of "label" : due to "actionview (4.2.0) lib/action_view/helpers/form_helper.rb" conflict
41
- def etiquette content = nil, options = nil, html_options = nil, &block
42
- UiBibz::Ui::Core::Label.new(content, options, html_options, &block).render
43
- end
44
-
45
- def jumbotron content = nil, options = nil, html_options = nil, &block
46
- UiBibz::Ui::Core::Jumbotron.new(content, options, html_options, &block).render
56
+ def multi_column_field content = nil, options = nil, html_options = nil, &block
57
+ UiBibz::Ui::Core::MultiColumnField.new(content, options, html_options, &block).render
47
58
  end
48
59
 
49
- def nav content = nil, options = nil, html_options = nil, &block
50
- UiBibz::Ui::Core::Nav.new(content, options, html_options).tap(&block).render
60
+ def multi_select_field content = nil, options = nil, html_options = nil, &block
61
+ UiBibz::Ui::Core::MultiSelectField.new(content, options, html_options, &block).render
51
62
  end
52
63
 
53
64
  def surround_field content = nil, options = nil, html_options = nil, &block
54
65
  UiBibz::Ui::Core::SurroundField.new(content, options, html_options, &block).render
55
66
  end
56
67
 
57
- def multi_column_field content = nil, options = nil, html_options = nil, &block
58
- UiBibz::Ui::Core::MultiColumnField.new(content, options, html_options, &block).render
59
- end
60
-
61
- def multi_select_field content = nil, options = nil, html_options = nil, &block
62
- UiBibz::Ui::Core::MultiSelectField.new(content, options, html_options, &block).render
68
+ def switch_field content = nil, options = nil, html_options = nil, &block
69
+ UiBibz::Ui::Core::SwitchField.new(content, options, html_options, &block).render
63
70
  end
64
71
 
65
- def navbar content = nil, options = nil, html_options = nil, &block
66
- UiBibz::Ui::Core::Navbar.new(content, options, html_options).tap(&block).render
72
+ def dropdown_select_field content = nil, options = nil, html_options = nil, &block
73
+ UiBibz::Ui::Core::DropdownSelectField.new(content, options, html_options, &block).render
67
74
  end
68
75
 
69
- def list_group content = nil, options = nil, html_options = nil, &block
70
- UiBibz::Ui::Core::ListGroup.new(content, options, html_options).tap(&block).render
76
+ def autocomplete_field content = nil, options = nil, html_options = nil, &block
77
+ UiBibz::Ui::Core::AutocompleteField.new(content, options, html_options, &block).render
71
78
  end
79
+ # Input section end ----------------------------------------------------
72
80
 
73
- # Button section begin ----------------------------------------------------
74
- def button_link content = nil, options = nil, html_options = nil, &block
75
- UiBibz::Ui::Core::ButtonLink.new(content, options, html_options, &block).render
81
+ # Nav section begin ----------------------------------------------------
82
+ def nav content = nil, options = nil, html_options = nil, &block
83
+ UiBibz::Ui::Core::Nav.new(content, options, html_options).tap(&block).render
76
84
  end
77
85
 
78
- def button_choice content = nil, options = nil, html_options = nil, &block
79
- UiBibz::Ui::Core::ButtonChoice.new(content, options, html_options, &block).render
86
+ def navbar content = nil, options = nil, html_options = nil, &block
87
+ UiBibz::Ui::Core::Navbar.new(content, options, html_options).tap(&block).render
80
88
  end
89
+ # Nav section end ----------------------------------------------------
81
90
 
82
- def button_group content = nil, options = nil, html_options = nil, &block
83
- UiBibz::Ui::Core::ButtonGroup.new(content, options, html_options, &block).render
91
+ # Layout section begin ----------------------------------------------------
92
+ def row content = nil, options = nil, html_options = nil, &block
93
+ UiBibz::Ui::Core::Row.new(content, options, html_options, &block).render
84
94
  end
85
95
 
86
- def button content = nil, options = nil, html_options = nil, &block
87
- UiBibz::Ui::Core::Button.new(content, options, html_options, &block).render
96
+ def col content = nil, options = nil, html_options = nil, &block
97
+ UiBibz::Ui::Core::Col.new(content, options, html_options, &block).render
88
98
  end
89
99
 
90
- def button_dropdown name, options = nil, html_options = nil, &block
91
- UiBibz::Ui::Core::ButtonDropdown.new(name, options, html_options).tap(&block).render
100
+ def container content = nil, options = nil, html_options = nil, &block
101
+ UiBibz::Ui::Core::Container.new(content, options, html_options, &block).render
92
102
  end
103
+ # Layout section end ----------------------------------------------------
93
104
 
94
- def button_split_dropdown name, options = nil, html_options = nil, &block
95
- UiBibz::Ui::Core::ButtonSplitDropdown.new(name, options, html_options).tap(&block).render
105
+ # Other section begin ----------------------------------------------------
106
+ # Use "notify" instead of "alert" : due to "actionview (4.2.0) lib/action_view/helpers/form_helper.rb" conflict
107
+ def notify content = nil, options = nil, html_options = nil, &block
108
+ UiBibz::Ui::Core::Alert.new(content, options, html_options, &block).render
96
109
  end
97
- # Button section end ----------------------------------------------------
98
110
 
99
111
  def breadcrumb content = nil, options = nil, html_options = nil, &block
100
112
  if is_tap(content, options)
@@ -112,21 +124,31 @@ module UiBibz::Helpers::UiCoreHelper
112
124
  UiBibz::Ui::Core::Glyph.new(content, options, html_options, &block).render
113
125
  end
114
126
 
115
- def progress percentage = nil, options = nil, html_options = nil, &block
116
- UiBibz::Ui::Core::Progress.new(percentage, options, html_options, &block).render
127
+ def jumbotron content = nil, options = nil, html_options = nil, &block
128
+ UiBibz::Ui::Core::Jumbotron.new(content, options, html_options, &block).render
117
129
  end
118
130
 
119
- def row content = nil, options = nil, html_options = nil, &block
120
- UiBibz::Ui::Core::Row.new(content, options, html_options, &block).render
131
+ # Use "etiquette" instead of "label" : due to "actionview (4.2.0) lib/action_view/helpers/form_helper.rb" conflict
132
+ def etiquette content = nil, options = nil, html_options = nil, &block
133
+ UiBibz::Ui::Core::Label.new(content, options, html_options, &block).render
121
134
  end
122
135
 
123
- def col content = nil, options = nil, html_options = nil, &block
124
- UiBibz::Ui::Core::Col.new(content, options, html_options, &block).render
136
+ def list_group content = nil, options = nil, html_options = nil, &block
137
+ UiBibz::Ui::Core::ListGroup.new(content, options, html_options).tap(&block).render
125
138
  end
126
139
 
127
- def container content = nil, options = nil, html_options = nil, &block
128
- UiBibz::Ui::Core::Container.new(content, options, html_options, &block).render
140
+ def modal content = nil, options = nil, html_options = nil, &block
141
+ UiBibz::Ui::Core::Modal.new(content, options, html_options).tap(&block).render
142
+ end
143
+
144
+ def progress percentage = nil, options = nil, html_options = nil, &block
145
+ UiBibz::Ui::Core::Progress.new(percentage, options, html_options, &block).render
146
+ end
147
+
148
+ def stars content = nil, options = nil, html_options = nil, &block
149
+ UiBibz::Ui::Core::Stars.new(content, options, html_options, &block).render
129
150
  end
151
+ # Other section end ----------------------------------------------------
130
152
 
131
153
  private
132
154
 
@@ -1,9 +1,17 @@
1
1
  # to load pagination in rails app
2
2
  require 'will_paginate'
3
3
  require 'bootstrap'
4
- require 'rails-assets-tether'
5
4
  require "font-awesome-sass"
6
5
 
6
+ # Javascript requires
7
+ require 'rails-assets-tether'
8
+ require 'rails-assets-bootstrap-select'
9
+ require 'rails-assets-bootstrap-datepicker'
10
+ #
11
+ # not compatible with boostrap 4
12
+ #require 'rails-assets-bootstrap-switch'
13
+ #require 'rails-assets-bootstrap-multiselect'
14
+
7
15
  module UiBibz
8
16
  module Rails
9
17
  class Engine < ::Rails::Engine
@@ -61,7 +61,7 @@ module UiBibz::Ui::Core
61
61
  end
62
62
 
63
63
  def component_html_options
64
- { role: type, data: { toggle: 'buttons' } }
64
+ { role: type }
65
65
  end
66
66
 
67
67
  def component_html_data
@@ -40,7 +40,7 @@ module UiBibz::Ui::Core
40
40
 
41
41
  # Render html tag
42
42
  def render
43
- image_tag content, html_options
43
+ image_tag asset_path("assets/#{content}"), html_options
44
44
  end
45
45
 
46
46
  private
@@ -129,6 +129,7 @@ module UiBibz::Ui::Core
129
129
  # Add html data arguments
130
130
  def add_html_data name, value = true
131
131
  html_options[:data] = {} if html_options[:data].nil?
132
+ value = value.kind_of?(String) ? value.strip : value
132
133
  html_options[:data].update(Hash[name, value])
133
134
  end
134
135
 
@@ -0,0 +1,87 @@
1
+ module UiBibz::Ui::Core
2
+
3
+ # Create a AutocompleteField
4
+ #
5
+ # This element is an extend of UiBibz::Ui::Core::Component.
6
+ #
7
+ # ==== Attributes
8
+ #
9
+ # * +content+ - Content of element
10
+ # * +options+ - Options of element
11
+ # * +html_options+ - Html Options of element
12
+ #
13
+ # ==== Options
14
+ #
15
+ # You can add HTML attributes using the +html_options+.
16
+ # You can pass arguments in options attribute:
17
+ # * option_tags - Array, Object [required]
18
+ #
19
+ # ==== Signatures
20
+ #
21
+ # UiBibz::Ui::Core::AutocompleteField.new(content, options = {}, html_options = {}).render
22
+ #
23
+ # UiBibz::Ui::Core::AutocompleteField.new(options = {}, html_options = {}) do
24
+ # content
25
+ # end.render
26
+ #
27
+ # ==== Examples
28
+ #
29
+ # options = options_for_select(2.times.map{ |i| "option #{i}" })
30
+ # UiBibz::Ui::Core::AutocompleteField.new('company', { option_tags: options }, { class: 'test' })
31
+ #
32
+ # options = options_for_select(2.times.map{ |i| "option #{i}" })
33
+ # UiBibz::Ui::Core::AutocompleteField.new(option_tags: options) do
34
+ # #content
35
+ # end
36
+ #
37
+ # ==== Helper
38
+ #
39
+ # autocomplete_field(options = {}, html_options = {}) do
40
+ # # content
41
+ # end
42
+ #
43
+ class AutocompleteField < Component
44
+
45
+ # See UiBibz::Ui::Core::Component.initialize
46
+ def initialize content = nil, options = nil, html_options = nil, &block
47
+ super
48
+ end
49
+
50
+ # Render html tag
51
+ def render
52
+ text_field_input_tag + data_list_render
53
+ end
54
+
55
+ private
56
+
57
+ def data_list_render
58
+ content_tag :datalist, options[:option_tags], id: data_list_name
59
+ end
60
+
61
+ def text_field_input_tag
62
+ if options[:builder].nil?
63
+ text_field_tag content, html_options[:value], html_options
64
+ else
65
+ options[:builder].text_field content, html_options
66
+ end
67
+ end
68
+
69
+ def component_html_options
70
+ { autocomplete: true, list: data_list_name }
71
+ end
72
+
73
+ def component_html_classes
74
+ 'form-control'
75
+ end
76
+
77
+ def data_list_name
78
+ @datalist ||= "#{ html_options[:id] || content }-datalist"
79
+ end
80
+
81
+ # :lg, :sm or :xs
82
+ def size
83
+ "input-group-#{ options[:size] }" if options[:size]
84
+ end
85
+
86
+ end
87
+ end
@@ -53,9 +53,9 @@ module UiBibz::Ui::Core
53
53
  if options[:range]
54
54
  content_tag :div, class: join_classes('input-group', 'input-daterange', size) do
55
55
  concat content_tag :span, options[:append], class: 'input-group-addon' unless @options[:append].nil?
56
- concat text_field_tag content, html_options[:value], html_options
56
+ concat text_field_input_tag content[0]
57
57
  concat content_tag :span, options[:range], class: 'input-group-addon input-group-range'
58
- concat text_field_tag content, html_options[:value], html_options
58
+ concat text_field_input_tag content[1]
59
59
  concat content_tag :span, options[:prepend], class: 'input-group-addon' unless @options[:prepend].nil?
60
60
  end
61
61
  else
@@ -65,6 +65,14 @@ module UiBibz::Ui::Core
65
65
 
66
66
  private
67
67
 
68
+ def text_field_input_tag name
69
+ if options[:builder].nil?
70
+ text_field_tag name, html_options[:value], html_options
71
+ else
72
+ options[:builder].text_field name, html_options
73
+ end
74
+ end
75
+
68
76
  def component_html_data
69
77
  date_locale
70
78
  provide
@@ -0,0 +1,124 @@
1
+ module UiBibz::Ui::Core
2
+
3
+ # Create a DropdownSelectField
4
+ #
5
+ # This element is an extend of UiBibz::Ui::Core::Component.
6
+ # source : http://silviomoreto.github.io/bootstrap-select/examples/
7
+ #
8
+ # ==== Attributes
9
+ #
10
+ # * +content+ - Content of element
11
+ # * +options+ - Options of element
12
+ # * +html_options+ - Html Options of element
13
+ #
14
+ # ==== Options
15
+ #
16
+ # You can add HTML attributes using the +html_options+.
17
+ # You can pass arguments in options attribute:
18
+ # * +state+ - State of élement with symbol value:
19
+ # (+:primary+, +:secondary+, +:info+, +:warning+, +:danger+, +:link+)
20
+ # * option_tags - Array, Object [required]
21
+ # * searchable - Boolean
22
+ # * max_options - Integer
23
+ # * selected_text_format - String
24
+ # * menu_size - Integer
25
+ # * header - String
26
+ # * actions_box - Boolean
27
+ # * show_tick - Boolean
28
+ # * show_menu_arrow - Boolean
29
+ # * dropup - Boolean
30
+ #
31
+ # ==== Signatures
32
+ #
33
+ # UiBibz::Ui::Core::DropdownSelectField.new(content, options = {}, html_options = {}).render
34
+ #
35
+ # UiBibz::Ui::Core::DropdownSelectField.new(options = {}, html_options = {}) do
36
+ # content
37
+ # end.render
38
+ #
39
+ # ==== Examples
40
+ #
41
+ # UiBibz::Ui::Core::DropdownSelectField.new('fruits', { option_tags: list_of_fruits, searchable: true }, { class: 'test' })
42
+ #
43
+ # UiBibz::Ui::Core::DropdownSelectField.new({ option_tags: list_of_fruits, actions_box: true }, { class: 'test' }) do
44
+ # 'fruits'
45
+ # end
46
+ #
47
+ # ==== Helper
48
+ #
49
+ # dropdown_select_field(content, options = {}, html_options = {})
50
+ #
51
+ class DropdownSelectField < UiBibz::Ui::Core::Component
52
+
53
+ # See UiBibz::Ui::Core::Component.initialize
54
+ def initialize content = nil, options = nil, html_options = nil, &block
55
+ super
56
+ end
57
+
58
+ # Render html tag
59
+ def render
60
+ select_tag content, options[:option_tags], html_options
61
+ end
62
+
63
+ private
64
+
65
+ def component_html_classes
66
+ ['selectpicker', show_tick, show_menu_arrow, dropup]
67
+ end
68
+
69
+ def component_html_data
70
+ searchable
71
+ max_options
72
+ selected_text_format
73
+ menu_size
74
+ style
75
+ header
76
+ actions_box
77
+ end
78
+
79
+ ############################ Data html options
80
+
81
+ def max_options
82
+ add_html_data('max_options', options[:max_options]) if options[:max_options]
83
+ end
84
+
85
+ def selected_text_format
86
+ add_html_data('selected_text_format', options[:selected_text_format]) if options[:selected_text_format]
87
+ end
88
+
89
+ def searchable
90
+ add_html_data('live_search') if options[:searchable]
91
+ end
92
+
93
+ def style
94
+ add_html_data('style', "btn-#{ options[:state]}") if options[:style]
95
+ end
96
+
97
+ def menu_size
98
+ add_html_data('size', options[:menu_size]) if options[:menu_size]
99
+ end
100
+
101
+ def actions_box
102
+ add_html_data('actions_box') if options[:actions_box]
103
+ end
104
+
105
+ def header
106
+ add_html_data('header', options[:header]) if options[:header]
107
+ end
108
+
109
+
110
+ ############################# Css classes
111
+
112
+ def show_tick
113
+ 'show-tick' if options[:show_tick]
114
+ end
115
+
116
+ def show_menu_arrow
117
+ 'show-menu-arrow' if options[:show_menu_arrow]
118
+ end
119
+
120
+ def dropup
121
+ 'dropup' if options[:dropup]
122
+ end
123
+ end
124
+ end
@@ -3,6 +3,7 @@ module UiBibz::Ui::Core
3
3
  # Create a MultiSelectField
4
4
  #
5
5
  # This element is an extend of UiBibz::Ui::Core::Component.
6
+ # source : http://loudev.com/
6
7
  #
7
8
  # ==== Attributes
8
9
  #
@@ -85,5 +86,9 @@ module UiBibz::Ui::Core
85
86
  add_html_data('include_select_all_option') if options[:select_all_option]
86
87
  end
87
88
 
89
+ def state
90
+ options[:state] || 'btn-secondary'
91
+ end
92
+
88
93
  end
89
94
  end
@@ -49,11 +49,11 @@ module UiBibz::Ui::Core
49
49
  # Render html tag
50
50
  def render
51
51
  if options[:append].nil? && options[:prepend].nil?
52
- text_field_tag content, html_options[:value], html_options
52
+ text_field_input_tag
53
53
  else
54
54
  content_tag :div, class: join_classes('input-group', size) do
55
55
  concat content_tag :span, options[:append], class: 'input-group-addon' unless options[:append].nil?
56
- concat text_field_tag content, html_options[:value], html_options
56
+ concat text_field_input_tag
57
57
  concat content_tag :span, options[:prepend], class: 'input-group-addon' unless options[:prepend].nil?
58
58
  end
59
59
  end
@@ -61,6 +61,15 @@ module UiBibz::Ui::Core
61
61
 
62
62
  private
63
63
 
64
+ # Simple_form or not
65
+ def text_field_input_tag
66
+ if options[:builder].nil?
67
+ text_field_tag content, html_options[:value], html_options
68
+ else
69
+ options[:builder].text_field content, html_options
70
+ end
71
+ end
72
+
64
73
  def component_html_classes
65
74
  'form-control'
66
75
  end
@@ -0,0 +1,127 @@
1
+ module UiBibz::Ui::Core
2
+
3
+ # Create a SurroundField
4
+ #
5
+ # This element is an extend of UiBibz::Ui::Core::Component.
6
+ # Source : http://www.bootstrap-switch.org/documentation-2.html
7
+ # ==== Attributes
8
+ #
9
+ # * +content+ - Content of element
10
+ # * +options+ - Options of element
11
+ # * +html_options+ - Html Options of element
12
+ #
13
+ # ==== Options
14
+ #
15
+ # You can add HTML attributes using the +html_options+.
16
+ # You can pass arguments in options attribute:
17
+ # * +status+ - String
18
+ # * +animate+ - Boolean
19
+ # * +on_color+ - String
20
+ # * +off_color+ - String
21
+ # * +on_text+ - String
22
+ # * +off_text+ - String
23
+ # * +label_text+ - String
24
+ # * +readonly+ - Boolean
25
+ # * +checked+ - Boolean
26
+ #
27
+ # ==== Signatures
28
+ #
29
+ # UiBibz::Ui::Core::SwitchField.new(content, options = {}, html_options = {}).render
30
+ #
31
+ # UiBibz::Ui::Core::SwitchField.new(options = {}, html_options = {}) do
32
+ # content
33
+ # end.render
34
+ #
35
+ # ==== Examples
36
+ #
37
+ # switch_field 'name', { on_color: :primary }, { readonly: true }
38
+ #
39
+ # ==== Helper
40
+ #
41
+ # switch_field(options = {}, html_options = {}) do
42
+ # # content
43
+ # end
44
+ #
45
+ class SwitchField < Component
46
+
47
+ # See UiBibz::Ui::Core::Component.initialize
48
+ def initialize content = nil, options = nil, html_options = nil, &block
49
+ super
50
+ end
51
+
52
+ # Render html tag
53
+ def render
54
+ if options[:builder].nil?
55
+ check_box_tag content, value, html_options[:checked], html_options
56
+ else
57
+ options[:builder].check_box(content, html_options, true, false)
58
+ end
59
+ end
60
+
61
+ private
62
+
63
+ def value
64
+ options[:value]
65
+ end
66
+
67
+ def component_html_classes
68
+ "switch"
69
+ end
70
+
71
+ def component_html_data
72
+ size
73
+ status
74
+ animate
75
+ left_color
76
+ right_color
77
+ left_text
78
+ right_text
79
+ middle_text
80
+ end
81
+
82
+ # '', 'mini', 'small', 'normal', 'large'
83
+ def size
84
+ add_html_data('size', matching_size[options[:size]]) unless options[:size].nil?
85
+ end
86
+
87
+ def matching_size
88
+ { xs: 'small', md: 'normal', lg: 'large' }
89
+ end
90
+
91
+ # true, false => default : true
92
+ def animate
93
+ add_html_data('animate', options.delete(:animate)) unless options[:animate].nil?
94
+ end
95
+
96
+ # active, disabled => default : active
97
+ def status
98
+ html_options[:disabled] = true if options[:status] == 'disabled'
99
+ end
100
+
101
+ # 'primary', 'info', 'success', 'warning', 'danger', 'default' => default : default
102
+ def left_color
103
+ add_html_data('on_color', options[:left_color]) unless options[:left_color].nil?
104
+ end
105
+
106
+ # 'primary', 'info', 'success', 'warning', 'danger', 'default' => default : default
107
+ def right_color
108
+ add_html_data('off_color', options[:right_color]) unless options[:right_color].nil?
109
+ end
110
+
111
+ # String => default : "ON"
112
+ def left_text
113
+ add_html_data('on_text', options[:left_text]) unless options[:left_text].nil?
114
+ end
115
+
116
+ # String => default : "OFF"
117
+ def right_text
118
+ add_html_data('off_text', options[:right_text]) unless options[:right_text].nil?
119
+ end
120
+
121
+ # String => default : '&nbsp;'
122
+ def middle_text
123
+ add_html_data('label_text', options[:middle_text]) unless options[:middle_text].nil?
124
+ end
125
+
126
+ end
127
+ end