ui_bibz 2.0.0.alpha → 2.0.0.alpha2

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.
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,239 @@
1
+ // fix bootstrap-select
2
+
3
+ //
4
+ // Dropdown menus
5
+ // --------------------------------------------------
6
+
7
+ $fix-caret-width-base: 4px !default
8
+ $fix-dropdown-fallback-border: #ccc !default
9
+ $fix-border-radius-base: #ccc !default
10
+ $fix-border-radius-base: 4px !default
11
+ $fix-border-radius-large: 6px !default
12
+ $fix-border-radius-small: 3px !default
13
+ $fix-line-height-base: 1.428571429 !default
14
+ $fix-font-size-base: 14px
15
+ $fix-font-size-large: ceil(($fix-font-size-base * 1.25))
16
+ $fix-font-size-small: ceil(($fix-font-size-base * 0.85))
17
+ $fix-line-height-computed: floor(($fix-font-size-base * $fix-line-height-base)) !default
18
+ $fix-screen-sm: 768px
19
+ $fix-screen-sm-min: $fix-screen-sm
20
+ $fix-screen-md: 992px
21
+ $fix-screen-md-min: $fix-screen-md
22
+ $fix-screen-sm-max: ($fix-screen-md-min - 1)
23
+ $fix-grid-float-breakpoint: $fix-screen-sm-min
24
+ $fix-zindex-dropdown: 1000
25
+ $fix-dropdown-bg: #fff
26
+ $fix-dropdown-border: rgba(0,0,0,.15)
27
+ $fix-dropdown-divider-bg: #e5e5e5
28
+ $fix-dropdown-link-color: $gray-dark
29
+ $fix-dropdown-link-hover-color: darken($gray-dark, 5%)
30
+ $fix-dropdown-link-hover-bg: #f5f5f
31
+ $fix-dropdown-link-active-color: $component-active-color
32
+ $fix-dropdown-link-active-bg: $component-active-bg
33
+ $fix-dropdown-link-disabled-color: $gray-light
34
+ $fix-cursor-disabled: not-allowed
35
+ $fix-dropdown-header-color: $gray-light
36
+ $fix-dropdown-caret-color: #000
37
+
38
+
39
+ div.bootstrap-select
40
+ width: 100% !important
41
+
42
+ // Dropdown arrow/caret
43
+ .dropdown_select .caret
44
+ display: inline-block
45
+ width: 0
46
+ height: 0
47
+ margin-left: 2px
48
+ vertical-align: middle
49
+ border-top: $fix-caret-width-base dashed
50
+ border-top: $fix-caret-width-base solid \9
51
+ // IE8
52
+ border-right: $fix-caret-width-base solid transparent
53
+ border-left: $fix-caret-width-base solid transparent
54
+
55
+ // The dropdown wrapper (div)
56
+
57
+ .dropdown_select .dropup
58
+ position: relative
59
+
60
+ // Prevent the focus on the dropdown toggle when closing dropdowns
61
+ .dropdown_select .dropdown-toggle:focus
62
+ outline: 0
63
+ .dropdown_select .dropdown-toggle::after
64
+ display: none
65
+
66
+ // The dropdown menu (ul)
67
+ .dropdown_select .dropdown-menu
68
+ position: absolute
69
+ top: 100%
70
+ left: 0
71
+ z-index: $fix-zindex-dropdown
72
+ display: none
73
+ // none by default, but block on "open" of the menu
74
+ float: left
75
+ min-width: 160px
76
+ padding: 5px 0
77
+ margin: 2px 0 0
78
+ // override default ul
79
+ list-style: none
80
+ font-size: $fix-font-size-base
81
+ text-align: left
82
+ // Ensures proper alignment if parent has it changed (e.g., modal footer)
83
+ background-color: $fix-dropdown-bg
84
+ border: 1px solid $fix-dropdown-fallback-border
85
+ // IE8 fallback
86
+ border: 1px solid $fix-dropdown-border
87
+ border-radius: $fix-border-radius-base
88
+ box-shadow: 0 6px 12px
89
+ background-clip: padding-box
90
+ // Aligns the dropdown menu to right
91
+ //
92
+ // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`
93
+ &.pull-right
94
+ right: 0
95
+ left: auto
96
+ // Dividers (basically an hr) within the dropdown
97
+ .divider
98
+ height: 1px
99
+ margin: (($fix-line-height-computed / 2) - 1) 0
100
+ overflow: hidden
101
+ background-color: $fix-dropdown-divider-bg
102
+ // Links within the dropdown menu
103
+ > li > a
104
+ display: block
105
+ padding: 3px 20px
106
+ clear: both
107
+ font-weight: normal
108
+ line-height: $fix-line-height-base
109
+ color: $fix-dropdown-link-color
110
+ white-space: nowrap
111
+ // prevent links from randomly breaking onto new lines
112
+
113
+ // Hover/Focus state
114
+ .dropdown_select .dropdown-menu > li > a
115
+ &:hover,
116
+ &:focus
117
+ text-decoration: none
118
+ color: $fix-dropdown-link-hover-color
119
+ background-color: $fix-dropdown-link-hover-bg
120
+
121
+ // Active state
122
+ .dropdown_select .dropdown-menu > .active > a
123
+ &,
124
+ &:hover,
125
+ &:focus
126
+ color: $fix-dropdown-link-active-color
127
+ text-decoration: none
128
+ outline: 0
129
+ background-color: $fix-dropdown-link-active-bg
130
+
131
+ // Disabled state
132
+ //
133
+ // Gray out text and ensure the hover/focus state remains gray
134
+
135
+ .dropdown_select .dropdown-menu > .disabled > a
136
+ &,
137
+ &:hover,
138
+ &:focus
139
+ color: $fix-dropdown-link-disabled-color
140
+ // Nuke hover/focus effects
141
+ &:hover,
142
+ &:focus
143
+ text-decoration: none
144
+ background-color: transparent
145
+ background-image: none
146
+ // Remove CSS gradient
147
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false)
148
+ cursor: $fix-cursor-disabled
149
+
150
+ // Open state for the dropdown
151
+ .dropdown_select .open
152
+ // Show the menu
153
+ > .dropdown-menu
154
+ display: block
155
+ // Remove the outline when :focus is triggered
156
+ > a
157
+ outline: 0
158
+
159
+ // Menu positioning
160
+ //
161
+ // Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
162
+ // menu with the parent.
163
+ .dropdown_select .dropdown-menu-right
164
+ left: auto
165
+ // Reset the default from `.dropdown-menu`
166
+ right: 0
167
+
168
+ // With v3, we enabled auto-flipping if you have a dropdown within a right
169
+ // aligned nav component. To enable the undoing of that, we provide an override
170
+ // to restore the default dropdown menu alignment.
171
+ //
172
+ // This is only for left-aligning a dropdown menu within a `.navbar-right` or
173
+ // `.pull-right` nav component.
174
+ .dropdown_select .dropdown-menu-left
175
+ left: 0
176
+ right: auto
177
+
178
+ // Dropdown section headers
179
+ .dropdown_select .dropdown-header
180
+ display: block
181
+ padding: 3px 20px
182
+ font-size: $fix-font-size-small
183
+ line-height: $fix-line-height-base
184
+ color: $fix-dropdown-header-color
185
+ white-space: nowrap
186
+ // as with > li > a
187
+
188
+ // Backdrop to catch body clicks on mobile, etc.
189
+ .dropdown_select .dropdown-backdrop
190
+ position: fixed
191
+ left: 0
192
+ right: 0
193
+ bottom: 0
194
+ top: 0
195
+ z-index: $fix-zindex-dropdown - 10
196
+
197
+ // Right aligned dropdowns
198
+ .dropdown_select .pull-right > .dropdown-menu
199
+ right: 0
200
+ left: auto
201
+
202
+ // Allow for dropdowns to go bottom up (aka, dropup-menu)
203
+ //
204
+ // Just add .dropup after the standard .dropdown class and you're set, bro.
205
+ // TODO: abstract this so that the navbar fixed styles are not placed here?
206
+
207
+ .dropdown_select .dropup
208
+ // Reverse the caret
209
+ .caret
210
+ border-top: 0
211
+ border-bottom: $fix-caret-width-base dashed
212
+ border-bottom: $fix-caret-width-base solid \9
213
+ // IE8
214
+ content: ""
215
+ // Different positioning for bottom up menu
216
+ .dropdown-menu
217
+ top: auto
218
+ bottom: 100%
219
+ margin-bottom: 2px
220
+
221
+ // Component alignment
222
+ //
223
+ // Reiterate per navbar.less and the modified component alignment there.
224
+
225
+ @media (min-width: $fix-grid-float-breakpoint)
226
+ .dropdown_select .navbar-right
227
+ .dropdown-menu
228
+ right: 0
229
+ left: auto
230
+ // Necessary for overrides of the default right aligned menu.
231
+ // Will remove come v4 in all likelihood.
232
+ .dropdown-menu-left
233
+ left: 0
234
+ right: auto
235
+
236
+ .dropdown_select
237
+ .hidden
238
+ display: none
239
+
@@ -7,13 +7,20 @@
7
7
  //@import bootstrap-sprockets
