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
@@ -0,0 +1,51 @@
1
+ module UiBibz::Ui::Ux
2
+
3
+ # Create a Thead
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
+ # * +state+ - State of élement with symbol value:
18
+ # (+:inverse+, +:default+)
19
+ #
20
+ # ==== Signatures
21
+ #
22
+ # UiBibz::Ui::Ux::Thead.new(content, options = nil, html_options = nil)
23
+ #
24
+ # UiBibz::Ui::Ux::Thead.new(options = nil, html_options = nil) do
25
+ # content
26
+ # end
27
+ #
28
+ # ==== Examples
29
+ #
30
+ # UiBibz::Ui::Ux::Thead.new(content, { state: :inverse }).render
31
+ #
32
+ class Thead < UiBibz::Ui::Core::Component
33
+
34
+ # See UiBibz::Ui::Core::Component.initialize
35
+ def initialize content = nil, options = nil, html_options = nil, &block
36
+ super
37
+ end
38
+
39
+ # Render html tag
40
+ def render
41
+ content_tag :thead, content, html_options
42
+ end
43
+
44
+ private
45
+
46
+ def state
47
+ "thead-#{ @options[:state] }" unless @options[:state].nil?
48
+ end
49
+
50
+ end
51
+ end
@@ -31,7 +31,7 @@ module UiBibz::Ui::Ux
31
31
  unless @actions.nil?
32
32
  @actions.format_action.call(record) unless @actions.format_action.nil?
33
33
  unless (default_actions? != true && @actions.raw_list.empty?)
34
- UiBibz::Ui::Core::Dropdown.new(dropdown_action_name, { position: :right, size: :sm, glyph: actions_glyph }, { class: 'dropdown-action' }).tap do |d|
34
+ UiBibz::Ui::Core::ButtonDropdown.new(dropdown_action_name, { position: :right, size: :xs, glyph: actions_glyph }, { class: 'dropdown-action' }).tap do |d|
35
35
  actions_links(record).each do |l|
36
36
  d.html l.to_s.html_safe
37
37
  end
@@ -71,11 +71,11 @@ module UiBibz::Ui::Ux
71
71
  end
72
72
 
73
73
  def name_with_caret
74
- sort_name == sort_column && @column.id.to_s == @store.column_id.to_s ? @name + caret : @name
74
+ sort_name.to_s == sort_column.to_s && @column.id.to_s == @store.column_id.to_s ? @name + caret : @name
75
75
  end
76
76
 
77
77
  def caret
78
- content_tag(:span, '', class: 'caret')
78
+ UiBibz::Ui::Core::Glyph.new("caret-#{ direction == 'desc' ? 'up' : 'down' }").render
79
79
  end
80
80
 
81
81
  def cls
@@ -2,6 +2,7 @@ require "ui_bibz/ui/ux/table/components/store"
2
2
  require "ui_bibz/ui/ux/table/components/columns"
3
3
  require "ui_bibz/ui/ux/table/components/column"
4
4
  require "ui_bibz/ui/ux/table/components/actions"
5
+ require "ui_bibz/ui/ux/table/components/thead"
5
6
  require "ui_bibz/ui/ux/table/extensions/paginable"
6
7
  require "ui_bibz/ui/ux/table/extensions/paginable"
7
8
  require "ui_bibz/ui/ux/table/extensions/searchable"
@@ -30,6 +31,18 @@ module UiBibz::Ui::Ux
30
31
  # * +sortable+ - Boolean
31
32
  # * +searchable+ - Boolean
32
33
  # * +default_actions+ - Boolean
34
+ # * +state+
35
+ # (+:inverse+, +:default+, +:success+, +:primary+, +:secondary+, +:info+,
36
+ # +:danger+, +:warning+)
37
+ # * +thead+ - Hash
38
+ # (+state+)
39
+ # (+:inverse+, +:default+)
40
+ # * +bordered+ - Boolean
41
+ # * +hoverable+ - Boolean
42
+ # * +size+
43
+ # (+:sm+)
44
+ # * +responsive+ - Boolean
45
+ # * +reflow+ - Boolean
33
46
  #
34
47
  # ==== Signatures
35
48
  #
@@ -148,16 +161,18 @@ module UiBibz::Ui::Ux
148
161
  end
149
162
 
150
163
  ths = action.header ths
151
- concat content_tag(:tr, ths.join.html_safe)
164
+ concat Thead.new(content_tag(:tr, ths.join.html_safe), @options[:thead]).render
152
165
 
