chosen-rails 0.9.14 → 0.9.15

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
  SHA1:
3
- metadata.gz: 627f993c355b60dd67a5f475a7e3049eab8ad08a
4
- data.tar.gz: f5a266a53e616da1847ea1401caa18a99b77e785
3
+ metadata.gz: bac675bdf969fb0dc587c152a924a2eadff6d44f
4
+ data.tar.gz: 727f3bb3d99c34502ce16b8d32b60b693eb3c1b7
5
5
  SHA512:
6
- metadata.gz: d09814cc265bbece45725638297abb5fc1285aed5c1cad288580c87c63f8c46a00acd371f31663f9aef273070653f2aea41c048a265cb615ce4f97da5c34bc58
7
- data.tar.gz: 926cfe2150e8b4874e105ad800c2f663f71748cb25c2d1e402e9add3dbf1e8c00879608d9a3b5c9b1e1f9714ba5cc69c353bb88ef1050073cf3c3bd198010556
6
+ metadata.gz: 7f8d165ce179fe3882a0846d1d3be752a192f2633f61ee4bf04ea9c2f1b2d874f52f9930bf506f880fe3ba4596c2fa13bfdbdbb3c1e4180e53c3124bd7bfa0b4
7
+ data.tar.gz: 56b856a0637d3f5c09d49be9c376af8d78249691b55fc5b285bb0966759998f7053fe3717e47be34e4453826ff3a64974e2a1e671290b6e3b3084ed79d7768c4
data/lib/chosen-rails.rb CHANGED
@@ -2,13 +2,14 @@ require 'chosen-rails/version'
2
2
 
3
3
  module Chosen
4
4
  module Rails
5
- case ::Rails.version.to_s
6
- when /^4/
7
- require 'chosen-rails/engine'
8
- when /^3\.[12]/
9
- require 'chosen-rails/engine3'
10
- when /^3\.[0]/
11
- require 'chosen-rails/railtie'
12
- end
13
5
  end
14
6
  end
7
+
8
+ case ::Rails.version.to_s
9
+ when /^4/
10
+ require 'chosen-rails/engine'
11
+ when /^3\.[12]/
12
+ require 'chosen-rails/engine3'
13
+ when /^3\.[0]/
14
+ require 'chosen-rails/railtie'
15
+ end
@@ -1,6 +1,6 @@
1
1
  module Chosen
2
2
  module Rails
3
- VERSION = '0.9.14'
4
- CHOSEN_VERSION = '0.9.14'
3
+ VERSION = '0.9.15'
4
+ CHOSEN_VERSION = '0.9.15'
5
5
  end
6
6
  end
@@ -164,11 +164,12 @@ class Chosen extends AbstractChosen
164
164
 
165
165
  results_build: ->
166
166
  @parsing = true
167
+ @selected_option_count = null
168
+
167
169
  @results_data = root.SelectParser.select_to_array @form_field
168
170
 
169
- if @is_multiple and @choices > 0
171
+ if @is_multiple and this.choices_count() > 0
170
172
  @search_choices.find("li.search-choice").remove()
171
- @choices = 0
172
173
  else if not @is_multiple
173
174
  @selected_item.addClass("chzn-default").find("span").text(@default_text)
174
175
  if @disable_search or @form_field.options.length <= @disable_search_threshold
@@ -229,7 +230,7 @@ class Chosen extends AbstractChosen
229
230
  results_show: ->
230
231
  if @result_single_selected?
231
232
  this.result_do_highlight @result_single_selected
232
- else if @is_multiple and @max_selected_options <= @choices
233
+ else if @is_multiple and @max_selected_options <= this.choices_count()
233
234
  @form_field_jq.trigger("liszt:maxselected", {chosen: this})
234
235
  return false
235
236
 
@@ -261,13 +262,13 @@ class Chosen extends AbstractChosen
261
262
  set_label_behavior: ->
262
263
  @form_field_label = @form_field_jq.parents("label") # first check for a parent label
263
264
  if not @form_field_label.length and @form_field.id.length
264
- @form_field_label = $("label[for=#{@form_field.id}]") #next check for a for=#{id}
265
+ @form_field_label = $("label[for='#{@form_field.id}']") #next check for a for=#{id}
265
266
 
266
267
  if @form_field_label.length > 0
267
268
  @form_field_label.click (evt) => if @is_multiple then this.container_mousedown(evt) else this.activate_field()
268
269
 
269
270
  show_search_field_default: ->
270
- if @is_multiple and @choices < 1 and not @active_field
271
+ if @is_multiple and this.choices_count() < 1 and not @active_field
271
272
  @search_field.val(@default_text)
272
273
  @search_field.addClass "default"
273
274
  else