8
8
  @import bootstrap
9
9
 
10
+
11
+ $brand-secondary: $gray-lighter
12
+ $states_colors: (success: $brand-success, primary: $brand-primary, secondary: $brand-secondary, info: $brand-info, danger: $brand-danger, warning: $brand-warning)
13
+
10
14
  // Boostrap Plugins
11
- @import bootstrap-datepicker3.min
12
- @import bootstrap-select.min
13
- @import bootstrap-switch.min
15
+ @import bootstrap-datepicker
16
+ @import bootstrap-select
17
+ @import bootstrap-switch
14
18
  @import bootstrap-multiselect.min
15
19
  @import multi-select.min
16
- //@import fix-bootstrap-4
20
+ @import fix-bootstrap-4
21
+ @import fix-dropdown-select
22
+ @import bootstrap-select
23
+
17
24
 
18
25
  // Table section
19
26
  .table-card
@@ -23,7 +30,7 @@
23
30
  th
24
31
  border-top: none
25
32
  .card-header
26
- background-color: $table-bg-active
33
+ //background-color: $table-bg-active
27
34
  .title
28
35
  float: left
29
36
  font-size: 20px
@@ -39,9 +46,15 @@
39
46
  overflow-x: auto
40
47
  min-height: 200px
41
48
  .card-footer
