PageSourceSearch

https://toner-pro.ru/bitrix/templates/katr_index/js/chosen.jquery.js

js toner-pro.ru collected 2026-10-05 05:41:32 UTC 42,443 bytes, 1,211 lines download raw bytes

vendor: 4,365 bytes, lines 1-139
1/*!
2Chosen, a Select Box Enhancer for jQuery and Prototype
3by Patrick Filler for Harvest, http://getharvest.com
4
5Version 1.1.0
6Full source at https://github.com/harvesthq/chosen
7Copyright (c) 2011 Harvest http://getharvest.com
8
9MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
10This 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() {
vendor: 5,432 bytes, lines 312-461
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() {
vendor: 23,751 bytes, lines 558-1211
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><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>');
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;
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": 'search-choice-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.