@@ -289,18 +290,16 @@ class Chosen extends AbstractChosen
289
290
  this.result_clear_highlight() if $(evt.target).hasClass "active-result" or $(evt.target).parents('.active-result').first()
290
291
 
291
292
  choice_build: (item) ->
292
- if @is_multiple and @max_selected_options <= @choices
293
- @form_field_jq.trigger("liszt:maxselected", {chosen: this})
294
- return false # fire event
295
- choice_id = @container_id + "_c_" + item.array_index
296
- @choices += 1
293
+ choice = $('<li />', { class: "search-choice" }).html("<span>#{item.html}</span>")
294
+
297
295
  if item.disabled
298
- html = '<li class="search-choice search-choice-disabled" id="' + choice_id + '"><span>' + item.html + '</span></li>'
296
+ choice.addClass 'search-choice-disabled'
299
297
  else
300
- html = '<li class="search-choice" id="' + choice_id + '"><span>' + item.html + '</span><a href="javascript:void(0)" class="search-choice-close" rel="' + item.array_index + '"></a></li>'
301
- @search_container.before html
302
- link = $('#' + choice_id).find("a").first()
303
- link.click (evt) => this.choice_destroy_link_click(evt)
298
+ close_link = $('<a />', { href: '#', class: 'search-choice-close', rel: item.array_index })
299
+ close_link.click (evt) => this.choice_destroy_link_click(evt)
300
+ choice.append close_link
301
+
302
+ @search_container.before choice
304
303
 
305
304
  choice_destroy_link_click: (evt) ->
306
305
  evt.preventDefault()
@@ -309,10 +308,9 @@ class Chosen extends AbstractChosen
309
308
 
310
309
  choice_destroy: (link) ->
311
310
  if this.result_deselect (link.attr "rel")
312
- @choices -= 1
313
311
  this.show_search_field_default()
314
312
 
315
- this.results_hide() if @is_multiple and @choices > 0 and @search_field.val().length < 1
313
+ this.results_hide() if @is_multiple and this.choices_count() > 0 and @search_field.val().length < 1
316
314
 
317
315
  link.parents('li').first().remove()
318
316
 
@@ -320,6 +318,7 @@ class Chosen extends AbstractChosen
320
318
 
321
319
  results_reset: ->
322
320
  @form_field.options[0].selected = true
321
+ @selected_option_count = null
323
322
  @selected_item.find("span").text @default_text
324
323
  @selected_item.addClass("chzn-default") if not @is_multiple
325
324
  this.show_search_field_default()
@@ -338,6 +337,10 @@ class Chosen extends AbstractChosen
338
337
 
339
338
  this.result_clear_highlight()
340
339
 
340
+ if @is_multiple and @max_selected_options <= this.choices_count()
341
+ @form_field_jq.trigger("liszt:maxselected", {chosen: this})
342
+ return false
343
+
341
344
  if @is_multiple
342
345
  this.result_deactivate high
343
346
  else
@@ -352,6 +355,7 @@ class Chosen extends AbstractChosen
352
355
  item.selected = true
353
356
 
354
357
  @form_field.options[item.options_index].selected = true
358
+ @selected_option_count = null
355
359
 
356
360
  if @is_multiple
357
361
  this.choice_build item
@@ -380,6 +384,8 @@ class Chosen extends AbstractChosen
380
384
  result_data.selected = false
381
385
 
382
386
  @form_field.options[result_data.options_index].selected = false
387
+ @selected_option_count = null
388
+
383
389
  result = $("#" + @container_id + "_o_" + pos)
384
390
  result.removeClass("result-selected").addClass("active-result").show()
385
391
 
@@ -494,7 +500,7 @@ class Chosen extends AbstractChosen
494
500
  if prev_sibs.length
495
501
  this.result_do_highlight prev_sibs.first()
496
502
  else
497
- this.results_hide() if @choices > 0
503
+ this.results_hide() if this.choices_count() > 0
498
504
  this.result_clear_highlight()
499
505
 
500
506
  keydown_backstroke: ->
@@ -19,8 +19,6 @@ class Chosen extends AbstractChosen
19
19
  # HTML Templates
20
20
  @single_temp = new Template('<a href="javascript:void(0)" class="chzn-single chzn-default" tabindex="-1"><span>#{default}</span><div><b></b></div></a><div class="chzn-drop"><div class="chzn-search"><input type="text" autocomplete="off" /></div><ul class="chzn-results"></ul></div>')
21
21
  @multi_temp = new Template('<ul class="chzn-choices"><li class="search-field"><input type="text" value="#{default}" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chzn-drop"><ul class="chzn-results"></ul></div>')