153
- store.records.each do |record|
166
+ trs = store.records.collect do |record|
154
167
  tds = cols.collect do |col|
155
168
  content_tag(:td, td_content(record, col)) unless col.hidden?
156
169
  end
157
170
 
158
171
  tds = action.body record, tds
159
- concat content_tag :tr, tds.join.html_safe
172
+ content_tag(:tr, tds.join.html_safe)
160
173
  end
174
+
175
+ concat content_tag :tbody, trs.join.html_safe
161
176
  end
162
177
  end
163
178
 
@@ -175,7 +190,35 @@ module UiBibz::Ui::Ux
175
190
  private
176
191
 
177
192
  def component_html_classes
178
- ["table", type]
193
+ ["table", striped, bordered, hoverable, size, responsive, reflow]
194
+ end
195
+
196
+ def state
197
+ "table-#{ @options[:state] }" unless @options[:state].nil?
198
+ end
199
+
200
+ def striped
201
+ "table-striped" unless @options[:striped].nil?
202
+ end
203
+
204
+ def bordered
205
+ "table-bordered" unless @options[:bordered].nil?
206
+ end
207
+
208
+ def hoverable
209
+ "table-hoverable" unless @options[:hoverable].nil?
210
+ end
211
+
212
+ def size
213
+ "table-#{ @options[:size] }" unless @options[:size].nil?
214
+ end
215
+
216
+ def responsive
217
+ "table-responsive" unless @options[:responsive].nil?
218
+ end
219
+
220
+ def reflow
221
+ "table-reflow" unless @options[:reflow].nil?
179
222
  end
180
223
 
181
224
  end
@@ -22,6 +22,18 @@ module UiBibz::Ui::Ux
22
22
  # * +actionable+ - Boolean
23
23
  # * +sortable+ - Boolean
24
24
  # * +searchable+ - Boolean
25
+ # * +state+
26
+ # (+:inverse+)
27
+ # * +thead+ - Hash
28
+ # (+state+)
29
+ # (+inverse+, +default+)
30
+ # * +bordered+ - Boolean
31
+ # * +hoverable+ - Boolean
32
+ # * +size+
33
+ # (+sm+)
34
+ # * +responsive+ - Boolean
35
+ # * +reflow+ - Boolean
36
+ #
25
37
  #
26
38
  # ==== Signatures
27
39
  #
@@ -170,10 +182,6 @@ module UiBibz::Ui::Ux
170
182
  content_tag :div, @table.render, class: 'card-table'
171
183
  end
172
184
 
173
- def panel_classes
174
- %w(panel panel-default table-panel)
175
- end
176
-
177
185
  def search
178
186
  @search ||= Searchable.new store, @options.merge({ wrap_form: false }), { class: 'card-header' }
179
187
  end
@@ -1,3 +1,3 @@
1
1
  module UiBibz
2
- VERSION = "2.0.0.alpha"
2
+ VERSION = "2.0.0.alpha2"
3
3
  end
data/lib/ui_bibz.rb CHANGED
@@ -12,36 +12,50 @@ module UiBibz
12
12
 
13
13
  # Core
14
14
  module Core
15
- autoload :Alert, "ui_bibz/ui/core/alert"
16
- autoload :Breadcrumb, "ui_bibz/ui/core/breadcrumb/breadcrumb"
15
+ # Button section
17
16
  autoload :Button, "ui_bibz/ui/core/button/button"
18
17
  autoload :ButtonChoice, "ui_bibz/ui/core/button/button_choice"
19
18
  autoload :ButtonDropdown, "ui_bibz/ui/core/button/button_dropdown"
20
19
  autoload :ButtonGroup, "ui_bibz/ui/core/button/button_group"
21
20
  autoload :ButtonLink, "ui_bibz/ui/core/button/button_link"
22
21
  autoload :ButtonSplitDropdown, "ui_bibz/ui/core/button/button_split_dropdown"
22
+
23
+ # Card section
23
24
  autoload :Card, "ui_bibz/ui/core/card/card"
24
25
  autoload :CardColumn, "ui_bibz/ui/core/card/card_column"
25
26
  autoload :CardDeck, "ui_bibz/ui/core/card/card_deck"
26
27
  autoload :CardGroup, "ui_bibz/ui/core/card/card_group"