49
+ //background-color: $table-bg-active
42
50
  padding: 10px 10px
43
51
  .pagination
44
- margin: 0
52
+ margin: 0.5rem 0 0 0
53
+ li
54
+ display: inline
55
+ float: left
56
+ li:not(:first-child)
57
+ margin-left: 0.7rem
45
58
  .table-pagination-per-page
46
59
  float: right
47
60
  select
@@ -50,11 +63,11 @@
50
63
 
51
64
  .table>tbody>tr:hover
52
65
  td:last-child .dropdown-action
53
- display: block
66
+ display: inherit
54
67
 
55
68
  .table>tbody>tr
56
69
  td:last-child
57
- height: 39px
70
+ height: 45px // Maybe find another way
58
71
  .dropdown-action
59
72
  display: none
60
73
 
@@ -68,17 +81,15 @@
68
81
  .action
69
82
  width: 135px
70
83
 
84
+ @each $key, $value in $states_colors
85
+ .card-#{$key}
86
+ .card-header
87
+ background-color: $value
88
+
71
89
  // Glyph section
72
- .glyph-success
73
- color: $brand-success
74
- .glyph-primary
75
- color: $brand-primary
76
- .glyph-info
77
- color: $brand-info
78
- .glyph-warning
79
- color: $brand-warning
80
- .glyph-danger
81
- color: $brand-danger
90
+ @each $key, $value in $states_colors
91
+ .glyph-#{$key}
92
+ color: $value
82
93
 