22
- @choice_temp = new Template('<li class="search-choice" id="#{id}"><span>#{choice}</span><a href="javascript:void(0)" class="search-choice-close" rel="#{position}"></a></li>')
23
- @choice_noclose_temp = new Template('<li class="search-choice search-choice-disabled" id="#{id}"><span>#{choice}</span></li>')
24
22
  @no_results_temp = new Template('<li class="no-results">' + @results_none_found + ' "<span>#{terms}</span>"</li>')
25
23
 
26
24
  set_up_html: ->
@@ -154,11 +152,12 @@ class Chosen extends AbstractChosen
154
152
 
155
153
  results_build: ->
156
154
  @parsing = true
155
+ @selected_option_count = null
156
+
157
157
  @results_data = root.SelectParser.select_to_array @form_field
158
158
 
159
- if @is_multiple and @choices > 0
159
+ if @is_multiple and this.choices_count() > 0
160
160
  @search_choices.select("li.search-choice").invoke("remove")
161
- @choices = 0
162
161
  else if not @is_multiple
163
162
  @selected_item.addClassName("chzn-default").down("span").update(@default_text)
164
163
  if @disable_search or @form_field.options.length <= @disable_search_threshold
@@ -203,7 +202,7 @@ class Chosen extends AbstractChosen
203
202
  visible_top = @search_results.scrollTop
204
203
  visible_bottom = maxHeight + visible_top
205
204
 
206
- high_top = @result_highlight.positionedOffset().top
205
+ high_top = @result_highlight.positionedOffset().top + @search_results.scrollTop
207
206
  high_bottom = high_top + @result_highlight.getHeight()
208
207
 
209
208
  if high_bottom >= visible_bottom
@@ -218,7 +217,7 @@ class Chosen extends AbstractChosen
218
217
  results_show: ->
219
218
  if @result_single_selected?
220
219
  this.result_do_highlight @result_single_selected
221
- else if @is_multiple and @max_selected_options <= @choices
220
+ else if @is_multiple and @max_selected_options <= this.choices_count()
222
221
  @form_field.fire("liszt:maxselected", {chosen: this})
223
222
  return false
224
223
 
@@ -250,13 +249,13 @@ class Chosen extends AbstractChosen
250
249
  set_label_behavior: ->
251
250
  @form_field_label = @form_field.up("label") # first check for a parent label
252
251
  if not @form_field_label?
253
- @form_field_label = $$("label[for=#{@form_field.id}]").first() #next check for a for=#{id}
252
+ @form_field_label = $$("label[for='#{@form_field.id}']").first() #next check for a for=#{id}
254
253
 
255
254
  if @form_field_label?
256
255
  @form_field_label.observe "click", (evt) => if @is_multiple then this.container_mousedown(evt) else this.activate_field()
257
256
 
258
257
  show_search_field_default: ->
259
- if @is_multiple and @choices < 1 and not @active_field
258
+ if @is_multiple and this.choices_count() < 1 and not @active_field
260
259
  @search_field.value = @default_text
261
260
  @search_field.addClassName "default"
262
261
  else
@@ -278,19 +277,16 @@ class Chosen extends AbstractChosen
278
277
  this.result_clear_highlight() if evt.target.hasClassName('active-result') or evt.target.up('.active-result')
279
278
 
280
279
  choice_build: (item) ->
281
- if @is_multiple and @max_selected_options <= @choices
282
- @form_field.fire("liszt:maxselected", {chosen: this})
283
- return false
284
- choice_id = @container_id + "_c_" + item.array_index
285
- @choices += 1
286
- @search_container.insert
287
- before: (if item.disabled then @choice_noclose_temp else @choice_temp).evaluate
288
- id: choice_id
289
- choice: item.html
290
- position: item.array_index
291
- if not item.disabled
292
- link = $(choice_id).down('a')
293
- link.observe "click", (evt) => this.choice_destroy_link_click(evt)
280
+ choice = new Element('li', { class: "search-choice" }).update("<span>#{item.html}</span>")
281
+
282
+ if item.disabled
283
+ choice.addClassName 'search-choice-disabled'
284
+ else
285
+ close_link = new Element('a', { href: '#', class: 'search-choice-close', rel: item.array_index })
286
+ close_link.observe "click", (evt) => this.choice_destroy_link_click(evt)
287
+ choice.insert close_link
288
+
289
+ @search_container.insert { before: choice }
294
290
 
295
291
  choice_destroy_link_click: (evt) ->
296
292
  evt.preventDefault()
@@ -299,10 +295,9 @@ class Chosen extends AbstractChosen
299
295
 
300
296
  choice_destroy: (link) ->
301
297
  if this.result_deselect link.readAttribute("rel")
302
- @choices -= 1
303
298
  this.show_search_field_default()
304
299
 