28
+
29
+ # Input section
30
+ autoload :AutocompleteField, "ui_bibz/ui/core/input/autocomplete_field"
31
+ autoload :DatePickerField, "ui_bibz/ui/core/input/date_picker_field"
32
+ autoload :DropdownSelectField, "ui_bibz/ui/core/input/dropdown_select_field"
33
+ autoload :MultiColumnField, "ui_bibz/ui/core/input/multi_column_field"
34
+ autoload :MultiSelectField, "ui_bibz/ui/core/input/multi_select_field"
35
+ autoload :SurroundField, "ui_bibz/ui/core/input/surround_field"
36
+ autoload :SwitchField, "ui_bibz/ui/core/input/switch_field"
37
+
38
+ # Layout section
39
+ autoload :Row, "ui_bibz/ui/core/layout/row"
27
40
  autoload :Col, "ui_bibz/ui/core/layout/col"
28
- autoload :Component, "ui_bibz/ui/core/component"
29
41
  autoload :Container, "ui_bibz/ui/core/layout/container"
30
- autoload :DatePickerField, "ui_bibz/ui/core/input/date_picker_field"
42
+
43
+ # Nav section
44
+ autoload :Nav, "ui_bibz/ui/core/nav/nav"
45
+ autoload :Navbar, "ui_bibz/ui/core/nav/navbar"
46
+
47
+ # Other section
48
+ autoload :Alert, "ui_bibz/ui/core/alert"
49
+ autoload :Breadcrumb, "ui_bibz/ui/core/breadcrumb/breadcrumb"
50
+ autoload :Component, "ui_bibz/ui/core/component"
31
51
  autoload :Dropdown, "ui_bibz/ui/core/dropdown/dropdown"
32
52
  autoload :Glyph, "ui_bibz/ui/core/glyph"
33
53
  autoload :Jumbotron, "ui_bibz/ui/core/jumbotron"
34
54
  autoload :Label, "ui_bibz/ui/core/label"
35
55
  autoload :ListGroup, "ui_bibz/ui/core/list/list_group"
36
56
  autoload :Modal, "ui_bibz/ui/core/modal/modal"
37
- autoload :MultiSelectField, "ui_bibz/ui/core/input/multi_select_field"
38
- autoload :MultiColumnField, "ui_bibz/ui/core/input/multi_column_field"
39
- autoload :Nav, "ui_bibz/ui/core/nav/nav"
40
- autoload :Navbar, "ui_bibz/ui/core/nav/navbar"
41
57
  autoload :Progress, "ui_bibz/ui/core/progress"
42
- autoload :Row, "ui_bibz/ui/core/layout/row"
43
58
  autoload :Stars, "ui_bibz/ui/core/stars"
44
- autoload :SurroundField, "ui_bibz/ui/core/input/surround_field"
45
59
  autoload :Tab, "ui_bibz/ui/core/nav/tab"
46
60
  end
47
61
 
data/test/ui/card_test.rb CHANGED
@@ -28,7 +28,7 @@ class CardTest < ActionView::TestCase
28
28
  link_to "Card link", '#', class: "card-link"
29
29
  end
30
30
  end
31
- expected = "<div class=\"card\"><img src=\"/images/image.svg\" alt=\"Image\" /><div class=\"card-block\">test</div><ul class=\"list-group-flush list-group\"><li class=\"list-group-item\">Cras justo odio</li><li class=\"list-group-item\">Dapibas ac facilisis in</li><li class=\"list-group-item\">vestibulum at eros</li></ul><div class=\"card-block\"><a class=\"card-link\" href=\"#\">Card link</a></div></div>"
31
+ expected = "<div class=\"card\"><img src=\"/assets/image.svg\" alt=\"Image\" /><div class=\"card-block\">test</div><ul class=\"list-group-flush list-group\"><li class=\"list-group-item\">Cras justo odio</li><li class=\"list-group-item\">Dapibas ac facilisis in</li><li class=\"list-group-item\">vestibulum at eros</li></ul><div class=\"card-block\"><a class=\"card-link\" href=\"#\">Card link</a></div></div>"
32
32
 
33
33
  assert_equal expected, actual
34
34
  end
