recordselect 4.0.1 → 4.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 65ad43872bf90ddfbc045b05d0504aba6146e244e381742c10c7d105959fd222
4
- data.tar.gz: 1d10b16c74f2a695cf4c8f8cb07419440b19ccb47ba122c92eb29dea941fbda7
3
+ metadata.gz: 989e8ccab3b2a8123cba1e96bc4afae3038ff5091cf7c35c883435ce12ecea82
4
+ data.tar.gz: 96a8a2072f8e3dce451abade379580ae53ac8077c5aa1d4e681b955cae6a36fb
5
5
  SHA512:
6
- metadata.gz: 074faf7c0a581eeea7a2ccbc85b7caf185a3e900f13f60ab4ab2334e802b6ccb766d8083eb4a367989f92b453459dc78925d98bb6ce0c63e1ca48f57c914ac9a
7
- data.tar.gz: ea4f0c7baf85455cd755ec83ec22abbf8855301335de39530b5ad310ca5bd2a710b325a863e91936ab06a9adedcdcae1df1c41cfc3f7ba908ce4c30d4f656a75
6
+ metadata.gz: 21dddd73eb6dec6530ba21899f94a5e690e81fb5bd13669e4deb1ee7e81b355db0ba5f66a9444d06a9f749ac8ab43dca556edb4f1ea6c1f27e27d332cb4e6c7e
7
+ data.tar.gz: b694520b3b5b295e57a9c274f2e4c13924df79bc0d1b8164e35a6689be8f63a14ecee3981941a92f248aae3de8b08b5b6c4114e7e665de1487ef9cad8862d15a
data/README CHANGED
@@ -45,7 +45,3 @@ Either using assets pipeline or importmap, it will be loaded when requiring or i
45
45
 
46
46
  = DEPENDENCIES
47
47
  This depends on the excellent Paginator gem by Bruce Williams. This simple gem is available at paginator.rubyforge.org.
48
-
49
- It should autoselect js framework, but you can select :jquery or :prototype framework with config/initializer file:
50
- RecordSelect::Config.js_framework = :jquery
51
- RecordSelect::Config.js_framework = :prototype
@@ -163,8 +163,9 @@
163
163
  RecordSelect.document_loaded = false;
164
164
 
165
165
  RecordSelect.from_attributes = function(item) {
166
+ if (item.prop('disabled')) return;
166
167
  var rs_class = RecordSelect[item.data('rs-type')];
167
- new rs_class(item.data('rs-id'), item.data('rs-url'), item.data('rs-options'));
168
+ new rs_class(item.data('rs-id') || item, item.data('rs-url'), item.data('rs-options'));
168
169
  }
169
170
 
