chosen-awesome-rails 1.2.1 → 1.3.0
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83b18c9dda7c321268a60e99da75a2724585c054
|
4
|
+
data.tar.gz: 1b293fb54a12a4ebf435e1a6c0f26ba9bdcadc3a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce188e12f5e2ac30b1d3d7280bee6e3e0cba2aaf399156fcfbff8aaedc2c73e675262f1f7b1a8391edfd48400eac3efd00b727e839d56661939641a17be118d7
|
7
|
+
data.tar.gz: 48743fef272a6ddf06371103e94bc38e32e435dc01f100d65a41e308289afce5ba824a60e97c35add75fcd5462ace2c8deac4d8fdda6067e10223c85929c7448
|
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "chosen-awesome-rails".freeze
|
6
|
-
s.version = "1.
|
6
|
+
s.version = "1.3.0"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
@@ -285,7 +285,7 @@ class Chosen
|
|
285
285
|
|
286
286
|
@$dropdown.bind "mouseover", "li.chosen-option", (evt) => @dropdown_mouseover(evt)
|
287
287
|
@$dropdown.bind "mousedown", "li.chosen-option", (evt) => @dropdown_mousedown(evt)
|
288
|
-
@$dropdown.bind "mousewheel DOMMouseScroll",
|
288
|
+
@$dropdown.bind "mousewheel DOMMouseScroll", (evt) => @dropdown_scroll(evt)
|
289
289
|
|
290
290
|
@$container.addClass("opened")
|
291
291
|
@$dropdown.addClass("opened")
|
@@ -338,11 +338,20 @@ class Chosen
|
|
338
338
|
evt.stopImmediatePropagation()
|
339
339
|
return
|
340
340
|
|
341
|
-
|
341
|
+
dropdown_scroll: (evt) ->
|
342
342
|
delta = evt.originalEvent.wheelDelta || -evt.originalEvent.detail
|
343
343
|
|
344
|
-
if (delta < 0 and @$dropdown.$list[0].scrollHeight - @$dropdown.scrollTop()
|
344
|
+
if (delta < 0 and @$dropdown.$list[0].scrollHeight - @$dropdown.scrollTop() <= @$dropdown.innerHeight())
|
345
345
|
evt.preventDefault()
|
346
|
+
evt.stopImmediatePropagation()
|
347
|
+
|
348
|
+
# Try pulling next pages
|
349
|
+
if @ajax
|
350
|
+
@pull_next_page()
|
351
|
+
|
352
|
+
else if (delta > 0 and @$dropdown.scrollTop() <= 0)
|
353
|
+
evt.preventDefault()
|
354
|
+
evt.stopImmediatePropagation()
|
346
355
|
|
347
356
|
return
|
348
357
|
|
@@ -384,9 +393,7 @@ class Chosen
|
|
384
393
|
|
385
394
|
return
|
386
395
|
|
387
|
-
redraw_dropdown:
|
388
|
-
@parser.update(data) unless data is undefined
|
389
|
-
|
396
|
+
redraw_dropdown: ->
|
390
397
|
changed = @apply_filter()
|
391
398
|
|
392
399
|
@update_dropdown_position()
|
@@ -484,13 +491,19 @@ class Chosen
|
|
484
491
|
|
485
492
|
move_selection: (dir) ->
|
486
493
|
cursor = @parser.index_of(@cursor_option) + dir
|
487
|
-
|
488
|
-
|
494
|
+
|
495
|
+
if cursor > @parser.available_options.length - 1
|
496
|
+
if @ajax and @ajax.has_more isnt false
|
497
|
+
# Try pulling next pages
|
498
|
+
@pull_next_page(=> @move_selection(dir))
|
499
|
+
|
500
|
+
return @
|
501
|
+
|
502
|
+
return @ if cursor < 0
|
489
503
|
|
490
504
|
@move_selection_to(cursor)
|
491
505
|
|
492
506
|
if @cursor_option and @cursor_option.selected and @parser.selectable_options.length
|
493
|
-
# TODO: optimize this, could be slow on large lists
|
494
507
|
return @move_selection(dir)
|
495
508
|
|
496
509
|
return @
|
@@ -504,12 +517,15 @@ class Chosen
|
|
504
517
|
return unless @cursor_option
|
505
518
|
|
506
519
|
$element = @cursor_option.$listed.addClass("active")
|
507
|
-
top = $element.position().top
|
520
|
+
top = $element.position().top
|
521
|
+
bottom = top + $element.outerHeight()
|
508
522
|
list_height = @$dropdown.height()
|
509
523
|
list_scroll = @$dropdown.scrollTop()
|
510
524
|
|
511
|
-
if
|
512
|
-
@$dropdown.scrollTop(
|
525
|
+
if bottom >= list_height + list_scroll
|
526
|
+
@$dropdown.scrollTop(bottom - list_height)
|
527
|
+
else if list_scroll >= top
|
528
|
+
@$dropdown.scrollTop(top)
|
513
529
|
|
514
530
|
return @
|
515
531
|
|
@@ -535,13 +551,17 @@ class Chosen
|
|
535
551
|
clearTimeout(@ajax.pending_update)
|
536
552
|
|
537
553
|
@ajax.pending_update = setTimeout =>
|
538
|
-
if @ajax.
|
539
|
-
@ajax.
|
554
|
+
if @ajax.pending_update_request and @ajax.pending_update_request.readyState isnt 4
|
555
|
+
@ajax.pending_update_request.abort()
|
556
|
+
|
557
|
+
# Reset current page and has_more flag
|
558
|
+
delete @ajax.data.page if @ajax.data
|
559
|
+
delete @ajax.has_more
|
540
560
|
|
541
561
|
data =
|
542
562
|
query: @$container.$search.val()
|
543
563
|
|
544
|
-
@ajax.
|
564
|
+
@ajax.pending_update_request = $.ajax
|
545
565
|
url: @ajax.url
|
546
566
|
type: @ajax.type or "get"
|
547
567
|
dataType: @ajax.dataType or "json"
|
@@ -555,7 +575,8 @@ class Chosen
|
|
555
575
|
success: (data) =>
|
556
576
|
@loaded()
|
557
577
|
@ajax.success?(arguments...)
|
558
|
-
@
|
578
|
+
@parser.update(data) unless data is undefined
|
579
|
+
@redraw_dropdown()
|
559
580
|
error: =>
|
560
581
|
@error()
|
561
582
|
@ajax.error?(arguments...)
|
@@ -565,6 +586,40 @@ class Chosen
|
|
565
586
|
|
566
587
|
return @
|
567
588
|
|
589
|
+
pull_next_page: (cb) ->
|
590
|
+
return @ unless @ajax and @ajax.has_more isnt false
|
591
|
+
|
592
|
+
if @ajax.pending_next_page_request and @ajax.pending_next_page_request.readyState isnt 4
|
593
|
+
return @
|
594
|
+
|
595
|
+
@ajax.data ||= {}
|
596
|
+
@ajax.data.page = if @ajax.data.page then @ajax.data.page + 1 else 2
|
597
|
+
|
598
|
+
data =
|
599
|
+
query: @$container.$search.val()
|
600
|
+
|
601
|
+
@ajax.pending_next_page_request = $.ajax
|
602
|
+
url: @ajax.url
|
603
|
+
type: @ajax.type or "get"
|
604
|
+
dataType: @ajax.dataType or "json"
|
605
|
+
data: $.extend(data, @ajax.data or {})
|
606
|
+
async: @ajax.async or true
|
607
|
+
xhrFields: @ajax.xhrFields
|
608
|
+
|
609
|
+
beforeSend: (xhr) =>
|
610
|
+
@loading()
|
611
|
+
success: (data) =>
|
612
|
+
@loaded()
|
613
|
+
@ajax.has_more = !!data.length
|
614
|
+
@parser.append(data) unless data is undefined
|
615
|
+
@redraw_dropdown()
|
616
|
+
cb() if cb
|
617
|
+
error: =>
|
618
|
+
@ajax.data.page = if @ajax.data.page is 2 then null else @ajax.data.page - 1
|
619
|
+
@error()
|
620
|
+
|
621
|
+
return @
|
622
|
+
|
568
623
|
@is_ios: ->
|
569
624
|
/iPad|iPhone|iPod/.test(navigator.userAgent) and not window.MSStream
|
570
625
|
|
@@ -17,6 +17,42 @@ class Chosen.Parser
|
|
17
17
|
delete @chosen
|
18
18
|
return
|
19
19
|
|
20
|
+
# Replaces all select options and parses it again
|
21
|
+
update: (data) ->
|
22
|
+
parser = @chosen.option_parser || @default_parser
|
23
|
+
selected_options = []
|
24
|
+
|
25
|
+
for option in @all_options
|
26
|
+
if option.selected or option.blank
|
27
|
+
selected_options.push(option)
|
28
|
+
else
|
29
|
+
option.$option.remove()
|
30
|
+
|
31
|
+
for attrs in data
|
32
|
+
parsed = parser(attrs)
|
33
|
+
value = parsed.value.toString()
|
34
|
+
text = parsed.text.toString()
|
35
|
+
|
36
|
+
unless $.grep(selected_options, (o) -> o.value is value and o.label is text ).length
|
37
|
+
@chosen.$target.append($("<option />", parsed))
|
38
|
+
|
39
|
+
@parse(selected_options)
|
40
|
+
return @
|
41
|
+
|
42
|
+
# Appends new options to the end of the list
|
43
|
+
append: (data) ->
|
44
|
+
parser = @chosen.option_parser || @default_parser
|
45
|
+
|
46
|
+
for attrs in data
|
47
|
+
parsed = parser(attrs)
|
48
|
+
value = parsed.value.toString()
|
49
|
+
text = parsed.text.toString()
|
50
|
+
|
51
|
+
unless $.grep(@all_options, (o) -> o.value is value and o.label is text).length
|
52
|
+
@insert(attrs, true)
|
53
|
+
|
54
|
+
return @
|
55
|
+
|
20
56
|
parse: (selected_options = []) ->
|
21
57
|
formatter = @chosen.option_formatter || @default_formatter
|
22
58
|
current_group_label = null
|
@@ -42,90 +78,71 @@ class Chosen.Parser
|
|
42
78
|
classes += " disabled" if option.disabled
|
43
79
|
|
44
80
|
$option = $(option)
|
45
|
-
selected = $.grep(selected_options, (o)
|
81
|
+
selected = $.grep(selected_options, (o) -> o.value is option.value and o.label is option.label)[0]
|
46
82
|
text = formatter($option)
|
47
83
|
|
48
|
-
|
49
|
-
$group:
|
50
|
-
$listed:
|
51
|
-
$choice:
|
52
|
-
$option:
|
53
|
-
blank:
|
54
|
-
index:
|
55
|
-
score:
|
56
|
-
label:
|
57
|
-
value:
|
58
|
-
selected:
|
59
|
-
disabled:
|
84
|
+
chosen_option =
|
85
|
+
$group: group
|
86
|
+
$listed: (selected and selected.$listed) or $("<li />", class: classes, html: text[0])
|
87
|
+
$choice: (selected and selected.$choice) or $("<li />", class: classes, html: [$reset_link.clone(), text[1]])
|
88
|
+
$option: (selected and selected.$option) or $option
|
89
|
+
blank: option.value is "" and index is 0
|
90
|
+
index: index
|
91
|
+
score: index * -1
|
92
|
+
label: option.text
|
93
|
+
value: option.value
|
94
|
+
selected: option.selected
|
95
|
+
disabled: option.disabled
|
60
96
|
match_type: null
|
61
97
|
|
62
|
-
@all_options.push
|
98
|
+
@all_options.push chosen_option
|
63
99
|
|
64
|
-
unless
|
65
|
-
@selected_options.push
|
66
|
-
@selectable_options.push
|
100
|
+
unless chosen_option.blank
|
101
|
+
@selected_options.push chosen_option if option.selected
|
102
|
+
@selectable_options.push chosen_option unless option.selected
|
67
103
|
|
68
104
|
@order()
|
69
105
|
return @
|
70
106
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
@chosen.select(option, false)
|
75
|
-
else if not option.$option[0].selected and @selected_options.indexOf(option) >= 0
|
76
|
-
@chosen.deselect(option, false)
|
77
|
-
|
78
|
-
update: (data) ->
|
79
|
-
parser = @chosen.option_parser || @default_parser
|
80
|
-
selected_options = []
|
81
|
-
|
82
|
-
for option in @all_options
|
83
|
-
if option.selected or option.blank
|
84
|
-
selected_options.push(option)
|
85
|
-
else
|
86
|
-
option.$option.remove()
|
87
|
-
|
88
|
-
for attrs in data
|
89
|
-
parsed = parser(attrs)
|
90
|
-
unless $.grep(selected_options, (o) => o.value is parsed.value.toString() and o.label == parsed.text.toString() ).length
|
91
|
-
@chosen.$target.append($("<option />", parsed))
|
92
|
-
|
93
|
-
@parse(selected_options)
|
94
|
-
return @
|
107
|
+
insert: (option, append = false) ->
|
108
|
+
$option = $("<option />", value: option.value, text: option.label)
|
109
|
+
$reset_link = @build_reset_link()
|
95
110
|
|
96
|
-
insert: (data) ->
|
97
111
|
formatter = @chosen.option_formatter || @default_formatter
|
98
|
-
|
99
|
-
|
100
|
-
$reset_link = @build_reset_link()
|
101
|
-
text = formatter($option)
|
112
|
+
text = formatter($option)
|
113
|
+
classes = "chosen-option"
|
102
114
|
|
103
115
|
@chosen.$target.append($option)
|
104
116
|
|
105
|
-
|
106
|
-
$group:
|
107
|
-
$listed:
|
108
|
-
$choice:
|
109
|
-
$option:
|
110
|
-
blank:
|
111
|
-
index:
|
112
|
-
score:
|
113
|
-
label:
|
114
|
-
value:
|
115
|
-
selected:
|
116
|
-
disabled:
|
117
|
-
match_type: 0
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
117
|
+
chosen_option =
|
118
|
+
$group: null
|
119
|
+
$listed: $("<li />", class: classes, html: text[0])
|
120
|
+
$choice: $("<li />", class: classes, html: [$reset_link, text[1]])
|
121
|
+
$option: $option
|
122
|
+
blank: false
|
123
|
+
index: 0
|
124
|
+
score: 0
|
125
|
+
label: $option[0].text
|
126
|
+
value: $option[0].value
|
127
|
+
selected: false
|
128
|
+
disabled: false
|
129
|
+
match_type: if append then null else 0
|
130
|
+
|
131
|
+
if append
|
132
|
+
@all_options.push chosen_option
|
133
|
+
@available_options.push chosen_option
|
134
|
+
@selectable_options.push chosen_option
|
135
|
+
else
|
136
|
+
@all_options.unshift chosen_option
|
137
|
+
@available_options.unshift chosen_option
|
138
|
+
@selectable_options.unshift chosen_option
|
139
|
+
|
140
|
+
chosen_option
|
124
141
|
|
125
142
|
restore: (option) ->
|
126
143
|
@select(option)
|
127
144
|
|
128
|
-
unless $.grep(@all_options, (o)
|
145
|
+
unless $.grep(@all_options, (o) -> option.label is o.label).length
|
129
146
|
@chosen.$target.append(option.$option)
|
130
147
|
|
131
148
|
@all_options.unshift option
|
@@ -145,6 +162,13 @@ class Chosen.Parser
|
|
145
162
|
index = collection.indexOf(option)
|
146
163
|
collection.splice(index, 1) if index > -1
|
147
164
|
|
165
|
+
sync: ->
|
166
|
+
for option in @all_options
|
167
|
+
if option.$option[0].selected and @selected_options.indexOf(option) < 0
|
168
|
+
@chosen.select(option, false)
|
169
|
+
else if not option.$option[0].selected and @selected_options.indexOf(option) >= 0
|
170
|
+
@chosen.deselect(option, false)
|
171
|
+
|
148
172
|
to_html: ->
|
149
173
|
last_group = null
|
150
174
|
list = []
|
@@ -237,8 +261,10 @@ class Chosen.Parser
|
|
237
261
|
|
238
262
|
expressions_collection = $.map(query, (word, index) ->
|
239
263
|
return [[
|
240
|
-
new RegExp("^#{word}$", "i"),
|
241
|
-
new RegExp("
|
264
|
+
new RegExp("^#{word}$", "i"),
|
265
|
+
new RegExp("^#{word}", "i")
|
266
|
+
new RegExp("#{word}$", "i"),
|
267
|
+
new RegExp(word, "i")
|
242
268
|
]]
|
243
269
|
)
|
244
270
|
|
@@ -283,8 +309,8 @@ class Chosen.Parser
|
|
283
309
|
|
284
310
|
default_parser: (attrs) ->
|
285
311
|
value: attrs.value
|
286
|
-
text:
|
287
|
-
data:
|
312
|
+
text: attrs.label
|
313
|
+
data: { source: attrs }
|
288
314
|
|
289
315
|
default_formatter: ($option) ->
|
290
316
|
value = $option.contents().text()
|
@@ -298,5 +324,4 @@ class Chosen.Parser
|
|
298
324
|
tabindex: @chosen.$target[0].tabindex || "0"
|
299
325
|
)
|
300
326
|
|
301
|
-
|
302
327
|
@escape_exp: /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g
|