@@ -0,0 +1,78 @@
1
+ require 'test_helper'
2
+
3
+ include UiBibz::Helpers
4
+ class InputDropdownSelectFieldTest < ActionView::TestCase
5
+
6
+ test 'dropdowm_select_field' do
7
+ options = options_for_select(2.times.map{ |i| "option #{i}" })
8
+ actual = UiBibz::Ui::Core::DropdownSelectField.new('test', options_tags: options).render
9
+ expected = "<select name=\"test\" id=\"test\" class=\"selectpicker\"></select>"
10
+
11
+ assert_equal expected, actual
12
+ end
13
+
14
+ test 'dropdowm_select_field searchable' do
15
+ options = options_for_select(2.times.map{ |i| "option #{i}" })
16
+ actual = UiBibz::Ui::Core::DropdownSelectField.new('test', { options_tags: options, searchable: true }).render
17
+ expected = "<select name=\"test\" id=\"test\" data-live-search=\"true\" class=\"selectpicker\"></select>"
18
+
19
+ assert_equal expected, actual
20
+ end
21
+
22
+ test 'dropdowm_select_field max_options' do
23
+ options = options_for_select(2.times.map{ |i| "option #{i}" })
24
+ actual = UiBibz::Ui::Core::DropdownSelectField.new('test', { options_tags: options, max_options: 2 }).render
25
+ expected = "<select name=\"test\" id=\"test\" data-max-options=\"2\" class=\"selectpicker\"></select>"
26
+
27
+ assert_equal expected, actual
28
+ end
29
+
30
+ test 'dropdowm_select_field selected_text_format' do
31
+ options = options_for_select(2.times.map{ |i| "option #{i}" })
32
+ actual = UiBibz::Ui::Core::DropdownSelectField.new('test', { options_tags: options, selected_text_format: "count > x" }).render
33
+ expected = "<select name=\"test\" id=\"test\" data-selected-text-format=\"count &gt; x\" class=\"selectpicker\"></select>"
34
+
35
+ assert_equal expected, actual
36
+ end
37
+
38
+ test 'dropdowm_select_field menu_size' do
39
+ options = options_for_select(2.times.map{ |i| "option #{i}" })
40
+ actual = UiBibz::Ui::Core::DropdownSelectField.new('test', { options_tags: options, menu_size: 2 }).render
41
+ expected = "<select name=\"test\" id=\"test\" data-size=\"2\" class=\"selectpicker\"></select>"
42
+
43
+ assert_equal expected, actual
44
+ end
45
+
46
+ test 'dropdowm_select_field actions_box' do
47
+ options = options_for_select(2.times.map{ |i| "option #{i}" })
48
+ actual = UiBibz::Ui::Core::DropdownSelectField.new('test', { options_tags: options, actions_box: true }).render
49
+ expected = "<select name=\"test\" id=\"test\" data-actions-box=\"true\" class=\"selectpicker\"></select>"
50
+
51
+ assert_equal expected, actual
52
+ end
53
+
54
+ test 'dropdowm_select_field show_tick' do
55
+ options = options_for_select(2.times.map{ |i| "option #{i}" })
56
+ actual = UiBibz::Ui::Core::DropdownSelectField.new('test', { options_tags: options, show_tick: true }).render
57
+ expected = "<select name=\"test\" id=\"test\" class=\"selectpicker show-tick\"></select>"
58
+
59
+ assert_equal expected, actual
60
+ end
61
+
62
+ test 'dropdowm_select_field show_menu_arrow' do
63
+ options = options_for_select(2.times.map{ |i| "option #{i}" })
64
+ actual = UiBibz::Ui::Core::DropdownSelectField.new('test', { options_tags: options, show_menu_arrow: true }).render
65
+ expected = "<select name=\"test\" id=\"test\" class=\"selectpicker show-menu-arrow\"></select>"
66
+
67
+ assert_equal expected, actual
68
+ end
69
+
70
+ test 'dropdowm_select_field dropup' do
71
+ options = options_for_select(2.times.map{ |i| "option #{i}" })
72
+ actual = UiBibz::Ui::Core::DropdownSelectField.new('test', { options_tags: options, dropup: true }).render
73
+ expected = "<select name=\"test\" id=\"test\" class=\"selectpicker dropup\"></select>"
74
+
75
+ assert_equal expected, actual
76
+ end
77
+
78
+ end
@@ -0,0 +1,86 @@
1
+ require 'test_helper'
2
+
3
+ include UiBibz::Helpers
4
+ class InputsSwitchFieldTest < ActionView::TestCase
5
+
6
+ # OK
7
+ test 'switch_field size' do
8
+ actual = UiBibz::Ui::Core::SwitchField.new('test', size: :lg).render
9
+ expected = "<input type=\"checkbox\" name=\"test\" id=\"test\" data-size=\"large\" class=\"switch\" />"
10
+
11
+ assert_equal expected, actual
12
+ end
13
+
14
+ # OK
15
+ test 'switch_field animate' do
16
+ actual = UiBibz::Ui::Core::SwitchField.new('test', animate: false).render
17
+ expected = "<input type=\"checkbox\" name=\"test\" id=\"test\" data-animate=\"false\" class=\"switch\" />"
18
+
19
+ assert_equal expected, actual
20
+ end
21
+
22
+ # OK
23
+ test 'switch_field checked' do
24
+ actual = UiBibz::Ui::Core::SwitchField.new('test', {}, checked: true).render
25
+ expected = "<input type=\"checkbox\" name=\"test\" id=\"test\" checked=\"checked\" class=\"switch\" />"
26
+
27
+ assert_equal expected, actual
28
+ end
29
+
30
+ # OK
31
+ test 'switch_field status' do
32
+ actual = UiBibz::Ui::Core::SwitchField.new('test', {}, status: "disabled").render
33
+ expected = "<input type=\"checkbox\" name=\"test\" id=\"test\" status=\"disabled\" class=\"switch\" />"
34
+
35
+ assert_equal expected, actual
36
+ end
37
+
38
+ # NON FONCTIONNEL
39
+ test 'switch_field readonly' do
40
+ actual = UiBibz::Ui::Core::SwitchField.new('test', {}, readonly: true).render
41
+ expected = "<input type=\"checkbox\" name=\"test\" id=\"test\" readonly=\"readonly\" class=\"switch\" />"
42
+
43
+ assert_equal expected, actual
44
+ end
45
+
46
+ # OK
47
+ test 'switch_field left_color' do
48
+ actual = UiBibz::Ui::Core::SwitchField.new('test', left_color: "success").render
49
+ expected = "<input type=\"checkbox\" name=\"test\" id=\"test\" data-on-color=\"success\" class=\"switch\" />"
50
+
51
+ assert_equal expected, actual
52
+ end
53
+
54
+ # OK
55
+ test 'switch_field right_color' do
56
+ actual = UiBibz::Ui::Core::SwitchField.new('test', right_color: "info").render
57
+ expected = "<input type=\"checkbox\" name=\"test\" id=\"test\" data-off-color=\"info\" class=\"switch\" />"
58
+
59
+ assert_equal expected, actual
60
+ end
61
+
62
+ # OK
63
+ test 'switch_field middle_text' do
64
+ actual = UiBibz::Ui::Core::SwitchField.new('test', middle_text: "testlabeltext").render
65
+ expected = "<input type=\"checkbox\" name=\"test\" id=\"test\" data-label-text=\"testlabeltext\" class=\"switch\" />"
66
+
67
+ assert_equal expected, actual
68
+ end
69
+
70
+ # OK
71
+ test 'switch_field left_text' do
72
+ actual = UiBibz::Ui::Core::SwitchField.new('test', left_text: 'testonlabel').render
73
+ expected = "<input type=\"checkbox\" name=\"test\" id=\"test\" data-on-text=\"testonlabel\" class=\"switch\" />"
74
+
75
+ assert_equal expected, actual
76
+ end
77
+
78
+ # OK
79
+ test 'switch_field right_text' do
80
+ actual = UiBibz::Ui::Core::SwitchField.new('test', right_text: "testofflabel").render
81
+ expected = "<input type=\"checkbox\" name=\"test\" id=\"test\" data-off-text=\"testofflabel\" class=\"switch\" />"
82
+
83
+ assert_equal expected, actual
84
+ end
85
+
86
+ end
@@ -4,8 +4,8 @@ include UiBibz::Helpers
4
4
  class InputsTest < ActionView::TestCase
