jquery_chosen-rails 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 43652e8b3b26487ce2acf02cc806a7a58999f171
4
+ data.tar.gz: f8994f3dc76182a4049b8ba371461080355e9a6e
5
+ SHA512:
6
+ metadata.gz: b11648068e1892e43dcc22c1acae55588774d5f161e9894d1e4a18d01a4bb00c967d068384efa20a1917e5fb5854b26b2581674ca6c16cf33db763461214a590
7
+ data.tar.gz: d976ea74413e6664c50b4c30d6d8695b7aebccab2efe033466d3600201adab74c409cedb60d249d172a10c6d1de7da5d6459f8bacd316c2ddf029c26528a1149
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /.idea/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.1
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in jquery_chosen-rails.gemspec
4
+ gemspec
@@ -0,0 +1,37 @@
1
+ # JqueryChosen::Rails
2
+
3
+ Hi, this is made to make your web development easy. Now if there any change comes in the jQuery.chosen plugin you dont need to bother. We will update the gem ASAP.
4
+ Thanks for using
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'jquery_chosen-rails'
12
+ ```
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install jquery_chosen-rails
21
+
22
+ ## Usage
23
+
24
+
25
+ ## Development
26
+
27
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
28
+
29
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
30
+
31
+ ## Contributing
32
+
33
+ 1. Fork it ( https://github.com/[my-github-username]/jquery_chosen-rails/fork )
34
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
35
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
36
+ 4. Push to the branch (`git push origin my-new-feature`)
37
+ 5. Create a new Pull Request
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "jquery_chosen/rails"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,22 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'jquery_chosen/rails/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "jquery_chosen-rails"
8
+ spec.version = JqueryChosen::Rails::VERSION
9
+ spec.authors = ["Shiva Bhusal"]
10
+ spec.email = ["cba.bhusal@outlook.com"]
11
+
12
+ spec.summary = %q{Ruby gem for jQuery chosen plugin}
13
+ spec.description = %q{Chosen is a library for making long, unwieldy select boxes more user friendly.}
14
+
15
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
+ spec.bindir = "exe"
17
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.8"
21
+ spec.add_development_dependency "rake", "~> 10.0"
22
+ end
@@ -0,0 +1,8 @@
1
+ require "jquery_chosen/rails/version"
2
+
3
+ module JqueryChosen
4
+ module Rails
5
+ class Engine < ::Rails::Engine
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ module JqueryChosen
2
+ module Rails
3
+ VERSION = "0.1.2"
4
+ end
5
+ end
@@ -0,0 +1,1256 @@
1
+ /*!
2
+ Chosen, a Select Box Enhancer for jQuery and Prototype
3
+ by Patrick Filler for Harvest, http://getharvest.com
4
+
5
+ Version 1.4.1
6
+ Full source at https://github.com/harvesthq/chosen
7
+ Copyright (c) 2011-2015 Harvest http://getharvest.com
8
+
9
+ MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
10
+ This file is generated by `grunt build`, do not edit it by hand.
11
+ */
12
+
13
+ (function() {
14
+ var $, AbstractChosen, Chosen, SelectParser, _ref,
15
+ __hasProp = {}.hasOwnProperty,
16
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
17
+
18
+ SelectParser = (function() {
19
+ function SelectParser() {
20
+ this.options_index = 0;
21
+ this.parsed = [];
22
+ }
23
+
24
+ SelectParser.prototype.add_node = function(child) {
25
+ if (child.nodeName.toUpperCase() === "OPTGROUP") {
26
+ return this.add_group(child);
27
+ } else {
28
+ return this.add_option(child);
29
+ }
30
+ };
31
+
32
+ SelectParser.prototype.add_group = function(group) {
33
+ var group_position, option, _i, _len, _ref, _results;
34
+ group_position = this.parsed.length;
35
+ this.parsed.push({
36
+ array_index: group_position,
37
+ group: true,
38
+ label: this.escapeExpression(group.label),
39
+ title: group.title ? group.title : void 0,
40
+ children: 0,
41
+ disabled: group.disabled,
42
+ classes: group.className
43
+ });
44
+ _ref = group.childNodes;
45
+ _results = [];
46
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
47
+ option = _ref[_i];
48
+ _results.push(this.add_option(option, group_position, group.disabled));
49
+ }
50
+ return _results;
51
+ };
52
+
53
+ SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
54
+ if (option.nodeName.toUpperCase() === "OPTION") {
55
+ if (option.text !== "") {
56
+ if (group_position != null) {
57
+ this.parsed[group_position].children += 1;
58
+ }
59
+ this.parsed.push({
60
+ array_index: this.parsed.length,
61
+ options_index: this.options_index,
62
+ value: option.value,
63
+ text: option.text,
64
+ html: option.innerHTML,
65
+ title: option.title ? option.title : void 0,
66
+ selected: option.selected,
67
+ disabled: group_disabled === true ? group_disabled : option.disabled,
68
+ group_array_index: group_position,
69
+ group_label: group_position != null ? this.parsed[group_position].label : null,
70
+ classes: option.className,
71
+ style: option.style.cssText
72
+ });
73
+ } else {
74
+ this.parsed.push({
75
+ array_index: this.parsed.length,
76
+ options_index: this.options_index,
77
+ empty: true
78
+ });
79
+ }
80
+ return this.options_index += 1;
81
+ }
82
+ };
83
+
84
+ SelectParser.prototype.escapeExpression = function(text) {
85
+ var map, unsafe_chars;
86
+ if ((text == null) || text === false) {
87
+ return "";
88
+ }
89
+ if (!/[\&\<\>\"\'\`]/.test(text)) {
90
+ return text;
91
+ }
92
+ map = {
93
+ "<": "&lt;",
94
+ ">": "&gt;",
95
+ '"': "&quot;",
96
+ "'": "&#x27;",
97
+ "`": "&#x60;"
98
+ };
99
+ unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g;
100
+ return text.replace(unsafe_chars, function(chr) {
101
+ return map[chr] || "&amp;";
102
+ });
103
+ };
104
+
105
+ return SelectParser;
106
+
107
+ })();
108
+
109
+ SelectParser.select_to_array = function(select) {
110
+ var child, parser, _i, _len, _ref;
111
+ parser = new SelectParser();
112
+ _ref = select.childNodes;
113
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
114
+ child = _ref[_i];
115
+ parser.add_node(child);
116
+ }
117
+ return parser.parsed;
118
+ };
119
+
120
+ AbstractChosen = (function() {
121
+ function AbstractChosen(form_field, options) {
122
+ this.form_field = form_field;
123
+ this.options = options != null ? options : {};
124
+ if (!AbstractChosen.browser_is_supported()) {
125
+ return;
126
+ }
127
+ this.is_multiple = this.form_field.multiple;
128
+ this.set_default_text();
129
+ this.set_default_values();
130
+ this.setup();
131
+ this.set_up_html();
132
+ this.register_observers();
133
+ this.on_ready();
134
+ }
135
+
136
+ AbstractChosen.prototype.set_default_values = function() {
137
+ var _this = this;
138
+ this.click_test_action = function(evt) {
139
+ return _this.test_active_click(evt);
140
+ };
141
+ this.activate_action = function(evt) {
142
+ return _this.activate_field(evt);
143
+ };
144
+ this.active_field = false;
145
+ this.mouse_on_container = false;
146
+ this.results_showing = false;
147
+ this.result_highlighted = null;
148
+ this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false;
149
+ this.disable_search_threshold = this.options.disable_search_threshold || 0;
150
+ this.disable_search = this.options.disable_search || false;
151
+ this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true;
152
+ this.group_search = this.options.group_search != null ? this.options.group_search : true;
153
+ this.search_contains = this.options.search_contains || false;
154
+ this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true;
155
+ this.max_selected_options = this.options.max_selected_options || Infinity;
156
+ this.inherit_select_classes = this.options.inherit_select_classes || false;
157
+ this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true;
158
+ this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true;
159
+ return this.include_group_label_in_selected = this.options.include_group_label_in_selected || false;
160
+ };
161
+
162
+ AbstractChosen.prototype.set_default_text = function() {
163
+ if (this.form_field.getAttribute("data-placeholder")) {
164
+ this.default_text = this.form_field.getAttribute("data-placeholder");
165
+ } else if (this.is_multiple) {
166
+ this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text;
167
+ } else {
168
+ this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text;
169
+ }
170
+ return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text;
171
+ };
172
+
173
+ AbstractChosen.prototype.choice_label = function(item) {
174
+ if (this.include_group_label_in_selected && (item.group_label != null)) {
175
+ return "<b class='group-name'>" + item.group_label + "</b>" + item.html;
176
+ } else {
177
+ return item.html;
178
+ }
179
+ };
180
+
181
+ AbstractChosen.prototype.mouse_enter = function() {
182
+ return this.mouse_on_container = true;
183
+ };
184
+
185
+ AbstractChosen.prototype.mouse_leave = function() {
186
+ return this.mouse_on_container = false;
187
+ };
188
+
189
+ AbstractChosen.prototype.input_focus = function(evt) {
190
+ var _this = this;
191
+ if (this.is_multiple) {
192
+ if (!this.active_field) {
193
+ return setTimeout((function() {
194
+ return _this.container_mousedown();
195
+ }), 50);
196
+ }
197
+ } else {
198
+ if (!this.active_field) {
199
+ return this.activate_field();
200
+ }
201
+ }
202
+ };
203
+
204
+ AbstractChosen.prototype.input_blur = function(evt) {
205
+ var _this = this;
206
+ if (!this.mouse_on_container) {
207
+ this.active_field = false;
208
+ return setTimeout((function() {
209
+ return _this.blur_test();
210
+ }), 100);
211
+ }
212
+ };
213
+
214
+ AbstractChosen.prototype.results_option_build = function(options) {
215
+ var content, data, _i, _len, _ref;
216
+ content = '';
217
+ _ref = this.results_data;
218
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
219
+ data = _ref[_i];
220
+ if (data.group) {
221
+ content += this.result_add_group(data);
222
+ } else {
223
+ content += this.result_add_option(data);
224
+ }
225
+ if (options != null ? options.first : void 0) {
226
+ if (data.selected && this.is_multiple) {
227
+ this.choice_build(data);
228
+ } else if (data.selected && !this.is_multiple) {
229
+ this.single_set_selected_text(this.choice_label(data));
230
+ }
231
+ }
232
+ }
233
+ return content;
234
+ };
235
+
236
+ AbstractChosen.prototype.result_add_option = function(option) {
237
+ var classes, option_el;
238
+ if (!option.search_match) {
239
+ return '';
240
+ }
241
+ if (!this.include_option_in_results(option)) {
242
+ return '';
243
+ }
244
+ classes = [];
245
+ if (!option.disabled && !(option.selected && this.is_multiple)) {
246
+ classes.push("active-result");
247
+ }
248
+ if (option.disabled && !(option.selected && this.is_multiple)) {
249
+ classes.push("disabled-result");
250
+ }
251
+ if (option.selected) {
252
+ classes.push("result-selected");
253
+ }
254
+ if (option.group_array_index != null) {
255
+ classes.push("group-option");
256
+ }
257
+ if (option.classes !== "") {
258
+ classes.push(option.classes);
259
+ }
260
+ option_el = document.createElement("li");
261
+ option_el.className = classes.join(" ");
262
+ option_el.style.cssText = option.style;
263
+ option_el.setAttribute("data-option-array-index", option.array_index);
264
+ option_el.innerHTML = option.search_text;
265
+ if (option.title) {
266
+ option_el.title = option.title;
267
+ }
268
+ return this.outerHTML(option_el);
269
+ };
270
+
271
+ AbstractChosen.prototype.result_add_group = function(group) {
272
+ var classes, group_el;
273
+ if (!(group.search_match || group.group_match)) {
274
+ return '';
275
+ }
276
+ if (!(group.active_options > 0)) {
277
+ return '';
278
+ }
279
+ classes = [];
280
+ classes.push("group-result");
281
+ if (group.classes) {
282
+ classes.push(group.classes);
283
+ }
284
+ group_el = document.createElement("li");
285
+ group_el.className = classes.join(" ");
286
+ group_el.innerHTML = group.search_text;
287
+ if (group.title) {
288
+ group_el.title = group.title;
289
+ }
290
+ return this.outerHTML(group_el);
291
+ };
292
+
293
+ AbstractChosen.prototype.results_update_field = function() {
294
+ this.set_default_text();
295
+ if (!this.is_multiple) {
296
+ this.results_reset_cleanup();
297
+ }
298
+ this.result_clear_highlight();
299
+ this.results_build();
300
+ if (this.results_showing) {
301
+ return this.winnow_results();
302
+ }
303
+ };
304
+
305
+ AbstractChosen.prototype.reset_single_select_options = function() {
306
+ var result, _i, _len, _ref, _results;
307
+ _ref = this.results_data;
308
+ _results = [];
309
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
310
+ result = _ref[_i];
311
+ if (result.selected) {
312
+ _results.push(result.selected = false);
313
+ } else {
314
+ _results.push(void 0);
315
+ }
316
+ }
317
+ return _results;
318
+ };
319
+
320
+ AbstractChosen.prototype.results_toggle = function() {
321
+ if (this.results_showing) {
322
+ return this.results_hide();
323
+ } else {
324
+ return this.results_show();
325
+ }
326
+ };
327
+
328
+ AbstractChosen.prototype.results_search = function(evt) {
329
+ if (this.results_showing) {
330
+ return this.winnow_results();
331
+ } else {
332
+ return this.results_show();
333
+ }
334
+ };
335
+
336
+ AbstractChosen.prototype.winnow_results = function() {
337
+ var escapedSearchText, option, regex, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref;
338
+ this.no_results_clear();
339
+ results = 0;
340
+ searchText = this.get_search_text();
341
+ escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
342
+ zregex = new RegExp(escapedSearchText, 'i');
343
+ regex = this.get_search_regex(escapedSearchText);
344
+ _ref = this.results_data;
345
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
346
+ option = _ref[_i];
347
+ option.search_match = false;
348
+ results_group = null;
349
+ if (this.include_option_in_results(option)) {
350
+ if (option.group) {
351
+ option.group_match = false;
352
+ option.active_options = 0;
353
+ }
354
+ if ((option.group_array_index != null) && this.results_data[option.group_array_index]) {
355
+ results_group = this.results_data[option.group_array_index];
356
+ if (results_group.active_options === 0 && results_group.search_match) {
357
+ results += 1;
358
+ }
359
+ results_group.active_options += 1;
360
+ }
361
+ option.search_text = option.group ? option.label : option.html;
362
+ if (!(option.group && !this.group_search)) {
363
+ option.search_match = this.search_string_match(option.search_text, regex);
364
+ if (option.search_match && !option.group) {
365
+ results += 1;
366
+ }
367
+ if (option.search_match) {
368
+ if (searchText.length) {
369
+ startpos = option.search_text.search(zregex);
370
+ text = option.search_text.substr(0, startpos + searchText.length) + '</em>' + option.search_text.substr(startpos + searchText.length);
371
+ option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
372
+ }
373
+ if (results_group != null) {
374
+ results_group.group_match = true;
375
+ }
376
+ } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) {
377
+ option.search_match = true;
378
+ }
379
+ }
380
+ }
381
+ }
382
+ this.result_clear_highlight();
383
+ if (results < 1 && searchText.length) {
384
+ this.update_results_content("");
385
+ return this.no_results(searchText);
386
+ } else {
387
+ this.update_results_content(this.results_option_build());
388
+ return this.winnow_results_set_highlight();
389
+ }
390
+ };
391
+
392
+ AbstractChosen.prototype.get_search_regex = function(escaped_search_string) {
393
+ var regex_anchor;
394
+ regex_anchor = this.search_contains ? "" : "^";
395
+ return new RegExp(regex_anchor + escaped_search_string, 'i');
396
+ };
397
+
398
+ AbstractChosen.prototype.search_string_match = function(search_string, regex) {
399
+ var part, parts, _i, _len;
400
+ if (regex.test(search_string)) {
401
+ return true;
402
+ } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) {
403
+ parts = search_string.replace(/\[|\]/g, "").split(" ");
404
+ if (parts.length) {
405
+ for (_i = 0, _len = parts.length; _i < _len; _i++) {
406
+ part = parts[_i];
407
+ if (regex.test(part)) {
408
+ return true;
409
+ }
410
+ }
411
+ }
412
+ }
413
+ };
414
+
415
+ AbstractChosen.prototype.choices_count = function() {
416
+ var option, _i, _len, _ref;
417
+ if (this.selected_option_count != null) {
418
+ return this.selected_option_count;
419
+ }
420
+ this.selected_option_count = 0;
421
+ _ref = this.form_field.options;
422
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
423
+ option = _ref[_i];
424
+ if (option.selected) {
425
+ this.selected_option_count += 1;
426
+ }
427
+ }
428
+ return this.selected_option_count;
429
+ };
430
+
431
+ AbstractChosen.prototype.choices_click = function(evt) {
432
+ evt.preventDefault();
433
+ if (!(this.results_showing || this.is_disabled)) {
434
+ return this.results_show();
435
+ }
436
+ };
437
+
438
+ AbstractChosen.prototype.keyup_checker = function(evt) {
439
+ var stroke, _ref;
440
+ stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
441
+ this.search_field_scale();
442
+ switch (stroke) {
443
+ case 8:
444
+ if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {
445
+ return this.keydown_backstroke();
446
+ } else if (!this.pending_backstroke) {
447
+ this.result_clear_highlight();
448
+ return this.results_search();
449
+ }
450
+ break;
451
+ case 13:
452
+ evt.preventDefault();
453
+ if (this.results_showing) {
454
+ return this.result_select(evt);
455
+ }
456
+ break;
457
+ case 27:
458
+ if (this.results_showing) {
459
+ this.results_hide();
460
+ }
461
+ return true;
462
+ case 9:
463
+ case 38:
464
+ case 40:
465
+ case 16:
466
+ case 91:
467
+ case 17:
468
+ break;
469
+ default:
470
+ return this.results_search();
471
+ }
472
+ };
473
+
474
+ AbstractChosen.prototype.clipboard_event_checker = function(evt) {
475
+ var _this = this;
476
+ return setTimeout((function() {
477
+ return _this.results_search();
478
+ }), 50);
479
+ };
480
+
481
+ AbstractChosen.prototype.container_width = function() {
482
+ if (this.options.width != null) {
483
+ return this.options.width;
484
+ } else {
485
+ return "" + this.form_field.offsetWidth + "px";
486
+ }
487
+ };
488
+
489
+ AbstractChosen.prototype.include_option_in_results = function(option) {
490
+ if (this.is_multiple && (!this.display_selected_options && option.selected)) {
491
+ return false;
492
+ }
493
+ if (!this.display_disabled_options && option.disabled) {
494
+ return false;
495
+ }
496
+ if (option.empty) {
497
+ return false;
498
+ }
499
+ return true;
500
+ };
501
+
502
+ AbstractChosen.prototype.search_results_touchstart = function(evt) {
503
+ this.touch_started = true;
504
+ return this.search_results_mouseover(evt);
505
+ };
506
+
507
+ AbstractChosen.prototype.search_results_touchmove = function(evt) {
508
+ this.touch_started = false;
509
+ return this.search_results_mouseout(evt);
510
+ };
511
+
512
+ AbstractChosen.prototype.search_results_touchend = function(evt) {
513
+ if (this.touch_started) {
514
+ return this.search_results_mouseup(evt);
515
+ }
516
+ };
517
+
518
+ AbstractChosen.prototype.outerHTML = function(element) {
519
+ var tmp;
520
+ if (element.outerHTML) {
521
+ return element.outerHTML;
522
+ }
523
+ tmp = document.createElement("div");
524
+ tmp.appendChild(element);
525
+ return tmp.innerHTML;
526
+ };
527
+
528
+ AbstractChosen.browser_is_supported = function() {
529
+ if (window.navigator.appName === "Microsoft Internet Explorer") {
530
+ return document.documentMode >= 8;
531
+ }
532
+ if (/iP(od|hone)/i.test(window.navigator.userAgent)) {
533
+ return false;
534
+ }
535
+ if (/Android/i.test(window.navigator.userAgent)) {
536
+ if (/Mobile/i.test(window.navigator.userAgent)) {
537
+ return false;
538
+ }
539
+ }
540
+ return true;
541
+ };
542
+
543
+ AbstractChosen.default_multiple_text = "Select Some Options";
544
+
545
+ AbstractChosen.default_single_text = "Select an Option";
546
+
547
+ AbstractChosen.default_no_result_text = "No results match";
548
+
549
+ return AbstractChosen;
550
+
551
+ })();
552
+
553
+ $ = jQuery;
554
+
555
+ $.fn.extend({
556
+ chosen: function(options) {
557
+ if (!AbstractChosen.browser_is_supported()) {
558
+ return this;
559
+ }
560
+ return this.each(function(input_field) {
561
+ var $this, chosen;
562
+ $this = $(this);
563
+ chosen = $this.data('chosen');
564
+ if (options === 'destroy' && chosen instanceof Chosen) {
565
+ chosen.destroy();
566
+ } else if (!(chosen instanceof Chosen)) {
567
+ $this.data('chosen', new Chosen(this, options));
568
+ }
569
+ });
570
+ }
571
+ });
572
+
573
+ Chosen = (function(_super) {
574
+ __extends(Chosen, _super);
575
+
576
+ function Chosen() {
577
+ _ref = Chosen.__super__.constructor.apply(this, arguments);
578
+ return _ref;
579
+ }
580
+
581
+ Chosen.prototype.setup = function() {
582
+ this.form_field_jq = $(this.form_field);
583
+ this.current_selectedIndex = this.form_field.selectedIndex;
584
+ return this.is_rtl = this.form_field_jq.hasClass("chosen-rtl");
585
+ };
586
+
587
+ Chosen.prototype.set_up_html = function() {
588
+ var container_classes, container_props;
589
+ container_classes = ["chosen-container"];
590
+ container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single"));
591
+ if (this.inherit_select_classes && this.form_field.className) {
592
+ container_classes.push(this.form_field.className);
593
+ }
594
+ if (this.is_rtl) {
595
+ container_classes.push("chosen-rtl");
596
+ }
597
+ container_props = {
598
+ 'class': container_classes.join(' '),
599
+ 'style': "width: " + (this.container_width()) + ";",
600
+ 'title': this.form_field.title
601
+ };
602
+ if (this.form_field.id.length) {
603
+ container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen";
604
+ }
605
+ this.container = $("<div />", container_props);
606
+ if (this.is_multiple) {
607
+ this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" value="' + this.default_text + '" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>');
608
+ } else {
609
+ this.container.html('<a class="chosen-single chosen-default" tabindex="-1"><span>' + this.default_text + '</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>');
610
+ }
611
+ this.form_field_jq.hide().after(this.container);
612
+ this.dropdown = this.container.find('div.chosen-drop').first();
613
+ this.search_field = this.container.find('input').first();
614
+ this.search_results = this.container.find('ul.chosen-results').first();
615
+ this.search_field_scale();
616
+ this.search_no_results = this.container.find('li.no-results').first();
617
+ if (this.is_multiple) {
618
+ this.search_choices = this.container.find('ul.chosen-choices').first();
619
+ this.search_container = this.container.find('li.search-field').first();
620
+ } else {
621
+ this.search_container = this.container.find('div.chosen-search').first();
622
+ this.selected_item = this.container.find('.chosen-single').first();
623
+ }
624
+ this.results_build();
625
+ this.set_tab_index();
626
+ return this.set_label_behavior();
627
+ };
628
+
629
+ Chosen.prototype.on_ready = function() {
630
+ return this.form_field_jq.trigger("chosen:ready", {
631
+ chosen: this
632
+ });
633
+ };
634
+
635
+ Chosen.prototype.register_observers = function() {
636
+ var _this = this;
637
+ this.container.bind('touchstart.chosen', function(evt) {
638
+ _this.container_mousedown(evt);
639
+ return evt.preventDefault();
640
+ });
641
+ this.container.bind('touchend.chosen', function(evt) {
642
+ _this.container_mouseup(evt);
643
+ return evt.preventDefault();
644
+ });
645
+ this.container.bind('mousedown.chosen', function(evt) {
646
+ _this.container_mousedown(evt);
647
+ });
648
+ this.container.bind('mouseup.chosen', function(evt) {
649
+ _this.container_mouseup(evt);
650
+ });
651
+ this.container.bind('mouseenter.chosen', function(evt) {
652
+ _this.mouse_enter(evt);
653
+ });
654
+ this.container.bind('mouseleave.chosen', function(evt) {
655
+ _this.mouse_leave(evt);
656
+ });
657
+ this.search_results.bind('mouseup.chosen', function(evt) {
658
+ _this.search_results_mouseup(evt);
659
+ });
660
+ this.search_results.bind('mouseover.chosen', function(evt) {
661
+ _this.search_results_mouseover(evt);
662
+ });
663
+ this.search_results.bind('mouseout.chosen', function(evt) {
664
+ _this.search_results_mouseout(evt);
665
+ });
666
+ this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) {
667
+ _this.search_results_mousewheel(evt);
668
+ });
669
+ this.search_results.bind('touchstart.chosen', function(evt) {
670
+ _this.search_results_touchstart(evt);
671
+ });
672
+ this.search_results.bind('touchmove.chosen', function(evt) {
673
+ _this.search_results_touchmove(evt);
674
+ });
675
+ this.search_results.bind('touchend.chosen', function(evt) {
676
+ _this.search_results_touchend(evt);
677
+ });
678
+ this.form_field_jq.bind("chosen:updated.chosen", function(evt) {
679
+ _this.results_update_field(evt);
680
+ });
681
+ this.form_field_jq.bind("chosen:activate.chosen", function(evt) {
682
+ _this.activate_field(evt);
683
+ });
684
+ this.form_field_jq.bind("chosen:open.chosen", function(evt) {
685
+ _this.container_mousedown(evt);
686
+ });
687
+ this.form_field_jq.bind("chosen:close.chosen", function(evt) {
688
+ _this.input_blur(evt);
689
+ });
690
+ this.search_field.bind('blur.chosen', function(evt) {
691
+ _this.input_blur(evt);
692
+ });
693
+ this.search_field.bind('keyup.chosen', function(evt) {
694
+ _this.keyup_checker(evt);
695
+ });
696
+ this.search_field.bind('keydown.chosen', function(evt) {
697
+ _this.keydown_checker(evt);
698
+ });
699
+ this.search_field.bind('focus.chosen', function(evt) {
700
+ _this.input_focus(evt);
701
+ });
702
+ this.search_field.bind('cut.chosen', function(evt) {
703
+ _this.clipboard_event_checker(evt);
704
+ });
705
+ this.search_field.bind('paste.chosen', function(evt) {
706
+ _this.clipboard_event_checker(evt);
707
+ });
708
+ if (this.is_multiple) {
709
+ return this.search_choices.bind('click.chosen', function(evt) {
710
+ _this.choices_click(evt);
711
+ });
712
+ } else {
713
+ return this.container.bind('click.chosen', function(evt) {
714
+ evt.preventDefault();
715
+ });
716
+ }
717
+ };
718
+
719
+ Chosen.prototype.destroy = function() {
720
+ $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action);
721
+ if (this.search_field[0].tabIndex) {
722
+ this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;
723
+ }
724
+ this.container.remove();
725
+ this.form_field_jq.removeData('chosen');
726
+ return this.form_field_jq.show();
727
+ };
728
+
729
+ Chosen.prototype.search_field_disabled = function() {
730
+ this.is_disabled = this.form_field_jq[0].disabled;
731
+ if (this.is_disabled) {
732
+ this.container.addClass('chosen-disabled');
733
+ this.search_field[0].disabled = true;
734
+ if (!this.is_multiple) {
735
+ this.selected_item.unbind("focus.chosen", this.activate_action);
736
+ }
737
+ return this.close_field();
738
+ } else {
739
+ this.container.removeClass('chosen-disabled');
740
+ this.search_field[0].disabled = false;
741
+ if (!this.is_multiple) {
742
+ return this.selected_item.bind("focus.chosen", this.activate_action);
743
+ }
744
+ }
745
+ };
746
+
747
+ Chosen.prototype.container_mousedown = function(evt) {
748
+ if (!this.is_disabled) {
749
+ if (evt && evt.type === "mousedown" && !this.results_showing) {
750
+ evt.preventDefault();
751
+ }
752
+ if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) {
753
+ if (!this.active_field) {
754
+ if (this.is_multiple) {
755
+ this.search_field.val("");
756
+ }
757
+ $(this.container[0].ownerDocument).bind('click.chosen', this.click_test_action);
758
+ this.results_show();
759
+ } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) {
760
+ evt.preventDefault();
761
+ this.results_toggle();
762
+ }
763
+ return this.activate_field();
764
+ }
765
+ }
766
+ };
767
+
768
+ Chosen.prototype.container_mouseup = function(evt) {
769
+ if (evt.target.nodeName === "ABBR" && !this.is_disabled) {
770
+ return this.results_reset(evt);
771
+ }
772
+ };
773
+
774
+ Chosen.prototype.search_results_mousewheel = function(evt) {
775
+ var delta;
776
+ if (evt.originalEvent) {
777
+ delta = evt.originalEvent.deltaY || -evt.originalEvent.wheelDelta || evt.originalEvent.detail;
778
+ }
779
+ if (delta != null) {
780
+ evt.preventDefault();
781
+ if (evt.type === 'DOMMouseScroll') {
782
+ delta = delta * 40;
783
+ }
784
+ return this.search_results.scrollTop(delta + this.search_results.scrollTop());
785
+ }
786
+ };
787
+
788
+ Chosen.prototype.blur_test = function(evt) {
789
+ if (!this.active_field && this.container.hasClass("chosen-container-active")) {
790
+ return this.close_field();
791
+ }
792
+ };
793
+
794
+ Chosen.prototype.close_field = function() {
795
+ $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action);
796
+ this.active_field = false;
797
+ this.results_hide();
798
+ this.container.removeClass("chosen-container-active");
799
+ this.clear_backstroke();
800
+ this.show_search_field_default();
801
+ return this.search_field_scale();
802
+ };
803
+
804
+ Chosen.prototype.activate_field = function() {
805
+ this.container.addClass("chosen-container-active");
806
+ this.active_field = true;
807
+ this.search_field.val(this.search_field.val());
808
+ return this.search_field.focus();
809
+ };
810
+
811
+ Chosen.prototype.test_active_click = function(evt) {
812
+ var active_container;
813
+ active_container = $(evt.target).closest('.chosen-container');
814
+ if (active_container.length && this.container[0] === active_container[0]) {
815
+ return this.active_field = true;
816
+ } else {
817
+ return this.close_field();
818
+ }
819
+ };
820
+
821
+ Chosen.prototype.results_build = function() {
822
+ this.parsing = true;
823
+ this.selected_option_count = null;
824
+ this.results_data = SelectParser.select_to_array(this.form_field);
825
+ if (this.is_multiple) {
826
+ this.search_choices.find("li.search-choice").remove();
827
+ } else if (!this.is_multiple) {
828
+ this.single_set_selected_text();
829
+ if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {
830
+ this.search_field[0].readOnly = true;
831
+ this.container.addClass("chosen-container-single-nosearch");
832
+ } else {
833
+ this.search_field[0].readOnly = false;
834
+ this.container.removeClass("chosen-container-single-nosearch");
835
+ }
836
+ }
837
+ this.update_results_content(this.results_option_build({
838
+ first: true
839
+ }));
840
+ this.search_field_disabled();
841
+ this.show_search_field_default();
842
+ this.search_field_scale();
843
+ return this.parsing = false;
844
+ };
845
+
846
+ Chosen.prototype.result_do_highlight = function(el) {
847
+ var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
848
+ if (el.length) {
849
+ this.result_clear_highlight();
850
+ this.result_highlight = el;
851
+ this.result_highlight.addClass("highlighted");
852
+ maxHeight = parseInt(this.search_results.css("maxHeight"), 10);
853
+ visible_top = this.search_results.scrollTop();
854
+ visible_bottom = maxHeight + visible_top;
855
+ high_top = this.result_highlight.position().top + this.search_results.scrollTop();
856
+ high_bottom = high_top + this.result_highlight.outerHeight();
857
+ if (high_bottom >= visible_bottom) {
858
+ return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);
859
+ } else if (high_top < visible_top) {
860
+ return this.search_results.scrollTop(high_top);
861
+ }
862
+ }
863
+ };
864
+
865
+ Chosen.prototype.result_clear_highlight = function() {
866
+ if (this.result_highlight) {
867
+ this.result_highlight.removeClass("highlighted");
868
+ }
869
+ return this.result_highlight = null;
870
+ };
871
+
872
+ Chosen.prototype.results_show = function() {
873
+ if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
874
+ this.form_field_jq.trigger("chosen:maxselected", {
875
+ chosen: this
876
+ });
877
+ return false;
878
+ }
879
+ this.container.addClass("chosen-with-drop");
880
+ this.results_showing = true;
881
+ this.search_field.focus();
882
+ this.search_field.val(this.search_field.val());
883
+ this.winnow_results();
884
+ return this.form_field_jq.trigger("chosen:showing_dropdown", {
885
+ chosen: this
886
+ });
887
+ };
888
+
889
+ Chosen.prototype.update_results_content = function(content) {
890
+ return this.search_results.html(content);
891
+ };
892
+
893
+ Chosen.prototype.results_hide = function() {
894
+ if (this.results_showing) {
895
+ this.result_clear_highlight();
896
+ this.container.removeClass("chosen-with-drop");
897
+ this.form_field_jq.trigger("chosen:hiding_dropdown", {
898
+ chosen: this
899
+ });
900
+ }
901
+ return this.results_showing = false;
902
+ };
903
+
904
+ Chosen.prototype.set_tab_index = function(el) {
905
+ var ti;
906
+ if (this.form_field.tabIndex) {
907
+ ti = this.form_field.tabIndex;
908
+ this.form_field.tabIndex = -1;
909
+ return this.search_field[0].tabIndex = ti;
910
+ }
911
+ };
912
+
913
+ Chosen.prototype.set_label_behavior = function() {
914
+ var _this = this;
915
+ this.form_field_label = this.form_field_jq.parents("label");
916
+ if (!this.form_field_label.length && this.form_field.id.length) {
917
+ this.form_field_label = $("label[for='" + this.form_field.id + "']");
918
+ }
919
+ if (this.form_field_label.length > 0) {
920
+ return this.form_field_label.bind('click.chosen', function(evt) {
921
+ if (_this.is_multiple) {
922
+ return _this.container_mousedown(evt);
923
+ } else {
924
+ return _this.activate_field();
925
+ }
926
+ });
927
+ }
928
+ };
929
+
930
+ Chosen.prototype.show_search_field_default = function() {
931
+ if (this.is_multiple && this.choices_count() < 1 && !this.active_field) {
932
+ this.search_field.val(this.default_text);
933
+ return this.search_field.addClass("default");
934
+ } else {
935
+ this.search_field.val("");
936
+ return this.search_field.removeClass("default");
937
+ }
938
+ };
939
+
940
+ Chosen.prototype.search_results_mouseup = function(evt) {
941
+ var target;
942
+ target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
943
+ if (target.length) {
944
+ this.result_highlight = target;
945
+ this.result_select(evt);
946
+ return this.search_field.focus();
947
+ }
948
+ };
949
+
950
+ Chosen.prototype.search_results_mouseover = function(evt) {
951
+ var target;
952
+ target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
953
+ if (target) {
954
+ return this.result_do_highlight(target);
955
+ }
956
+ };
957
+
958
+ Chosen.prototype.search_results_mouseout = function(evt) {
959
+ if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) {
960
+ return this.result_clear_highlight();
961
+ }
962
+ };
963
+
964
+ Chosen.prototype.choice_build = function(item) {
965
+ var choice, close_link,
966
+ _this = this;
967
+ choice = $('<li />', {
968
+ "class": "search-choice"
969
+ }).html("<span>" + (this.choice_label(item)) + "</span>");
970
+ if (item.disabled) {
971
+ choice.addClass('search-choice-disabled');
972
+ } else {
973
+ close_link = $('<a />', {
974
+ "class": 'search-choice-close',
975
+ 'data-option-array-index': item.array_index
976
+ });
977
+ close_link.bind('click.chosen', function(evt) {
978
+ return _this.choice_destroy_link_click(evt);
979
+ });
980
+ choice.append(close_link);
981
+ }
982
+ return this.search_container.before(choice);
983
+ };
984
+
985
+ Chosen.prototype.choice_destroy_link_click = function(evt) {
986
+ evt.preventDefault();
987
+ evt.stopPropagation();
988
+ if (!this.is_disabled) {
989
+ return this.choice_destroy($(evt.target));
990
+ }
991
+ };
992
+
993
+ Chosen.prototype.choice_destroy = function(link) {
994
+ if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) {
995
+ this.show_search_field_default();
996
+ if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) {
997
+ this.results_hide();
998
+ }
999
+ link.parents('li').first().remove();
1000
+ return this.search_field_scale();
1001
+ }
1002
+ };
1003
+
1004
+ Chosen.prototype.results_reset = function() {
1005
+ this.reset_single_select_options();
1006
+ this.form_field.options[0].selected = true;
1007
+ this.single_set_selected_text();
1008
+ this.show_search_field_default();
1009
+ this.results_reset_cleanup();
1010
+ this.form_field_jq.trigger("change");
1011
+ if (this.active_field) {
1012
+ return this.results_hide();
1013
+ }
1014
+ };
1015
+
1016
+ Chosen.prototype.results_reset_cleanup = function() {
1017
+ this.current_selectedIndex = this.form_field.selectedIndex;
1018
+ return this.selected_item.find("abbr").remove();
1019
+ };
1020
+
1021
+ Chosen.prototype.result_select = function(evt) {
1022
+ var high, item;
1023
+ if (this.result_highlight) {
1024
+ high = this.result_highlight;
1025
+ this.result_clear_highlight();
1026
+ if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
1027
+ this.form_field_jq.trigger("chosen:maxselected", {
1028
+ chosen: this
1029
+ });
1030
+ return false;
1031
+ }
1032
+ if (this.is_multiple) {
1033
+ high.removeClass("active-result");
1034
+ } else {
1035
+ this.reset_single_select_options();
1036
+ }
1037
+ item = this.results_data[high[0].getAttribute("data-option-array-index")];
1038
+ item.selected = true;
1039
+ this.form_field.options[item.options_index].selected = true;
1040
+ this.selected_option_count = null;
1041
+ if (this.is_multiple) {
1042
+ this.choice_build(item);
1043
+ } else {
1044
+ this.single_set_selected_text(this.choice_label(item));
1045
+ }
1046
+ if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) {
1047
+ this.results_hide();
1048
+ }
1049
+ this.search_field.val("");
1050
+ if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {
1051
+ this.form_field_jq.trigger("change", {
1052
+ 'selected': this.form_field.options[item.options_index].value
1053
+ });
1054
+ }
1055
+ this.current_selectedIndex = this.form_field.selectedIndex;
1056
+ evt.preventDefault();
1057
+ return this.search_field_scale();
1058
+ }
1059
+ };
1060
+
1061
+ Chosen.prototype.single_set_selected_text = function(text) {
1062
+ if (text == null) {
1063
+ text = this.default_text;
1064
+ }
1065
+ if (text === this.default_text) {
1066
+ this.selected_item.addClass("chosen-default");
1067
+ } else {
1068
+ this.single_deselect_control_build();
1069
+ this.selected_item.removeClass("chosen-default");
1070
+ }
1071
+ return this.selected_item.find("span").html(text);
1072
+ };
1073
+
1074
+ Chosen.prototype.result_deselect = function(pos) {
1075
+ var result_data;
1076
+ result_data = this.results_data[pos];
1077
+ if (!this.form_field.options[result_data.options_index].disabled) {
1078
+ result_data.selected = false;
1079
+ this.form_field.options[result_data.options_index].selected = false;
1080
+ this.selected_option_count = null;
1081
+ this.result_clear_highlight();
1082
+ if (this.results_showing) {
1083
+ this.winnow_results();
1084
+ }
1085
+ this.form_field_jq.trigger("change", {
1086
+ deselected: this.form_field.options[result_data.options_index].value
1087
+ });
1088
+ this.search_field_scale();
1089
+ return true;
1090
+ } else {
1091
+ return false;
1092
+ }
1093
+ };
1094
+
1095
+ Chosen.prototype.single_deselect_control_build = function() {
1096
+ if (!this.allow_single_deselect) {
1097
+ return;
1098
+ }
1099
+ if (!this.selected_item.find("abbr").length) {
1100
+ this.selected_item.find("span").first().after("<abbr class=\"search-choice-close\"></abbr>");
1101
+ }
1102
+ return this.selected_item.addClass("chosen-single-with-deselect");
1103
+ };
1104
+
1105
+ Chosen.prototype.get_search_text = function() {
1106
+ return $('<div/>').text($.trim(this.search_field.val())).html();
1107
+ };
1108
+
1109
+ Chosen.prototype.winnow_results_set_highlight = function() {
1110
+ var do_high, selected_results;
1111
+ selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : [];
1112
+ do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first();
1113
+ if (do_high != null) {
1114
+ return this.result_do_highlight(do_high);
1115
+ }
1116
+ };
1117
+
1118
+ Chosen.prototype.no_results = function(terms) {
1119
+ var no_results_html;
1120
+ no_results_html = $('<li class="no-results">' + this.results_none_found + ' "<span></span>"</li>');
1121
+ no_results_html.find("span").first().html(terms);
1122
+ this.search_results.append(no_results_html);
1123
+ return this.form_field_jq.trigger("chosen:no_results", {
1124
+ chosen: this
1125
+ });
1126
+ };
1127
+
1128
+ Chosen.prototype.no_results_clear = function() {
1129
+ return this.search_results.find(".no-results").remove();
1130
+ };
1131
+
1132
+ Chosen.prototype.keydown_arrow = function() {
1133
+ var next_sib;
1134
+ if (this.results_showing && this.result_highlight) {
1135
+ next_sib = this.result_highlight.nextAll("li.active-result").first();
1136
+ if (next_sib) {
1137
+ return this.result_do_highlight(next_sib);
1138
+ }
1139
+ } else {
1140
+ return this.results_show();
1141
+ }
1142
+ };
1143
+
1144
+ Chosen.prototype.keyup_arrow = function() {
1145
+ var prev_sibs;
1146
+ if (!this.results_showing && !this.is_multiple) {
1147
+ return this.results_show();
1148
+ } else if (this.result_highlight) {
1149
+ prev_sibs = this.result_highlight.prevAll("li.active-result");
1150
+ if (prev_sibs.length) {
1151
+ return this.result_do_highlight(prev_sibs.first());
1152
+ } else {
1153
+ if (this.choices_count() > 0) {
1154
+ this.results_hide();
1155
+ }
1156
+ return this.result_clear_highlight();
1157
+ }
1158
+ }
1159
+ };
1160
+
1161
+ Chosen.prototype.keydown_backstroke = function() {
1162
+ var next_available_destroy;
1163
+ if (this.pending_backstroke) {
1164
+ this.choice_destroy(this.pending_backstroke.find("a").first());
1165
+ return this.clear_backstroke();
1166
+ } else {
1167
+ next_available_destroy = this.search_container.siblings("li.search-choice").last();
1168
+ if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) {
1169
+ this.pending_backstroke = next_available_destroy;
1170
+ if (this.single_backstroke_delete) {
1171
+ return this.keydown_backstroke();
1172
+ } else {
1173
+ return this.pending_backstroke.addClass("search-choice-focus");
1174
+ }
1175
+ }
1176
+ }
1177
+ };
1178
+
1179
+ Chosen.prototype.clear_backstroke = function() {
1180
+ if (this.pending_backstroke) {
1181
+ this.pending_backstroke.removeClass("search-choice-focus");
1182
+ }
1183
+ return this.pending_backstroke = null;
1184
+ };
1185
+
1186
+ Chosen.prototype.keydown_checker = function(evt) {
1187
+ var stroke, _ref1;
1188
+ stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode;
1189
+ this.search_field_scale();
1190
+ if (stroke !== 8 && this.pending_backstroke) {
1191
+ this.clear_backstroke();
1192
+ }
1193
+ switch (stroke) {
1194
+ case 8:
1195
+ this.backstroke_length = this.search_field.val().length;
1196
+ break;
1197
+ case 9:
1198
+ if (this.results_showing && !this.is_multiple) {
1199
+ this.result_select(evt);
1200
+ }
1201
+ this.mouse_on_container = false;
1202
+ break;
1203
+ case 13:
1204
+ if (this.results_showing) {
1205
+ evt.preventDefault();
1206
+ }
1207
+ break;
1208
+ case 32:
1209
+ if (this.disable_search) {
1210
+ evt.preventDefault();
1211
+ }
1212
+ break;
1213
+ case 38:
1214
+ evt.preventDefault();
1215
+ this.keyup_arrow();
1216
+ break;
1217
+ case 40:
1218
+ evt.preventDefault();
1219
+ this.keydown_arrow();
1220
+ break;
1221
+ }
1222
+ };
1223
+
1224
+ Chosen.prototype.search_field_scale = function() {
1225
+ var div, f_width, h, style, style_block, styles, w, _i, _len;
1226
+ if (this.is_multiple) {
1227
+ h = 0;
1228
+ w = 0;
1229
+ style_block = "position:absolute; left: -1000px; top: -1000px; display:none;";
1230
+ styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];
1231
+ for (_i = 0, _len = styles.length; _i < _len; _i++) {
1232
+ style = styles[_i];
1233
+ style_block += style + ":" + this.search_field.css(style) + ";";
1234
+ }
1235
+ div = $('<div />', {
1236
+ 'style': style_block
1237
+ });
1238
+ div.text(this.search_field.val());
1239
+ $('body').append(div);
1240
+ w = div.width() + 25;
1241
+ div.remove();
1242
+ f_width = this.container.outerWidth();
1243
+ if (w > f_width - 10) {
1244
+ w = f_width - 10;
1245
+ }
1246
+ return this.search_field.css({
1247
+ 'width': w + 'px'
1248
+ });
1249
+ }
1250
+ };
1251
+
1252
+ return Chosen;
1253
+
1254
+ })(AbstractChosen);
1255
+
1256
+ }).call(this);