/*! Chosen, a Select Box Enhancer for jQuery and Prototype by Patrick Filler for Harvest, http://getharvest.com Version 1.3.0 Full source at https://github.com/harvesthq/chosen Copyright ( c ) 2011-2014 Harvest http://getharvest.com MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md This file is generated by `grunt build`, do not edit it by hand. */ ( function() { var $, AbstractChosen, Chosen, SelectParser, _ref, __hasProp = {}.hasOwnProperty, __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; }; SelectParser = ( function() { function SelectParser() { this.options_index = 0; this.parsed = []; } SelectParser.prototype.add_node = function( child ) { if ( child.nodeName.toUpperCase() === "OPTGROUP" ) { return this.add_group( child ); } else { return this.add_option( child ); } }; SelectParser.prototype.add_group = function( group ) { var group_position, option, _i, _len, _ref, _results; group_position = this.parsed.length; this.parsed.push( { array_index: group_position, group: true, label: this.escapeExpression( group.label ), children: 0, disabled: group.disabled, classes: group.className } ); _ref = group.childNodes; _results = []; for ( _i = 0, _len = _ref.length; _i < _len; _i++ ) { option = _ref[_i]; _results.push( this.add_option( option, group_position, group.disabled ) ); } return _results; }; SelectParser.prototype.add_option = function( option, group_position, group_disabled ) { if ( option.nodeName.toUpperCase() === "OPTION" ) { if ( option.text !== "" ) { if ( group_position != null ) { this.parsed[group_position].children += 1; } this.parsed.push( { array_index: this.parsed.length, options_index: this.options_index, value: option.value, text: option.text, html: option.innerHTML, selected: option.selected, disabled: group_disabled === true ? group_disabled : option.disabled, group_array_index: group_position, classes: option.className, style: option.style.cssText } ); } else { this.parsed.push( { array_index: this.parsed.length, options_index: this.options_index, empty: true } ); } return this.options_index += 1; } }; SelectParser.prototype.escapeExpression = function( text ) { var map, unsafe_chars; if ( ( text == null ) || text === false ) { return ""; } if ( !/[\&\<\>\"\'\`]/.test( text ) ) { return text; } map = { "<": "<", ">": ">", '"': """, "'": "'", "`": "`" }; unsafe_chars = /&( ?!\w+; )|[\<\>\"\'\`]/g; return text.replace( unsafe_chars, function( chr ) { return map[chr] || "&"; } ); }; return SelectParser; } )(); SelectParser.select_to_array = function( select ) { var child, parser, _i, _len, _ref; parser = new SelectParser(); _ref = select.childNodes; for ( _i = 0, _len = _ref.length; _i < _len; _i++ ) { child = _ref[_i]; parser.add_node( child ); } return parser.parsed; }; AbstractChosen = ( function() { function AbstractChosen( form_field, options ) { this.form_field = form_field; this.options = options != null ? options : {}; if ( !AbstractChosen.browser_is_supported() ) { return; } this.is_multiple = this.form_field.multiple; this.set_default_text(); this.set_default_values(); this.setup(); this.set_up_html(); this.register_observers(); this.on_ready(); } AbstractChosen.prototype.set_default_values = function() { var _this = this; this.click_test_action = function( evt ) { return _this.test_active_click( evt ); }; this.activate_action = function( evt ) { return _this.activate_field( evt ); }; this.active_field = false; this.mouse_on_container = false; this.results_showing = false; this.result_highlighted = null; 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; this.disable_search_threshold = this.options.disable_search_threshold || 0; this.disable_search = this.options.disable_search || false; this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true; this.group_search = this.options.group_search != null ? this.options.group_search : true; this.search_contains = this.options.search_contains || false; this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true; this.max_selected_options = this.options.max_selected_options || Infinity; this.inherit_select_classes = this.options.inherit_select_classes || false; this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true; return this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true; }; AbstractChosen.prototype.set_default_text = function() { if ( this.form_field.getAttribute( "data-placeholder" ) ) { this.default_text = this.form_field.getAttribute( "data-placeholder" ); } else if ( this.is_multiple ) { this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text; } else { this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text; } return this.results_none_found = this.form_field.getAttribute( "data-no_results_text" ) || this.options.no_results_text || AbstractChosen.default_no_result_text; }; AbstractChosen.prototype.mouse_enter = function() { return this.mouse_on_container = true; }; AbstractChosen.prototype.mouse_leave = function() { return this.mouse_on_container = false; }; AbstractChosen.prototype.input_focus = function( evt ) { var _this = this; if ( this.is_multiple ) { if ( !this.active_field ) { return setTimeout( ( function() { return _this.container_mousedown(); } ), 50 ); } } else { if ( !this.active_field ) { return this.activate_field(); } } }; AbstractChosen.prototype.input_blur = function( evt ) { var _this = this; if ( !this.mouse_on_container ) { this.active_field = false; return setTimeout( ( function() { return _this.blur_test(); } ), 100 ); } }; AbstractChosen.prototype.results_option_build = function( options ) { var content, data, _i, _len, _ref; content = ''; _ref = this.results_data; for ( _i = 0, _len = _ref.length; _i < _len; _i++ ) { data = _ref[_i]; if ( data.group ) { content += this.result_add_group( data ); } else { content += this.result_add_option( data ); } if ( options != null ? options.first : void 0 ) { if ( data.selected && this.is_multiple ) { this.choice_build( data ); } else if ( data.selected && !this.is_multiple ) { this.single_set_selected_text( data.text ); } } } return content; }; AbstractChosen.prototype.result_add_option = function( option ) { var classes, option_el; if ( !option.search_match ) { return ''; } if ( !this.include_option_in_results( option ) ) { return ''; } classes = []; if ( !option.disabled && !( option.selected && this.is_multiple ) ) { classes.push( "active-result" ); } if ( option.disabled && !( option.selected && this.is_multiple ) ) { classes.push( "disabled-result" ); } if ( option.selected ) { classes.push( "result-selected" ); } if ( option.group_array_index != null ) { classes.push( "group-option" ); } if ( option.classes !== "" ) { classes.push( option.classes ); } option_el = document.createElement( "li" ); option_el.className = classes.join( " " ); option_el.style.cssText = option.style; option_el.setAttribute( "data-option-array-index", option.array_index ); option_el.innerHTML = option.search_text; return this.outerHTML( option_el ); }; AbstractChosen.prototype.result_add_group = function( group ) { var classes, group_el; if ( !( group.search_match || group.group_match ) ) { return ''; } if ( !( group.active_options > 0 ) ) { return ''; } classes = []; classes.push( "group-result" ); if ( group.classes ) { classes.push( group.classes ); } group_el = document.createElement( "li" ); group_el.className = classes.join( " " ); group_el.innerHTML = group.search_text; return this.outerHTML( group_el ); }; AbstractChosen.prototype.results_update_field = function() { this.set_default_text(); if ( !this.is_multiple ) { this.results_reset_cleanup(); } this.result_clear_highlight(); this.results_build(); if ( this.results_showing ) { return this.winnow_results(); } }; AbstractChosen.prototype.reset_single_select_options = function() { var result, _i, _len, _ref, _results; _ref = this.results_data; _results = []; for ( _i = 0, _len = _ref.length; _i < _len; _i++ ) { result = _ref[_i]; if ( result.selected ) { _results.push( result.selected = false ); } else { _results.push( void 0 ); } } return _results; }; AbstractChosen.prototype.results_toggle = function() { if ( this.results_showing ) { return this.results_hide(); } else { return this.results_show(); } }; AbstractChosen.prototype.results_search = function( evt ) { if ( this.results_showing ) { return this.winnow_results(); } else { return this.results_show(); } }; AbstractChosen.prototype.winnow_results = function() { var escapedSearchText, option, regex, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref; this.no_results_clear(); results = 0; searchText = this.get_search_text(); escapedSearchText = searchText.replace( /[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&" ); zregex = new RegExp( escapedSearchText, 'i' ); regex = this.get_search_regex( escapedSearchText ); _ref = this.results_data; for ( _i = 0, _len = _ref.length; _i < _len; _i++ ) { option = _ref[_i]; option.search_match = false; results_group = null; if ( this.include_option_in_results( option ) ) { if ( option.group ) { option.group_match = false; option.active_options = 0; } if ( ( option.group_array_index != null ) && this.results_data[option.group_array_index] ) { results_group = this.results_data[option.group_array_index]; if ( results_group.active_options === 0 && results_group.search_match ) { results += 1; } results_group.active_options += 1; } if ( !( option.group && !this.group_search ) ) { option.search_text = option.group ? option.label : option.text; option.search_match = this.search_string_match( option.search_text, regex ); if ( option.search_match && !option.group ) { results += 1; } if ( option.search_match ) { if ( searchText.length ) { startpos = option.search_text.search( zregex ); text = option.search_text.substr( 0, startpos + searchText.length ) + '' + option.search_text.substr( startpos + searchText.length ); option.search_text = text.substr( 0, startpos ) + '' + text.substr( startpos ); } if ( results_group != null ) { results_group.group_match = true; } } else if ( ( option.group_array_index != null ) && this.results_data[option.group_array_index].search_match ) { option.search_match = true; } } } } this.result_clear_highlight(); if ( results < 1 && searchText.length ) { this.update_results_content( "" ); return this.no_results( searchText ); } else { this.update_results_content( this.results_option_build() ); return this.winnow_results_set_highlight(); } }; AbstractChosen.prototype.get_search_regex = function( escaped_search_string ) { var regex_anchor; regex_anchor = this.search_contains ? "" : "^"; return new RegExp( regex_anchor + escaped_search_string, 'i' ); }; AbstractChosen.prototype.search_string_match = function( search_string, regex ) { var part, parts, _i, _len; if ( regex.test( search_string ) ) { return true; } else if ( this.enable_split_word_search && ( search_string.indexOf( " " ) >= 0 || search_string.indexOf( "[" ) === 0 ) ) { parts = search_string.replace( /\[|\]/g, "" ).split( " " ); if ( parts.length ) { for ( _i = 0, _len = parts.length; _i < _len; _i++ ) { part = parts[_i]; if ( regex.test( part ) ) { return true; } } } } }; AbstractChosen.prototype.choices_count = function() { var option, _i, _len, _ref; if ( this.selected_option_count != null ) { return this.selected_option_count; } this.selected_option_count = 0; _ref = this.form_field.options; for ( _i = 0, _len = _ref.length; _i < _len; _i++ ) { option = _ref[_i]; if ( option.selected ) { this.selected_option_count += 1; } } return this.selected_option_count; }; AbstractChosen.prototype.choices_click = function( evt ) { evt.preventDefault(); if ( !( this.results_showing || this.is_disabled ) ) { return this.results_show(); } }; AbstractChosen.prototype.keyup_checker = function( evt ) { var stroke, _ref; stroke = ( _ref = evt.which ) != null ? _ref : evt.keyCode; this.search_field_scale(); switch ( stroke ) { case 8: if ( this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0 ) { return this.keydown_backstroke(); } else if ( !this.pending_backstroke ) { this.result_clear_highlight(); return this.results_search(); } break; case 13: evt.preventDefault(); if ( this.results_showing ) { return this.result_select( evt ); } break; case 27: if ( this.results_showing ) { this.results_hide(); } return true; case 9: case 38: case 40: case 16: case 91: case 17: break; default: return this.results_search(); } }; AbstractChosen.prototype.clipboard_event_checker = function( evt ) { var _this = this; return setTimeout( ( function() { return _this.results_search(); } ), 50 ); }; AbstractChosen.prototype.container_width = function() { if ( this.options.width != null ) { return this.options.width; } else { return "" + this.form_field.offsetWidth + "px"; } }; AbstractChosen.prototype.include_option_in_results = function( option ) { if ( this.is_multiple && ( !this.display_selected_options && option.selected ) ) { return false; } if ( !this.display_disabled_options && option.disabled ) { return false; } if ( option.empty ) { return false; } return true; }; AbstractChosen.prototype.search_results_touchstart = function( evt ) { this.touch_started = true; return this.search_results_mouseover( evt ); }; AbstractChosen.prototype.search_results_touchmove = function( evt ) { this.touch_started = false; return this.search_results_mouseout( evt ); }; AbstractChosen.prototype.search_results_touchend = function( evt ) { if ( this.touch_started ) { return this.search_results_mouseup( evt ); } }; AbstractChosen.prototype.outerHTML = function( element ) { var tmp; if ( element.outerHTML ) { return element.outerHTML; } tmp = document.createElement( "div" ); tmp.appendChild( element ); return tmp.innerHTML; }; AbstractChosen.browser_is_supported = function() { if ( window.navigator.appName === "Microsoft Internet Explorer" ) { return document.documentMode >= 8; } if ( /iP( od|hone )/i.test( window.navigator.userAgent ) ) { return false; } if ( /Android/i.test( window.navigator.userAgent ) ) { if ( /Mobile/i.test( window.navigator.userAgent ) ) { return false; } } return true; }; AbstractChosen.default_multiple_text = "Select Some Options"; AbstractChosen.default_single_text = "Select an Option"; AbstractChosen.default_no_result_text = "No results match"; return AbstractChosen; } )(); $ = jQuery; $.fn.extend( { chosen: function( options ) { if ( !AbstractChosen.browser_is_supported() ) { return this; } return this.each( function( input_field ) { var $this, chosen; $this = $( this ); chosen = $this.data( 'chosen' ); if ( options === 'destroy' && chosen instanceof Chosen ) { chosen.destroy(); } else if ( !( chosen instanceof Chosen ) ) { $this.data( 'chosen', new Chosen( this, options ) ); } } ); } } ); Chosen = ( function( _super ) { __extends( Chosen, _super ); function Chosen() { _ref = Chosen.__super__.constructor.apply( this, arguments ); return _ref; } Chosen.prototype.setup = function() { this.form_field_jq = $( this.form_field ); this.current_selectedIndex = this.form_field.selectedIndex; return this.is_rtl = this.form_field_jq.hasClass( "chosen-rtl" ); }; Chosen.prototype.set_up_html = function() { var container_classes, container_props; container_classes = ["chosen-container"]; container_classes.push( "chosen-container-" + ( this.is_multiple ? "multi" : "single" ) ); if ( this.inherit_select_classes && this.form_field.className ) { container_classes.push( this.form_field.className ); } if ( this.is_rtl ) { container_classes.push( "chosen-rtl" ); } container_props = { 'class': container_classes.join( ' ' ), 'style': "width: " + ( this.container_width() ) + ";", 'title': this.form_field.title }; if ( this.form_field.id.length ) { container_props.id = this.form_field.id.replace( /[^\w]/g, '_' ) + "_chosen"; } this.container = $( "
", container_props ); if ( this.is_multiple ) { this.container.html( '
    ' ); } else { this.container.html( '' + this.default_text + '
      ' ); } this.form_field_jq.hide().after( this.container ); this.dropdown = this.container.find( 'div.chosen-drop' ).first(); this.search_field = this.container.find( 'input' ).first(); this.search_results = this.container.find( 'ul.chosen-results' ).first(); this.search_field_scale(); this.search_no_results = this.container.find( 'li.no-results' ).first(); if ( this.is_multiple ) { this.search_choices = this.container.find( 'ul.chosen-choices' ).first(); this.search_container = this.container.find( 'li.search-field' ).first(); } else { this.search_container = this.container.find( 'div.chosen-search' ).first(); this.selected_item = this.container.find( '.chosen-single' ).first(); } this.results_build(); this.set_tab_index(); return this.set_label_behavior(); }; Chosen.prototype.on_ready = function() { return this.form_field_jq.trigger( "chosen:ready", { chosen: this } ); }; Chosen.prototype.register_observers = function() { var _this = this; this.container.bind( 'touchstart.chosen', function( evt ) { _this.container_mousedown( evt ); } ); this.container.bind( 'touchend.chosen', function( evt ) { _this.container_mouseup( evt ); } ); this.container.bind( 'mousedown.chosen', function( evt ) { _this.container_mousedown( evt ); } ); this.container.bind( 'mouseup.chosen', function( evt ) { _this.container_mouseup( evt ); } ); this.container.bind( 'mouseenter.chosen', function( evt ) { _this.mouse_enter( evt ); } ); this.container.bind( 'mouseleave.chosen', function( evt ) { _this.mouse_leave( evt ); } ); this.search_results.bind( 'mouseup.chosen', function( evt ) { _this.search_results_mouseup( evt ); } ); this.search_results.bind( 'mouseover.chosen', function( evt ) { _this.search_results_mouseover( evt ); } ); this.search_results.bind( 'mouseout.chosen', function( evt ) { _this.search_results_mouseout( evt ); } ); this.search_results.bind( 'mousewheel.chosen DOMMouseScroll.chosen', function( evt ) { _this.search_results_mousewheel( evt ); } ); this.search_results.bind( 'touchstart.chosen', function( evt ) { _this.search_results_touchstart( evt ); } ); this.search_results.bind( 'touchmove.chosen', function( evt ) { _this.search_results_touchmove( evt ); } ); this.search_results.bind( 'touchend.chosen', function( evt ) { _this.search_results_touchend( evt ); } ); this.form_field_jq.bind( "chosen:updated.chosen", function( evt ) { _this.results_update_field( evt ); } ); this.form_field_jq.bind( "chosen:activate.chosen", function( evt ) { _this.activate_field( evt ); } ); this.form_field_jq.bind( "chosen:open.chosen", function( evt ) { _this.container_mousedown( evt ); } ); this.form_field_jq.bind( "chosen:close.chosen", function( evt ) { _this.input_blur( evt ); } ); this.search_field.bind( 'blur.chosen', function( evt ) { _this.input_blur( evt ); } ); this.search_field.bind( 'keyup.chosen', function( evt ) { _this.keyup_checker( evt ); } ); this.search_field.bind( 'keydown.chosen', function( evt ) { _this.keydown_checker( evt ); } ); this.search_field.bind( 'focus.chosen', function( evt ) { _this.input_focus( evt ); } ); this.search_field.bind( 'cut.chosen', function( evt ) { _this.clipboard_event_checker( evt ); } ); this.search_field.bind( 'paste.chosen', function( evt ) { _this.clipboard_event_checker( evt ); } ); if ( this.is_multiple ) { return this.search_choices.bind( 'click.chosen', function( evt ) { _this.choices_click( evt ); } ); } else { return this.container.bind( 'click.chosen', function( evt ) { evt.preventDefault(); } ); } }; Chosen.prototype.destroy = function() { $( this.container[0].ownerDocument ).unbind( "click.chosen", this.click_test_action ); if ( this.search_field[0].tabIndex ) { this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex; } this.container.remove(); this.form_field_jq.removeData( 'chosen' ); return this.form_field_jq.show(); }; Chosen.prototype.search_field_disabled = function() { this.is_disabled = this.form_field_jq[0].disabled; if ( this.is_disabled ) { this.container.addClass( 'chosen-disabled' ); this.search_field[0].disabled = true; if ( !this.is_multiple ) { this.selected_item.unbind( "focus.chosen", this.activate_action ); } return this.close_field(); } else { this.container.removeClass( 'chosen-disabled' ); this.search_field[0].disabled = false; if ( !this.is_multiple ) { return this.selected_item.bind( "focus.chosen", this.activate_action ); } } }; Chosen.prototype.container_mousedown = function( evt ) { if ( !this.is_disabled ) { if ( evt && evt.type === "mousedown" && !this.results_showing ) { evt.preventDefault(); } if ( !( ( evt != null ) && ( $( evt.target ) ).hasClass( "search-choice-close" ) ) ) { if ( !this.active_field ) { if ( this.is_multiple ) { this.search_field.val( "" ); } $( this.container[0].ownerDocument ).bind( 'click.chosen', this.click_test_action ); this.results_show(); } else if ( !this.is_multiple && evt && ( ( $( evt.target )[0] === this.selected_item[0] ) || $( evt.target ).parents( "a.chosen-single" ).length ) ) { evt.preventDefault(); this.results_toggle(); } return this.activate_field(); } } }; Chosen.prototype.container_mouseup = function( evt ) { if ( evt.target.nodeName === "ABBR" && !this.is_disabled ) { return this.results_reset( evt ); } }; Chosen.prototype.search_results_mousewheel = function( evt ) { var delta; if ( evt.originalEvent ) { delta = evt.originalEvent.deltaY || -evt.originalEvent.wheelDelta || evt.originalEvent.detail; } if ( delta != null ) { evt.preventDefault(); if ( evt.type === 'DOMMouseScroll' ) { delta = delta * 40; } return this.search_results.scrollTop( delta + this.search_results.scrollTop() ); } }; Chosen.prototype.blur_test = function( evt ) { if ( !this.active_field && this.container.hasClass( "chosen-container-active" ) ) { return this.close_field(); } }; Chosen.prototype.close_field = function() { $( this.container[0].ownerDocument ).unbind( "click.chosen", this.click_test_action ); this.active_field = false; this.results_hide(); this.container.removeClass( "chosen-container-active" ); this.clear_backstroke(); this.show_search_field_default(); return this.search_field_scale(); }; Chosen.prototype.activate_field = function() { this.container.addClass( "chosen-container-active" ); this.active_field = true; this.search_field.val( this.search_field.val() ); return this.search_field.focus(); }; Chosen.prototype.test_active_click = function( evt ) { var active_container; active_container = $( evt.target ).closest( '.chosen-container' ); if ( active_container.length && this.container[0] === active_container[0] ) { return this.active_field = true; } else { return this.close_field(); } }; Chosen.prototype.results_build = function() { this.parsing = true; this.selected_option_count = null; this.results_data = SelectParser.select_to_array( this.form_field ); if ( this.is_multiple ) { this.search_choices.find( "li.search-choice" ).remove(); } else if ( !this.is_multiple ) { this.single_set_selected_text(); if ( this.disable_search || this.form_field.options.length <= this.disable_search_threshold ) { this.search_field[0].readOnly = true; this.container.addClass( "chosen-container-single-nosearch" ); } else { this.search_field[0].readOnly = false; this.container.removeClass( "chosen-container-single-nosearch" ); } } this.update_results_content( this.results_option_build( { first: true } ) ); this.search_field_disabled(); this.show_search_field_default(); this.search_field_scale(); return this.parsing = false; }; Chosen.prototype.result_do_highlight = function( el ) { var high_bottom, high_top, maxHeight, visible_bottom, visible_top; if ( el.length ) { this.result_clear_highlight(); this.result_highlight = el; this.result_highlight.addClass( "highlighted" ); maxHeight = parseInt( this.search_results.css( "maxHeight" ), 10 ); visible_top = this.search_results.scrollTop(); visible_bottom = maxHeight + visible_top; high_top = this.result_highlight.position().top + this.search_results.scrollTop(); high_bottom = high_top + this.result_highlight.outerHeight(); if ( high_bottom >= visible_bottom ) { return this.search_results.scrollTop( ( high_bottom - maxHeight ) > 0 ? high_bottom - maxHeight : 0 ); } else if ( high_top < visible_top ) { return this.search_results.scrollTop( high_top ); } } }; Chosen.prototype.result_clear_highlight = function() { if ( this.result_highlight ) { this.result_highlight.removeClass( "highlighted" ); } return this.result_highlight = null; }; Chosen.prototype.results_show = function() { if ( this.is_multiple && this.max_selected_options <= this.choices_count() ) { this.form_field_jq.trigger( "chosen:maxselected", { chosen: this } ); return false; } this.container.addClass( "chosen-with-drop" ); this.results_showing = true; this.search_field.focus(); this.search_field.val( this.search_field.val() ); this.winnow_results(); return this.form_field_jq.trigger( "chosen:showing_dropdown", { chosen: this } ); }; Chosen.prototype.update_results_content = function( content ) { return this.search_results.html( content ); }; Chosen.prototype.results_hide = function() { if ( this.results_showing ) { this.result_clear_highlight(); this.container.removeClass( "chosen-with-drop" ); this.form_field_jq.trigger( "chosen:hiding_dropdown", { chosen: this } ); } return this.results_showing = false; }; Chosen.prototype.set_tab_index = function( el ) { var ti; if ( this.form_field.tabIndex ) { ti = this.form_field.tabIndex; this.form_field.tabIndex = -1; return this.search_field[0].tabIndex = ti; } }; Chosen.prototype.set_label_behavior = function() { var _this = this; this.form_field_label = this.form_field_jq.parents( "label" ); if ( !this.form_field_label.length && this.form_field.id.length ) { this.form_field_label = $( "label[for='" + this.form_field.id + "']" ); } if ( this.form_field_label.length > 0 ) { return this.form_field_label.bind( 'click.chosen', function( evt ) { if ( _this.is_multiple ) { return _this.container_mousedown( evt ); } else { return _this.activate_field(); } } ); } }; Chosen.prototype.show_search_field_default = function() { if ( this.is_multiple && this.choices_count() < 1 && !this.active_field ) { this.search_field.val( this.default_text ); return this.search_field.addClass( "default" ); } else { this.search_field.val( "" ); return this.search_field.removeClass( "default" ); } }; Chosen.prototype.search_results_mouseup = function( evt ) { var target; target = $( evt.target ).hasClass( "active-result" ) ? $( evt.target ) : $( evt.target ).parents( ".active-result" ).first(); if ( target.length ) { this.result_highlight = target; this.result_select( evt ); return this.search_field.focus(); } }; Chosen.prototype.search_results_mouseover = function( evt ) { var target; target = $( evt.target ).hasClass( "active-result" ) ? $( evt.target ) : $( evt.target ).parents( ".active-result" ).first(); if ( target ) { return this.result_do_highlight( target ); } }; Chosen.prototype.search_results_mouseout = function( evt ) { if ( $( evt.target ).hasClass( "active-result" || $( evt.target ).parents( '.active-result' ).first() ) ) { return this.result_clear_highlight(); } }; Chosen.prototype.choice_build = function( item ) { var choice, close_link, _this = this; choice = $( '
    • ', { "class": "search-choice" } ).html( "" + item.html + "" ); if ( item.disabled ) { choice.addClass( 'search-choice-disabled' ); } else { close_link = $( '', { "class": 'search-choice-close', 'data-option-array-index': item.array_index } ); close_link.bind( 'click.chosen', function( evt ) { return _this.choice_destroy_link_click( evt ); } ); choice.append( close_link ); } return this.search_container.before( choice ); }; Chosen.prototype.choice_destroy_link_click = function( evt ) { evt.preventDefault(); evt.stopPropagation(); if ( !this.is_disabled ) { return this.choice_destroy( $( evt.target ) ); } }; Chosen.prototype.choice_destroy = function( link ) { if ( this.result_deselect( link[0].getAttribute( "data-option-array-index" ) ) ) { this.show_search_field_default(); if ( this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1 ) { this.results_hide(); } link.parents( 'li' ).first().remove(); return this.search_field_scale(); } }; Chosen.prototype.results_reset = function() { this.reset_single_select_options(); this.form_field.options[0].selected = true; this.single_set_selected_text(); this.show_search_field_default(); this.results_reset_cleanup(); this.form_field_jq.trigger( "change" ); if ( this.active_field ) { return this.results_hide(); } }; Chosen.prototype.results_reset_cleanup = function() { this.current_selectedIndex = this.form_field.selectedIndex; return this.selected_item.find( "abbr" ).remove(); }; Chosen.prototype.result_select = function( evt ) { var high, item; if ( this.result_highlight ) { high = this.result_highlight; this.result_clear_highlight(); if ( this.is_multiple && this.max_selected_options <= this.choices_count() ) { this.form_field_jq.trigger( "chosen:maxselected", { chosen: this } ); return false; } if ( this.is_multiple ) { high.removeClass( "active-result" ); } else { this.reset_single_select_options(); } item = this.results_data[high[0].getAttribute( "data-option-array-index" )]; item.selected = true; this.form_field.options[item.options_index].selected = true; this.selected_option_count = null; if ( this.is_multiple ) { this.choice_build( item ); } else { this.single_set_selected_text( item.text ); } if ( !( ( evt.metaKey || evt.ctrlKey ) && this.is_multiple ) ) { this.results_hide(); } this.search_field.val( "" ); if ( this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex ) { this.form_field_jq.trigger( "change", { 'selected': this.form_field.options[item.options_index].value } ); } this.current_selectedIndex = this.form_field.selectedIndex; return this.search_field_scale(); } }; Chosen.prototype.single_set_selected_text = function( text ) { if ( text == null ) { text = this.default_text; } if ( text === this.default_text ) { this.selected_item.addClass( "chosen-default" ); } else { this.single_deselect_control_build(); this.selected_item.removeClass( "chosen-default" ); } return this.selected_item.find( "span" ).text( text ); }; Chosen.prototype.result_deselect = function( pos ) { var result_data; result_data = this.results_data[pos]; if ( !this.form_field.options[result_data.options_index].disabled ) { result_data.selected = false; this.form_field.options[result_data.options_index].selected = false; this.selected_option_count = null; this.result_clear_highlight(); if ( this.results_showing ) { this.winnow_results(); } this.form_field_jq.trigger( "change", { deselected: this.form_field.options[result_data.options_index].value } ); this.search_field_scale(); return true; } else { return false; } }; Chosen.prototype.single_deselect_control_build = function() { if ( !this.allow_single_deselect ) { return; } if ( !this.selected_item.find( "abbr" ).length ) { this.selected_item.find( "span" ).first().after( "" ); } return this.selected_item.addClass( "chosen-single-with-deselect" ); }; Chosen.prototype.get_search_text = function() { if ( this.search_field.val() === this.default_text ) { return ""; } else { return $( '
      ' ).text( $.trim( this.search_field.val() ) ).html(); } }; Chosen.prototype.winnow_results_set_highlight = function() { var do_high, selected_results; selected_results = !this.is_multiple ? this.search_results.find( ".result-selected.active-result" ) : []; do_high = selected_results.length ? selected_results.first() : this.search_results.find( ".active-result" ).first(); if ( do_high != null ) { return this.result_do_highlight( do_high ); } }; Chosen.prototype.no_results = function( terms ) { var no_results_html; no_results_html = $( '
    • ' + this.results_none_found + ' ""
    • ' ); no_results_html.find( "span" ).first().html( terms ); this.search_results.append( no_results_html ); return this.form_field_jq.trigger( "chosen:no_results", { chosen: this } ); }; Chosen.prototype.no_results_clear = function() { return this.search_results.find( ".no-results" ).remove(); }; Chosen.prototype.keydown_arrow = function() { var next_sib; if ( this.results_showing && this.result_highlight ) { next_sib = this.result_highlight.nextAll( "li.active-result" ).first(); if ( next_sib ) { return this.result_do_highlight( next_sib ); } } else { return this.results_show(); } }; Chosen.prototype.keyup_arrow = function() { var prev_sibs; if ( !this.results_showing && !this.is_multiple ) { return this.results_show(); } else if ( this.result_highlight ) { prev_sibs = this.result_highlight.prevAll( "li.active-result" ); if ( prev_sibs.length ) { return this.result_do_highlight( prev_sibs.first() ); } else { if ( this.choices_count() > 0 ) { this.results_hide(); } return this.result_clear_highlight(); } } }; Chosen.prototype.keydown_backstroke = function() { var next_available_destroy; if ( this.pending_backstroke ) { this.choice_destroy( this.pending_backstroke.find( "a" ).first() ); return this.clear_backstroke(); } else { next_available_destroy = this.search_container.siblings( "li.search-choice" ).last(); if ( next_available_destroy.length && !next_available_destroy.hasClass( "search-choice-disabled" ) ) { this.pending_backstroke = next_available_destroy; if ( this.single_backstroke_delete ) { return this.keydown_backstroke(); } else { return this.pending_backstroke.addClass( "search-choice-focus" ); } } } }; Chosen.prototype.clear_backstroke = function() { if ( this.pending_backstroke ) { this.pending_backstroke.removeClass( "search-choice-focus" ); } return this.pending_backstroke = null; }; Chosen.prototype.keydown_checker = function( evt ) { var stroke, _ref1; stroke = ( _ref1 = evt.which ) != null ? _ref1 : evt.keyCode; this.search_field_scale(); if ( stroke !== 8 && this.pending_backstroke ) { this.clear_backstroke(); } switch ( stroke ) { case 8: this.backstroke_length = this.search_field.val().length; break; case 9: if ( this.results_showing && !this.is_multiple ) { this.result_select( evt ); } this.mouse_on_container = false; break; case 13: if ( this.results_showing ) { evt.preventDefault(); } break; case 32: if ( this.disable_search ) { evt.preventDefault(); } break; case 38: evt.preventDefault(); this.keyup_arrow(); break; case 40: evt.preventDefault(); this.keydown_arrow(); break; } }; Chosen.prototype.search_field_scale = function() { var div, f_width, h, style, style_block, styles, w, _i, _len; if ( this.is_multiple ) { h = 0; w = 0; style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"; styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing']; for ( _i = 0, _len = styles.length; _i < _len; _i++ ) { style = styles[_i]; style_block += style + ":" + this.search_field.css( style ) + ";"; } div = $( '
      ', { 'style': style_block } ); div.text( this.search_field.val() ); $( 'body' ).append( div ); w = div.width() + 25; div.remove(); f_width = this.container.outerWidth(); if ( w > f_width - 10 ) { w = f_width - 10; } return this.search_field.css( { 'width': w + 'px' } ); } }; return Chosen; } )( AbstractChosen ); } ).call( this );