5
5
 
6
6
  test "Date Picker Field" do
7
- actual = UiBibz::Ui::Core::DatePickerField.new('date', { append: 'a', prepend: 'b', range: 'u' }, { class: 'datepicker-test' }).render
8
- expected = "<div class=\"input-group input-daterange\"><span class=\"input-group-addon\">a</span><input type=\"text\" name=\"date\" id=\"date\" class=\"datepicker-test date_picker form-control\" data-date-locale=\"en\" data-provide=\"datepicker\" data-date-format=\"dd/mm/yyyy\" data-date-today-btn=\"linked\" /><span class=\"input-group-addon input-group-range\">u</span><input type=\"text\" name=\"date\" id=\"date\" class=\"datepicker-test date_picker form-control\" data-date-locale=\"en\" data-provide=\"datepicker\" data-date-format=\"dd/mm/yyyy\" data-date-today-btn=\"linked\" /><span class=\"input-group-addon\">b</span></div>"
7
+ actual = UiBibz::Ui::Core::DatePickerField.new(['date_1', 'date_2'], { append: 'a', prepend: 'b', range: 'u' }, { class: 'datepicker-test' }).render
8
+ expected = "<div class=\"input-group input-daterange\"><span class=\"input-group-addon\">a</span><input type=\"text\" name=\"date_1\" id=\"date_1\" class=\"datepicker-test date_picker form-control\" data-date-locale=\"en\" data-provide=\"datepicker\" data-date-format=\"dd/mm/yyyy\" data-date-today-btn=\"linked\" /><span class=\"input-group-addon input-group-range\">u</span><input type=\"text\" name=\"date_2\" id=\"date_2\" class=\"datepicker-test date_picker form-control\" data-date-locale=\"en\" data-provide=\"datepicker\" data-date-format=\"dd/mm/yyyy\" data-date-today-btn=\"linked\" /><span class=\"input-group-addon\">b</span></div>"
9
9
 
