ui_bibz 2.0.0.alpha26 → 2.0.0.alpha27
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +18 -18
- data/app/assets/javascripts/form.coffee +41 -36
- data/app/assets/javascripts/input-connected.coffee +65 -0
- data/app/assets/javascripts/jquery.multi-select-extend.coffee +38 -0
- data/app/assets/javascripts/ui_bibz.coffee +4 -0
- data/app/assets/stylesheets/ui_bibz.sass +4 -0
- data/app/inputs/custom_inputs/select_input.rb +15 -0
- data/lib/ui_bibz.rb +1 -0
- data/lib/ui_bibz/concerns/models/searchable.rb +20 -17
- data/lib/ui_bibz/helpers/ui_core_helper.rb +8 -0
- data/lib/ui_bibz/ui/core/component.rb +1 -0
- data/lib/ui_bibz/ui/core/component/klass_extension.rb +5 -0
- data/lib/ui_bibz/ui/core/forms/buttons/button_group.rb +1 -0
- data/lib/ui_bibz/ui/core/forms/choices/switch_field.rb +1 -0
- data/lib/ui_bibz/ui/core/forms/dates/date_picker_field.rb +1 -0
- data/lib/ui_bibz/ui/core/forms/selects/dropdown_select_field.rb +5 -0
- data/lib/ui_bibz/ui/core/forms/selects/multi_column_field.rb +1 -0
- data/lib/ui_bibz/ui/core/forms/selects/multi_select_field.rb +1 -0
- data/lib/ui_bibz/ui/core/forms/selects/select_field.rb +95 -0
- data/lib/ui_bibz/ui/core/forms/textareas/markdown_editor_field.rb +1 -0
- data/lib/ui_bibz/ui/ux/tables/table_search_field.rb +10 -2
- data/lib/ui_bibz/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a49b595e3b3bbb119b817a614eba6b4c598e0f7
|
4
|
+
data.tar.gz: 8f16ce2ac1f0f6a1af2f0f8d722d9de9257c15a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da948b0bd0354030fb60b60ab33340d1d9d798459d3eaab79d0bec3b086bf3ae31db20b1f35c0e67f2cfe754eedaf1c14e8f08cde511759f5dff1b42d145a9c3
|
7
|
+
data.tar.gz: 9e4ed4f4f4cfd18cd2018ee394d07541b76bc620e5a7db82b557dbb426125425e22fc84ae38b3e486717863f9297596e34fd57964bace828f821187f0dda5b7e
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ui_bibz (2.0.0.
|
4
|
+
ui_bibz (2.0.0.alpha27)
|
5
5
|
bootstrap (= 4.0.0.alpha5)
|
6
6
|
font-awesome-sass
|
7
7
|
haml
|
@@ -53,14 +53,14 @@ GEM
|
|
53
53
|
minitest (~> 5.1)
|
54
54
|
tzinfo (~> 1.1)
|
55
55
|
arel (7.1.4)
|
56
|
-
autoprefixer-rails (6.
|
56
|
+
autoprefixer-rails (6.7.5)
|
57
57
|
execjs
|
58
58
|
awesome_print (1.7.0)
|
59
59
|
bootstrap (4.0.0.alpha5)
|
60
60
|
autoprefixer-rails (>= 6.0.3)
|
61
61
|
sass (>= 3.4.19)
|
62
|
-
builder (3.2.
|
63
|
-
codeclimate-test-reporter (1.0.
|
62
|
+
builder (3.2.3)
|
63
|
+
codeclimate-test-reporter (1.0.6)
|
64
64
|
simplecov
|
65
65
|
concurrent-ruby (1.0.4)
|
66
66
|
docile (1.1.5)
|
@@ -83,13 +83,13 @@ GEM
|
|
83
83
|
haml (>= 4.0.6, < 5.0)
|
84
84
|
html2haml (>= 1.0.1)
|
85
85
|
railties (>= 4.0.1)
|
86
|
-
html2haml (2.
|
86
|
+
html2haml (2.1.0)
|
87
87
|
erubis (~> 2.7.0)
|
88
|
-
haml (~> 4.0
|
89
|
-
nokogiri (
|
88
|
+
haml (~> 4.0)
|
89
|
+
nokogiri (>= 1.6.0)
|
90
90
|
ruby_parser (~> 3.5)
|
91
|
-
i18n (0.
|
92
|
-
json (2.0.
|
91
|
+
i18n (0.8.1)
|
92
|
+
json (2.0.3)
|
93
93
|
loofah (2.0.3)
|
94
94
|
nokogiri (>= 1.5.9)
|
95
95
|
mail (2.6.4)
|
@@ -101,7 +101,7 @@ GEM
|
|
101
101
|
mini_portile2 (2.1.0)
|
102
102
|
minitest (5.10.1)
|
103
103
|
nio4r (1.2.1)
|
104
|
-
nokogiri (1.
|
104
|
+
nokogiri (1.7.0.1)
|
105
105
|
mini_portile2 (~> 2.1.0)
|
106
106
|
rack (2.0.1)
|
107
107
|
rack-test (0.6.3)
|
@@ -130,7 +130,7 @@ GEM
|
|
130
130
|
rake (>= 0.8.7)
|
131
131
|
thor (>= 0.18.1, < 2.0)
|
132
132
|
rake (12.0.0)
|
133
|
-
ruby_parser (3.8.
|
133
|
+
ruby_parser (3.8.4)
|
134
134
|
sexp_processor (~> 4.1)
|
135
135
|
sass (3.4.23)
|
136
136
|
sass-rails (5.0.6)
|
@@ -139,11 +139,11 @@ GEM
|
|
139
139
|
sprockets (>= 2.8, < 4.0)
|
140
140
|
sprockets-rails (>= 2.0, < 4.0)
|
141
141
|
tilt (>= 1.1, < 3)
|
142
|
-
sexp_processor (4.
|
143
|
-
simple_form (3.
|
142
|
+
sexp_processor (4.8.0)
|
143
|
+
simple_form (3.4.0)
|
144
144
|
actionpack (> 4, < 5.1)
|
145
145
|
activemodel (> 4, < 5.1)
|
146
|
-
simplecov (0.
|
146
|
+
simplecov (0.13.0)
|
147
147
|
docile (~> 1.1.0)
|
148
148
|
json (>= 1.8, < 3)
|
149
149
|
simplecov-html (~> 0.10.0)
|
@@ -155,13 +155,13 @@ GEM
|
|
155
155
|
actionpack (>= 4.0)
|
156
156
|
activesupport (>= 4.0)
|
157
157
|
sprockets (>= 3.0.0)
|
158
|
-
sqlite3 (1.3.
|
158
|
+
sqlite3 (1.3.13)
|
159
159
|
thor (0.19.4)
|
160
|
-
thread_safe (0.3.
|
161
|
-
tilt (2.0.
|
160
|
+
thread_safe (0.3.6)
|
161
|
+
tilt (2.0.6)
|
162
162
|
tzinfo (1.2.2)
|
163
163
|
thread_safe (~> 0.1)
|
164
|
-
websocket-driver (0.6.
|
164
|
+
websocket-driver (0.6.5)
|
165
165
|
websocket-extensions (>= 0.1.0)
|
166
166
|
websocket-extensions (0.1.2)
|
167
167
|
will-paginate-i18n (0.1.15)
|
@@ -2,11 +2,15 @@
|
|
2
2
|
|
3
3
|
constructor: ->
|
4
4
|
@switch() if $('input.switch').length > 0
|
5
|
+
@inputConnected()
|
5
6
|
@selectPicker() if $('select.selectpicker').length > 0
|
6
7
|
@multiSelect() if $('.multi-select').length > 0
|
7
8
|
@multiColumn() if $('.multi-column').length > 0
|
8
9
|
@formula() if $('.formula_field_input').length > 0
|
9
10
|
|
11
|
+
inputConnected: ->
|
12
|
+
$('.ui-bibz-connect').inputConnected()
|
13
|
+
|
10
14
|
selectPicker: ->
|
11
15
|
$('select.selectpicker').selectpicker
|
12
16
|
iconBase: 'fa'
|
@@ -62,42 +66,43 @@
|
|
62
66
|
formulaInputField.removeClass('fix-border-right')
|
63
67
|
|
64
68
|
multiColumn: ->
|
65
|
-
$(
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
69
|
+
$(".multi-column").multiSelect()
|
70
|
+
# $('.multi-column').each ->
|
71
|
+
# data = $(this).data()
|
72
|
+
# delete data["multiselect"]
|
73
|
+
# if data["searchable"]
|
74
|
+
# $(this).multiSelect
|
75
|
+
# selectableOptgroup: if data["selectableOptgroup"] then true else false
|
76
|
+
# selectableHeader: "<input type='text' class='search-input form-control' autocomplete='off' placeholder='Search in selectable items'><br/>"
|
77
|
+
# selectionHeader: "<input type='text' class='search-input form-control' autocomplete='off' placeholder='Search in selected items'><br/>"
|
78
|
+
# afterInit: (ms) ->
|
79
|
+
# that = this
|
80
|
+
# $selectableSearch = that.$selectableUl.siblings('input')
|
81
|
+
# $selectionSearch = that.$selectionUl.siblings('input')
|
82
|
+
# $selectionSearch = that.$selectionUl.siblings('input')
|
83
|
+
# selectableSearchString = "#" + that.$container.attr("id") + " .ms-elem-selectable:not(.ms-selected)"
|
84
|
+
# selectionSearchString = "#" + that.$container.attr("id") + " .ms-elem-selection.ms-selected"
|
80
85
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
86
|
+
# that.qs1 = $selectableSearch.quicksearch(selectableSearchString).on("keydown", (e) ->
|
87
|
+
# if e.which is 40
|
88
|
+
# that.$selectableUl.focus()
|
89
|
+
# false
|
90
|
+
# )
|
91
|
+
# that.qs2 = $selectionSearch.quicksearch(selectionSearchString).on("keydown", (e) ->
|
92
|
+
# if e.which is 40
|
93
|
+
# that.$selectionUl.focus()
|
94
|
+
# false
|
95
|
+
# )
|
96
|
+
# return
|
92
97
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
98
|
+
# afterSelect: ->
|
99
|
+
# @qs1.cache()
|
100
|
+
# @qs2.cache()
|
101
|
+
# return
|
97
102
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
103
|
+
# afterDeselect: ->
|
104
|
+
# @qs1.cache()
|
105
|
+
# @qs2.cache()
|
106
|
+
# return
|
107
|
+
# else
|
108
|
+
# $(this).multiSelect(data)
|
@@ -0,0 +1,65 @@
|
|
1
|
+
(($) ->
|
2
|
+
|
3
|
+
updateOptionsHtml = (data, componentTarget) ->
|
4
|
+
componentTarget.children('option').remove()
|
5
|
+
data.forEach (opt) ->
|
6
|
+
componentTarget.append($("<option></option>").attr("value", opt.value).text(opt.text))
|
7
|
+
|
8
|
+
updateTargetComponent = (data, componentTarget) ->
|
9
|
+
updateOptionsHtml(data, componentTarget)
|
10
|
+
componentTarget.multiSelect('refresh') if componentTarget.hasClass('multi-column')
|
11
|
+
componentTarget.selectpicker('refresh') if componentTarget.hasClass('selectpicker')
|
12
|
+
componentTarget.multiselect('rebuild') if componentTarget.hasClass('multi-select')
|
13
|
+
|
14
|
+
$.fn.inputConnected = (options) ->
|
15
|
+
|
16
|
+
defaults =
|
17
|
+
mode: "remote"
|
18
|
+
events: "change" # change, click, ...
|
19
|
+
target:
|
20
|
+
url: null # url for remote connection
|
21
|
+
selector: null # component target id
|
22
|
+
data: [] # data for local connection
|
23
|
+
# Add a proxy
|
24
|
+
# Proxy:
|
25
|
+
# url: null
|
26
|
+
# method: 'GET'
|
27
|
+
# data: null
|
28
|
+
|
29
|
+
settings = $.extend({}, defaults, options)
|
30
|
+
|
31
|
+
self = this
|
32
|
+
return this.each ->
|
33
|
+
component = $(this)
|
34
|
+
connect = component.data().connect
|
35
|
+
connect.target = connect.target || {}
|
36
|
+
return unless connect?
|
37
|
+
|
38
|
+
mode = connect.mode || settings.mode
|
39
|
+
events = connect.events || settings.events
|
40
|
+
target =
|
41
|
+
url: connect.target.url || settings.target.url
|
42
|
+
data: connect.target.data || settings.target.data
|
43
|
+
selector: connect.target.selector || settings.target.selector
|
44
|
+
|
45
|
+
componentTarget = $("#{ target.selector }")
|
46
|
+
|
47
|
+
component.on events, (e) ->
|
48
|
+
e.preventDefault()
|
49
|
+
componentTarget.empty()
|
50
|
+
values = component.val()
|
51
|
+
|
52
|
+
if mode == "remote"
|
53
|
+
params = if Array.isArray(values) then { ids: values } else { id: values }
|
54
|
+
$.ajax({ url: target.url, data: params }).done (data) ->
|
55
|
+
updateTargetComponent(data, componentTarget)
|
56
|
+
|
57
|
+
if mode == "local"
|
58
|
+
data = target.data || settings.target.data
|
59
|
+
data = data.filter (value) ->
|
60
|
+
values = [].concat.apply([], [values]) # flatten
|
61
|
+
return values.includes(String(value.connect_option_id))
|
62
|
+
|
63
|
+
updateTargetComponent(data, componentTarget)
|
64
|
+
|
65
|
+
)(jQuery)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
$.fn.multiSelect.defaults =
|
2
|
+
qs1: null
|
3
|
+
qs2: null
|
4
|
+
selectableOptgroup: false
|
5
|
+
selectableHeader: "<input type='text' class='search-input form-control' autocomplete='off' placeholder='Search in selectable items'><br/>"
|
6
|
+
selectionHeader: "<input type='text' class='search-input form-control' autocomplete='off' placeholder='Search in selected items'><br/>"
|
7
|
+
afterInit: (ms) ->
|
8
|
+
that = this
|
9
|
+
that.options.selectableOptgroup = if $(this)[0].$element.data('selectableOptgroup') then true else false
|
10
|
+
|
11
|
+
if $(this)[0].$element.data('searchable')
|
12
|
+
$selectableSearch = that.$selectableUl.siblings('input')
|
13
|
+
$selectionSearch = that.$selectionUl.siblings('input')
|
14
|
+
$selectionSearch = that.$selectionUl.siblings('input')
|
15
|
+
selectableSearchString = "#" + that.$container.attr("id") + " .ms-elem-selectable:not(.ms-selected)"
|
16
|
+
selectionSearchString = "#" + that.$container.attr("id") + " .ms-elem-selection.ms-selected"
|
17
|
+
|
18
|
+
that.qs1 = $selectableSearch.quicksearch(selectableSearchString).on("keydown", (e) ->
|
19
|
+
if e.which is 40
|
20
|
+
that.$selectableUl.focus()
|
21
|
+
false
|
22
|
+
)
|
23
|
+
that.qs2 = $selectionSearch.quicksearch(selectionSearchString).on("keydown", (e) ->
|
24
|
+
if e.which is 40
|
25
|
+
that.$selectionUl.focus()
|
26
|
+
false
|
27
|
+
)
|
28
|
+
else
|
29
|
+
that.$selectableContainer.children('.search-input').remove()
|
30
|
+
that.$selectionContainer.children('.search-input').remove()
|
31
|
+
|
32
|
+
afterSelect: ->
|
33
|
+
@qs1.cache() if @qs1?
|
34
|
+
@qs2.cache() if @qs2?
|
35
|
+
|
36
|
+
afterDeselect: ->
|
37
|
+
@qs1.cache() if @qs1?
|
38
|
+
@qs2.cache() if @qs2?
|
@@ -4,6 +4,7 @@
|
|
4
4
|
# multi_column_field component
|
5
5
|
#= require jquery.quicksearch.min
|
6
6
|
#= require jquery.multi-select.min
|
7
|
+
#= require jquery.multi-select-extend
|
7
8
|
|
8
9
|
# Bootstrap
|
9
10
|
#= require tether.min
|
@@ -21,6 +22,9 @@
|
|
21
22
|
# multi_select_field component
|
22
23
|
#= require bootstrap-multiselect.min
|
23
24
|
|
25
|
+
# input_connected
|
26
|
+
#= require input-connected
|
27
|
+
|
24
28
|
# mardown-editor
|
25
29
|
#= require marked
|
26
30
|
#= require bootstrap-markdown
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module CustomInputs
|
2
|
+
class SelectInput < SimpleForm::Inputs::CollectionInput
|
3
|
+
include UiBibz::Ui::Core::Forms::Selects
|
4
|
+
|
5
|
+
def input(wrapper_options)
|
6
|
+
label_method, value_method = detect_collection_methods
|
7
|
+
i = UiBibz::Ui::Core::Forms::Selects::SelectField.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
|
data/lib/ui_bibz.rb
CHANGED
@@ -43,6 +43,7 @@ module UiBibz
|
|
43
43
|
|
44
44
|
module Selects
|
45
45
|
autoload :DropdownSelectField, "ui_bibz/ui/core/forms/selects/dropdown_select_field"
|
46
|
+
autoload :SelectField, "ui_bibz/ui/core/forms/selects/select_field"
|
46
47
|
autoload :MultiColumnField, "ui_bibz/ui/core/forms/selects/multi_column_field"
|
47
48
|
autoload :MultiSelectField, "ui_bibz/ui/core/forms/selects/multi_select_field"
|
48
49
|
end
|
@@ -8,7 +8,7 @@ module UiBibz::Concerns::Models::Searchable
|
|
8
8
|
@session = session
|
9
9
|
@arguments = args
|
10
10
|
|
11
|
-
initialize_params
|
11
|
+
initialize_params
|
12
12
|
OpenStruct.new(generate_parameters)
|
13
13
|
end
|
14
14
|
|
@@ -37,12 +37,15 @@ module UiBibz::Concerns::Models::Searchable
|
|
37
37
|
|
38
38
|
# If there is more one table in html page
|
39
39
|
def self.initialize_params
|
40
|
-
|
41
|
-
|
42
|
-
@
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
@tmp_params = {}
|
41
|
+
if self.is_good_store_id?
|
42
|
+
@tmp_params = {
|
43
|
+
search: @params[:search],
|
44
|
+
per_page: @params[:per_page],
|
45
|
+
page: @params[:page],
|
46
|
+
sort: @params[:sort],
|
47
|
+
direction: @params[:direction]
|
48
|
+
}
|
46
49
|
end
|
47
50
|
end
|
48
51
|
|
@@ -60,7 +63,7 @@ module UiBibz::Concerns::Models::Searchable
|
|
60
63
|
sql = generate_parent_sort_query sql if @params[:parent]
|
61
64
|
|
62
65
|
# Main query with argument or not
|
63
|
-
sql = search_by_query sql unless @
|
66
|
+
sql = search_by_query sql unless @tmp_params[:search].blank?
|
64
67
|
|
65
68
|
generate_sql sql, column_args
|
66
69
|
end
|
@@ -71,15 +74,15 @@ module UiBibz::Concerns::Models::Searchable
|
|
71
74
|
|
72
75
|
def self.generate_default_sql sql
|
73
76
|
if is_sorting?
|
74
|
-
sql.paginate(:page => @
|
77
|
+
sql.paginate(:page => @tmp_params[:page], per_page: @session[:per_page])
|
75
78
|
else
|
76
|
-
sql.reorder(order_sql).paginate(:page => @
|
79
|
+
sql.reorder(order_sql).paginate(:page => @tmp_params[:page], per_page: @session[:per_page])
|
77
80
|
end
|
78
81
|
end
|
79
82
|
|
80
83
|
def self.generate_count_sql sql
|
81
|
-
sq = "SELECT * FROM (#{ sql.group(table_name + '.id').to_sql }) countable ORDER BY countable.count #{ @
|
82
|
-
self.paginate_by_sql(sq, :page => @
|
84
|
+
sq = "SELECT * FROM (#{ sql.group(table_name + '.id').to_sql }) countable ORDER BY countable.count #{ @tmp_params[:direction] || asc }"
|
85
|
+
self.paginate_by_sql(sq, :page => @tmp_params[:page], per_page: @session[:per_page])
|
83
86
|
end
|
84
87
|
|
85
88
|
def self.generate_select_count_sort_query sql, column_args
|
@@ -87,7 +90,7 @@ module UiBibz::Concerns::Models::Searchable
|
|
87
90
|
end
|
88
91
|
|
89
92
|
def self.generate_parent_sort_query sql
|
90
|
-
sql.select("#{ table_name }2.*, #{ @
|
93
|
+
sql.select("#{ table_name }2.*, #{ @tmp_params[:sort] } AS parent_name").from("#{ table_name } #{ table_name }2").joins("LEFT OUTER JOIN #{ table_name } ON #{ table_name }2.parent_id = #{ table_name }.id")
|
91
94
|
end
|
92
95
|
|
93
96
|
def self.get_column_args
|
@@ -99,14 +102,14 @@ module UiBibz::Concerns::Models::Searchable
|
|
99
102
|
end
|
100
103
|
|
101
104
|
def self.is_sorting?
|
102
|
-
@
|
105
|
+
@tmp_params[:sort].nil? || @tmp_params[:direction].nil?
|
103
106
|
end
|
104
107
|
|
105
108
|
def self.search_by_query sql
|
106
109
|
raise 'Add searchable_attributes method in Model' if @searchable_attributes.nil?
|
107
110
|
sql_query = []
|
108
111
|
sql_attributes = {}
|
109
|
-
search_patterns = @
|
112
|
+
search_patterns = @tmp_params[:search].strip.gsub(/(?<=[\\s])\\s*|^\\s+|\\s+$/, '').downcase
|
110
113
|
|
111
114
|
search_patterns_tmp = search_patterns.scan(/"(.*?)"/).flatten
|
112
115
|
search_patterns = search_patterns.gsub(/"(.*?)"/, '').split(' ')
|
@@ -131,11 +134,11 @@ module UiBibz::Concerns::Models::Searchable
|
|
131
134
|
end
|
132
135
|
|
133
136
|
def self.order_sql
|
134
|
-
self.is_sorting? ? "#{ self.table_name }.id asc" : "#{ @
|
137
|
+
self.is_sorting? ? "#{ self.table_name }.id asc" : "#{ @tmp_params[:sort]} #{ @tmp_params[:direction] }"
|
135
138
|
end
|
136
139
|
|
137
140
|
def self.search_sort_paginate
|
138
|
-
@session[:per_page] = @
|
141
|
+
@session[:per_page] = @tmp_params[:per_page] unless @tmp_params[:per_page].nil?
|
139
142
|
self.search
|
140
143
|
end
|
141
144
|
|
@@ -154,6 +154,14 @@ module UiBibz::Helpers::UiCoreHelper
|
|
154
154
|
UiBibz::Ui::Core::Forms::Choices::RadioField.new(content, options, html_options, &block).render
|
155
155
|
end
|
156
156
|
|
157
|
+
# Select Field Component
|
158
|
+
#
|
159
|
+
# +options+ (Hash)
|
160
|
+
# +html_options+ (Hash)
|
161
|
+
def select_field content = nil, options = nil, html_options = nil, &block
|
162
|
+
UiBibz::Ui::Core::Forms::Selects::SelectField.new(content, options, html_options, &block).render
|
163
|
+
end
|
164
|
+
|
157
165
|
# Dropdown Select Field Component
|
158
166
|
#
|
159
167
|
# +options+ (Hash)
|
@@ -18,6 +18,7 @@ module KlassExtension
|
|
18
18
|
status,
|
19
19
|
effect,
|
20
20
|
options_classes,
|
21
|
+
connect,
|
21
22
|
component_html_classes
|
22
23
|
]
|
23
24
|
html_options[:class] = join_classes(cls)
|
@@ -35,4 +36,8 @@ module KlassExtension
|
|
35
36
|
options[:state] unless options[:state].nil?
|
36
37
|
end
|
37
38
|
|
39
|
+
def connect
|
40
|
+
"ui-bibz-connect" unless options[:connect].nil?
|
41
|
+
end
|
42
|
+
|
38
43
|
end
|
@@ -74,6 +74,7 @@ module UiBibz::Ui::Core::Forms::Selects
|
|
74
74
|
style
|
75
75
|
header
|
76
76
|
actions_box
|
77
|
+
connect_options
|
77
78
|
end
|
78
79
|
|
79
80
|
def component_html_options
|
@@ -82,6 +83,10 @@ module UiBibz::Ui::Core::Forms::Selects
|
|
82
83
|
|
83
84
|
############################ Data html options
|
84
85
|
|
86
|
+
def connect_options
|
87
|
+
add_html_data('connect', options[:connect]) if options[:connect]
|
88
|
+
end
|
89
|
+
|
85
90
|
def max_options
|
86
91
|
add_html_data('max_options', options[:max_options]) if options[:max_options]
|
87
92
|
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module UiBibz::Ui::Core::Forms::Selects
|
2
|
+
|
3
|
+
# Create a SelectField
|
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
|
+
# * +status+ - status 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::Forms::Selects::SelectField.new(content, options = {}, html_options = {}).render
|
34
|
+
#
|
35
|
+
# UiBibz::Ui::Core::Forms::Selects::SelectField.new(options = {}, html_options = {}) do
|
36
|
+
# content
|
37
|
+
# end.render
|
38
|
+
#
|
39
|
+
# ==== Examples
|
40
|
+
#
|
41
|
+
# UiBibz::Ui::Core::Forms::Selects::SelectField.new('fruits', { option_tags: list_of_fruits, searchable: true }, { class: 'test' })
|
42
|
+
#
|
43
|
+
# UiBibz::Ui::Core::Forms::Selects::SelectField.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 SelectField < 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
|
+
if options[:refresh]
|
61
|
+
content_tag :div, class: 'input-group select-field-refresh' do
|
62
|
+
concat select_tag content, options[:option_tags], html_options
|
63
|
+
concat btn_refresh_html
|
64
|
+
end
|
65
|
+
else
|
66
|
+
select_tag content, options[:option_tags], html_options
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def component_html_classes
|
73
|
+
['select-field', 'form-control']
|
74
|
+
end
|
75
|
+
|
76
|
+
def btn_refresh_html
|
77
|
+
content_tag :span, UiBibz::Ui::Core::Forms::Buttons::Button.new('', { glyph: 'refresh', status: options[:status], connect: connect_options }, { class: 'input-refresh-button' }).render, class: 'input-group-btn'
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
def connect_options
|
82
|
+
connect = options[:refresh] || {}
|
83
|
+
{
|
84
|
+
events: connect.try(:[], :events) || "click",
|
85
|
+
mode: connect.try(:[], :type) || "remote",
|
86
|
+
target: {
|
87
|
+
selector: connect.try(:[], :target).try(:[], :selector) || "##{ content.parameterize.underscore }",
|
88
|
+
url: connect.try(:[], :target).try(:[], :url) || "",
|
89
|
+
data: connect.try(:[], :target).try(:[], :data) || []
|
90
|
+
}
|
91
|
+
}
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
@@ -44,7 +44,7 @@ module UiBibz::Ui::Ux::Tables
|
|
44
44
|
# add surround_field maybe ?
|
45
45
|
content_tag :div, html_options do
|
46
46
|
concat content_tag(:span, UiBibz::Ui::Core::Glyph.new('search').render, class: 'input-group-addon')
|
47
|
-
concat tag(:input, type: 'search', value:
|
47
|
+
concat tag(:input, type: 'search', value: search_content, name: 'search', class: 'form-control', placeholder: search_placeholder_field)
|
48
48
|
concat content_tag(:span, UiBibz::Ui::Core::Glyph.new('times-circle').render, class: 'clear-search-btn input-group-addon')
|
49
49
|
end
|
50
50
|
end
|
@@ -56,11 +56,19 @@ module UiBibz::Ui::Ux::Tables
|
|
56
56
|
concat tag(:input, type: 'hidden', name: k, value: v) unless default_parameters?(k)
|
57
57
|
end
|
58
58
|
concat tag(:input, type: 'hidden', name: 'store_id', value: store.id) unless store.id.nil? # if there is more one table in html page
|
59
|
-
concat tag(:input, type: 'search', value:
|
59
|
+
concat tag(:input, type: 'search', value: search_content, name: 'search', class: 'form-control', placeholder: search_placeholder_field)
|
60
60
|
concat content_tag(:span, clear_button, class: 'input-group-btn')
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
+
def search_content
|
65
|
+
if store.id.nil?
|
66
|
+
store.search
|
67
|
+
else
|
68
|
+
store.id == store.params[:store_id] ? store.search : ''
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
64
72
|
def clear_button
|
65
73
|
content_tag :button, UiBibz::Ui::Core::Glyph.new('times-circle').render, type: :button, class: 'btn btn-secondary'
|
66
74
|
end
|
data/lib/ui_bibz/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ui_bibz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.alpha27
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thooams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01
|
11
|
+
date: 2017-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -223,7 +223,9 @@ files:
|
|
223
223
|
- app/assets/javascripts/fix_bootstrap.coffee
|
224
224
|
- app/assets/javascripts/form.coffee
|
225
225
|
- app/assets/javascripts/formula.coffee
|
226
|
+
- app/assets/javascripts/input-connected.coffee
|
226
227
|
- app/assets/javascripts/interface.coffee
|
228
|
+
- app/assets/javascripts/jquery.multi-select-extend.coffee
|
227
229
|
- app/assets/javascripts/table.coffee
|
228
230
|
- app/assets/javascripts/ui_bibz.coffee
|
229
231
|
- app/assets/stylesheets/bootstrap-switch.sass
|
@@ -239,6 +241,7 @@ files:
|
|
239
241
|
- app/inputs/custom_inputs/multi_column_input.rb
|
240
242
|
- app/inputs/custom_inputs/multi_select_input.rb
|
241
243
|
- app/inputs/custom_inputs/radios_input.rb
|
244
|
+
- app/inputs/custom_inputs/select_input.rb
|
242
245
|
- app/inputs/custom_inputs/surround_input.rb
|
243
246
|
- app/inputs/custom_inputs/switch_input.rb
|
244
247
|
- config/initializers/will_paginate.rb
|
@@ -286,6 +289,7 @@ files:
|
|
286
289
|
- lib/ui_bibz/ui/core/forms/selects/dropdown_select_field.rb
|
287
290
|
- lib/ui_bibz/ui/core/forms/selects/multi_column_field.rb
|
288
291
|
- lib/ui_bibz/ui/core/forms/selects/multi_select_field.rb
|
292
|
+
- lib/ui_bibz/ui/core/forms/selects/select_field.rb
|
289
293
|
- lib/ui_bibz/ui/core/forms/textareas/markdown_editor_field.rb
|
290
294
|
- lib/ui_bibz/ui/core/forms/texts/autocomplete_field.rb
|
291
295
|
- lib/ui_bibz/ui/core/forms/texts/surround_field.rb
|