170
171
  RecordSelect.select_item = function(item) {
@@ -337,7 +338,7 @@
337
338
  * returns true/false for whether the recordselect is open
338
339
  */
339
340
  is_open: function() {
340
- return jQuery.trim(this.container.html()).length != 0;
341
+ return this.container.children().length != 0;
341
342
  },
342
343
 
343
344
  /**
@@ -3,12 +3,7 @@ module RecordSelect
3
3
  # :method => :get
4
4
  # params => [:page, :search]
5
5
  def browse
6
- conditions = record_select_conditions
7
- user_includes = record_select_includes
8
- query = conditions.inject(record_select_model.includes(user_includes)) do |query, cond|
9
- query.where(cond)
10
- end
11
- query = query.references(user_includes) if Rails::VERSION::MAJOR >= 4 && user_includes.present?
6
+ query = record_select_query
12
7
  @count = query.count if record_select_config.pagination?
13
8
  @count = @count.length if @count.is_a? Hash
14
9
  pager = ::Paginator.new(@count, record_select_config.per_page) do |offset, per_page|
@@ -67,6 +62,15 @@ module RecordSelect
67
62
 
68
63
  private
69
64
 
65
+ def record_select_query
66
+ query = record_select_model
67
+ user_includes = record_select_includes
68
+ query = query.includes(user_includes).references(user_includes) if user_includes.present?
69
+ query = query.joins(record_select_config.joins).distinct if record_select_config.joins.present?
70
+ query = query.left_joins(record_select_config.left_joins) if record_select_config.left_joins.present?
71
+ record_select_conditions.inject(query) { |query, cond| query.where(cond) }
72
+ end
73
+
70
74
  def record_select_views_path
71
75
  "record_select"
72
76
  end
@@ -7,8 +7,6 @@ module RecordSelect
7
7
  # * intelligent url params (e.g. params[:first_name] if first_name is a model column)
8
8
  # * specific conditions supplied by the developer
9
9
  def record_select_conditions
10
- conditions = []
11
-
12
10
  [
13
11
  record_select_conditions_from_search,
14
12
  *record_select_conditions_from_params,
@@ -9,11 +9,15 @@ module RecordSelect
9
9
  @order_by = options[:order_by]
10
10
  @full_text_search = options[:full_text_search]
11
11
  @label = options[:label]
12
+ @joins = options[:joins]
13
+ @left_joins = options[:left_joins]
12
14
  @include = options[:include]
13
15
  @pagination = options.include?(:pagination) ? options[:pagination] : true
14
16
  @toggle_search_mode = options[:toggle_search_mode]
15
17
  end
16
18
 
19
+ attr_reader :include, :joins, :left_joins
20
+
17
21
  def pagination?
18
22
  @pagination
19
23
  end
@@ -52,10 +56,6 @@ module RecordSelect
52
56
  @toggle_search_mode ? true : false
53
57
  end
54
58
 
55
- def include
56
- @include
57
- end
58
-
59
59
  # If a proc, must accept the record as an argument and return a descriptive string.
60
60
  #
61
61
  # If a symbol or string, must name a partial that renders a representation of the
@@ -21,15 +21,16 @@ module RecordSelectHelper
21
21
  options[:onselect] = "(function(id, label) {#{options[:onselect]}})" if options[:onselect]
22
22
  options[:html] ||= {}
23
23
  options[:html][:id] ||= "rs_#{rand(9999)}"
24
+ js = options.include?(:js) ? options[:js] : request.xhr?
24
25
 
25
26
  controller = assert_controller_responds(options[:params][:controller])
26
27
  record_select_options = {id: record_select_id(controller.controller_path), onselect: options[:onselect] || ''}
27
28
  record_select_options.merge! options[:rs] if options[:rs]
28
29
 
29
30
  rs_data = {type: 'Dialog', id: options[:html][:id], url: url_for(options[:params]), options: record_select_options}
30
- options[:html][:data] = rs_data.transform_keys { |k| "rs_#{k}" } unless request.xhr?
31
+ options[:html][:data] = rs_data.transform_keys { |k| "rs_#{k}" } unless js
31
32
  html = link_to(name, '#', options[:html])
32
- html << record_select_js(**rs_data) if request.xhr?
33
+ html << record_select_js(**rs_data) if js
33
34
 
34
35
  html
35
36
  end
@@ -53,6 +54,7 @@ module RecordSelectHelper
53
54
  options[:class] ||= ''
54
55
  options[:class] << ' recordselect'
55
56
  options[:clear_button] = true unless options.include? :clear_button
57
+ js = options.include?(:js) ? options.delete(:js) : request.xhr?
56
58
 
57
59
  controller = assert_controller_responds(options.delete(:controller))
58
60
  params = options.delete(:params)
@@ -70,10 +72,10 @@ module RecordSelectHelper
70
72
  options.merge!(autocomplete: 'off', onfocus: "this.focused=true", onblur: "this.focused=false")
71
73
  url = url_for({action: :browse, controller: controller.controller_path}.merge(params))
72
74
  rs_data = {type: 'Single', id: options[:id], url: url, options: record_select_options}
73
- options[:data] = rs_data.transform_keys { |k| "rs_#{k}" } unless request.xhr?
75
+ options[:data] = rs_data.transform_keys { |k| "rs_#{k}" } unless js
74
76
  html = text_field_tag(name, nil, options)
75
77
  html << button_tag('x', type: :button, class: clear_button_class, aria_label: 'Clear input', title: 'Clear input') if clear_button
76
- html << record_select_js(**rs_data) if request.xhr?
78
+ html << record_select_js(**rs_data) if js
77
79
 
78
80
  html
79
81
  end
@@ -95,6 +97,7 @@ module RecordSelectHelper
95
97
  options[:id] ||= name.gsub(/[\[\]]/, '_')
96
98
  options[:class] ||= ''
97
99
  options[:class] << ' recordselect'
100
+ js = options.include?(:js) ? options.delete(:js) : request.xhr?
98
101
 
99
102
  controller = assert_controller_responds(options.delete(:controller))
100
103
  params = options.delete(:params)
@@ -107,9 +110,9 @@ module RecordSelectHelper
107
110
  options.merge!(autocomplete: 'off', onfocus: "this.focused=true", onblur: "this.focused=false")
108
111
  url = url_for({action: :browse, controller: controller.controller_path}.merge(params))
109
112
  rs_data = {type: 'Autocomplete', id: options[:id], url: url, options: record_select_options}
110
- options[:data] = rs_data.transform_keys { |k| "rs_#{k}" } unless request.xhr?
113
+ options[:data] = rs_data.transform_keys { |k| "rs_#{k}" } unless js
111
114
  html = text_field_tag(name, nil, options)
112
- html << record_select_js(**rs_data) if request.xhr?
115
+ html << record_select_js(**rs_data) if js
113
116
 
114
117
  html
115
118
  end
@@ -132,6 +135,7 @@ module RecordSelectHelper
132
135
  options[:class] ||= ''
133
136
  options[:class] << ' recordselect'
134
137
  options.delete(:name)
138
+ js = options.include?(:js) ? options.delete(:js) : request.xhr?
135
139
 
136
140
  controller = assert_controller_responds(options.delete(:controller))
137
141
  params = options.delete(:params)
@@ -142,11 +146,11 @@ module RecordSelectHelper
142
146
  options.merge!(autocomplete: 'off', onfocus: "this.focused=true", onblur: "this.focused=false")
143
147
  url = url_for({action: :browse, controller: controller.controller_path}.merge(params))
144
148
  rs_data = {type: 'Multiple', id: options[:id], url: url, options: record_select_options}
145
- options[:data] = rs_data.transform_keys { |k| "rs_#{k}" } unless request.xhr?
149
+ options[:data] = rs_data.transform_keys { |k| "rs_#{k}" } unless js
146
150
  html = text_field_tag("#{name}[]", nil, options)
147
151
  html << hidden_field_tag("#{name}[]", '', id: nil)
148
152
  html << content_tag(:ul, '', class: 'record-select-list')
149
- html << record_select_js(**rs_data) if request.xhr?
153
+ html << record_select_js(**rs_data) if js
150
154
 
151
155
  html
152
156
  end
@@ -2,7 +2,7 @@ module RecordSelect
2
2
  module Version
3
3
  MAJOR = 4
4
4
  MINOR = 0
5
- PATCH = 1
5
+ PATCH = 3
6
6
 
7
7
  STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: recordselect
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.1
4
+ version: 4.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergio Cambra
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-04-29 00:00:00.000000000 Z
13
+ date: 2025-01-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -97,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  requirements: []
100
- rubygems_version: 3.5.6
100
+ rubygems_version: 3.5.11
101
101
  signing_key:
102
102
  specification_version: 4
103
103
  summary: RecordSelect widget as a replacement for massive drop down lists