Merge "mw.rcfilters.ui.SaveFiltersPopupButtonWidget: Remove pointless option"
[lhc/web/wiklou.git] / resources / lib / jquery.chosen / chosen.jquery.js
1 /*!
2 Chosen, a Select Box Enhancer for jQuery and Prototype
3 by Patrick Filler for Harvest, http://getharvest.com
4
5 Version 1.8.2
6 Full source at https://github.com/harvesthq/chosen
7 Copyright (c) 2011-2017 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,
15 bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
16 extend = 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 hasProp = {}.hasOwnProperty;
18
19 SelectParser = (function() {
20 function SelectParser() {
21 this.options_index = 0;
22 this.parsed = [];
23 }
24
25 SelectParser.prototype.add_node = function(child) {
26 if (child.nodeName.toUpperCase() === "OPTGROUP") {
27 return this.add_group(child);
28 } else {
29 return this.add_option(child);
30 }
31 };
32
33 SelectParser.prototype.add_group = function(group) {
34 var group_position, i, len, option, ref, results1;
35 group_position = this.parsed.length;
36 this.parsed.push({
37 array_index: group_position,
38 group: true,
39 label: group.label,
40 title: group.title ? group.title : void 0,
41 children: 0,
42 disabled: group.disabled,
43 classes: group.className
44 });
45 ref = group.childNodes;
46 results1 = [];
47 for (i = 0, len = ref.length; i < len; i++) {
48 option = ref[i];
49 results1.push(this.add_option(option, group_position, group.disabled));
50 }
51 return results1;
52 };
53
54 SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
55 if (option.nodeName.toUpperCase() === "OPTION") {
56 if (option.text !== "") {
57 if (group_position != null) {
58 this.parsed[group_position].children += 1;
59 }
60 this.parsed.push({
61 array_index: this.parsed.length,
62 options_index: this.options_index,
63 value: option.value,
64 text: option.text,
65 html: option.innerHTML,
66 title: option.title ? option.title : void 0,
67 selected: option.selected,
68 disabled: group_disabled === true ? group_disabled : option.disabled,
69 group_array_index: group_position,
70 group_label: group_position != null ? this.parsed[group_position].label : null,
71 classes: option.className,
72 style: option.style.cssText
73 });
74 } else {
75 this.parsed.push({
76 array_index: this.parsed.length,
77 options_index: this.options_index,
78 empty: true
79 });
80 }
81 return this.options_index += 1;
82 }
83 };
84
85 return SelectParser;
86
87 })();
88
89 SelectParser.select_to_array = function(select) {
90 var child, i, len, parser, ref;
91 parser = new SelectParser();
92 ref = select.childNodes;
93 for (i = 0, len = ref.length; i < len; i++) {
94 child = ref[i];
95 parser.add_node(child);
96 }
97 return parser.parsed;
98 };
99
100 AbstractChosen = (function() {
101 function AbstractChosen(form_field, options1) {
102 this.form_field = form_field;
103 this.options = options1 != null ? options1 : {};
104 this.label_click_handler = bind(this.label_click_handler, this);
105 if (!AbstractChosen.browser_is_supported()) {
106 return;
107 }
108 this.is_multiple = this.form_field.multiple;
109 this.set_default_text();
110 this.set_default_values();
111 this.setup();
112 this.set_up_html();
113 this.register_observers();
114 this.on_ready();
115 }
116
117 AbstractChosen.prototype.set_default_values = function() {
118 this.click_test_action = (function(_this) {
119 return function(evt) {
120 return _this.test_active_click(evt);
121 };
122 })(this);
123 this.activate_action = (function(_this) {
124 return function(evt) {
125 return _this.activate_field(evt);
126 };
127 })(this);
128 this.active_field = false;
129 this.mouse_on_container = false;
130 this.results_showing = false;
131 this.result_highlighted = null;
132 this.is_rtl = this.options.rtl || /\bchosen-rtl\b/.test(this.form_field.className);
133 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;
134 this.disable_search_threshold = this.options.disable_search_threshold || 0;
135 this.disable_search = this.options.disable_search || false;
136 this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true;
137 this.group_search = this.options.group_search != null ? this.options.group_search : true;
138 this.search_contains = this.options.search_contains || false;
139 this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true;
140 this.max_selected_options = this.options.max_selected_options || Infinity;
141 this.inherit_select_classes = this.options.inherit_select_classes || false;
142 this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true;
143 this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true;
144 this.include_group_label_in_selected = this.options.include_group_label_in_selected || false;
145 this.max_shown_results = this.options.max_shown_results || Number.POSITIVE_INFINITY;
146 this.case_sensitive_search = this.options.case_sensitive_search || false;
147 return this.hide_results_on_select = this.options.hide_results_on_select != null ? this.options.hide_results_on_select : true;
148 };
149
150 AbstractChosen.prototype.set_default_text = function() {
151 if (this.form_field.getAttribute("data-placeholder")) {
152 this.default_text = this.form_field.getAttribute("data-placeholder");
153 } else if (this.is_multiple) {
154 this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text;
155 } else {
156 this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text;
157 }
158 this.default_text = this.escape_html(this.default_text);
159 return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text;
160 };
161
162 AbstractChosen.prototype.choice_label = function(item) {
163 if (this.include_group_label_in_selected && (item.group_label != null)) {
164 return "<b class='group-name'>" + item.group_label + "</b>" + item.html;
165 } else {
166 return item.html;
167 }
168 };
169
170 AbstractChosen.prototype.mouse_enter = function() {
171 return this.mouse_on_container = true;
172 };
173
174 AbstractChosen.prototype.mouse_leave = function() {
175 return this.mouse_on_container = false;
176 };
177
178 AbstractChosen.prototype.input_focus = function(evt) {
179 if (this.is_multiple) {
180 if (!this.active_field) {
181 return setTimeout(((function(_this) {
182 return function() {
183 return _this.container_mousedown();
184 };
185 })(this)), 50);
186 }
187 } else {
188 if (!this.active_field) {
189 return this.activate_field();
190 }
191 }
192 };
193
194 AbstractChosen.prototype.input_blur = function(evt) {
195 if (!this.mouse_on_container) {
196 this.active_field = false;
197 return setTimeout(((function(_this) {
198 return function() {
199 return _this.blur_test();
200 };
201 })(this)), 100);
202 }
203 };
204
205 AbstractChosen.prototype.label_click_handler = function(evt) {
206 if (this.is_multiple) {
207 return this.container_mousedown(evt);
208 } else {
209 return this.activate_field();
210 }
211 };
212
213 AbstractChosen.prototype.results_option_build = function(options) {
214 var content, data, data_content, i, len, ref, shown_results;
215 content = '';
216 shown_results = 0;
217 ref = this.results_data;
218 for (i = 0, len = ref.length; i < len; i++) {
219 data = ref[i];
220 data_content = '';
221 if (data.group) {
222 data_content = this.result_add_group(data);
223 } else {
224 data_content = this.result_add_option(data);
225 }
226 if (data_content !== '') {
227 shown_results++;
228 content += data_content;
229 }
230 if (options != null ? options.first : void 0) {
231 if (data.selected && this.is_multiple) {
232 this.choice_build(data);
233 } else if (data.selected && !this.is_multiple) {
234 this.single_set_selected_text(this.choice_label(data));
235 }
236 }
237 if (shown_results >= this.max_shown_results) {
238 break;
239 }
240 }
241 return content;
242 };
243
244 AbstractChosen.prototype.result_add_option = function(option) {
245 var classes, option_el;
246 if (!option.search_match) {
247 return '';
248 }
249 if (!this.include_option_in_results(option)) {
250 return '';
251 }
252 classes = [];
253 if (!option.disabled && !(option.selected && this.is_multiple)) {
254 classes.push("active-result");
255 }
256 if (option.disabled && !(option.selected && this.is_multiple)) {
257 classes.push("disabled-result");
258 }
259 if (option.selected) {
260 classes.push("result-selected");
261 }
262 if (option.group_array_index != null) {
263 classes.push("group-option");
264 }
265 if (option.classes !== "") {
266 classes.push(option.classes);
267 }
268 option_el = document.createElement("li");
269 option_el.className = classes.join(" ");
270 option_el.style.cssText = option.style;
271 option_el.setAttribute("data-option-array-index", option.array_index);
272 option_el.innerHTML = option.highlighted_html || option.html;
273 if (option.title) {
274 option_el.title = option.title;
275 }
276 return this.outerHTML(option_el);
277 };
278
279 AbstractChosen.prototype.result_add_group = function(group) {
280 var classes, group_el;
281 if (!(group.search_match || group.group_match)) {
282 return '';
283 }
284 if (!(group.active_options > 0)) {
285 return '';
286 }
287 classes = [];
288 classes.push("group-result");
289 if (group.classes) {
290 classes.push(group.classes);
291 }
292 group_el = document.createElement("li");
293 group_el.className = classes.join(" ");
294 group_el.innerHTML = group.highlighted_html || this.escape_html(group.label);
295 if (group.title) {
296 group_el.title = group.title;
297 }
298 return this.outerHTML(group_el);
299 };
300
301 AbstractChosen.prototype.results_update_field = function() {
302 this.set_default_text();
303 if (!this.is_multiple) {
304 this.results_reset_cleanup();
305 }
306 this.result_clear_highlight();
307 this.results_build();
308 if (this.results_showing) {
309 return this.winnow_results();
310 }
311 };
312
313 AbstractChosen.prototype.reset_single_select_options = function() {
314 var i, len, ref, result, results1;
315 ref = this.results_data;
316 results1 = [];
317 for (i = 0, len = ref.length; i < len; i++) {
318 result = ref[i];
319 if (result.selected) {
320 results1.push(result.selected = false);
321 } else {
322 results1.push(void 0);
323 }
324 }
325 return results1;
326 };
327
328 AbstractChosen.prototype.results_toggle = function() {
329 if (this.results_showing) {
330 return this.results_hide();
331 } else {
332 return this.results_show();
333 }
334 };
335
336 AbstractChosen.prototype.results_search = function(evt) {
337 if (this.results_showing) {
338 return this.winnow_results();
339 } else {
340 return this.results_show();
341 }
342 };
343
344 AbstractChosen.prototype.winnow_results = function() {
345 var escapedQuery, fix, i, len, option, prefix, query, ref, regex, results, results_group, search_match, startpos, suffix, text;
346 this.no_results_clear();
347 results = 0;
348 query = this.get_search_text();
349 escapedQuery = query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
350 regex = this.get_search_regex(escapedQuery);
351 ref = this.results_data;
352 for (i = 0, len = ref.length; i < len; i++) {
353 option = ref[i];
354 option.search_match = false;
355 results_group = null;
356 search_match = null;
357 option.highlighted_html = '';
358 if (this.include_option_in_results(option)) {
359 if (option.group) {
360 option.group_match = false;
361 option.active_options = 0;
362 }
363 if ((option.group_array_index != null) && this.results_data[option.group_array_index]) {
364 results_group = this.results_data[option.group_array_index];
365 if (results_group.active_options === 0 && results_group.search_match) {
366 results += 1;
367 }
368 results_group.active_options += 1;
369 }
370 text = option.group ? option.label : option.text;
371 if (!(option.group && !this.group_search)) {
372 search_match = this.search_string_match(text, regex);
373 option.search_match = search_match != null;
374 if (option.search_match && !option.group) {
375 results += 1;
376 }
377 if (option.search_match) {
378 if (query.length) {
379 startpos = search_match.index;
380 prefix = text.slice(0, startpos);
381 fix = text.slice(startpos, startpos + query.length);
382 suffix = text.slice(startpos + query.length);
383 option.highlighted_html = (this.escape_html(prefix)) + "<em>" + (this.escape_html(fix)) + "</em>" + (this.escape_html(suffix));
384 }
385 if (results_group != null) {
386 results_group.group_match = true;
387 }
388 } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) {
389 option.search_match = true;
390 }
391 }
392 }
393 }
394 this.result_clear_highlight();
395 if (results < 1 && query.length) {
396 this.update_results_content("");
397 return this.no_results(query);
398 } else {
399 this.update_results_content(this.results_option_build());
400 return this.winnow_results_set_highlight();
401 }
402 };
403
404 AbstractChosen.prototype.get_search_regex = function(escaped_search_string) {
405 var regex_flag, regex_string;
406 regex_string = this.search_contains ? escaped_search_string : "(^|\\s|\\b)" + escaped_search_string + "[^\\s]*";
407 if (!(this.enable_split_word_search || this.search_contains)) {
408 regex_string = "^" + regex_string;
409 }
410 regex_flag = this.case_sensitive_search ? "" : "i";
411 return new RegExp(regex_string, regex_flag);
412 };
413
414 AbstractChosen.prototype.search_string_match = function(search_string, regex) {
415 var match;
416 match = regex.exec(search_string);
417 if (!this.search_contains && (match != null ? match[1] : void 0)) {
418 match.index += 1;
419 }
420 return match;
421 };
422
423 AbstractChosen.prototype.choices_count = function() {
424 var i, len, option, ref;
425 if (this.selected_option_count != null) {
426 return this.selected_option_count;
427 }
428 this.selected_option_count = 0;
429 ref = this.form_field.options;
430 for (i = 0, len = ref.length; i < len; i++) {
431 option = ref[i];
432 if (option.selected) {
433 this.selected_option_count += 1;
434 }
435 }
436 return this.selected_option_count;
437 };
438
439 AbstractChosen.prototype.choices_click = function(evt) {
440 evt.preventDefault();
441 this.activate_field();
442 if (!(this.results_showing || this.is_disabled)) {
443 return this.results_show();
444 }
445 };
446
447 AbstractChosen.prototype.keydown_checker = function(evt) {
448 var ref, stroke;
449 stroke = (ref = evt.which) != null ? ref : evt.keyCode;
450 this.search_field_scale();
451 if (stroke !== 8 && this.pending_backstroke) {
452 this.clear_backstroke();
453 }
454 switch (stroke) {
455 case 8:
456 this.backstroke_length = this.get_search_field_value().length;
457 break;
458 case 9:
459 if (this.results_showing && !this.is_multiple) {
460 this.result_select(evt);
461 }
462 this.mouse_on_container = false;
463 break;
464 case 13:
465 if (this.results_showing) {
466 evt.preventDefault();
467 }
468 break;
469 case 27:
470 if (this.results_showing) {
471 evt.preventDefault();
472 }
473 break;
474 case 32:
475 if (this.disable_search) {
476 evt.preventDefault();
477 }
478 break;
479 case 38:
480 evt.preventDefault();
481 this.keyup_arrow();
482 break;
483 case 40:
484 evt.preventDefault();
485 this.keydown_arrow();
486 break;
487 }
488 };
489
490 AbstractChosen.prototype.keyup_checker = function(evt) {
491 var ref, stroke;
492 stroke = (ref = evt.which) != null ? ref : evt.keyCode;
493 this.search_field_scale();
494 switch (stroke) {
495 case 8:
496 if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {
497 this.keydown_backstroke();
498 } else if (!this.pending_backstroke) {
499 this.result_clear_highlight();
500 this.results_search();
501 }
502 break;
503 case 13:
504 evt.preventDefault();
505 if (this.results_showing) {
506 this.result_select(evt);
507 }
508 break;
509 case 27:
510 if (this.results_showing) {
511 this.results_hide();
512 }
513 break;
514 case 9:
515 case 16:
516 case 17:
517 case 18:
518 case 38:
519 case 40:
520 case 91:
521 break;
522 default:
523 this.results_search();
524 break;
525 }
526 };
527
528 AbstractChosen.prototype.clipboard_event_checker = function(evt) {
529 if (this.is_disabled) {
530 return;
531 }
532 return setTimeout(((function(_this) {
533 return function() {
534 return _this.results_search();
535 };
536 })(this)), 50);
537 };
538
539 AbstractChosen.prototype.container_width = function() {
540 if (this.options.width != null) {
541 return this.options.width;
542 } else {
543 return this.form_field.offsetWidth + "px";
544 }
545 };
546
547 AbstractChosen.prototype.include_option_in_results = function(option) {
548 if (this.is_multiple && (!this.display_selected_options && option.selected)) {
549 return false;
550 }
551 if (!this.display_disabled_options && option.disabled) {
552 return false;
553 }
554 if (option.empty) {
555 return false;
556 }
557 return true;
558 };
559
560 AbstractChosen.prototype.search_results_touchstart = function(evt) {
561 this.touch_started = true;
562 return this.search_results_mouseover(evt);
563 };
564
565 AbstractChosen.prototype.search_results_touchmove = function(evt) {
566 this.touch_started = false;
567 return this.search_results_mouseout(evt);
568 };
569
570 AbstractChosen.prototype.search_results_touchend = function(evt) {
571 if (this.touch_started) {
572 return this.search_results_mouseup(evt);
573 }
574 };
575
576 AbstractChosen.prototype.outerHTML = function(element) {
577 var tmp;
578 if (element.outerHTML) {
579 return element.outerHTML;
580 }
581 tmp = document.createElement("div");
582 tmp.appendChild(element);
583 return tmp.innerHTML;
584 };
585
586 AbstractChosen.prototype.get_single_html = function() {
587 return "<a class=\"chosen-single chosen-default\">\n <span>" + this.default_text + "</span>\n <div><b></b></div>\n</a>\n<div class=\"chosen-drop\">\n <div class=\"chosen-search\">\n <input class=\"chosen-search-input\" type=\"text\" autocomplete=\"off\" />\n </div>\n <ul class=\"chosen-results\"></ul>\n</div>";
588 };
589
590 AbstractChosen.prototype.get_multi_html = function() {
591 return "<ul class=\"chosen-choices\">\n <li class=\"search-field\">\n <input class=\"chosen-search-input\" type=\"text\" autocomplete=\"off\" value=\"" + this.default_text + "\" />\n </li>\n</ul>\n<div class=\"chosen-drop\">\n <ul class=\"chosen-results\"></ul>\n</div>";
592 };
593
594 AbstractChosen.prototype.get_no_results_html = function(terms) {
595 return "<li class=\"no-results\">\n " + this.results_none_found + " <span>" + (this.escape_html(terms)) + "</span>\n</li>";
596 };
597
598 AbstractChosen.browser_is_supported = function() {
599 if ("Microsoft Internet Explorer" === window.navigator.appName) {
600 return document.documentMode >= 8;
601 }
602 if (/iP(od|hone)/i.test(window.navigator.userAgent) || /IEMobile/i.test(window.navigator.userAgent) || /Windows Phone/i.test(window.navigator.userAgent) || /BlackBerry/i.test(window.navigator.userAgent) || /BB10/i.test(window.navigator.userAgent) || /Android.*Mobile/i.test(window.navigator.userAgent)) {
603 return false;
604 }
605 return true;
606 };
607
608 AbstractChosen.default_multiple_text = "Select Some Options";
609
610 AbstractChosen.default_single_text = "Select an Option";
611
612 AbstractChosen.default_no_result_text = "No results match";
613
614 return AbstractChosen;
615
616 })();
617
618 $ = jQuery;
619
620 $.fn.extend({
621 chosen: function(options) {
622 if (!AbstractChosen.browser_is_supported()) {
623 return this;
624 }
625 return this.each(function(input_field) {
626 var $this, chosen;
627 $this = $(this);
628 chosen = $this.data('chosen');
629 if (options === 'destroy') {
630 if (chosen instanceof Chosen) {
631 chosen.destroy();
632 }
633 return;
634 }
635 if (!(chosen instanceof Chosen)) {
636 $this.data('chosen', new Chosen(this, options));
637 }
638 });
639 }
640 });
641
642 Chosen = (function(superClass) {
643 extend(Chosen, superClass);
644
645 function Chosen() {
646 return Chosen.__super__.constructor.apply(this, arguments);
647 }
648
649 Chosen.prototype.setup = function() {
650 this.form_field_jq = $(this.form_field);
651 return this.current_selectedIndex = this.form_field.selectedIndex;
652 };
653
654 Chosen.prototype.set_up_html = function() {
655 var container_classes, container_props;
656 container_classes = ["chosen-container"];
657 container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single"));
658 if (this.inherit_select_classes && this.form_field.className) {
659 container_classes.push(this.form_field.className);
660 }
661 if (this.is_rtl) {
662 container_classes.push("chosen-rtl");
663 }
664 container_props = {
665 'class': container_classes.join(' '),
666 'title': this.form_field.title
667 };
668 if (this.form_field.id.length) {
669 container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen";
670 }
671 this.container = $("<div />", container_props);
672 this.container.width(this.container_width());
673 if (this.is_multiple) {
674 this.container.html(this.get_multi_html());
675 } else {
676 this.container.html(this.get_single_html());
677 }
678 this.form_field_jq.hide().after(this.container);
679 this.dropdown = this.container.find('div.chosen-drop').first();
680 this.search_field = this.container.find('input').first();
681 this.search_results = this.container.find('ul.chosen-results').first();
682 this.search_field_scale();
683 this.search_no_results = this.container.find('li.no-results').first();
684 if (this.is_multiple) {
685 this.search_choices = this.container.find('ul.chosen-choices').first();
686 this.search_container = this.container.find('li.search-field').first();
687 } else {
688 this.search_container = this.container.find('div.chosen-search').first();
689 this.selected_item = this.container.find('.chosen-single').first();
690 }
691 this.results_build();
692 this.set_tab_index();
693 return this.set_label_behavior();
694 };
695
696 Chosen.prototype.on_ready = function() {
697 return this.form_field_jq.trigger("chosen:ready", {
698 chosen: this
699 });
700 };
701
702 Chosen.prototype.register_observers = function() {
703 this.container.on('touchstart.chosen', (function(_this) {
704 return function(evt) {
705 _this.container_mousedown(evt);
706 };
707 })(this));
708 this.container.on('touchend.chosen', (function(_this) {
709 return function(evt) {
710 _this.container_mouseup(evt);
711 };
712 })(this));
713 this.container.on('mousedown.chosen', (function(_this) {
714 return function(evt) {
715 _this.container_mousedown(evt);
716 };
717 })(this));
718 this.container.on('mouseup.chosen', (function(_this) {
719 return function(evt) {
720 _this.container_mouseup(evt);
721 };
722 })(this));
723 this.container.on('mouseenter.chosen', (function(_this) {
724 return function(evt) {
725 _this.mouse_enter(evt);
726 };
727 })(this));
728 this.container.on('mouseleave.chosen', (function(_this) {
729 return function(evt) {
730 _this.mouse_leave(evt);
731 };
732 })(this));
733 this.search_results.on('mouseup.chosen', (function(_this) {
734 return function(evt) {
735 _this.search_results_mouseup(evt);
736 };
737 })(this));
738 this.search_results.on('mouseover.chosen', (function(_this) {
739 return function(evt) {
740 _this.search_results_mouseover(evt);
741 };
742 })(this));
743 this.search_results.on('mouseout.chosen', (function(_this) {
744 return function(evt) {
745 _this.search_results_mouseout(evt);
746 };
747 })(this));
748 this.search_results.on('mousewheel.chosen DOMMouseScroll.chosen', (function(_this) {
749 return function(evt) {
750 _this.search_results_mousewheel(evt);
751 };
752 })(this));
753 this.search_results.on('touchstart.chosen', (function(_this) {
754 return function(evt) {
755 _this.search_results_touchstart(evt);
756 };
757 })(this));
758 this.search_results.on('touchmove.chosen', (function(_this) {
759 return function(evt) {
760 _this.search_results_touchmove(evt);
761 };
762 })(this));
763 this.search_results.on('touchend.chosen', (function(_this) {
764 return function(evt) {
765 _this.search_results_touchend(evt);
766 };
767 })(this));
768 this.form_field_jq.on("chosen:updated.chosen", (function(_this) {
769 return function(evt) {
770 _this.results_update_field(evt);
771 };
772 })(this));
773 this.form_field_jq.on("chosen:activate.chosen", (function(_this) {
774 return function(evt) {
775 _this.activate_field(evt);
776 };
777 })(this));
778 this.form_field_jq.on("chosen:open.chosen", (function(_this) {
779 return function(evt) {
780 _this.container_mousedown(evt);
781 };
782 })(this));
783 this.form_field_jq.on("chosen:close.chosen", (function(_this) {
784 return function(evt) {
785 _this.close_field(evt);
786 };
787 })(this));
788 this.search_field.on('blur.chosen', (function(_this) {
789 return function(evt) {
790 _this.input_blur(evt);
791 };
792 })(this));
793 this.search_field.on('keyup.chosen', (function(_this) {
794 return function(evt) {
795 _this.keyup_checker(evt);
796 };
797 })(this));
798 this.search_field.on('keydown.chosen', (function(_this) {
799 return function(evt) {
800 _this.keydown_checker(evt);
801 };
802 })(this));
803 this.search_field.on('focus.chosen', (function(_this) {
804 return function(evt) {
805 _this.input_focus(evt);
806 };
807 })(this));
808 this.search_field.on('cut.chosen', (function(_this) {
809 return function(evt) {
810 _this.clipboard_event_checker(evt);
811 };
812 })(this));
813 this.search_field.on('paste.chosen', (function(_this) {
814 return function(evt) {
815 _this.clipboard_event_checker(evt);
816 };
817 })(this));
818 if (this.is_multiple) {
819 return this.search_choices.on('click.chosen', (function(_this) {
820 return function(evt) {
821 _this.choices_click(evt);
822 };
823 })(this));
824 } else {
825 return this.container.on('click.chosen', function(evt) {
826 evt.preventDefault();
827 });
828 }
829 };
830
831 Chosen.prototype.destroy = function() {
832 $(this.container[0].ownerDocument).off('click.chosen', this.click_test_action);
833 if (this.form_field_label.length > 0) {
834 this.form_field_label.off('click.chosen');
835 }
836 if (this.search_field[0].tabIndex) {
837 this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;
838 }
839 this.container.remove();
840 this.form_field_jq.removeData('chosen');
841 return this.form_field_jq.show();
842 };
843
844 Chosen.prototype.search_field_disabled = function() {
845 this.is_disabled = this.form_field.disabled || this.form_field_jq.parents('fieldset').is(':disabled');
846 this.container.toggleClass('chosen-disabled', this.is_disabled);
847 this.search_field[0].disabled = this.is_disabled;
848 if (!this.is_multiple) {
849 this.selected_item.off('focus.chosen', this.activate_field);
850 }
851 if (this.is_disabled) {
852 return this.close_field();
853 } else if (!this.is_multiple) {
854 return this.selected_item.on('focus.chosen', this.activate_field);
855 }
856 };
857
858 Chosen.prototype.container_mousedown = function(evt) {
859 var ref;
860 if (this.is_disabled) {
861 return;
862 }
863 if (evt && ((ref = evt.type) === 'mousedown' || ref === 'touchstart') && !this.results_showing) {
864 evt.preventDefault();
865 }
866 if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) {
867 if (!this.active_field) {
868 if (this.is_multiple) {
869 this.search_field.val("");
870 }
871 $(this.container[0].ownerDocument).on('click.chosen', this.click_test_action);
872 this.results_show();
873 } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) {
874 evt.preventDefault();
875 this.results_toggle();
876 }
877 return this.activate_field();
878 }
879 };
880
881 Chosen.prototype.container_mouseup = function(evt) {
882 if (evt.target.nodeName === "ABBR" && !this.is_disabled) {
883 return this.results_reset(evt);
884 }
885 };
886
887 Chosen.prototype.search_results_mousewheel = function(evt) {
888 var delta;
889 if (evt.originalEvent) {
890 delta = evt.originalEvent.deltaY || -evt.originalEvent.wheelDelta || evt.originalEvent.detail;
891 }
892 if (delta != null) {
893 evt.preventDefault();
894 if (evt.type === 'DOMMouseScroll') {
895 delta = delta * 40;
896 }
897 return this.search_results.scrollTop(delta + this.search_results.scrollTop());
898 }
899 };
900
901 Chosen.prototype.blur_test = function(evt) {
902 if (!this.active_field && this.container.hasClass("chosen-container-active")) {
903 return this.close_field();
904 }
905 };
906
907 Chosen.prototype.close_field = function() {
908 $(this.container[0].ownerDocument).off("click.chosen", this.click_test_action);
909 this.active_field = false;
910 this.results_hide();
911 this.container.removeClass("chosen-container-active");
912 this.clear_backstroke();
913 this.show_search_field_default();
914 this.search_field_scale();
915 return this.search_field.blur();
916 };
917
918 Chosen.prototype.activate_field = function() {
919 if (this.is_disabled) {
920 return;
921 }
922 this.container.addClass("chosen-container-active");
923 this.active_field = true;
924 this.search_field.val(this.search_field.val());
925 return this.search_field.focus();
926 };
927
928 Chosen.prototype.test_active_click = function(evt) {
929 var active_container;
930 active_container = $(evt.target).closest('.chosen-container');
931 if (active_container.length && this.container[0] === active_container[0]) {
932 return this.active_field = true;
933 } else {
934 return this.close_field();
935 }
936 };
937
938 Chosen.prototype.results_build = function() {
939 this.parsing = true;
940 this.selected_option_count = null;
941 this.results_data = SelectParser.select_to_array(this.form_field);
942 if (this.is_multiple) {
943 this.search_choices.find("li.search-choice").remove();
944 } else if (!this.is_multiple) {
945 this.single_set_selected_text();
946 if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {
947 this.search_field[0].readOnly = true;
948 this.container.addClass("chosen-container-single-nosearch");
949 } else {
950 this.search_field[0].readOnly = false;
951 this.container.removeClass("chosen-container-single-nosearch");
952 }
953 }
954 this.update_results_content(this.results_option_build({
955 first: true
956 }));
957 this.search_field_disabled();
958 this.show_search_field_default();
959 this.search_field_scale();
960 return this.parsing = false;
961 };
962
963 Chosen.prototype.result_do_highlight = function(el) {
964 var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
965 if (el.length) {
966 this.result_clear_highlight();
967 this.result_highlight = el;
968 this.result_highlight.addClass("highlighted");
969 maxHeight = parseInt(this.search_results.css("maxHeight"), 10);
970 visible_top = this.search_results.scrollTop();
971 visible_bottom = maxHeight + visible_top;
972 high_top = this.result_highlight.position().top + this.search_results.scrollTop();
973 high_bottom = high_top + this.result_highlight.outerHeight();
974 if (high_bottom >= visible_bottom) {
975 return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);
976 } else if (high_top < visible_top) {
977 return this.search_results.scrollTop(high_top);
978 }
979 }
980 };
981
982 Chosen.prototype.result_clear_highlight = function() {
983 if (this.result_highlight) {
984 this.result_highlight.removeClass("highlighted");
985 }
986 return this.result_highlight = null;
987 };
988
989 Chosen.prototype.results_show = function() {
990 if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
991 this.form_field_jq.trigger("chosen:maxselected", {
992 chosen: this
993 });
994 return false;
995 }
996 this.container.addClass("chosen-with-drop");
997 this.results_showing = true;
998 this.search_field.focus();
999 this.search_field.val(this.get_search_field_value());
1000 this.winnow_results();
1001 return this.form_field_jq.trigger("chosen:showing_dropdown", {
1002 chosen: this
1003 });
1004 };
1005
1006 Chosen.prototype.update_results_content = function(content) {
1007 return this.search_results.html(content);
1008 };
1009
1010 Chosen.prototype.results_hide = function() {
1011 if (this.results_showing) {
1012 this.result_clear_highlight();
1013 this.container.removeClass("chosen-with-drop");
1014 this.form_field_jq.trigger("chosen:hiding_dropdown", {
1015 chosen: this
1016 });
1017 }
1018 return this.results_showing = false;
1019 };
1020
1021 Chosen.prototype.set_tab_index = function(el) {
1022 var ti;
1023 if (this.form_field.tabIndex) {
1024 ti = this.form_field.tabIndex;
1025 this.form_field.tabIndex = -1;
1026 return this.search_field[0].tabIndex = ti;
1027 }
1028 };
1029
1030 Chosen.prototype.set_label_behavior = function() {
1031 this.form_field_label = this.form_field_jq.parents("label");
1032 if (!this.form_field_label.length && this.form_field.id.length) {
1033 this.form_field_label = $("label[for='" + this.form_field.id + "']");
1034 }
1035 if (this.form_field_label.length > 0) {
1036 return this.form_field_label.on('click.chosen', this.label_click_handler);
1037 }
1038 };
1039
1040 Chosen.prototype.show_search_field_default = function() {
1041 if (this.is_multiple && this.choices_count() < 1 && !this.active_field) {
1042 this.search_field.val(this.default_text);
1043 return this.search_field.addClass("default");
1044 } else {
1045 this.search_field.val("");
1046 return this.search_field.removeClass("default");
1047 }
1048 };
1049
1050 Chosen.prototype.search_results_mouseup = function(evt) {
1051 var target;
1052 target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
1053 if (target.length) {
1054 this.result_highlight = target;
1055 this.result_select(evt);
1056 return this.search_field.focus();
1057 }
1058 };
1059
1060 Chosen.prototype.search_results_mouseover = function(evt) {
1061 var target;
1062 target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
1063 if (target) {
1064 return this.result_do_highlight(target);
1065 }
1066 };
1067
1068 Chosen.prototype.search_results_mouseout = function(evt) {
1069 if ($(evt.target).hasClass("active-result") || $(evt.target).parents('.active-result').first()) {
1070 return this.result_clear_highlight();
1071 }
1072 };
1073
1074 Chosen.prototype.choice_build = function(item) {
1075 var choice, close_link;
1076 choice = $('<li />', {
1077 "class": "search-choice"
1078 }).html("<span>" + (this.choice_label(item)) + "</span>");
1079 if (item.disabled) {
1080 choice.addClass('search-choice-disabled');
1081 } else {
1082 close_link = $('<a />', {
1083 "class": 'search-choice-close',
1084 'data-option-array-index': item.array_index
1085 });
1086 close_link.on('click.chosen', (function(_this) {
1087 return function(evt) {
1088 return _this.choice_destroy_link_click(evt);
1089 };
1090 })(this));
1091 choice.append(close_link);
1092 }
1093 return this.search_container.before(choice);
1094 };
1095
1096 Chosen.prototype.choice_destroy_link_click = function(evt) {
1097 evt.preventDefault();
1098 evt.stopPropagation();
1099 if (!this.is_disabled) {
1100 return this.choice_destroy($(evt.target));
1101 }
1102 };
1103
1104 Chosen.prototype.choice_destroy = function(link) {
1105 if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) {
1106 if (this.active_field) {
1107 this.search_field.focus();
1108 } else {
1109 this.show_search_field_default();
1110 }
1111 if (this.is_multiple && this.choices_count() > 0 && this.get_search_field_value().length < 1) {
1112 this.results_hide();
1113 }
1114 link.parents('li').first().remove();
1115 return this.search_field_scale();
1116 }
1117 };
1118
1119 Chosen.prototype.results_reset = function() {
1120 this.reset_single_select_options();
1121 this.form_field.options[0].selected = true;
1122 this.single_set_selected_text();
1123 this.show_search_field_default();
1124 this.results_reset_cleanup();
1125 this.trigger_form_field_change();
1126 if (this.active_field) {
1127 return this.results_hide();
1128 }
1129 };
1130
1131 Chosen.prototype.results_reset_cleanup = function() {
1132 this.current_selectedIndex = this.form_field.selectedIndex;
1133 return this.selected_item.find("abbr").remove();
1134 };
1135
1136 Chosen.prototype.result_select = function(evt) {
1137 var high, item;
1138 if (this.result_highlight) {
1139 high = this.result_highlight;
1140 this.result_clear_highlight();
1141 if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
1142 this.form_field_jq.trigger("chosen:maxselected", {
1143 chosen: this
1144 });
1145 return false;
1146 }
1147 if (this.is_multiple) {
1148 high.removeClass("active-result");
1149 } else {
1150 this.reset_single_select_options();
1151 }
1152 high.addClass("result-selected");
1153 item = this.results_data[high[0].getAttribute("data-option-array-index")];
1154 item.selected = true;
1155 this.form_field.options[item.options_index].selected = true;
1156 this.selected_option_count = null;
1157 this.search_field.val("");
1158 if (this.is_multiple) {
1159 this.choice_build(item);
1160 } else {
1161 this.single_set_selected_text(this.choice_label(item));
1162 }
1163 if (this.is_multiple && (!this.hide_results_on_select || (evt.metaKey || evt.ctrlKey))) {
1164 this.winnow_results();
1165 } else {
1166 this.results_hide();
1167 this.show_search_field_default();
1168 }
1169 if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {
1170 this.trigger_form_field_change({
1171 selected: this.form_field.options[item.options_index].value
1172 });
1173 }
1174 this.current_selectedIndex = this.form_field.selectedIndex;
1175 evt.preventDefault();
1176 return this.search_field_scale();
1177 }
1178 };
1179
1180 Chosen.prototype.single_set_selected_text = function(text) {
1181 if (text == null) {
1182 text = this.default_text;
1183 }
1184 if (text === this.default_text) {
1185 this.selected_item.addClass("chosen-default");
1186 } else {
1187 this.single_deselect_control_build();
1188 this.selected_item.removeClass("chosen-default");
1189 }
1190 return this.selected_item.find("span").html(text);
1191 };
1192
1193 Chosen.prototype.result_deselect = function(pos) {
1194 var result_data;
1195 result_data = this.results_data[pos];
1196 if (!this.form_field.options[result_data.options_index].disabled) {
1197 result_data.selected = false;
1198 this.form_field.options[result_data.options_index].selected = false;
1199 this.selected_option_count = null;
1200 this.result_clear_highlight();
1201 if (this.results_showing) {
1202 this.winnow_results();
1203 }
1204 this.trigger_form_field_change({
1205 deselected: this.form_field.options[result_data.options_index].value
1206 });
1207 this.search_field_scale();
1208 return true;
1209 } else {
1210 return false;
1211 }
1212 };
1213
1214 Chosen.prototype.single_deselect_control_build = function() {
1215 if (!this.allow_single_deselect) {
1216 return;
1217 }
1218 if (!this.selected_item.find("abbr").length) {
1219 this.selected_item.find("span").first().after("<abbr class=\"search-choice-close\"></abbr>");
1220 }
1221 return this.selected_item.addClass("chosen-single-with-deselect");
1222 };
1223
1224 Chosen.prototype.get_search_field_value = function() {
1225 return this.search_field.val();
1226 };
1227
1228 Chosen.prototype.get_search_text = function() {
1229 return $.trim(this.get_search_field_value());
1230 };
1231
1232 Chosen.prototype.escape_html = function(text) {
1233 return $('<div/>').text(text).html();
1234 };
1235
1236 Chosen.prototype.winnow_results_set_highlight = function() {
1237 var do_high, selected_results;
1238 selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : [];
1239 do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first();
1240 if (do_high != null) {
1241 return this.result_do_highlight(do_high);
1242 }
1243 };
1244
1245 Chosen.prototype.no_results = function(terms) {
1246 var no_results_html;
1247 no_results_html = this.get_no_results_html(terms);
1248 this.search_results.append(no_results_html);
1249 return this.form_field_jq.trigger("chosen:no_results", {
1250 chosen: this
1251 });
1252 };
1253
1254 Chosen.prototype.no_results_clear = function() {
1255 return this.search_results.find(".no-results").remove();
1256 };
1257
1258 Chosen.prototype.keydown_arrow = function() {
1259 var next_sib;
1260 if (this.results_showing && this.result_highlight) {
1261 next_sib = this.result_highlight.nextAll("li.active-result").first();
1262 if (next_sib) {
1263 return this.result_do_highlight(next_sib);
1264 }
1265 } else {
1266 return this.results_show();
1267 }
1268 };
1269
1270 Chosen.prototype.keyup_arrow = function() {
1271 var prev_sibs;
1272 if (!this.results_showing && !this.is_multiple) {
1273 return this.results_show();
1274 } else if (this.result_highlight) {
1275 prev_sibs = this.result_highlight.prevAll("li.active-result");
1276 if (prev_sibs.length) {
1277 return this.result_do_highlight(prev_sibs.first());
1278 } else {
1279 if (this.choices_count() > 0) {
1280 this.results_hide();
1281 }
1282 return this.result_clear_highlight();
1283 }
1284 }
1285 };
1286
1287 Chosen.prototype.keydown_backstroke = function() {
1288 var next_available_destroy;
1289 if (this.pending_backstroke) {
1290 this.choice_destroy(this.pending_backstroke.find("a").first());
1291 return this.clear_backstroke();
1292 } else {
1293 next_available_destroy = this.search_container.siblings("li.search-choice").last();
1294 if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) {
1295 this.pending_backstroke = next_available_destroy;
1296 if (this.single_backstroke_delete) {
1297 return this.keydown_backstroke();
1298 } else {
1299 return this.pending_backstroke.addClass("search-choice-focus");
1300 }
1301 }
1302 }
1303 };
1304
1305 Chosen.prototype.clear_backstroke = function() {
1306 if (this.pending_backstroke) {
1307 this.pending_backstroke.removeClass("search-choice-focus");
1308 }
1309 return this.pending_backstroke = null;
1310 };
1311
1312 Chosen.prototype.search_field_scale = function() {
1313 var div, i, len, style, style_block, styles, width;
1314 if (!this.is_multiple) {
1315 return;
1316 }
1317 style_block = {
1318 position: 'absolute',
1319 left: '-1000px',
1320 top: '-1000px',
1321 display: 'none',
1322 whiteSpace: 'pre'
1323 };
1324 styles = ['fontSize', 'fontStyle', 'fontWeight', 'fontFamily', 'lineHeight', 'textTransform', 'letterSpacing'];
1325 for (i = 0, len = styles.length; i < len; i++) {
1326 style = styles[i];
1327 style_block[style] = this.search_field.css(style);
1328 }
1329 div = $('<div />').css(style_block);
1330 div.text(this.get_search_field_value());
1331 $('body').append(div);
1332 width = div.width() + 25;
1333 div.remove();
1334 if (this.container.is(':visible')) {
1335 width = Math.min(this.container.outerWidth() - 10, width);
1336 }
1337 return this.search_field.width(width);
1338 };
1339
1340 Chosen.prototype.trigger_form_field_change = function(extra) {
1341 this.form_field_jq.trigger("input", extra);
1342 return this.form_field_jq.trigger("change", extra);
1343 };
1344
1345 return Chosen;
1346
1347 })(AbstractChosen);
1348
1349 }).call(this);