83
94
  // Other section
84
95
  .ui-bibz-clear
@@ -0,0 +1,14 @@
1
+ module CustomInputs
2
+ class AutocompleteInput < SimpleForm::Inputs::CollectionInput
3
+ include UiBibz::Ui::Core
4
+ include ActionView::Helpers::FormOptionsHelper
5
+
6
+ def input(wrapper_options)
7
+ label_method, value_method = detect_collection_methods
8
+ options = options || {}
9
+ options = options.merge({ builder: @builder })
10
+ options = options.merge(option_tags: options_from_collection_for_select(collection, label_method, label_method))
11
+ UiBibz::Ui::Core::AutocompleteField.new(attribute_name, options, input_html_options).render
12
+ end
13
+ end
14
+ end
@@ -3,6 +3,8 @@ module CustomInputs
3
3
  include UiBibz::Ui::Core
4
4
 
5
5
  def input(wrapper_options)
6
+ options = options || {}
7
+ options = options.merge({ builder: @builder })
6
8
  UiBibz::Ui::Core::DatePickerField.new(attribute_name, input_options, input_html_options).render
7
9
  end
8
10
 
@@ -0,0 +1,15 @@
1
+ module CustomInputs
2
+ class DropdownSelectInput < SimpleForm::Inputs::CollectionInput
3
+ include UiBibz::Ui::Core
4
+
5
+ def input(wrapper_options)
6
+ label_method, value_method = detect_collection_methods
7
+ i = UiBibz::Ui::Core::DropdownSelectField.new(attribute_name, options, input_html_options)
8
+
9
+ @builder.collection_select(
10
+ attribute_name, collection, value_method, label_method,
11
+ input_options, i.html_options
12
+ )
13
+ end
14
+ end
15
+ end
@@ -1,18 +1,64 @@
1
1
  module CustomInputs
2
+ # multi_column_input manages collection and grouped_collection
2
3
  class MultiColumnInput < SimpleForm::Inputs::CollectionInput
3
4
  include UiBibz::Ui::Core
4
5
 
5
6
  def input(wrapper_options)
6
7
  label_method, value_method = detect_collection_methods
7
- i = UiBibz::Ui::Core::MultiColumnField.new(attribute_name, input_options, input_html_options)
8
+ i = UiBibz::Ui::Core::MultiColumnField.new(attribute_name, options, input_html_options)
8
9
 
9
10
  input_options.delete(:prompt)
10
11
  input_options.merge!({include_blank: false})
11
12
 
12
- @builder.collection_select(
13
- attribute_name, collection, value_method, label_method,
14
- input_options, i.html_options
15
- )
13
+ if options[:grouped] == true
14
+ @builder.grouped_collection_select(
15
+ attribute_name, grouped_collection,
16
+ group_method, group_label_method,
17
+ value_method, label_method,
18
+ input_options, i.html_options
19
+ )
20
+ else
21
+ @builder.collection_select(
22
+ attribute_name, collection, value_method, label_method,
23
+ input_options, i.html_options
24
+ )
25
+ end
16
26
  end