10
10
  assert_equal expected, actual
11
11
  end
@@ -40,7 +40,7 @@ class InputsTest < ActionView::TestCase
40
40
  test "Multi Select Field" do
41
41
  options = options_for_select(2.times.map{ |i| "option #{i}" })
42
42
  actual = UiBibz::Ui::Core::MultiSelectField.new('example', option_tags: options).render
43
- expected = "<select name=\"example[]\" id=\"example\" class=\"btn-primary btn multi-select\" multiple=\"multiple\"><option value=\"option 0\">option 0</option>
43
+ expected = "<select name=\"example[]\" id=\"example\" class=\"btn-secondary btn multi-select\" multiple=\"multiple\"><option value=\"option 0\">option 0</option>
44
44
  <option value=\"option 1\">option 1</option></select>"
45
45
 
46
46
  assert_equal expected, actual
@@ -49,7 +49,7 @@ class InputsTest < ActionView::TestCase
49
49
  test "Multi Select Field data html options" do
50
50
  grouped_options = { 'North America' => [['United States','US'], 'Canada'], 'Europe' => ['Denmark','Germany','France'] }
51
51
  actual = UiBibz::Ui::Core::MultiSelectField.new('example', { option_tags: grouped_options_for_select(grouped_options), clickable_opt_group: true, collapsible_opt_group: true, searchable: true, select_all_option: true, state: :danger }).render
52
- expected = "<select name=\"example[]\" id=\"example\" data-enable-clickable-opt-groups=\"true\" data-enable-collapsible-opt-groups=\"true\" data-enable-filtering=\"true\" data-include-select-all-option=\"true\" class=\"btn-danger btn multi-select\" multiple=\"multiple\"><optgroup label=\"North America\"><option value=\"US\">United States</option>
52
+ expected = "<select name=\"example[]\" id=\"example\" data-enable-clickable-opt-groups=\"true\" data-enable-collapsible-opt-groups=\"true\" data-enable-filtering=\"true\" data-include-select-all-option=\"true\" class=\"danger btn multi-select\" multiple=\"multiple\"><optgroup label=\"North America\"><option value=\"US\">United States</option>
53
53
  <option value=\"Canada\">Canada</option></optgroup><optgroup label=\"Europe\"><option value=\"Denmark\">Denmark</option>
54
54
  <option value=\"Germany\">Germany</option>
55
55
  <option value=\"France\">France</option></optgroup></select>"
@@ -78,4 +78,12 @@ class InputsTest < ActionView::TestCase
78
78
  assert_equal expected, actual
79
79
  end
80
80
 
81
+ test 'autocomplete_field' do
82
+ options = options_for_select(2.times.map{ |i| "option #{i}" })
83
+ actual = UiBibz::Ui::Core::AutocompleteField.new('test', { option_tags: options }, { id: 'test' }).render
84
+ expected = "<input type=\"text\" name=\"test\" id=\"test\" class=\"form-control\" autocomplete=\"true\" list=\"test-datalist\" /><datalist id=\"test-datalist\"><option value=\"option 0\">option 0</option>
85
+ <option value=\"option 1\">option 1</option></datalist>"
86
+
87
+ assert_equal expected, actual
88
+ end
81
89
  end
