chosen-rails 0.9.8.2 → 0.9.8.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/chosen-rails/version.rb +2 -2
- data/vendor/assets/javascripts/chosen.jquery.coffee +37 -21
- data/vendor/assets/javascripts/chosen.proto.coffee +35 -22
- data/vendor/assets/javascripts/lib/abstract-chosen.coffee +1 -0
- data/vendor/assets/javascripts/lib/select-parser.coffee +2 -2
- data/vendor/assets/stylesheets/chosen.css.sass +12 -0
- metadata +2 -8
data/lib/chosen-rails/version.rb
CHANGED
@@ -8,7 +8,8 @@ $ = jQuery
|
|
8
8
|
$.fn.extend({
|
9
9
|
chosen: (options) ->
|
10
10
|
# Do no harm and return as soon as possible for unsupported browsers, namely IE6 and IE7
|
11
|
-
|
11
|
+
# Continue on if running IE document type but in compatibility mode
|
12
|
+
return this if $.browser.msie and ($.browser.version is "6.0" or ($.browser.version is "7.0" and document.documentMode is 7 ))
|
12
13
|
this.each((input_field) ->
|
13
14
|
$this = $ this
|
14
15
|
$this.data('chosen', new Chosen(this, options)) unless $this.hasClass "chzn-done"
|
@@ -82,6 +83,8 @@ class Chosen extends AbstractChosen
|
|
82
83
|
@search_results.mouseout (evt) => this.search_results_mouseout(evt)
|
83
84
|
|
84
85
|
@form_field_jq.bind "liszt:updated", (evt) => this.results_update_field(evt)
|
86
|
+
@form_field_jq.bind "liszt:activate", (evt) => this.activate_field(evt)
|
87
|
+
@form_field_jq.bind "liszt:open", (evt) => this.container_mousedown(evt)
|
85
88
|
|
86
89
|
@search_field.blur (evt) => this.input_blur(evt)
|
87
90
|
@search_field.keyup (evt) => this.keyup_checker(evt)
|
@@ -173,7 +176,7 @@ class Chosen extends AbstractChosen
|
|
173
176
|
@choices = 0
|
174
177
|
else if not @is_multiple
|
175
178
|
@selected_item.addClass("chzn-default").find("span").text(@default_text)
|
176
|
-
if @form_field.options.length <= @disable_search_threshold
|
179
|
+
if @disable_search or @form_field.options.length <= @disable_search_threshold
|
177
180
|
@container.addClass "chzn-container-single-nosearch"
|
178
181
|
else
|
179
182
|
@container.removeClass "chzn-container-single-nosearch"
|
@@ -299,7 +302,11 @@ class Chosen extends AbstractChosen
|
|
299
302
|
return false # fire event
|
300
303
|
choice_id = @container_id + "_c_" + item.array_index
|
301
304
|
@choices += 1
|
302
|
-
|
305
|
+
if item.disabled
|
306
|
+
html = '<li class="search-choice search-choice-disabled" id="' + choice_id + '"><span>' + item.html + '</span></li>'
|
307
|
+
else
|
308
|
+
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>'
|
309
|
+
@search_container.before html
|
303
310
|
link = $('#' + choice_id).find("a").first()
|
304
311
|
link.click (evt) => this.choice_destroy_link_click(evt)
|
305
312
|
|
@@ -312,13 +319,13 @@ class Chosen extends AbstractChosen
|
|
312
319
|
evt.stopPropagation
|
313
320
|
|
314
321
|
choice_destroy: (link) ->
|
315
|
-
|
316
|
-
|
322
|
+
if this.result_deselect (link.attr "rel")
|
323
|
+
@choices -= 1
|
324
|
+
this.show_search_field_default()
|
317
325
|
|
318
|
-
|
326
|
+
this.results_hide() if @is_multiple and @choices > 0 and @search_field.val().length < 1
|
319
327
|
|
320
|
-
|
321
|
-
link.parents('li').first().remove()
|
328
|
+
link.parents('li').first().remove()
|
322
329
|
|
323
330
|
results_reset: ->
|
324
331
|
@form_field.options[0].selected = true
|
@@ -330,6 +337,7 @@ class Chosen extends AbstractChosen
|
|
330
337
|
this.results_hide() if @active_field
|
331
338
|
|
332
339
|
results_reset_cleanup: ->
|
340
|
+
@current_value = @form_field_jq.val()
|
333
341
|
@selected_item.find("abbr").remove()
|
334
342
|
|
335
343
|
result_select: (evt) ->
|
@@ -376,17 +384,23 @@ class Chosen extends AbstractChosen
|
|
376
384
|
|
377
385
|
result_deselect: (pos) ->
|
378
386
|
result_data = @results_data[pos]
|
379
|
-
result_data.selected = false
|
380
387
|
|
381
|
-
@form_field.options[result_data.options_index].
|
382
|
-
|
383
|
-
|
388
|
+
if not @form_field.options[result_data.options_index].disabled
|
389
|
+
result_data.selected = false
|
390
|
+
|
391
|
+
@form_field.options[result_data.options_index].selected = false
|
392
|
+
result = $("#" + @container_id + "_o_" + pos)
|
393
|
+
result.removeClass("result-selected").addClass("active-result").show()
|
384
394
|
|
385
|
-
|
386
|
-
|
395
|
+
this.result_clear_highlight()
|
396
|
+
this.winnow_results()
|
387
397
|
|
388
|
-
|
389
|
-
|
398
|
+
@form_field_jq.trigger "change", {deselected: @form_field.options[result_data.options_index].value}
|
399
|
+
this.search_field_scale()
|
400
|
+
|
401
|
+
return true
|
402
|
+
else
|
403
|
+
return false
|
390
404
|
|
391
405
|
single_deselect_control_build: ->
|
392
406
|
@selected_item.find("span").first().after "<abbr class=\"search-choice-close\"></abbr>" if @allow_single_deselect and @selected_item.find("abbr").length < 1
|
@@ -497,11 +511,13 @@ class Chosen extends AbstractChosen
|
|
497
511
|
this.choice_destroy @pending_backstroke.find("a").first()
|
498
512
|
this.clear_backstroke()
|
499
513
|
else
|
500
|
-
|
501
|
-
if
|
502
|
-
@
|
503
|
-
|
504
|
-
|
514
|
+
next_available_destroy = @search_container.siblings("li.search-choice").last()
|
515
|
+
if next_available_destroy.length and not next_available_destroy.hasClass("search-choice-disabled")
|
516
|
+
@pending_backstroke = next_available_destroy
|
517
|
+
if @single_backstroke_delete
|
518
|
+
@keydown_backstroke()
|
519
|
+
else
|
520
|
+
@pending_backstroke.addClass "search-choice-focus"
|
505
521
|
|
506
522
|
clear_backstroke: ->
|
507
523
|
@pending_backstroke.removeClass "search-choice-focus" if @pending_backstroke
|
@@ -20,6 +20,7 @@ class Chosen extends AbstractChosen
|
|
20
20
|
@single_temp = new Template('<a href="javascript:void(0)" class="chzn-single chzn-default"><span>#{default}</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><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" style="left:-9000px;"><ul class="chzn-results"></ul></div>')
|
22
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>')
|
23
24
|
@no_results_temp = new Template('<li class="no-results">' + @results_none_found + ' "<span>#{terms}</span>"</li>')
|
24
25
|
|
25
26
|
set_up_html: ->
|
@@ -74,6 +75,8 @@ class Chosen extends AbstractChosen
|
|
74
75
|
@search_results.observe "mouseout", (evt) => this.search_results_mouseout(evt)
|
75
76
|
|
76
77
|
@form_field.observe "liszt:updated", (evt) => this.results_update_field(evt)
|
78
|
+
@form_field.observe "liszt:activate", (evt) => this.activate_field(evt)
|
79
|
+
@form_field.observe "liszt:open", (evt) => this.container_mousedown(evt)
|
77
80
|
|
78
81
|
@search_field.observe "blur", (evt) => this.input_blur(evt)
|
79
82
|
@search_field.observe "keyup", (evt) => this.keyup_checker(evt)
|
@@ -164,7 +167,7 @@ class Chosen extends AbstractChosen
|
|
164
167
|
@choices = 0
|
165
168
|
else if not @is_multiple
|
166
169
|
@selected_item.addClassName("chzn-default").down("span").update(@default_text)
|
167
|
-
if @form_field.options.length <= @disable_search_threshold
|
170
|
+
if @disable_search or @form_field.options.length <= @disable_search_threshold
|
168
171
|
@container.addClassName "chzn-container-single-nosearch"
|
169
172
|
else
|
170
173
|
@container.removeClassName "chzn-container-single-nosearch"
|
@@ -290,12 +293,13 @@ class Chosen extends AbstractChosen
|
|
290
293
|
choice_id = @container_id + "_c_" + item.array_index
|
291
294
|
@choices += 1
|
292
295
|
@search_container.insert
|
293
|
-
before: @choice_temp.evaluate
|
296
|
+
before: (if item.disabled then @choice_noclose_temp else @choice_temp).evaluate
|
294
297
|
id: choice_id
|
295
298
|
choice: item.html
|
296
299
|
position: item.array_index
|
297
|
-
|
298
|
-
|
300
|
+
if not item.disabled
|
301
|
+
link = $(choice_id).down('a')
|
302
|
+
link.observe "click", (evt) => this.choice_destroy_link_click(evt)
|
299
303
|
|
300
304
|
choice_destroy_link_click: (evt) ->
|
301
305
|
evt.preventDefault()
|
@@ -304,13 +308,13 @@ class Chosen extends AbstractChosen
|
|
304
308
|
this.choice_destroy evt.target
|
305
309
|
|
306
310
|
choice_destroy: (link) ->
|
307
|
-
|
308
|
-
|
311
|
+
if this.result_deselect link.readAttribute("rel")
|
312
|
+
@choices -= 1
|
313
|
+
this.show_search_field_default()
|
309
314
|
|
310
|
-
|
315
|
+
this.results_hide() if @is_multiple and @choices > 0 and @search_field.value.length < 1
|
311
316
|
|
312
|
-
|
313
|
-
link.up('li').remove()
|
317
|
+
link.up('li').remove()
|
314
318
|
|
315
319
|
results_reset: ->
|
316
320
|
@form_field.options[0].selected = true
|
@@ -322,6 +326,7 @@ class Chosen extends AbstractChosen
|
|
322
326
|
this.results_hide() if @active_field
|
323
327
|
|
324
328
|
results_reset_cleanup: ->
|
329
|
+
@current_value = @form_field.value
|
325
330
|
deselect_trigger = @selected_item.down("abbr")
|
326
331
|
deselect_trigger.remove() if(deselect_trigger)
|
327
332
|
|
@@ -368,17 +373,22 @@ class Chosen extends AbstractChosen
|
|
368
373
|
|
369
374
|
result_deselect: (pos) ->
|
370
375
|
result_data = @results_data[pos]
|
371
|
-
|
376
|
+
|
377
|
+
if not @form_field.options[result_data.options_index].disabled
|
378
|
+
result_data.selected = false
|
372
379
|
|
373
|
-
|
374
|
-
|
375
|
-
|
380
|
+
@form_field.options[result_data.options_index].selected = false
|
381
|
+
result = $(@container_id + "_o_" + pos)
|
382
|
+
result.removeClassName("result-selected").addClassName("active-result").show()
|
376
383
|
|
377
|
-
|
378
|
-
|
384
|
+
this.result_clear_highlight()
|
385
|
+
this.winnow_results()
|
379
386
|
|
380
|
-
|
381
|
-
|
387
|
+
@form_field.simulate("change") if typeof Event.simulate is 'function'
|
388
|
+
this.search_field_scale()
|
389
|
+
return true
|
390
|
+
else
|
391
|
+
return false
|
382
392
|
|
383
393
|
single_deselect_control_build: ->
|
384
394
|
@selected_item.down("span").insert { after: "<abbr class=\"search-choice-close\"></abbr>" } if @allow_single_deselect and not @selected_item.down("abbr")
|
@@ -494,11 +504,14 @@ class Chosen extends AbstractChosen
|
|
494
504
|
this.choice_destroy @pending_backstroke.down("a")
|
495
505
|
this.clear_backstroke()
|
496
506
|
else
|
497
|
-
|
498
|
-
if
|
499
|
-
@
|
500
|
-
|
501
|
-
@
|
507
|
+
next_available_destroy = @search_container.siblings().last()
|
508
|
+
if next_available_destroy and next_available_destroy.hasClassName("search-choice") and not next_available_destroy.hasClassName("search-choice-disabled")
|
509
|
+
@pending_backstroke = next_available_destroy
|
510
|
+
@pending_backstroke.addClassName("search-choice-focus") if @pending_backstroke
|
511
|
+
if @single_backstroke_delete
|
512
|
+
@keydown_backstroke()
|
513
|
+
else
|
514
|
+
@pending_backstroke.addClassName("search-choice-focus")
|
502
515
|
|
503
516
|
clear_backstroke: ->
|
504
517
|
@pending_backstroke.removeClassName("search-choice-focus") if @pending_backstroke
|
@@ -29,6 +29,7 @@ class AbstractChosen
|
|
29
29
|
@result_single_selected = null
|
30
30
|
@allow_single_deselect = if @options.allow_single_deselect? and @form_field.options[0]? and @form_field.options[0].text is "" then @options.allow_single_deselect else false
|
31
31
|
@disable_search_threshold = @options.disable_search_threshold || 0
|
32
|
+
@disable_search = @options.disable_search || false
|
32
33
|
@search_contains = @options.search_contains || false
|
33
34
|
@choices = 0
|
34
35
|
@single_backstroke_delete = @options.single_backstroke_delete || false
|
@@ -5,7 +5,7 @@ class SelectParser
|
|
5
5
|
@parsed = []
|
6
6
|
|
7
7
|
add_node: (child) ->
|
8
|
-
if child.nodeName is "OPTGROUP"
|
8
|
+
if child.nodeName.toUpperCase() is "OPTGROUP"
|
9
9
|
this.add_group child
|
10
10
|
else
|
11
11
|
this.add_option child
|
@@ -21,7 +21,7 @@ class SelectParser
|
|
21
21
|
this.add_option( option, group_position, group.disabled ) for option in group.childNodes
|
22
22
|
|
23
23
|
add_option: (option, group_position, group_disabled) ->
|
24
|
-
if option.nodeName is "OPTION"
|
24
|
+
if option.nodeName.toUpperCase() is "OPTION"
|
25
25
|
if option.text != ""
|
26
26
|
if group_position?
|
27
27
|
@parsed[group_position].children += 1
|
@@ -182,6 +182,18 @@
|
|
182
182
|
margin: 3px 0 3px 5px
|
183
183
|
position: relative
|
184
184
|
cursor: default
|
185
|
+
&.search-choice-disabled
|
186
|
+
background-color: #e4e4e4
|
187
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f4f4f4', endColorstr='#eeeeee', GradientType=0 )
|
188
|
+
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee))
|
189
|
+
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%)
|
190
|
+
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%)
|
191
|
+
background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%)
|
192
|
+
background-image: -ms-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%)
|
193
|
+
background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%)
|
194
|
+
color: #666
|
195
|
+
border: 1px solid #cccccc
|
196
|
+
padding-right: 5px
|
185
197
|
.search-choice-focus
|
186
198
|
background: #d4d4d4
|
187
199
|
.search-choice .search-choice-close
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chosen-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.8.
|
4
|
+
version: 0.9.8.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
@@ -130,18 +130,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
130
130
|
- - ! '>='
|
131
131
|
- !ruby/object:Gem::Version
|
132
132
|
version: '0'
|
133
|
-
segments:
|
134
|
-
- 0
|
135
|
-
hash: 1777641325023975397
|
136
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
134
|
none: false
|
138
135
|
requirements:
|
139
136
|
- - ! '>='
|
140
137
|
- !ruby/object:Gem::Version
|
141
138
|
version: '0'
|
142
|
-
segments:
|
143
|
-
- 0
|
144
|
-
hash: 1777641325023975397
|
145
139
|
requirements: []
|
146
140
|
rubyforge_project:
|
147
141
|
rubygems_version: 1.8.24
|