27
+
28
+ def grouped_collection
29
+ @grouped_collection ||= begin
30
+ grouped_collection = options.delete(:collection)
31
+ grouped_collection.respond_to?(:call) ? grouped_collection.call : grouped_collection.to_a
32
+ end
33
+ end
34
+
35
+ # Sample collection
36
+ #def group_collection
37
+ #@group_collection ||= grouped_collection.map { |collection| collection.try(:send, group_method) }.detect(&:present?) || []
38
+ #end
39
+
40
+ def collection
41
+ if options[:grouped]
42
+ @collection ||= grouped_collection.map { |collection| collection.try(:send, group_method) }.detect(&:present?) || []
43
+ else
44
+ @collection ||= options[:collection]
45
+ end
46
+ end
47
+
48
+ def group_method
49
+ @group_method ||= options.delete(:group_method)
50
+ end
51
+
52
+ def group_label_method
53
+ label = options.delete(:group_label_method)
54
+
55
+ unless label
56
+ common_method_for = detect_common_display_methods(detect_collection_classes(grouped_collection))
57
+ label = common_method_for[:label]
58
+ end
59
+
60
+ label
61
+ end
62
+
17
63
  end
18
64
  end
@@ -4,7 +4,7 @@ module CustomInputs
4
4
 
5
5
  def input(wrapper_options)
6
6
  label_method, value_method = detect_collection_methods
7
- i = UiBibz::Ui::Core::MultiSelectField.new(attribute_name, input_options, input_html_options)
7
+ i = UiBibz::Ui::Core::MultiSelectField.new(attribute_name, options, input_html_options)
8
8
 
9
9
  @builder.collection_select(
10
10
  attribute_name, collection, value_method, label_method,
@@ -3,7 +3,9 @@ module CustomInputs
3
3
  include UiBibz::Ui::Core
4
4
 
5
5
  def input(wrapper_options)
6
- UiBibz::Ui::Core::SurroundField.new(attribute_name, input_options, input_html_options).render
6
+ options = options || {}
7
+ options = options.merge({ builder: @builder })
8
+ UiBibz::Ui::Core::SurroundField.new(attribute_name, options, input_html_options).render
7
9
  end
8
10
 
9
11
  end
@@ -0,0 +1,11 @@
1
+ module CustomInputs
2
+ class SwitchInput < SimpleForm::Inputs::Base
3
+ include UiBibz::Ui::Core
4
+
5
+ def input(wrapper_options)
6
+ options = @options.merge({ builder: @builder })
7
+ UiBibz::Ui::Core::SwitchField.new(attribute_name, options, input_html_options).render
8
+ end
9
+
10
+ end
11
+ end
@@ -27,10 +27,14 @@ module UiBibz::Concerns::Models::Searchable
27
27
  id: @arguments[:store_id],
28
28
  records: search_sort_paginate,
29
29
  searchable_attributes: @searchable_attributes,
30
- model: self
30
+ model: create_model
31
31
  }
32
32
  end
33
33
 
34
+ def self.create_model
35
+ @arguments[:model].nil? ? self : @arguments[:model].to_s.camelize.classify.constantize
36
+ end
37
+
34
38
  # If there is more one table in html page
35
39
  def self.initialize_params
36
40
  unless self.is_good_store_id?
@@ -115,7 +119,7 @@ module UiBibz::Concerns::Models::Searchable
115
119
  sql_subquery << "lower(#{ key_name }.#{ attribute.values.first }) LIKE :#{ key_name }_#{ attribute.values.first }_#{ i }"
116
120
  sql_attributes = sql_attributes.merge(Hash["#{ key_name }_#{ attribute.values.first }_#{ i }".to_sym, "%#{ pattern }%"])
117
121
  else
118
- sql_subquery << "lower(#{ self.to_s.underscore.pluralize }.#{ attribute }) LIKE :#{ attribute }_#{ i }"
122
+ sql_subquery << "lower(#{ self.to_s.underscore.pluralize.split('/').last }.#{ attribute }) LIKE :#{ attribute }_#{ i }"
119
123
  sql_attributes = sql_attributes.merge(Hash["#{ attribute }_#{ i }".to_sym, "%#{ pattern }%"])
120
124
  end
121
125
  end