@@ -5,6 +5,7 @@ require "ui_bibz/ui/ux/table/extensions/searchable"
5
5
  require "ui_bibz/ui/ux/table/extensions/sortable"
6
6
  require "ui_bibz/ui/ux/table/extensions/actionable"
7
7
  include UiBibz::Helpers
8
+
8
9
  class TableTest < ActionView::TestCase
9
10
 
10
11
  setup do
@@ -193,4 +194,19 @@ class TableTest < ActionView::TestCase
193
194
  end
194
195
  end
195
196
 
197
+ test 'table visual options' do
198
+ table = UiBibz::Ui::Ux::Table.new(store: @users, striped: true, state: :inverse, responsive: true, bordered: true, size: :sm, hoverable: true, reflow: true).render
199
+ actual = Nokogiri::HTML(table).xpath("//table")[0].attributes["class"].value
200
+ expected = "table-inverse table table-striped table-bordered table-hoverable table-sm table-responsive table-reflow"
201
+
202
+ assert_equal expected, actual
203
+ end
204
+
205
+ test 'table thead visual options' do
206
+ table = UiBibz::Ui::Ux::Table.new(store: @users, thead: { state: :default }).render
207
+ actual = Nokogiri::HTML(table).xpath("//thead")[0].attributes["class"].value
208
+ expected = "thead-default"
209
+
210
+ assert_equal expected, actual
211
+ end
196
212
  end
data/ui_bibz.gemspec CHANGED
@@ -8,10 +8,10 @@ Gem::Specification.new do |s|
8
8
  s.name = "ui_bibz"
9
9
  s.version = UiBibz::VERSION
10
10
  s.authors = ["Thooams"]
11
- s.email = ["thooams@gmail.com"]
11
+ s.email = ["thomas@hummel.link"]
12
12
  s.homepage = "http://thooams.github.io/Ui-Bibz/"
13
13
  s.summary = "A Rails Bootstrap framework..."
14
- s.description = "A Rails Boostrap framework..."
14
+ s.description = "A Rails Bootstrap framework..."
15
15
  s.license = "MIT"
16
16
 
17
17
  s.files = `git ls-files`.split("\n")
@@ -19,7 +19,8 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib", "vendor"]
21
21
 
22
- # rails
22
+ # Rails gems
23
+ s.add_dependency 'bundler', '>= 1.8.4'
23
24
  s.add_dependency 'rails', '>= 4.2.0'
24
25
  s.add_dependency 'will_paginate', '~> 3.1.0'
25
26
  s.add_dependency 'will_paginate-bootstrap'
@@ -28,9 +29,18 @@ Gem::Specification.new do |s|
28
29
  s.add_dependency 'haml-rails'
29
30
  s.add_dependency 'sass-rails', '>= 5.0.0'
30
31
  s.add_dependency 'font-awesome-sass'
31
- s.add_dependency 'bootstrap', '~> 4.0.0.alpha3'
32
+ s.add_dependency 'bootstrap', '< 4.0.0.alpha3'
33
+
34
+ # Javascript gems (rails-assets.org)
32
35
  s.add_dependency 'rails-assets-tether', '>= 1.1.0'
36
+ s.add_dependency 'rails-assets-bootstrap-select', '>= 1.10.0'
37
+ s.add_dependency 'rails-assets-bootstrap-datepicker', '>= 1.6.0'
38
+
39
+ # not compatible with boostrap 4
40
+ #s.add_dependency 'rails-assets-bootstrap-switch', '>= 3.3.2'
41
+ #s.add_dependency 'rails-assets-bootstrap-multiselect', '>= 0.9.13'
33
42
 
43
+ # Development gems
34
44
  s.add_development_dependency "minitest"
35
45
  s.add_development_dependency "rdoc"
36
46
  s.add_development_dependency "sqlite3"
@@ -19,4 +19,4 @@
19
19
  * ========================================================================
20
20
  */
21
21
 
