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