305
- this.results_hide() if @is_multiple and @choices > 0 and @search_field.value.length < 1
300
+ this.results_hide() if @is_multiple and this.choices_count() > 0 and @search_field.value.length < 1
306
301
 
307
302
  link.up('li').remove()
308
303
 
@@ -310,6 +305,7 @@ class Chosen extends AbstractChosen
310
305
 
311
306
  results_reset: ->
312
307
  @form_field.options[0].selected = true
308
+ @selected_option_count = null
313
309
  @selected_item.down("span").update(@default_text)
314
310
  @selected_item.addClassName("chzn-default") if not @is_multiple
315
311
  this.show_search_field_default()
@@ -327,6 +323,10 @@ class Chosen extends AbstractChosen
327
323
  high = @result_highlight
328
324
  this.result_clear_highlight()
329
325
 
326
+ if @is_multiple and @max_selected_options <= this.choices_count()
327
+ @form_field.fire("liszt:maxselected", {chosen: this})
328
+ return false
329
+
330
330
  if @is_multiple
331
331
  this.result_deactivate high
332
332
  else
@@ -341,6 +341,7 @@ class Chosen extends AbstractChosen
341
341
  item.selected = true
342
342
 
343
343
  @form_field.options[item.options_index].selected = true
344
+ @selected_option_count = null
344
345
 
345
346
  if @is_multiple
346
347
  this.choice_build item
@@ -370,6 +371,8 @@ class Chosen extends AbstractChosen
370
371
  result_data.selected = false
371
372
 
372
373
  @form_field.options[result_data.options_index].selected = false
374
+ @selected_option_count = null
375
+
373
376
  result = $(@container_id + "_o_" + pos)
374
377
  result.removeClassName("result-selected").addClassName("active-result").show()
375
378
 
@@ -488,7 +491,7 @@ class Chosen extends AbstractChosen
488
491
  if prevs.length
489
492
  this.result_do_highlight prevs.first()
490
493
  else
491
- this.results_hide() if @choices > 0
494
+ this.results_hide() if this.choices_count() > 0
492
495
  this.result_clear_highlight()
493
496
 
494
497
  keydown_backstroke: ->
@@ -32,7 +32,6 @@ class AbstractChosen
32
32
  @disable_search = @options.disable_search || false
33
33
  @enable_split_word_search = if @options.enable_split_word_search? then @options.enable_split_word_search else true
34
34
  @search_contains = @options.search_contains || false
35
- @choices = 0
36
35
  @single_backstroke_delete = @options.single_backstroke_delete || false
37
36
  @max_selected_options = @options.max_selected_options || Infinity
38
37
  @inherit_select_classes = @options.inherit_select_classes || false
@@ -95,6 +94,15 @@ class AbstractChosen
95
94
  else
96
95
  this.results_show()
97
96
 
97
+ choices_count: ->
98
+ return @selected_option_count if @selected_option_count?
99
+
100
+ @selected_option_count = 0
101
+ for option in @form_field.options
102
+ @selected_option_count += 1 if option.selected
103
+
104
+ return @selected_option_count
105
+
98
106
  choices_click: (evt) ->
99
107
  evt.preventDefault()
100
108
  this.results_show() unless @results_showing
@@ -105,7 +113,7 @@ class AbstractChosen
105
113
 
106
114
  switch stroke
107
115
  when 8
108
- if @is_multiple and @backstroke_length < 1 and @choices > 0
116
+ if @is_multiple and @backstroke_length < 1 and this.choices_count() > 0
109
117
  this.keydown_backstroke()
110
118
  else if not @pending_backstroke
111
119
  this.result_clear_highlight()
@@ -131,16 +139,7 @@ class AbstractChosen
131
139
  newchar = chars.substring rand, rand+1
132
140
 
133
141
  container_width: ->
134
- return @options.width if @options.width?
135
-
136
- width = if window.getComputedStyle?
137
- parseFloat window.getComputedStyle(@form_field).getPropertyValue('width')
138
- else if jQuery? and @form_field_jq?
139
- @form_field_jq.outerWidth()
140
- else
141
- @form_field.getWidth()
142
-
143
- width + "px"
142
+ return if @options.width? then @options.width else "#{@form_field.offsetWidth}px"
144
143
 
145
144
  # class methods and variables ============================================================
146
145
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chosen-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.14
4
+ version: 0.9.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tse-Ching Ho
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-06 00:00:00.000000000 Z
11
+ date: 2013-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -142,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
142
  version: '0'
143
143
  requirements: []
144
144
  rubyforge_project:
145
- rubygems_version: 2.0.0
145
+ rubygems_version: 2.0.3
146
146
  signing_key:
147
147
  specification_version: 4
148
148
  summary: Integrate Chosen javascript library with Rails asset pipeline