22
- .bootstrap-switch{display:inline-block;direction:ltr;cursor:pointer;border-radius:4px;border:1px solid #ccc;position:relative;text-align:left;overflow:hidden;line-height:8px;z-index:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.bootstrap-switch .bootstrap-switch-container{display:inline-block;top:0;border-radius:4px;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.bootstrap-switch .bootstrap-switch-handle-off,.bootstrap-switch .bootstrap-switch-handle-on,.bootstrap-switch .bootstrap-switch-label{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:inline-block!important;height:100%;padding:6px 12px;font-size:14px;line-height:20px}.bootstrap-switch .bootstrap-switch-handle-off,.bootstrap-switch .bootstrap-switch-handle-on{text-align:center;z-index:1}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary{color:#fff;background:#337ab7}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info{color:#fff;background:#5bc0de}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success{color:#fff;background:#5cb85c}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning{background:#f0ad4e;color:#fff}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger{color:#fff;background:#d9534f}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default{color:#000;background:#eee}.bootstrap-switch .bootstrap-switch-label{text-align:center;margin-top:-1px;margin-bottom:-1px;z-index:100;color:#333;background:#fff}.bootstrap-switch .bootstrap-switch-handle-on{border-bottom-left-radius:3px;border-top-left-radius:3px}.bootstrap-switch .bootstrap-switch-handle-off{border-bottom-right-radius:3px;border-top-right-radius:3px}.bootstrap-switch input[type=radio],.bootstrap-switch input[type=checkbox]{position:absolute!important;top:0;left:0;margin:0;z-index:-1;opacity:0;filter:alpha(opacity=0)}.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label{padding:1px 5px;font-size:12px;line-height:1.5}.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label{padding:5px 10px;font-size:12px;line-height:1.5}.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label{padding:6px 16px;font-size:18px;line-height:1.3333333}.bootstrap-switch.bootstrap-switch-disabled,.bootstrap-switch.bootstrap-switch-indeterminate,.bootstrap-switch.bootstrap-switch-readonly{cursor:default!important}.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label{opacity:.5;filter:alpha(opacity=50);cursor:default!important}.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container{-webkit-transition:margin-left .5s;-o-transition:margin-left .5s;transition:margin-left .5s}.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on{border-radius:0 3px 3px 0}.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off{border-radius:3px 0 0 3px}.bootstrap-switch.bootstrap-switch-focused{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label{border-bottom-right-radius:3px;border-top-right-radius:3px}.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label{border-bottom-left-radius:3px;border-top-left-radius:3px}
22
+ .bootstrap-switch{display:inline-block;direction:ltr;cursor:pointer;border-radius:4px;border:1px solid #ccc;position:relative;text-align:left;overflow:hidden;line-height:8px;z-index:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.bootstrap-switch .bootstrap-switch-container{display:inline-block;top:0;border-radius:4px;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.bootstrap-switch .bootstrap-switch-handle-off,.bootstrap-switch .bootstrap-switch-handle-on,.bootstrap-switch .bootstrap-switch-label{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:inline-block!important;padding:6px 12px;font-size:14px;line-height:20px}.bootstrap-switch .bootstrap-switch-handle-off,.bootstrap-switch .bootstrap-switch-handle-on{text-align:center;z-index:1}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary{color:#fff;background:#337ab7}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info{color:#fff;background:#5bc0de}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success{color:#fff;background:#5cb85c}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning{background:#f0ad4e;color:#fff}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger{color:#fff;background:#d9534f}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default{color:#000;background:#eee}.bootstrap-switch .bootstrap-switch-label{text-align:center;margin-top:-1px;margin-bottom:-1px;z-index:100;color:#333;background:#fff}.bootstrap-switch .bootstrap-switch-handle-on{border-bottom-left-radius:3px;border-top-left-radius:3px}.bootstrap-switch .bootstrap-switch-handle-off{border-bottom-right-radius:3px;border-top-right-radius:3px}.bootstrap-switch input[type=radio],.bootstrap-switch input[type=checkbox]{position:absolute!important;top:0;left:0;margin:0;z-index:-1;opacity:0;filter:alpha(opacity=0)}.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label{padding:1px 5px;font-size:12px;line-height:1.5}.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label{padding:5px 10px;font-size:12px;line-height:1.5}.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label{padding:6px 16px;font-size:18px;line-height:1.3333333}.bootstrap-switch.bootstrap-switch-disabled,.bootstrap-switch.bootstrap-switch-indeterminate,.bootstrap-switch.bootstrap-switch-readonly{cursor:default!important}.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label{opacity:.5;filter:alpha(opacity=50);cursor:default!important}.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container{-webkit-transition:margin-left .5s;-o-transition:margin-left .5s;transition:margin-left .5s}.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on{border-radius:0 3px 3px 0}.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off{border-radius:3px 0 0 3px}.bootstrap-switch.bootstrap-switch-focused{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label{border-bottom-right-radius:3px;border-top-right-radius:3px}.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label{border-bottom-left-radius:3px;border-top-left-radius:3px}