PageSourceSearch

https://fxboss.firstcitizens.com/app/assets/widgets/chosen/chosen.js?v=9.0.2

js firstcitizens.com collected 2026-09-24 21:50:55 UTC 50,140 bytes, 1,211 lines download raw bytes

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

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.