diff --git a/admin/thirdparty/chosen/Cakefile b/admin/thirdparty/chosen/Cakefile index ff76b9da6..11509f742 100644 --- a/admin/thirdparty/chosen/Cakefile +++ b/admin/thirdparty/chosen/Cakefile @@ -56,8 +56,7 @@ write_chosen_javascript = (filename, body, trailing='') -> // Copyright (c) 2011 Harvest http://getharvest.com // MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md - -// based on version 0.9.8, applied a very simple patch that fix percentaage width support on select tag +// based on version 0.9.8, applied a very simple patch that fixes percentage width support on select tag, and enables rise-up functionality // This file is generated by `cake build`, do not edit it by hand. #{body}#{trailing} """ @@ -175,4 +174,4 @@ task 'release', 'build, tag the current release, and push', -> , untag_release , untag_release - , untag_release \ No newline at end of file + , untag_release diff --git a/admin/thirdparty/chosen/chosen/chosen.jquery.js b/admin/thirdparty/chosen/chosen/chosen.jquery.js index 901d5c75a..e5f598383 100644 --- a/admin/thirdparty/chosen/chosen/chosen.jquery.js +++ b/admin/thirdparty/chosen/chosen/chosen.jquery.js @@ -6,21 +6,22 @@ // Copyright (c) 2011 Harvest http://getharvest.com // MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md - -// based on version 0.9.8, applied a very simple patch that fix percentaage width support on select tag +// based on version 0.9.8, applied a very simple patch that fixes percentage width support on select tag, and enables rise-up functionality // This file is generated by `cake build`, do not edit it by hand. (function() { var SelectParser; SelectParser = (function() { + SelectParser.name = 'SelectParser'; + function SelectParser() { this.options_index = 0; this.parsed = []; } SelectParser.prototype.add_node = function(child) { - if (child.nodeName === "OPTGROUP") { + if (child.nodeName.toUpperCase() === "OPTGROUP") { return this.add_group(child); } else { return this.add_option(child); @@ -47,7 +48,7 @@ }; SelectParser.prototype.add_option = function(option, group_position, group_disabled) { - if (option.nodeName === "OPTION") { + if (option.nodeName.toUpperCase() === "OPTION") { if (option.text !== "") { if (group_position != null) { this.parsed[group_position].children += 1; @@ -107,12 +108,14 @@ Copyright (c) 2011 by Harvest AbstractChosen = (function() { + AbstractChosen.name = 'AbstractChosen'; + function AbstractChosen(form_field, options) { this.form_field = form_field; this.options = options != null ? options : {}; this.set_default_values(); this.is_multiple = this.form_field.multiple; - this.default_text_default = this.is_multiple ? "Select Some Options" : "Select an Option"; + this.set_default_text(); this.setup(); this.set_up_html(); this.register_observers(); @@ -134,9 +137,22 @@ Copyright (c) 2011 by Harvest this.result_single_selected = 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.search_contains = this.options.search_contains || false; this.choices = 0; - return this.results_none_found = this.options.no_results_text || "No results match"; + this.single_backstroke_delete = this.options.single_backstroke_delete || false; + return this.max_selected_options = this.options.max_selected_options || Infinity; + }; + + 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 || "Select Some Options"; + } else { + this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || "Select an Option"; + } + return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || "No results match"; }; AbstractChosen.prototype.mouse_enter = function() { @@ -149,10 +165,16 @@ Copyright (c) 2011 by Harvest AbstractChosen.prototype.input_focus = function(evt) { var _this = this; - if (!this.active_field) { - return setTimeout((function() { - return _this.container_mousedown(); - }), 50); + 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(); + } } }; @@ -188,6 +210,9 @@ Copyright (c) 2011 by Harvest }; AbstractChosen.prototype.results_update_field = function() { + if (!this.is_multiple) { + this.results_reset_cleanup(); + } this.result_clear_highlight(); this.result_single_selected = null; return this.results_build(); @@ -254,7 +279,7 @@ Copyright (c) 2011 by Harvest AbstractChosen.prototype.generate_random_char = function() { var chars, newchar, rand; - chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ"; + chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; rand = Math.floor(Math.random() * chars.length); return newchar = chars.substring(rand, rand + 1); }; @@ -276,7 +301,7 @@ Copyright (c) 2011 by Harvest (function() { var $, Chosen, get_side_border_padding, root, __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; }; + __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; }; root = this; @@ -284,7 +309,7 @@ Copyright (c) 2011 by Harvest $.fn.extend({ chosen: function(options) { - if ($.browser.msie && ($.browser.version === "6.0" || $.browser.version === "7.0")) { + if ($.browser.msie && ($.browser.version === "6.0" || ($.browser.version === "7.0" && document.documentMode === 7))) { return this; } return this.each(function(input_field) { @@ -301,12 +326,15 @@ Copyright (c) 2011 by Harvest __extends(Chosen, _super); + Chosen.name = 'Chosen'; + function Chosen() { return Chosen.__super__.constructor.apply(this, arguments); } Chosen.prototype.setup = function() { this.form_field_jq = $(this.form_field); + this.current_value = this.form_field_jq.val(); return this.is_rtl = this.form_field_jq.hasClass("chzn-rtl"); }; @@ -328,7 +356,7 @@ Copyright (c) 2011 by Harvest if (this.is_multiple) { container_div.html('
'); } else { - container_div.html('' + this.default_text + '
'); + container_div.html('' + this.default_text + '
'); } this.form_field_jq.hide().after(container_div); this.container = $('#' + this.container_id); @@ -394,6 +422,12 @@ Copyright (c) 2011 by Harvest this.form_field_jq.bind("liszt:updated", function(evt) { return _this.results_update_field(evt); }); + this.form_field_jq.bind("liszt:activate", function(evt) { + return _this.activate_field(evt); + }); + this.form_field_jq.bind("liszt:open", function(evt) { + return _this.container_mousedown(evt); + }); this.search_field.blur(function(evt) { return _this.input_blur(evt); }); @@ -403,13 +437,13 @@ Copyright (c) 2011 by Harvest this.search_field.keydown(function(evt) { return _this.keydown_checker(evt); }); + this.search_field.focus(function(evt) { + return _this.input_focus(evt); + }); if (this.is_multiple) { - this.search_choices.click(function(evt) { + return this.search_choices.click(function(evt) { return _this.choices_click(evt); }); - return this.search_field.focus(function(evt) { - return _this.input_focus(evt); - }); } else { return this.container.click(function(evt) { return evt.preventDefault(); @@ -461,7 +495,7 @@ Copyright (c) 2011 by Harvest }; Chosen.prototype.container_mouseup = function(evt) { - if (evt.target.nodeName === "ABBR") { + if (evt.target.nodeName === "ABBR" && !this.is_disabled) { return this.results_reset(evt); } }; @@ -488,10 +522,6 @@ Copyright (c) 2011 by Harvest }; Chosen.prototype.activate_field = function() { - if (!this.is_multiple && !this.active_field) { - this.search_field.attr("tabindex", this.selected_item.attr("tabindex")); - this.selected_item.attr("tabindex", -1); - } this.container.addClass("chzn-container-active"); this.active_field = true; this.search_field.val(this.search_field.val()); @@ -514,8 +544,8 @@ Copyright (c) 2011 by Harvest this.search_choices.find("li.search-choice").remove(); this.choices = 0; } else if (!this.is_multiple) { - this.selected_item.find("span").text(this.default_text); - if (this.form_field.options.length <= this.disable_search_threshold) { + this.selected_item.addClass("chzn-default").find("span").text(this.default_text); + if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) { this.container.addClass("chzn-container-single-nosearch"); } else { this.container.removeClass("chzn-container-single-nosearch"); @@ -589,6 +619,7 @@ Copyright (c) 2011 by Harvest this.result_do_highlight(this.result_single_selected); } } + dd_width = this.container.width() - get_side_border_padding(this.dropdown); /* CALL CUSTOM FUNCTION: rise_up # if rise-up true, reverse drop-up direction @@ -596,7 +627,9 @@ Copyright (c) 2011 by Harvest rise = this.rise_up(this.container, this.dropdown); dd_top = rise ? -this.container.find('.chzn-drop').height() : this.is_multiple ? this.container.height() : this.container.height() - 1; - dd_width = this.container.width() - get_side_border_padding(this.dropdown); + this.form_field_jq.trigger("liszt:showing_dropdown", { + chosen: this + }); this.dropdown.css({ "top": dd_top + "px", "left": 0 @@ -613,6 +646,9 @@ Copyright (c) 2011 by Harvest this.selected_item.removeClass("chzn-single-with-drop"); } this.result_clear_highlight(); + this.form_field_jq.trigger("liszt:hiding_dropdown", { + chosen: this + }); this.dropdown.css({ "left": "-9000px" }); @@ -624,12 +660,7 @@ Copyright (c) 2011 by Harvest if (this.form_field_jq.attr("tabindex")) { ti = this.form_field_jq.attr("tabindex"); this.form_field_jq.attr("tabindex", -1); - if (this.is_multiple) { - return this.search_field.attr("tabindex", ti); - } else { - this.selected_item.attr("tabindex", ti); - return this.search_field.attr("tabindex", -1); - } + return this.search_field.attr("tabindex", ti); } }; @@ -648,7 +679,8 @@ Copyright (c) 2011 by Harvest target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); if (target.length) { this.result_highlight = target; - return this.result_select(evt); + this.result_select(evt); + return this.search_field.focus(); } }; @@ -674,11 +706,16 @@ Copyright (c) 2011 by Harvest }; Chosen.prototype.choice_build = function(item) { - var choice_id, link, + var choice_id, html, link, _this = this; choice_id = this.container_id + "_c_" + item.array_index; this.choices += 1; - this.search_container.before('
  • ' + item.html + '
  • '); + if (item.disabled) { + html = '
  • ' + item.html + '
  • '; + } else { + html = '
  • ' + item.html + '
  • '; + } + this.search_container.before(html); link = $('#' + choice_id).find("a").first(); return link.click(function(evt) { return _this.choice_destroy_link_click(evt); @@ -696,29 +733,35 @@ Copyright (c) 2011 by Harvest }; Chosen.prototype.choice_destroy = function(link) { - this.choices -= 1; - this.show_search_field_default(); - if (this.is_multiple && this.choices > 0 && this.search_field.val().length < 1) { - this.results_hide(); + if (this.result_deselect(link.attr("rel"))) { + this.choices -= 1; + this.show_search_field_default(); + if (this.is_multiple && this.choices > 0 && this.search_field.val().length < 1) { + this.results_hide(); + } + return link.parents('li').first().remove(); } - this.result_deselect(link.attr("rel")); - return link.parents('li').first().remove(); }; - Chosen.prototype.results_reset = function(evt) { + Chosen.prototype.results_reset = function() { this.form_field.options[0].selected = true; this.selected_item.find("span").text(this.default_text); if (!this.is_multiple) { this.selected_item.addClass("chzn-default"); } this.show_search_field_default(); - $(evt.target).remove(); + 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_value = this.form_field_jq.val(); + return this.selected_item.find("abbr").remove(); + }; + Chosen.prototype.result_select = function(evt) { var high, high_id, item, position; if (this.result_highlight) { @@ -749,7 +792,12 @@ Copyright (c) 2011 by Harvest this.results_hide(); } this.search_field.val(""); - this.form_field_jq.trigger("change"); + if (this.is_multiple || this.form_field_jq.val() !== this.current_value) { + this.form_field_jq.trigger("change", { + 'selected': this.form_field.options[item.options_index].value + }); + } + this.current_value = this.form_field_jq.val(); return this.search_field_scale(); } }; @@ -765,14 +813,21 @@ Copyright (c) 2011 by Harvest Chosen.prototype.result_deselect = function(pos) { var result, result_data; result_data = this.results_data[pos]; - result_data.selected = false; - this.form_field.options[result_data.options_index].selected = false; - result = $("#" + this.container_id + "_o_" + pos); - result.removeClass("result-selected").addClass("active-result").show(); - this.result_clear_highlight(); - this.winnow_results(); - this.form_field_jq.trigger("change"); - return this.search_field_scale(); + if (!this.form_field.options[result_data.options_index].disabled) { + result_data.selected = false; + this.form_field.options[result_data.options_index].selected = false; + result = $("#" + this.container_id + "_o_" + pos); + result.removeClass("result-selected").addClass("active-result").show(); + this.result_clear_highlight(); + 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() { @@ -920,12 +975,20 @@ Copyright (c) 2011 by Harvest }; 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 { - this.pending_backstroke = this.search_container.siblings("li.search-choice").last(); - return this.pending_backstroke.addClass("search-choice-focus"); + 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"); + } + } } }; diff --git a/admin/thirdparty/chosen/chosen/chosen.jquery.min.js b/admin/thirdparty/chosen/chosen/chosen.jquery.min.js index da9e6f76b..3f247a68e 100644 --- a/admin/thirdparty/chosen/chosen/chosen.jquery.min.js +++ b/admin/thirdparty/chosen/chosen/chosen.jquery.min.js @@ -6,7 +6,6 @@ // Copyright (c) 2011 Harvest http://getharvest.com // MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md - -// based on version 0.9.8, applied a very simple patch that fix percentaage width support on select tag +// based on version 0.9.8, applied a very simple patch that fixes percentage width support on select tag, and enables rise-up functionality // This file is generated by `cake build`, do not edit it by hand. -(function(){var e;e=function(){function e(){this.options_index=0,this.parsed=[]}return e.prototype.add_node=function(e){return e.nodeName==="OPTGROUP"?this.add_group(e):this.add_option(e)},e.prototype.add_group=function(e){var t,n,r,i,s,o;t=this.parsed.length,this.parsed.push({array_index:t,group:!0,label:e.label,children:0,disabled:e.disabled}),s=e.childNodes,o=[];for(r=0,i=s.length;r"+e.html+"")},e.prototype.results_update_field=function(){return this.result_clear_highlight(),this.result_single_selected=null,this.results_build()},e.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},e.prototype.results_search=function(e){return this.results_showing?this.winnow_results():this.results_show()},e.prototype.keyup_checker=function(e){var t,n;t=(n=e.which)!=null?n:e.keyCode,this.search_field_scale();switch(t){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:e.preventDefault();if(this.results_showing)return this.result_select(e);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},e.prototype.generate_field_id=function(){var e;return e=this.generate_random_id(),this.form_field.id=e,e},e.prototype.generate_random_char=function(){var e,t,n;return e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ",n=Math.floor(Math.random()*e.length),t=e.substring(n,n+1)},e}(),t.AbstractChosen=e}.call(this),function(){var e,t,n,r,i={}.hasOwnProperty,s=function(e,t){function r(){this.constructor=e}for(var n in t)i.call(t,n)&&(e[n]=t[n]);return r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype,e};r=this,e=jQuery,e.fn.extend({chosen:function(n){return!e.browser.msie||e.browser.version!=="6.0"&&e.browser.version!=="7.0"?this.each(function(r){var i;i=e(this);if(!i.hasClass("chzn-done"))return i.data("chosen",new t(this,n))}):this}}),t=function(t){function i(){return i.__super__.constructor.apply(this,arguments)}return s(i,t),i.prototype.setup=function(){return this.form_field_jq=e(this.form_field),this.is_rtl=this.form_field_jq.hasClass("chzn-rtl")},i.prototype.finish_setup=function(){return this.form_field_jq.addClass("chzn-done")},i.prototype.set_up_html=function(){var t,r,i,s,o;return this.container_id=this.form_field.id.length?this.form_field.id.replace(/(:|\.)/g,"_"):this.generate_field_id(),this.container_id+="_chzn",this.f_width=this.form_field_jq.outerWidth(),this.default_text=this.form_field_jq.data("placeholder")?this.form_field_jq.data("placeholder"):this.default_text_default,t=e("
    ",{id:this.container_id,"class":"chzn-container"+(this.is_rtl?" chzn-rtl":""),style:"width: "+(this.options.width||this.f_width)+"px;"}),this.is_multiple?t.html('
      '):t.html(''+this.default_text+'
        '),this.form_field_jq.hide().after(t),this.container=e("#"+this.container_id),this.container.addClass("chzn-container-"+(this.is_multiple?"multi":"single")),this.dropdown=this.container.find("div.chzn-drop").first(),s=this.rise_up(this.container,this.dropdown),r=s?-this.container.find(".chzn-drop").height():this.container.height(),i=this.container.width()-n(this.dropdown),this.dropdown.css({width:i+"px",top:r+"px"}),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chzn-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chzn-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chzn-search").first(),this.selected_item=this.container.find(".chzn-single").first(),o=i-n(this.search_container)-n(this.search_field),this.search_field.css({width:o+"px"})),this.results_build(),this.set_tab_index(),this.form_field_jq.trigger("liszt:ready",{chosen:this})},i.prototype.register_observers=function(){var e=this;return this.container.mousedown(function(t){return e.container_mousedown(t)}),this.container.mouseup(function(t){return e.container_mouseup(t)}),this.container.mouseenter(function(t){return e.mouse_enter(t)}),this.container.mouseleave(function(t){return e.mouse_leave(t)}),this.search_results.mouseup(function(t){return e.search_results_mouseup(t)}),this.search_results.mouseover(function(t){return e.search_results_mouseover(t)}),this.search_results.mouseout(function(t){return e.search_results_mouseout(t)}),this.form_field_jq.bind("liszt:updated",function(t){return e.results_update_field(t)}),this.search_field.blur(function(t){return e.input_blur(t)}),this.search_field.keyup(function(t){return e.keyup_checker(t)}),this.search_field.keydown(function(t){return e.keydown_checker(t)}),this.is_multiple?(this.search_choices.click(function(t){return e.choices_click(t)}),this.search_field.focus(function(t){return e.input_focus(t)})):this.container.click(function(e){return e.preventDefault()})},i.prototype.search_field_disabled=function(){this.is_disabled=this.form_field_jq[0].disabled;if(this.is_disabled)return this.container.addClass("chzn-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus",this.activate_action),this.close_field();this.container.removeClass("chzn-disabled"),this.search_field[0].disabled=!1;if(!this.is_multiple)return this.selected_item.bind("focus",this.activate_action)},i.prototype.container_mousedown=function(t){var n;if(!this.is_disabled)return n=t!=null?e(t.target).hasClass("search-choice-close"):!1,t&&t.type==="mousedown"&&!this.results_showing&&t.stopPropagation(),!this.pending_destroy_click&&!n?(this.active_field?!this.is_multiple&&t&&(e(t.target)[0]===this.selected_item[0]||e(t.target).parents("a.chzn-single").length)&&(t.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),e(document).click(this.click_test_action),this.results_show()),this.activate_field()):this.pending_destroy_click=!1},i.prototype.container_mouseup=function(e){if(e.target.nodeName==="ABBR")return this.results_reset(e)},i.prototype.blur_test=function(e){if(!this.active_field&&this.container.hasClass("chzn-container-active"))return this.close_field()},i.prototype.close_field=function(){return e(document).unbind("click",this.click_test_action),this.is_multiple||(this.selected_item.attr("tabindex",this.search_field.attr("tabindex")),this.search_field.attr("tabindex",-1)),this.active_field=!1,this.results_hide(),this.container.removeClass("chzn-container-active"),this.winnow_results_clear(),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},i.prototype.activate_field=function(){return!this.is_multiple&&!this.active_field&&(this.search_field.attr("tabindex",this.selected_item.attr("tabindex")),this.selected_item.attr("tabindex",-1)),this.container.addClass("chzn-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},i.prototype.test_active_click=function(t){return e(t.target).parents("#"+this.container_id).length?this.active_field=!0:this.close_field()},i.prototype.results_build=function(){var e,t,n,i,s;this.parsing=!0,this.results_data=r.SelectParser.select_to_array(this.form_field),this.is_multiple&&this.choices>0?(this.search_choices.find("li.search-choice").remove(),this.choices=0):this.is_multiple||(this.selected_item.find("span").text(this.default_text),this.form_field.options.length<=this.disable_search_threshold?this.container.addClass("chzn-container-single-nosearch"):this.container.removeClass("chzn-container-single-nosearch")),e="",s=this.results_data;for(n=0,i=s.length;n'+e("
        ").text(t.label).html()+"")},i.prototype.result_do_highlight=function(e){var t,n,r,i,s;if(e.length){this.result_clear_highlight(),this.result_highlight=e,this.result_highlight.addClass("highlighted"),r=parseInt(this.search_results.css("maxHeight"),10),s=this.search_results.scrollTop(),i=r+s,n=this.result_highlight.position().top+this.search_results.scrollTop(),t=n+this.result_highlight.outerHeight();if(t>=i)return this.search_results.scrollTop(t-r>0?t-r:0);if(n'+t.html+''),r=e("#"+n).find("a").first(),r.click(function(e){return i.choice_destroy_link_click(e)})},i.prototype.choice_destroy_link_click=function(t){return t.preventDefault(),this.is_disabled?t.stopPropagation:(this.pending_destroy_click=!0,this.choice_destroy(e(t.target)))},i.prototype.choice_destroy=function(e){return this.choices-=1,this.show_search_field_default(),this.is_multiple&&this.choices>0&&this.search_field.val().length<1&&this.results_hide(),this.result_deselect(e.attr("rel")),e.parents("li").first().remove()},i.prototype.results_reset=function(t){this.form_field.options[0].selected=!0,this.selected_item.find("span").text(this.default_text),this.is_multiple||this.selected_item.addClass("chzn-default"),this.show_search_field_default(),e(t.target).remove(),this.form_field_jq.trigger("change");if(this.active_field)return this.results_hide()},i.prototype.result_select=function(e){var t,n,r,i;if(this.result_highlight)return t=this.result_highlight,n=t.attr("id"),this.result_clear_highlight(),this.is_multiple?this.result_deactivate(t):(this.search_results.find(".result-selected").removeClass("result-selected"),this.result_single_selected=t,this.selected_item.removeClass("chzn-default")),t.addClass("result-selected"),i=n.substr(n.lastIndexOf("_")+1),r=this.results_data[i],r.selected=!0,this.form_field.options[r.options_index].selected=!0,this.is_multiple?this.choice_build(r):(this.selected_item.find("span").first().text(r.text),this.allow_single_deselect&&this.single_deselect_control_build()),(!e.metaKey||!this.is_multiple)&&this.results_hide(),this.search_field.val(""),this.form_field_jq.trigger("change"),this.search_field_scale()},i.prototype.result_activate=function(e){return e.addClass("active-result")},i.prototype.result_deactivate=function(e){return e.removeClass("active-result")},i.prototype.result_deselect=function(t){var n,r;return r=this.results_data[t],r.selected=!1,this.form_field.options[r.options_index].selected=!1,n=e("#"+this.container_id+"_o_"+t),n.removeClass("result-selected").addClass("active-result").show(),this.result_clear_highlight(),this.winnow_results(),this.form_field_jq.trigger("change"),this.search_field_scale()},i.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect&&this.selected_item.find("abbr").length<1)return this.selected_item.find("span").first().after('')},i.prototype.winnow_results=function(){var t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y;this.no_results_clear(),f=0,l=this.search_field.val()===this.default_text?"":e("
        ").text(e.trim(this.search_field.val())).html(),o=this.search_contains?"":"^",s=new RegExp(o+l.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),p=new RegExp(l.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),y=this.results_data;for(d=0,m=y.length;d=0||n.html.indexOf("[")===0){i=n.html.replace(/\[|\]/g,"").split(" ");if(i.length)for(v=0,g=i.length;v"+n.html.substr(c+l.length),h=h.substr(0,c)+""+h.substr(c)):h=n.html,u.html(h),this.result_activate(u),n.group_array_index!=null&&e("#"+this.results_data[n.group_array_index].dom_id).css("display","list-item")):(this.result_highlight&&a===this.result_highlight.attr("id")&&this.result_clear_highlight(),this.result_deactivate(u))}}return f<1&&l.length?this.no_results(l):this.winnow_results_set_highlight()},i.prototype.winnow_results_clear=function(){var t,n,r,i,s;this.search_field.val(""),n=this.search_results.find("li"),s=[];for(r=0,i=n.length;r'+this.results_none_found+' ""'),n.find("span").first().html(t),this.search_results.append(n)},i.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},i.prototype.keydown_arrow=function(){var t,n;this.result_highlight?this.results_showing&&(n=this.result_highlight.nextAll("li.active-result").first(),n&&this.result_do_highlight(n)):(t=this.search_results.find("li.active-result").first(),t&&this.result_do_highlight(e(t)));if(!this.results_showing)return this.results_show()},i.prototype.keyup_arrow=function(){var e;if(!this.results_showing&&!this.is_multiple)return this.results_show();if(this.result_highlight)return e=this.result_highlight.prevAll("li.active-result"),e.length?this.result_do_highlight(e.first()):(this.choices>0&&this.results_hide(),this.result_clear_highlight())},i.prototype.keydown_backstroke=function(){return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(this.pending_backstroke=this.search_container.siblings("li.search-choice").last(),this.pending_backstroke.addClass("search-choice-focus"))},i.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},i.prototype.keydown_checker=function(e){var t,n;t=(n=e.which)!=null?n:e.keyCode,this.search_field_scale(),t!==8&&this.pending_backstroke&&this.clear_backstroke();switch(t){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(e),this.mouse_on_container=!1;break;case 13:e.preventDefault();break;case 38:e.preventDefault(),this.keyup_arrow();break;case 40:this.keydown_arrow()}},i.prototype.search_field_scale=function(){var t,n,r,i,s,o,u,a,f,l;if(this.is_multiple){r=0,a=0,o="position:absolute; left: -1000px; top: -1000px; display:none;",u=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(f=0,l=u.length;f",{style:o}),n.text(this.search_field.val()),e("body").append(n),a=n.width()+25,n.remove(),a>this.f_width-10&&(a=this.f_width-10),this.search_field.css({width:a+"px"}),i=this.rise_up(this.container,this.dropdown),t=i?-this.container.find(".chzn-drop").height():this.container.height(),this.dropdown.css({top:t+"px"})}},i.prototype.generate_random_id=function(){var t;t="sel"+this.generate_random_char()+this.generate_random_char()+this.generate_random_char();while(e("#"+t).length>0)t+=this.generate_random_char();return t},i.prototype.rise_up=function(t,n){var r,i,s,o;return o=t.find("a.chzn-single"),o.length>0?(s=e(window).height()+e(document).scrollTop()-t.find("a").innerHeight(),i=o.offset().top,r=n.innerHeight(),i+r>s&&i-r>0?(t.addClass("chzn-with-rise"),!0):(t.removeClass("chzn-with-rise"),!1)):!1},i}(AbstractChosen),n=function(e){var t;return t=e.outerWidth()-e.width()},r.get_side_border_padding=n}.call(this); \ No newline at end of file +(function(){var a;a=function(){function a(){this.options_index=0,this.parsed=[]}return a.name="SelectParser",a.prototype.add_node=function(a){return a.nodeName.toUpperCase()==="OPTGROUP"?this.add_group(a):this.add_option(a)},a.prototype.add_group=function(a){var b,c,d,e,f,g;b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:a.label,children:0,disabled:a.disabled}),f=a.childNodes,g=[];for(d=0,e=f.length;d"+a.html+"")},a.prototype.results_update_field=function(){return this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.result_single_selected=null,this.results_build()},a.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},a.prototype.results_search=function(a){return this.results_showing?this.winnow_results():this.results_show()},a.prototype.keyup_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale();switch(b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:a.preventDefault();if(this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},a.prototype.generate_field_id=function(){var a;return a=this.generate_random_id(),this.form_field.id=a,a},a.prototype.generate_random_char=function(){var a,b,c;return a="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",c=Math.floor(Math.random()*a.length),b=a.substring(c,c+1)},a}(),b.AbstractChosen=a}.call(this),function(){var a,b,c,d,e={}.hasOwnProperty,f=function(a,b){function d(){this.constructor=a}for(var c in b)e.call(b,c)&&(a[c]=b[c]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};d=this,a=jQuery,a.fn.extend({chosen:function(c){return a.browser.msie&&(a.browser.version==="6.0"||a.browser.version==="7.0"&&document.documentMode===7)?this:this.each(function(d){var e;e=a(this);if(!e.hasClass("chzn-done"))return e.data("chosen",new b(this,c))})}}),b=function(b){function e(){return e.__super__.constructor.apply(this,arguments)}return f(e,b),e.name="Chosen",e.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_value=this.form_field_jq.val(),this.is_rtl=this.form_field_jq.hasClass("chzn-rtl")},e.prototype.finish_setup=function(){return this.form_field_jq.addClass("chzn-done")},e.prototype.set_up_html=function(){var b,d,e,f,g;return this.container_id=this.form_field.id.length?this.form_field.id.replace(/(:|\.)/g,"_"):this.generate_field_id(),this.container_id+="_chzn",this.f_width=this.form_field_jq.outerWidth(),this.default_text=this.form_field_jq.data("placeholder")?this.form_field_jq.data("placeholder"):this.default_text_default,b=a("
        ",{id:this.container_id,"class":"chzn-container"+(this.is_rtl?" chzn-rtl":""),style:"width: "+(this.options.width||this.f_width)+"px;"}),this.is_multiple?b.html('
          '):b.html(''+this.default_text+'
            '),this.form_field_jq.hide().after(b),this.container=a("#"+this.container_id),this.container.addClass("chzn-container-"+(this.is_multiple?"multi":"single")),this.dropdown=this.container.find("div.chzn-drop").first(),f=this.rise_up(this.container,this.dropdown),d=f?-this.container.find(".chzn-drop").height():this.container.height(),e=this.container.width()-c(this.dropdown),this.dropdown.css({width:e+"px",top:d+"px"}),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chzn-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chzn-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chzn-search").first(),this.selected_item=this.container.find(".chzn-single").first(),g=e-c(this.search_container)-c(this.search_field),this.search_field.css({width:g+"px"})),this.results_build(),this.set_tab_index(),this.form_field_jq.trigger("liszt:ready",{chosen:this})},e.prototype.register_observers=function(){var a=this;return this.container.mousedown(function(b){return a.container_mousedown(b)}),this.container.mouseup(function(b){return a.container_mouseup(b)}),this.container.mouseenter(function(b){return a.mouse_enter(b)}),this.container.mouseleave(function(b){return a.mouse_leave(b)}),this.search_results.mouseup(function(b){return a.search_results_mouseup(b)}),this.search_results.mouseover(function(b){return a.search_results_mouseover(b)}),this.search_results.mouseout(function(b){return a.search_results_mouseout(b)}),this.form_field_jq.bind("liszt:updated",function(b){return a.results_update_field(b)}),this.form_field_jq.bind("liszt:activate",function(b){return a.activate_field(b)}),this.form_field_jq.bind("liszt:open",function(b){return a.container_mousedown(b)}),this.search_field.blur(function(b){return a.input_blur(b)}),this.search_field.keyup(function(b){return a.keyup_checker(b)}),this.search_field.keydown(function(b){return a.keydown_checker(b)}),this.search_field.focus(function(b){return a.input_focus(b)}),this.is_multiple?this.search_choices.click(function(b){return a.choices_click(b)}):this.container.click(function(a){return a.preventDefault()})},e.prototype.search_field_disabled=function(){this.is_disabled=this.form_field_jq[0].disabled;if(this.is_disabled)return this.container.addClass("chzn-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus",this.activate_action),this.close_field();this.container.removeClass("chzn-disabled"),this.search_field[0].disabled=!1;if(!this.is_multiple)return this.selected_item.bind("focus",this.activate_action)},e.prototype.container_mousedown=function(b){var c;if(!this.is_disabled)return c=b!=null?a(b.target).hasClass("search-choice-close"):!1,b&&b.type==="mousedown"&&!this.results_showing&&b.stopPropagation(),!this.pending_destroy_click&&!c?(this.active_field?!this.is_multiple&&b&&(a(b.target)[0]===this.selected_item[0]||a(b.target).parents("a.chzn-single").length)&&(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(document).click(this.click_test_action),this.results_show()),this.activate_field()):this.pending_destroy_click=!1},e.prototype.container_mouseup=function(a){if(a.target.nodeName==="ABBR"&&!this.is_disabled)return this.results_reset(a)},e.prototype.blur_test=function(a){if(!this.active_field&&this.container.hasClass("chzn-container-active"))return this.close_field()},e.prototype.close_field=function(){return a(document).unbind("click",this.click_test_action),this.is_multiple||(this.selected_item.attr("tabindex",this.search_field.attr("tabindex")),this.search_field.attr("tabindex",-1)),this.active_field=!1,this.results_hide(),this.container.removeClass("chzn-container-active"),this.winnow_results_clear(),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},e.prototype.activate_field=function(){return this.container.addClass("chzn-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},e.prototype.test_active_click=function(b){return a(b.target).parents("#"+this.container_id).length?this.active_field=!0:this.close_field()},e.prototype.results_build=function(){var a,b,c,e,f;this.parsing=!0,this.results_data=d.SelectParser.select_to_array(this.form_field),this.is_multiple&&this.choices>0?(this.search_choices.find("li.search-choice").remove(),this.choices=0):this.is_multiple||(this.selected_item.addClass("chzn-default").find("span").text(this.default_text),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?this.container.addClass("chzn-container-single-nosearch"):this.container.removeClass("chzn-container-single-nosearch")),a="",f=this.results_data;for(c=0,e=f.length;c'+a("
            ").text(b.label).html()+"")},e.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight();if(b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(c'+b.html+"":d='
          • '+b.html+'
          • ',this.search_container.before(d),e=a("#"+c).find("a").first(),e.click(function(a){return f.choice_destroy_link_click(a)})},e.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),this.is_disabled?b.stopPropagation:(this.pending_destroy_click=!0,this.choice_destroy(a(b.target)))},e.prototype.choice_destroy=function(a){if(this.result_deselect(a.attr("rel")))return this.choices-=1,this.show_search_field_default(),this.is_multiple&&this.choices>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove()},e.prototype.results_reset=function(){this.form_field.options[0].selected=!0,this.selected_item.find("span").text(this.default_text),this.is_multiple||this.selected_item.addClass("chzn-default"),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change");if(this.active_field)return this.results_hide()},e.prototype.results_reset_cleanup=function(){return this.current_value=this.form_field_jq.val(),this.selected_item.find("abbr").remove()},e.prototype.result_select=function(a){var b,c,d,e;if(this.result_highlight)return b=this.result_highlight,c=b.attr("id"),this.result_clear_highlight(),this.is_multiple?this.result_deactivate(b):(this.search_results.find(".result-selected").removeClass("result-selected"),this.result_single_selected=b,this.selected_item.removeClass("chzn-default")),b.addClass("result-selected"),e=c.substr(c.lastIndexOf("_")+1),d=this.results_data[e],d.selected=!0,this.form_field.options[d.options_index].selected=!0,this.is_multiple?this.choice_build(d):(this.selected_item.find("span").first().text(d.text),this.allow_single_deselect&&this.single_deselect_control_build()),(!a.metaKey||!this.is_multiple)&&this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field_jq.val()!==this.current_value)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[d.options_index].value}),this.current_value=this.form_field_jq.val(),this.search_field_scale()},e.prototype.result_activate=function(a){return a.addClass("active-result")},e.prototype.result_deactivate=function(a){return a.removeClass("active-result")},e.prototype.result_deselect=function(b){var c,d;return d=this.results_data[b],this.form_field.options[d.options_index].disabled?!1:(d.selected=!1,this.form_field.options[d.options_index].selected=!1,c=a("#"+this.container_id+"_o_"+b),c.removeClass("result-selected").addClass("active-result").show(),this.result_clear_highlight(),this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[d.options_index].value}),this.search_field_scale(),!0)},e.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect&&this.selected_item.find("abbr").length<1)return this.selected_item.find("span").first().after('')},e.prototype.winnow_results=function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;this.no_results_clear(),j=0,k=this.search_field.val()===this.default_text?"":a("
            ").text(a.trim(this.search_field.val())).html(),g=this.search_contains?"":"^",f=new RegExp(g+k.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),n=new RegExp(k.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),s=this.results_data;for(o=0,q=s.length;o=0||c.html.indexOf("[")===0){e=c.html.replace(/\[|\]/g,"").split(" ");if(e.length)for(p=0,r=e.length;p"+c.html.substr(l+k.length),m=m.substr(0,l)+""+m.substr(l)):m=c.html,h.html(m),this.result_activate(h),c.group_array_index!=null&&a("#"+this.results_data[c.group_array_index].dom_id).css("display","list-item")):(this.result_highlight&&i===this.result_highlight.attr("id")&&this.result_clear_highlight(),this.result_deactivate(h))}}return j<1&&k.length?this.no_results(k):this.winnow_results_set_highlight()},e.prototype.winnow_results_clear=function(){var b,c,d,e,f;this.search_field.val(""),c=this.search_results.find("li"),f=[];for(d=0,e=c.length;d'+this.results_none_found+' ""'),c.find("span").first().html(b),this.search_results.append(c)},e.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},e.prototype.keydown_arrow=function(){var b,c;this.result_highlight?this.results_showing&&(c=this.result_highlight.nextAll("li.active-result").first(),c&&this.result_do_highlight(c)):(b=this.search_results.find("li.active-result").first(),b&&this.result_do_highlight(a(b)));if(!this.results_showing)return this.results_show()},e.prototype.keyup_arrow=function(){var a;if(!this.results_showing&&!this.is_multiple)return this.results_show();if(this.result_highlight)return a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices>0&&this.results_hide(),this.result_clear_highlight())},e.prototype.keydown_backstroke=function(){var a;if(this.pending_backstroke)return this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke();a=this.search_container.siblings("li.search-choice").last();if(a.length&&!a.hasClass("search-choice-disabled"))return this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")},e.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},e.prototype.keydown_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale(),b!==8&&this.pending_backstroke&&this.clear_backstroke();switch(b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:this.keydown_arrow()}},e.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j,k;if(this.is_multiple){d=0,i=0,g="position:absolute; left: -1000px; top: -1000px; display:none;",h=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(j=0,k=h.length;j",{style:g}),c.text(this.search_field.val()),a("body").append(c),i=c.width()+25,c.remove(),i>this.f_width-10&&(i=this.f_width-10),this.search_field.css({width:i+"px"}),e=this.rise_up(this.container,this.dropdown),b=e?-this.container.find(".chzn-drop").height():this.container.height(),this.dropdown.css({top:b+"px"})}},e.prototype.generate_random_id=function(){var b;b="sel"+this.generate_random_char()+this.generate_random_char()+this.generate_random_char();while(a("#"+b).length>0)b+=this.generate_random_char();return b},e.prototype.rise_up=function(b,c){var d,e,f,g;return g=b.find("a.chzn-single"),g.length>0?(f=a(window).height()+a(document).scrollTop()-b.find("a").innerHeight(),e=g.offset().top,d=c.innerHeight(),e+d>f&&e-d>0?(b.addClass("chzn-with-rise"),!0):(b.removeClass("chzn-with-rise"),!1)):!1},e}(AbstractChosen),c=function(a){var b;return b=a.outerWidth()-a.width()},d.get_side_border_padding=c}.call(this); \ No newline at end of file diff --git a/admin/thirdparty/chosen/chosen/chosen.proto.js b/admin/thirdparty/chosen/chosen/chosen.proto.js index aa83f8540..d20504e61 100644 --- a/admin/thirdparty/chosen/chosen/chosen.proto.js +++ b/admin/thirdparty/chosen/chosen/chosen.proto.js @@ -6,21 +6,22 @@ // Copyright (c) 2011 Harvest http://getharvest.com // MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md - -// based on version 0.9.8, applied a very simple patch that fix percentaage width support on select tag +// based on version 0.9.8, applied a very simple patch that fixes percentage width support on select tag, and enables rise-up functionality // This file is generated by `cake build`, do not edit it by hand. (function() { var SelectParser; SelectParser = (function() { + SelectParser.name = 'SelectParser'; + function SelectParser() { this.options_index = 0; this.parsed = []; } SelectParser.prototype.add_node = function(child) { - if (child.nodeName === "OPTGROUP") { + if (child.nodeName.toUpperCase() === "OPTGROUP") { return this.add_group(child); } else { return this.add_option(child); @@ -47,7 +48,7 @@ }; SelectParser.prototype.add_option = function(option, group_position, group_disabled) { - if (option.nodeName === "OPTION") { + if (option.nodeName.toUpperCase() === "OPTION") { if (option.text !== "") { if (group_position != null) { this.parsed[group_position].children += 1; @@ -107,12 +108,14 @@ Copyright (c) 2011 by Harvest AbstractChosen = (function() { + AbstractChosen.name = 'AbstractChosen'; + function AbstractChosen(form_field, options) { this.form_field = form_field; this.options = options != null ? options : {}; this.set_default_values(); this.is_multiple = this.form_field.multiple; - this.default_text_default = this.is_multiple ? "Select Some Options" : "Select an Option"; + this.set_default_text(); this.setup(); this.set_up_html(); this.register_observers(); @@ -134,9 +137,22 @@ Copyright (c) 2011 by Harvest this.result_single_selected = 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.search_contains = this.options.search_contains || false; this.choices = 0; - return this.results_none_found = this.options.no_results_text || "No results match"; + this.single_backstroke_delete = this.options.single_backstroke_delete || false; + return this.max_selected_options = this.options.max_selected_options || Infinity; + }; + + 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 || "Select Some Options"; + } else { + this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || "Select an Option"; + } + return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || "No results match"; }; AbstractChosen.prototype.mouse_enter = function() { @@ -149,10 +165,16 @@ Copyright (c) 2011 by Harvest AbstractChosen.prototype.input_focus = function(evt) { var _this = this; - if (!this.active_field) { - return setTimeout((function() { - return _this.container_mousedown(); - }), 50); + 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(); + } } }; @@ -188,6 +210,9 @@ Copyright (c) 2011 by Harvest }; AbstractChosen.prototype.results_update_field = function() { + if (!this.is_multiple) { + this.results_reset_cleanup(); + } this.result_clear_highlight(); this.result_single_selected = null; return this.results_build(); @@ -254,7 +279,7 @@ Copyright (c) 2011 by Harvest AbstractChosen.prototype.generate_random_char = function() { var chars, newchar, rand; - chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ"; + chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; rand = Math.floor(Math.random() * chars.length); return newchar = chars.substring(rand, rand + 1); }; @@ -276,7 +301,7 @@ Copyright (c) 2011 by Harvest (function() { var Chosen, get_side_border_padding, root, __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; }; + __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; }; root = this; @@ -284,11 +309,14 @@ Copyright (c) 2011 by Harvest __extends(Chosen, _super); + Chosen.name = 'Chosen'; + function Chosen() { return Chosen.__super__.constructor.apply(this, arguments); } Chosen.prototype.setup = function() { + this.current_value = this.form_field.value; return this.is_rtl = this.form_field.hasClassName("chzn-rtl"); }; @@ -298,22 +326,22 @@ Copyright (c) 2011 by Harvest Chosen.prototype.set_default_values = function() { Chosen.__super__.set_default_values.call(this); - this.single_temp = new Template('#{default}
              '); + this.single_temp = new Template('#{default}
                '); this.multi_temp = new Template('
                  '); this.choice_temp = new Template('
                • #{choice}
                • '); + this.choice_noclose_temp = new Template('
                • #{choice}
                • '); return this.no_results_temp = new Template('
                • ' + this.results_none_found + ' "#{terms}"
                • '); }; Chosen.prototype.set_up_html = function() { var base_template, container_props, dd_top, dd_width, sf_width; - this.container_id = this.form_field.identify().replace(/(:|\.)/g, '_') + "_chzn"; + this.container_id = this.form_field.identify().replace(/[^\w]/g, '_') + "_chzn"; this.f_width = this.form_field.getStyle("width") ? parseInt(this.form_field.getStyle("width"), 10) : this.form_field.getWidth(); container_props = { 'id': this.container_id, 'class': "chzn-container" + (this.is_rtl ? ' chzn-rtl' : ''), 'style': 'width: ' + this.f_width + 'px' }; - this.default_text = this.form_field.readAttribute('data-placeholder') ? this.form_field.readAttribute('data-placeholder') : this.default_text_default; base_template = this.is_multiple ? new Element('div', container_props).update(this.multi_temp.evaluate({ "default": this.default_text })) : new Element('div', container_props).update(this.single_temp.evaluate({ @@ -379,6 +407,12 @@ Copyright (c) 2011 by Harvest this.form_field.observe("liszt:updated", function(evt) { return _this.results_update_field(evt); }); + this.form_field.observe("liszt:activate", function(evt) { + return _this.activate_field(evt); + }); + this.form_field.observe("liszt:open", function(evt) { + return _this.container_mousedown(evt); + }); this.search_field.observe("blur", function(evt) { return _this.input_blur(evt); }); @@ -388,13 +422,13 @@ Copyright (c) 2011 by Harvest this.search_field.observe("keydown", function(evt) { return _this.keydown_checker(evt); }); + this.search_field.observe("focus", function(evt) { + return _this.input_focus(evt); + }); if (this.is_multiple) { - this.search_choices.observe("click", function(evt) { + return this.search_choices.observe("click", function(evt) { return _this.choices_click(evt); }); - return this.search_field.observe("focus", function(evt) { - return _this.input_focus(evt); - }); } else { return this.container.observe("click", function(evt) { return evt.preventDefault(); @@ -445,7 +479,7 @@ Copyright (c) 2011 by Harvest }; Chosen.prototype.container_mouseup = function(evt) { - if (evt.target.nodeName === "ABBR") { + if (evt.target.nodeName === "ABBR" && !this.is_disabled) { return this.results_reset(evt); } }; @@ -458,10 +492,6 @@ Copyright (c) 2011 by Harvest Chosen.prototype.close_field = function() { document.stopObserving("click", this.click_test_action); - if (!this.is_multiple) { - this.selected_item.tabIndex = this.search_field.tabIndex; - this.search_field.tabIndex = -1; - } this.active_field = false; this.results_hide(); this.container.removeClassName("chzn-container-active"); @@ -472,10 +502,6 @@ Copyright (c) 2011 by Harvest }; Chosen.prototype.activate_field = function() { - if (!this.is_multiple && !this.active_field) { - this.search_field.tabIndex = this.selected_item.tabIndex; - this.selected_item.tabIndex = -1; - } this.container.addClassName("chzn-container-active"); this.active_field = true; this.search_field.value = this.search_field.value; @@ -498,8 +524,8 @@ Copyright (c) 2011 by Harvest this.search_choices.select("li.search-choice").invoke("remove"); this.choices = 0; } else if (!this.is_multiple) { - this.selected_item.down("span").update(this.default_text); - if (this.form_field.options.length <= this.disable_search_threshold) { + this.selected_item.addClassName("chzn-default").down("span").update(this.default_text); + if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) { this.container.addClassName("chzn-container-single-nosearch"); } else { this.container.removeClassName("chzn-container-single-nosearch"); @@ -570,8 +596,16 @@ Copyright (c) 2011 by Harvest if (this.result_single_selected) { this.result_do_highlight(this.result_single_selected); } + } else if (this.max_selected_options <= this.choices) { + this.form_field.fire("liszt:maxselected", { + chosen: this + }); + return false; } dd_top = this.is_multiple ? this.container.getHeight() : this.container.getHeight() - 1; + this.form_field.fire("liszt:showing_dropdown", { + chosen: this + }); this.dropdown.setStyle({ "top": dd_top + "px", "left": 0 @@ -587,6 +621,9 @@ Copyright (c) 2011 by Harvest this.selected_item.removeClassName('chzn-single-with-drop'); } this.result_clear_highlight(); + this.form_field.fire("liszt:hiding_dropdown", { + chosen: this + }); this.dropdown.setStyle({ "left": "-9000px" }); @@ -598,12 +635,7 @@ Copyright (c) 2011 by Harvest if (this.form_field.tabIndex) { ti = this.form_field.tabIndex; this.form_field.tabIndex = -1; - if (this.is_multiple) { - return this.search_field.tabIndex = ti; - } else { - this.selected_item.tabIndex = ti; - return this.search_field.tabIndex = -1; - } + return this.search_field.tabIndex = ti; } }; @@ -622,7 +654,8 @@ Copyright (c) 2011 by Harvest target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result"); if (target) { this.result_highlight = target; - return this.result_select(evt); + this.result_select(evt); + return this.search_field.focus(); } }; @@ -650,19 +683,27 @@ Copyright (c) 2011 by Harvest Chosen.prototype.choice_build = function(item) { var choice_id, link, _this = this; + if (this.is_multiple && this.max_selected_options <= this.choices) { + this.form_field.fire("liszt:maxselected", { + chosen: this + }); + return false; + } choice_id = this.container_id + "_c_" + item.array_index; this.choices += 1; this.search_container.insert({ - before: this.choice_temp.evaluate({ + before: (item.disabled ? this.choice_noclose_temp : this.choice_temp).evaluate({ id: choice_id, choice: item.html, position: item.array_index }) }); - link = $(choice_id).down('a'); - return link.observe("click", function(evt) { - return _this.choice_destroy_link_click(evt); - }); + if (!item.disabled) { + link = $(choice_id).down('a'); + return link.observe("click", function(evt) { + return _this.choice_destroy_link_click(evt); + }); + } }; Chosen.prototype.choice_destroy_link_click = function(evt) { @@ -674,23 +715,24 @@ Copyright (c) 2011 by Harvest }; Chosen.prototype.choice_destroy = function(link) { - this.choices -= 1; - this.show_search_field_default(); - if (this.is_multiple && this.choices > 0 && this.search_field.value.length < 1) { - this.results_hide(); + if (this.result_deselect(link.readAttribute("rel"))) { + this.choices -= 1; + this.show_search_field_default(); + if (this.is_multiple && this.choices > 0 && this.search_field.value.length < 1) { + this.results_hide(); + } + return link.up('li').remove(); } - this.result_deselect(link.readAttribute("rel")); - return link.up('li').remove(); }; - Chosen.prototype.results_reset = function(evt) { + Chosen.prototype.results_reset = function() { this.form_field.options[0].selected = true; this.selected_item.down("span").update(this.default_text); if (!this.is_multiple) { this.selected_item.addClassName("chzn-default"); } this.show_search_field_default(); - evt.target.remove(); + this.results_reset_cleanup(); if (typeof Event.simulate === 'function') { this.form_field.simulate("change"); } @@ -699,6 +741,15 @@ Copyright (c) 2011 by Harvest } }; + Chosen.prototype.results_reset_cleanup = function() { + var deselect_trigger; + this.current_value = this.form_field.value; + deselect_trigger = this.selected_item.down("abbr"); + if (deselect_trigger) { + return deselect_trigger.remove(); + } + }; + Chosen.prototype.result_select = function(evt) { var high, item, position; if (this.result_highlight) { @@ -728,9 +779,10 @@ Copyright (c) 2011 by Harvest this.results_hide(); } this.search_field.value = ""; - if (typeof Event.simulate === 'function') { + if (typeof Event.simulate === 'function' && (this.is_multiple || this.form_field.value !== this.current_value)) { this.form_field.simulate("change"); } + this.current_value = this.form_field.value; return this.search_field_scale(); } }; @@ -746,16 +798,21 @@ Copyright (c) 2011 by Harvest Chosen.prototype.result_deselect = function(pos) { var result, result_data; result_data = this.results_data[pos]; - result_data.selected = false; - this.form_field.options[result_data.options_index].selected = false; - result = $(this.container_id + "_o_" + pos); - result.removeClassName("result-selected").addClassName("active-result").show(); - this.result_clear_highlight(); - this.winnow_results(); - if (typeof Event.simulate === 'function') { - this.form_field.simulate("change"); + if (!this.form_field.options[result_data.options_index].disabled) { + result_data.selected = false; + this.form_field.options[result_data.options_index].selected = false; + result = $(this.container_id + "_o_" + pos); + result.removeClassName("result-selected").addClassName("active-result").show(); + this.result_clear_highlight(); + this.winnow_results(); + if (typeof Event.simulate === 'function') { + this.form_field.simulate("change"); + } + this.search_field_scale(); + return true; + } else { + return false; } - return this.search_field_scale(); }; Chosen.prototype.single_deselect_control_build = function() { @@ -919,12 +976,23 @@ Copyright (c) 2011 by Harvest }; Chosen.prototype.keydown_backstroke = function() { + var next_available_destroy; if (this.pending_backstroke) { this.choice_destroy(this.pending_backstroke.down("a")); return this.clear_backstroke(); } else { - this.pending_backstroke = this.search_container.siblings("li.search-choice").last(); - return this.pending_backstroke.addClassName("search-choice-focus"); + next_available_destroy = this.search_container.siblings().last(); + if (next_available_destroy && next_available_destroy.hasClassName("search-choice") && !next_available_destroy.hasClassName("search-choice-disabled")) { + this.pending_backstroke = next_available_destroy; + if (this.pending_backstroke) { + this.pending_backstroke.addClassName("search-choice-focus"); + } + if (this.single_backstroke_delete) { + return this.keydown_backstroke(); + } else { + return this.pending_backstroke.addClassName("search-choice-focus"); + } + } } }; diff --git a/admin/thirdparty/chosen/chosen/chosen.proto.min.js b/admin/thirdparty/chosen/chosen/chosen.proto.min.js index 34967e396..c244f165a 100644 --- a/admin/thirdparty/chosen/chosen/chosen.proto.min.js +++ b/admin/thirdparty/chosen/chosen/chosen.proto.min.js @@ -6,7 +6,6 @@ // Copyright (c) 2011 Harvest http://getharvest.com // MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md - -// based on version 0.9.8, applied a very simple patch that fix percentaage width support on select tag +// based on version 0.9.8, applied a very simple patch that fixes percentage width support on select tag, and enables rise-up functionality // This file is generated by `cake build`, do not edit it by hand. -(function(){var e;e=function(){function e(){this.options_index=0,this.parsed=[]}return e.prototype.add_node=function(e){return e.nodeName==="OPTGROUP"?this.add_group(e):this.add_option(e)},e.prototype.add_group=function(e){var t,n,r,i,s,o;t=this.parsed.length,this.parsed.push({array_index:t,group:!0,label:e.label,children:0,disabled:e.disabled}),s=e.childNodes,o=[];for(r=0,i=s.length;r"+e.html+"")},e.prototype.results_update_field=function(){return this.result_clear_highlight(),this.result_single_selected=null,this.results_build()},e.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},e.prototype.results_search=function(e){return this.results_showing?this.winnow_results():this.results_show()},e.prototype.keyup_checker=function(e){var t,n;t=(n=e.which)!=null?n:e.keyCode,this.search_field_scale();switch(t){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:e.preventDefault();if(this.results_showing)return this.result_select(e);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},e.prototype.generate_field_id=function(){var e;return e=this.generate_random_id(),this.form_field.id=e,e},e.prototype.generate_random_char=function(){var e,t,n;return e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ",n=Math.floor(Math.random()*e.length),t=e.substring(n,n+1)},e}(),t.AbstractChosen=e}.call(this),function(){var e,t,n,r={}.hasOwnProperty,i=function(e,t){function i(){this.constructor=e}for(var n in t)r.call(t,n)&&(e[n]=t[n]);return i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype,e};n=this,e=function(e){function r(){return r.__super__.constructor.apply(this,arguments)}return i(r,e),r.prototype.setup=function(){return this.is_rtl=this.form_field.hasClassName("chzn-rtl")},r.prototype.finish_setup=function(){return this.form_field.addClassName("chzn-done")},r.prototype.set_default_values=function(){return r.__super__.set_default_values.call(this),this.single_temp=new Template('#{default}
                    '),this.multi_temp=new Template('
                      '),this.choice_temp=new Template('
                    • #{choice}
                    • '),this.no_results_temp=new Template('
                    • '+this.results_none_found+' "#{terms}"
                    • ')},r.prototype.set_up_html=function(){var e,n,r,i,s;return this.container_id=this.form_field.identify().replace(/(:|\.)/g,"_")+"_chzn",this.f_width=this.form_field.getStyle("width")?parseInt(this.form_field.getStyle("width"),10):this.form_field.getWidth(),n={id:this.container_id,"class":"chzn-container"+(this.is_rtl?" chzn-rtl":""),style:"width: "+this.f_width+"px"},this.default_text=this.form_field.readAttribute("data-placeholder")?this.form_field.readAttribute("data-placeholder"):this.default_text_default,e=this.is_multiple?(new Element("div",n)).update(this.multi_temp.evaluate({"default":this.default_text})):(new Element("div",n)).update(this.single_temp.evaluate({"default":this.default_text})),this.form_field.hide().insert({after:e}),this.container=$(this.container_id),this.container.addClassName("chzn-container-"+(this.is_multiple?"multi":"single")),this.dropdown=this.container.down("div.chzn-drop"),r=this.container.getHeight(),i=this.f_width-t(this.dropdown),this.dropdown.setStyle({width:i+"px",top:r+"px"}),this.search_field=this.container.down("input"),this.search_results=this.container.down("ul.chzn-results"),this.search_field_scale(),this.search_no_results=this.container.down("li.no-results"),this.is_multiple?(this.search_choices=this.container.down("ul.chzn-choices"),this.search_container=this.container.down("li.search-field")):(this.search_container=this.container.down("div.chzn-search"),this.selected_item=this.container.down(".chzn-single"),s=i-t(this.search_container)-t(this.search_field),this.search_field.setStyle({width:s+"px"})),this.results_build(),this.set_tab_index(),this.form_field.fire("liszt:ready",{chosen:this})},r.prototype.register_observers=function(){var e=this;return this.container.observe("mousedown",function(t){return e.container_mousedown(t)}),this.container.observe("mouseup",function(t){return e.container_mouseup(t)}),this.container.observe("mouseenter",function(t){return e.mouse_enter(t)}),this.container.observe("mouseleave",function(t){return e.mouse_leave(t)}),this.search_results.observe("mouseup",function(t){return e.search_results_mouseup(t)}),this.search_results.observe("mouseover",function(t){return e.search_results_mouseover(t)}),this.search_results.observe("mouseout",function(t){return e.search_results_mouseout(t)}),this.form_field.observe("liszt:updated",function(t){return e.results_update_field(t)}),this.search_field.observe("blur",function(t){return e.input_blur(t)}),this.search_field.observe("keyup",function(t){return e.keyup_checker(t)}),this.search_field.observe("keydown",function(t){return e.keydown_checker(t)}),this.is_multiple?(this.search_choices.observe("click",function(t){return e.choices_click(t)}),this.search_field.observe("focus",function(t){return e.input_focus(t)})):this.container.observe("click",function(e){return e.preventDefault()})},r.prototype.search_field_disabled=function(){this.is_disabled=this.form_field.disabled;if(this.is_disabled)return this.container.addClassName("chzn-disabled"),this.search_field.disabled=!0,this.is_multiple||this.selected_item.stopObserving("focus",this.activate_action),this.close_field();this.container.removeClassName("chzn-disabled"),this.search_field.disabled=!1;if(!this.is_multiple)return this.selected_item.observe("focus",this.activate_action)},r.prototype.container_mousedown=function(e){var t;if(!this.is_disabled)return t=e!=null?e.target.hasClassName("search-choice-close"):!1,e&&e.type==="mousedown"&&!this.results_showing&&e.stop(),!this.pending_destroy_click&&!t?(this.active_field?!this.is_multiple&&e&&(e.target===this.selected_item||e.target.up("a.chzn-single"))&&this.results_toggle():(this.is_multiple&&this.search_field.clear(),document.observe("click",this.click_test_action),this.results_show()),this.activate_field()):this.pending_destroy_click=!1},r.prototype.container_mouseup=function(e){if(e.target.nodeName==="ABBR")return this.results_reset(e)},r.prototype.blur_test=function(e){if(!this.active_field&&this.container.hasClassName("chzn-container-active"))return this.close_field()},r.prototype.close_field=function(){return document.stopObserving("click",this.click_test_action),this.is_multiple||(this.selected_item.tabIndex=this.search_field.tabIndex,this.search_field.tabIndex=-1),this.active_field=!1,this.results_hide(),this.container.removeClassName("chzn-container-active"),this.winnow_results_clear(),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},r.prototype.activate_field=function(){return!this.is_multiple&&!this.active_field&&(this.search_field.tabIndex=this.selected_item.tabIndex,this.selected_item.tabIndex=-1),this.container.addClassName("chzn-container-active"),this.active_field=!0,this.search_field.value=this.search_field.value,this.search_field.focus()},r.prototype.test_active_click=function(e){return e.target.up("#"+this.container_id)?this.active_field=!0:this.close_field()},r.prototype.results_build=function(){var e,t,r,i,s;this.parsing=!0,this.results_data=n.SelectParser.select_to_array(this.form_field),this.is_multiple&&this.choices>0?(this.search_choices.select("li.search-choice").invoke("remove"),this.choices=0):this.is_multiple||(this.selected_item.down("span").update(this.default_text),this.form_field.options.length<=this.disable_search_threshold?this.container.addClassName("chzn-container-single-nosearch"):this.container.removeClassName("chzn-container-single-nosearch")),e="",s=this.results_data;for(r=0,i=s.length;r'+e.label.escapeHTML()+"")},r.prototype.result_do_highlight=function(e){var t,n,r,i,s;this.result_clear_highlight(),this.result_highlight=e,this.result_highlight.addClassName("highlighted"),r=parseInt(this.search_results.getStyle("maxHeight"),10),s=this.search_results.scrollTop,i=r+s,n=this.result_highlight.positionedOffset().top,t=n+this.result_highlight.getHeight();if(t>=i)return this.search_results.scrollTop=t-r>0?t-r:0;if(n0&&this.search_field.value.length<1&&this.results_hide(),this.result_deselect(e.readAttribute("rel")),e.up("li").remove()},r.prototype.results_reset=function(e){this.form_field.options[0].selected=!0,this.selected_item.down("span").update(this.default_text),this.is_multiple||this.selected_item.addClassName("chzn-default"),this.show_search_field_default(),e.target.remove(),typeof Event.simulate=="function"&&this.form_field.simulate("change");if(this.active_field)return this.results_hide()},r.prototype.result_select=function(e){var t,n,r;if(this.result_highlight)return t=this.result_highlight,this.result_clear_highlight(),this.is_multiple?this.result_deactivate(t):(this.search_results.descendants(".result-selected").invoke("removeClassName","result-selected"),this.selected_item.removeClassName("chzn-default"),this.result_single_selected=t),t.addClassName("result-selected"),r=t.id.substr(t.id.lastIndexOf("_")+1),n=this.results_data[r],n.selected=!0,this.form_field.options[n.options_index].selected=!0,this.is_multiple?this.choice_build(n):(this.selected_item.down("span").update(n.html),this.allow_single_deselect&&this.single_deselect_control_build()),(!e.metaKey||!this.is_multiple)&&this.results_hide(),this.search_field.value="",typeof Event.simulate=="function"&&this.form_field.simulate("change"),this.search_field_scale()},r.prototype.result_activate=function(e){return e.addClassName("active-result")},r.prototype.result_deactivate=function(e){return e.removeClassName("active-result")},r.prototype.result_deselect=function(e){var t,n;return n=this.results_data[e],n.selected=!1,this.form_field.options[n.options_index].selected=!1,t=$(this.container_id+"_o_"+e),t.removeClassName("result-selected").addClassName("active-result").show(),this.result_clear_highlight(),this.winnow_results(),typeof Event.simulate=="function"&&this.form_field.simulate("change"),this.search_field_scale()},r.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect&&!this.selected_item.down("abbr"))return this.selected_item.down("span").insert({after:''})},r.prototype.winnow_results=function(){var e,t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m;this.no_results_clear(),u=0,a=this.search_field.value===this.default_text?"":this.search_field.value.strip().escapeHTML(),s=this.search_contains?"":"^",i=new RegExp(s+a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),c=new RegExp(a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),m=this.results_data;for(h=0,d=m.length;h=0||t.html.indexOf("[")===0){r=t.html.replace(/\[|\]/g,"").split(" ");if(r.length)for(p=0,v=r.length;p"+t.html.substr(f+a.length),l=l.substr(0,f)+""+l.substr(f)):l=t.html,$(o).innerHTML!==l&&$(o).update(l),this.result_activate($(o)),t.group_array_index!=null&&$(this.results_data[t.group_array_index].dom_id).setStyle({display:"list-item"})):($(o)===this.result_highlight&&this.result_clear_highlight(),this.result_deactivate($(o)))}}return u<1&&a.length?this.no_results(a):this.winnow_results_set_highlight()},r.prototype.winnow_results_clear=function(){var e,t,n,r,i;this.search_field.clear(),t=this.search_results.select("li"),i=[];for(n=0,r=t.length;n0&&this.results_hide(),this.result_clear_highlight())},r.prototype.keydown_backstroke=function(){return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.down("a")),this.clear_backstroke()):(this.pending_backstroke=this.search_container.siblings("li.search-choice").last(),this.pending_backstroke.addClassName("search-choice-focus"))},r.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClassName("search-choice-focus"),this.pending_backstroke=null},r.prototype.keydown_checker=function(e){var t,n;t=(n=e.which)!=null?n:e.keyCode,this.search_field_scale(),t!==8&&this.pending_backstroke&&this.clear_backstroke();switch(t){case 8:this.backstroke_length=this.search_field.value.length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(e),this.mouse_on_container=!1;break;case 13:e.preventDefault();break;case 38:e.preventDefault(),this.keyup_arrow();break;case 40:this.keydown_arrow()}},r.prototype.search_field_scale=function(){var e,t,n,r,i,s,o,u,a;if(this.is_multiple){n=0,o=0,i="position:absolute; left: -1000px; top: -1000px; display:none;",s=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(u=0,a=s.length;uthis.f_width-10&&(o=this.f_width-10),this.search_field.setStyle({width:o+"px"}),e=this.container.getHeight(),this.dropdown.setStyle({top:e+"px"})}},r}(AbstractChosen),n.Chosen=e,Prototype.Browser.IE&&/MSIE (\d+\.\d+);/.test(navigator.userAgent)&&(Prototype.BrowserFeatures.Version=new Number(RegExp.$1)),t=function(e){var t,n;return t=new Element.Layout(e),n=t.get("border-left")+t.get("border-right")+t.get("padding-left")+t.get("padding-right")},n.get_side_border_padding=t}.call(this); \ No newline at end of file +(function(){var a;a=function(){function a(){this.options_index=0,this.parsed=[]}return a.name="SelectParser",a.prototype.add_node=function(a){return a.nodeName.toUpperCase()==="OPTGROUP"?this.add_group(a):this.add_option(a)},a.prototype.add_group=function(a){var b,c,d,e,f,g;b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:a.label,children:0,disabled:a.disabled}),f=a.childNodes,g=[];for(d=0,e=f.length;d"+a.html+"")},a.prototype.results_update_field=function(){return this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.result_single_selected=null,this.results_build()},a.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},a.prototype.results_search=function(a){return this.results_showing?this.winnow_results():this.results_show()},a.prototype.keyup_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale();switch(b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:a.preventDefault();if(this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},a.prototype.generate_field_id=function(){var a;return a=this.generate_random_id(),this.form_field.id=a,a},a.prototype.generate_random_char=function(){var a,b,c;return a="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",c=Math.floor(Math.random()*a.length),b=a.substring(c,c+1)},a}(),b.AbstractChosen=a}.call(this),function(){var a,b,c,d={}.hasOwnProperty,e=function(a,b){function e(){this.constructor=a}for(var c in b)d.call(b,c)&&(a[c]=b[c]);return e.prototype=b.prototype,a.prototype=new e,a.__super__=b.prototype,a};c=this,a=function(a){function d(){return d.__super__.constructor.apply(this,arguments)}return e(d,a),d.name="Chosen",d.prototype.setup=function(){return this.current_value=this.form_field.value,this.is_rtl=this.form_field.hasClassName("chzn-rtl")},d.prototype.finish_setup=function(){return this.form_field.addClassName("chzn-done")},d.prototype.set_default_values=function(){return d.__super__.set_default_values.call(this),this.single_temp=new Template('#{default}
                        '),this.multi_temp=new Template('
                          '),this.choice_temp=new Template('
                        • #{choice}
                        • '),this.choice_noclose_temp=new Template('
                        • #{choice}
                        • '),this.no_results_temp=new Template('
                        • '+this.results_none_found+' "#{terms}"
                        • ')},d.prototype.set_up_html=function(){var a,c,d,e,f;return this.container_id=this.form_field.identify().replace(/[^\w]/g,"_")+"_chzn",this.f_width=this.form_field.getStyle("width")?parseInt(this.form_field.getStyle("width"),10):this.form_field.getWidth(),c={id:this.container_id,"class":"chzn-container"+(this.is_rtl?" chzn-rtl":""),style:"width: "+this.f_width+"px"},a=this.is_multiple?(new Element("div",c)).update(this.multi_temp.evaluate({"default":this.default_text})):(new Element("div",c)).update(this.single_temp.evaluate({"default":this.default_text})),this.form_field.hide().insert({after:a}),this.container=$(this.container_id),this.container.addClassName("chzn-container-"+(this.is_multiple?"multi":"single")),this.dropdown=this.container.down("div.chzn-drop"),d=this.container.getHeight(),e=this.f_width-b(this.dropdown),this.dropdown.setStyle({width:e+"px",top:d+"px"}),this.search_field=this.container.down("input"),this.search_results=this.container.down("ul.chzn-results"),this.search_field_scale(),this.search_no_results=this.container.down("li.no-results"),this.is_multiple?(this.search_choices=this.container.down("ul.chzn-choices"),this.search_container=this.container.down("li.search-field")):(this.search_container=this.container.down("div.chzn-search"),this.selected_item=this.container.down(".chzn-single"),f=e-b(this.search_container)-b(this.search_field),this.search_field.setStyle({width:f+"px"})),this.results_build(),this.set_tab_index(),this.form_field.fire("liszt:ready",{chosen:this})},d.prototype.register_observers=function(){var a=this;return this.container.observe("mousedown",function(b){return a.container_mousedown(b)}),this.container.observe("mouseup",function(b){return a.container_mouseup(b)}),this.container.observe("mouseenter",function(b){return a.mouse_enter(b)}),this.container.observe("mouseleave",function(b){return a.mouse_leave(b)}),this.search_results.observe("mouseup",function(b){return a.search_results_mouseup(b)}),this.search_results.observe("mouseover",function(b){return a.search_results_mouseover(b)}),this.search_results.observe("mouseout",function(b){return a.search_results_mouseout(b)}),this.form_field.observe("liszt:updated",function(b){return a.results_update_field(b)}),this.form_field.observe("liszt:activate",function(b){return a.activate_field(b)}),this.form_field.observe("liszt:open",function(b){return a.container_mousedown(b)}),this.search_field.observe("blur",function(b){return a.input_blur(b)}),this.search_field.observe("keyup",function(b){return a.keyup_checker(b)}),this.search_field.observe("keydown",function(b){return a.keydown_checker(b)}),this.search_field.observe("focus",function(b){return a.input_focus(b)}),this.is_multiple?this.search_choices.observe("click",function(b){return a.choices_click(b)}):this.container.observe("click",function(a){return a.preventDefault()})},d.prototype.search_field_disabled=function(){this.is_disabled=this.form_field.disabled;if(this.is_disabled)return this.container.addClassName("chzn-disabled"),this.search_field.disabled=!0,this.is_multiple||this.selected_item.stopObserving("focus",this.activate_action),this.close_field();this.container.removeClassName("chzn-disabled"),this.search_field.disabled=!1;if(!this.is_multiple)return this.selected_item.observe("focus",this.activate_action)},d.prototype.container_mousedown=function(a){var b;if(!this.is_disabled)return b=a!=null?a.target.hasClassName("search-choice-close"):!1,a&&a.type==="mousedown"&&!this.results_showing&&a.stop(),!this.pending_destroy_click&&!b?(this.active_field?!this.is_multiple&&a&&(a.target===this.selected_item||a.target.up("a.chzn-single"))&&this.results_toggle():(this.is_multiple&&this.search_field.clear(),document.observe("click",this.click_test_action),this.results_show()),this.activate_field()):this.pending_destroy_click=!1},d.prototype.container_mouseup=function(a){if(a.target.nodeName==="ABBR"&&!this.is_disabled)return this.results_reset(a)},d.prototype.blur_test=function(a){if(!this.active_field&&this.container.hasClassName("chzn-container-active"))return this.close_field()},d.prototype.close_field=function(){return document.stopObserving("click",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClassName("chzn-container-active"),this.winnow_results_clear(),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},d.prototype.activate_field=function(){return this.container.addClassName("chzn-container-active"),this.active_field=!0,this.search_field.value=this.search_field.value,this.search_field.focus()},d.prototype.test_active_click=function(a){return a.target.up("#"+this.container_id)?this.active_field=!0:this.close_field()},d.prototype.results_build=function(){var a,b,d,e,f;this.parsing=!0,this.results_data=c.SelectParser.select_to_array(this.form_field),this.is_multiple&&this.choices>0?(this.search_choices.select("li.search-choice").invoke("remove"),this.choices=0):this.is_multiple||(this.selected_item.addClassName("chzn-default").down("span").update(this.default_text),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?this.container.addClassName("chzn-container-single-nosearch"):this.container.removeClassName("chzn-container-single-nosearch")),a="",f=this.results_data;for(d=0,e=f.length;d'+a.label.escapeHTML()+"")},d.prototype.result_do_highlight=function(a){var b,c,d,e,f;this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClassName("highlighted"),d=parseInt(this.search_results.getStyle("maxHeight"),10),f=this.search_results.scrollTop,e=d+f,c=this.result_highlight.positionedOffset().top,b=c+this.result_highlight.getHeight();if(b>=e)return this.search_results.scrollTop=b-d>0?b-d:0;if(c0&&this.search_field.value.length<1&&this.results_hide(),a.up("li").remove()},d.prototype.results_reset=function(){this.form_field.options[0].selected=!0,this.selected_item.down("span").update(this.default_text),this.is_multiple||this.selected_item.addClassName("chzn-default"),this.show_search_field_default(),this.results_reset_cleanup(),typeof Event.simulate=="function"&&this.form_field.simulate("change");if(this.active_field)return this.results_hide()},d.prototype.results_reset_cleanup=function(){var a;this.current_value=this.form_field.value,a=this.selected_item.down("abbr");if(a)return a.remove()},d.prototype.result_select=function(a){var b,c,d;if(this.result_highlight)return b=this.result_highlight,this.result_clear_highlight(),this.is_multiple?this.result_deactivate(b):(this.search_results.descendants(".result-selected").invoke("removeClassName","result-selected"),this.selected_item.removeClassName("chzn-default"),this.result_single_selected=b),b.addClassName("result-selected"),d=b.id.substr(b.id.lastIndexOf("_")+1),c=this.results_data[d],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.is_multiple?this.choice_build(c):(this.selected_item.down("span").update(c.html),this.allow_single_deselect&&this.single_deselect_control_build()),(!a.metaKey||!this.is_multiple)&&this.results_hide(),this.search_field.value="",typeof Event.simulate=="function"&&(this.is_multiple||this.form_field.value!==this.current_value)&&this.form_field.simulate("change"),this.current_value=this.form_field.value,this.search_field_scale()},d.prototype.result_activate=function(a){return a.addClassName("active-result")},d.prototype.result_deactivate=function(a){return a.removeClassName("active-result")},d.prototype.result_deselect=function(a){var b,c;return c=this.results_data[a],this.form_field.options[c.options_index].disabled?!1:(c.selected=!1,this.form_field.options[c.options_index].selected=!1,b=$(this.container_id+"_o_"+a),b.removeClassName("result-selected").addClassName("active-result").show(),this.result_clear_highlight(),this.winnow_results(),typeof Event.simulate=="function"&&this.form_field.simulate("change"),this.search_field_scale(),!0)},d.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect&&!this.selected_item.down("abbr"))return this.selected_item.down("span").insert({after:''})},d.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q;this.no_results_clear(),h=0,i=this.search_field.value===this.default_text?"":this.search_field.value.strip().escapeHTML(),f=this.search_contains?"":"^",e=new RegExp(f+i.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),l=new RegExp(i.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),q=this.results_data;for(m=0,o=q.length;m=0||b.html.indexOf("[")===0){d=b.html.replace(/\[|\]/g,"").split(" ");if(d.length)for(n=0,p=d.length;n"+b.html.substr(j+i.length),k=k.substr(0,j)+""+k.substr(j)):k=b.html,$(g).innerHTML!==k&&$(g).update(k),this.result_activate($(g)),b.group_array_index!=null&&$(this.results_data[b.group_array_index].dom_id).setStyle({display:"list-item"})):($(g)===this.result_highlight&&this.result_clear_highlight(),this.result_deactivate($(g)))}}return h<1&&i.length?this.no_results(i):this.winnow_results_set_highlight()},d.prototype.winnow_results_clear=function(){var a,b,c,d,e;this.search_field.clear(),b=this.search_results.select("li"),e=[];for(c=0,d=b.length;c0&&this.results_hide(),this.result_clear_highlight())},d.prototype.keydown_backstroke=function(){var a;if(this.pending_backstroke)return this.choice_destroy(this.pending_backstroke.down("a")),this.clear_backstroke();a=this.search_container.siblings().last();if(a&&a.hasClassName("search-choice")&&!a.hasClassName("search-choice-disabled"))return this.pending_backstroke=a,this.pending_backstroke&&this.pending_backstroke.addClassName("search-choice-focus"),this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClassName("search-choice-focus")},d.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClassName("search-choice-focus"),this.pending_backstroke=null},d.prototype.keydown_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale(),b!==8&&this.pending_backstroke&&this.clear_backstroke();switch(b){case 8:this.backstroke_length=this.search_field.value.length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:this.keydown_arrow()}},d.prototype.search_field_scale=function(){var a,b,c,d,e,f,g,h,i;if(this.is_multiple){c=0,g=0,e="position:absolute; left: -1000px; top: -1000px; display:none;",f=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(h=0,i=f.length;hthis.f_width-10&&(g=this.f_width-10),this.search_field.setStyle({width:g+"px"}),a=this.container.getHeight(),this.dropdown.setStyle({top:a+"px"})}},d}(AbstractChosen),c.Chosen=a,Prototype.Browser.IE&&/MSIE (\d+\.\d+);/.test(navigator.userAgent)&&(Prototype.BrowserFeatures.Version=new Number(RegExp.$1)),b=function(a){var b,c;return b=new Element.Layout(a),c=b.get("border-left")+b.get("border-right")+b.get("padding-left")+b.get("padding-right")},c.get_side_border_padding=b}.call(this); \ No newline at end of file diff --git a/admin/thirdparty/chosen/coffee/chosen.jquery.coffee b/admin/thirdparty/chosen/coffee/chosen.jquery.coffee index 7f89539c4..264da6cdb 100644 --- a/admin/thirdparty/chosen/coffee/chosen.jquery.coffee +++ b/admin/thirdparty/chosen/coffee/chosen.jquery.coffee @@ -9,7 +9,8 @@ $.fn.extend({ chosen: (options) -> # Do no harm and return as soon as possible for unsupported browsers, namely IE6 and IE7 - return this if $.browser.msie and ($.browser.version is "6.0" or $.browser.version is "7.0") + # Continue on if running IE document type but in compatibility mode + return this if $.browser.msie and ($.browser.version is "6.0" or ($.browser.version is "7.0" and document.documentMode is 7 )) this.each((input_field) -> $this = $ this $this.data('chosen', new Chosen(this, options)) unless $this.hasClass "chzn-done" @@ -20,6 +21,7 @@ class Chosen extends AbstractChosen setup: -> @form_field_jq = $ @form_field + @current_value = @form_field_jq.val() @is_rtl = @form_field_jq.hasClass "chzn-rtl" finish_setup: -> @@ -45,7 +47,7 @@ class Chosen extends AbstractChosen if @is_multiple container_div.html '
                            ' else - container_div.html '' + this.default_text + '
                              ' + container_div.html '' + @default_text + '
                                ' @form_field_jq.hide().after container_div @container = ($ '#' + @container_id) @@ -94,16 +96,19 @@ class Chosen extends AbstractChosen @search_results.mouseout (evt) => this.search_results_mouseout(evt) @form_field_jq.bind "liszt:updated", (evt) => this.results_update_field(evt) + @form_field_jq.bind "liszt:activate", (evt) => this.activate_field(evt) + @form_field_jq.bind "liszt:open", (evt) => this.container_mousedown(evt) @search_field.blur (evt) => this.input_blur(evt) @search_field.keyup (evt) => this.keyup_checker(evt) @search_field.keydown (evt) => this.keydown_checker(evt) + @search_field.focus (evt) => this.input_focus(evt) if @is_multiple @search_choices.click (evt) => this.choices_click(evt) - @search_field.focus (evt) => this.input_focus(evt) else @container.click (evt) => evt.preventDefault() # gobble click of anchor + search_field_disabled: -> @is_disabled = @form_field_jq[0].disabled @@ -136,7 +141,7 @@ class Chosen extends AbstractChosen @pending_destroy_click = false container_mouseup: (evt) -> - this.results_reset(evt) if evt.target.nodeName is "ABBR" + this.results_reset(evt) if evt.target.nodeName is "ABBR" and not @is_disabled blur_test: (evt) -> this.close_field() if not @active_field and @container.hasClass "chzn-container-active" @@ -159,10 +164,6 @@ class Chosen extends AbstractChosen this.search_field_scale() activate_field: -> - if not @is_multiple and not @active_field - @search_field.attr "tabindex", (@selected_item.attr "tabindex") - @selected_item.attr "tabindex", -1 - @container.addClass "chzn-container-active" @active_field = true @@ -185,8 +186,8 @@ class Chosen extends AbstractChosen @search_choices.find("li.search-choice").remove() @choices = 0 else if not @is_multiple - @selected_item.find("span").text @default_text - if @form_field.options.length <= @disable_search_threshold + @selected_item.addClass("chzn-default").find("span").text(@default_text) + if @disable_search or @form_field.options.length <= @disable_search_threshold @container.addClass "chzn-container-single-nosearch" else @container.removeClass "chzn-container-single-nosearch" @@ -246,15 +247,18 @@ class Chosen extends AbstractChosen if @result_single_selected this.result_do_highlight( @result_single_selected ) + #patch applied: https://github.com/harvesthq/chosen/issues/300, add variable assignment dd_width + dd_width = this.container.width() - get_side_border_padding(@dropdown); + + ### CALL CUSTOM FUNCTION: rise_up # if rise-up true, reverse drop-up direction ### rise = @rise_up(@container, @dropdown) dd_top = if rise then -this.container.find('.chzn-drop').height() else if @is_multiple then @container.height() else (@container.height() - 1) - - #patch applied: https://github.com/harvesthq/chosen/issues/300, add variable assignment dd_width - dd_width = this.container.width() - get_side_border_padding(@dropdown); + + @form_field_jq.trigger("liszt:showing_dropdown", {chosen: this}) @dropdown.css {"top": dd_top + "px", "left":0} @results_showing = true @@ -270,6 +274,7 @@ class Chosen extends AbstractChosen results_hide: -> @selected_item.removeClass "chzn-single-with-drop" unless @is_multiple this.result_clear_highlight() + @form_field_jq.trigger("liszt:hiding_dropdown", {chosen: this}) @dropdown.css {"left":"-9000px"} @results_showing = false @@ -278,12 +283,7 @@ class Chosen extends AbstractChosen if @form_field_jq.attr "tabindex" ti = @form_field_jq.attr "tabindex" @form_field_jq.attr "tabindex", -1 - - if @is_multiple - @search_field.attr "tabindex", ti - else - @selected_item.attr "tabindex", ti - @search_field.attr "tabindex", -1 + @search_field.attr "tabindex", ti show_search_field_default: -> if @is_multiple and @choices < 1 and not @active_field @@ -298,6 +298,7 @@ class Chosen extends AbstractChosen if target.length @result_highlight = target this.result_select(evt) + @search_field.focus() search_results_mouseover: (evt) -> target = if $(evt.target).hasClass "active-result" then $(evt.target) else $(evt.target).parents(".active-result").first() @@ -315,7 +316,11 @@ class Chosen extends AbstractChosen choice_build: (item) -> choice_id = @container_id + "_c_" + item.array_index @choices += 1 - @search_container.before '
                              • ' + item.html + '
                              • ' + if item.disabled + html = '
                              • ' + item.html + '
                              • ' + else + html = '
                              • ' + item.html + '
                              • ' + @search_container.before html link = $('#' + choice_id).find("a").first() link.click (evt) => this.choice_destroy_link_click(evt) @@ -328,22 +333,26 @@ class Chosen extends AbstractChosen evt.stopPropagation choice_destroy: (link) -> - @choices -= 1 - this.show_search_field_default() + if this.result_deselect (link.attr "rel") + @choices -= 1 + this.show_search_field_default() - this.results_hide() if @is_multiple and @choices > 0 and @search_field.val().length < 1 + this.results_hide() if @is_multiple and @choices > 0 and @search_field.val().length < 1 - this.result_deselect (link.attr "rel") - link.parents('li').first().remove() + link.parents('li').first().remove() - results_reset: (evt) -> + results_reset: -> @form_field.options[0].selected = true @selected_item.find("span").text @default_text @selected_item.addClass("chzn-default") if not @is_multiple this.show_search_field_default() - $(evt.target).remove(); + this.results_reset_cleanup() @form_field_jq.trigger "change" this.results_hide() if @active_field + + results_reset_cleanup: -> + @current_value = @form_field_jq.val() + @selected_item.find("abbr").remove() result_select: (evt) -> if @result_highlight @@ -377,7 +386,8 @@ class Chosen extends AbstractChosen @search_field.val "" - @form_field_jq.trigger "change" + @form_field_jq.trigger "change", {'selected': @form_field.options[item.options_index].value} if @is_multiple || @form_field_jq.val() != @current_value + @current_value = @form_field_jq.val() this.search_field_scale() result_activate: (el) -> @@ -388,17 +398,23 @@ class Chosen extends AbstractChosen result_deselect: (pos) -> result_data = @results_data[pos] - result_data.selected = false - @form_field.options[result_data.options_index].selected = false - result = $("#" + @container_id + "_o_" + pos) - result.removeClass("result-selected").addClass("active-result").show() + if not @form_field.options[result_data.options_index].disabled + result_data.selected = false + + @form_field.options[result_data.options_index].selected = false + result = $("#" + @container_id + "_o_" + pos) + result.removeClass("result-selected").addClass("active-result").show() - this.result_clear_highlight() - this.winnow_results() + this.result_clear_highlight() + this.winnow_results() - @form_field_jq.trigger "change" - this.search_field_scale() + @form_field_jq.trigger "change", {deselected: @form_field.options[result_data.options_index].value} + this.search_field_scale() + + return true + else + return false single_deselect_control_build: -> @selected_item.find("span").first().after "" if @allow_single_deselect and @selected_item.find("abbr").length < 1 @@ -509,8 +525,13 @@ class Chosen extends AbstractChosen this.choice_destroy @pending_backstroke.find("a").first() this.clear_backstroke() else - @pending_backstroke = @search_container.siblings("li.search-choice").last() - @pending_backstroke.addClass "search-choice-focus" + next_available_destroy = @search_container.siblings("li.search-choice").last() + if next_available_destroy.length and not next_available_destroy.hasClass("search-choice-disabled") + @pending_backstroke = next_available_destroy + if @single_backstroke_delete + @keydown_backstroke() + else + @pending_backstroke.addClass "search-choice-focus" clear_backstroke: -> @pending_backstroke.removeClass "search-choice-focus" if @pending_backstroke @@ -570,7 +591,7 @@ class Chosen extends AbstractChosen ### rise = @rise_up(@container, @dropdown) dd_top = if rise then -this.container.find('.chzn-drop').height() else @container.height() - + @dropdown.css({"top": dd_top + "px"}) generate_random_id: -> diff --git a/admin/thirdparty/chosen/coffee/chosen.proto.coffee b/admin/thirdparty/chosen/coffee/chosen.proto.coffee index d63d64047..2cfe0fd5e 100644 --- a/admin/thirdparty/chosen/coffee/chosen.proto.coffee +++ b/admin/thirdparty/chosen/coffee/chosen.proto.coffee @@ -7,6 +7,7 @@ root = this class Chosen extends AbstractChosen setup: -> + @current_value = @form_field.value @is_rtl = @form_field.hasClassName "chzn-rtl" finish_setup: -> @@ -16,13 +17,14 @@ class Chosen extends AbstractChosen super() # HTML Templates - @single_temp = new Template('#{default}
                                  ') + @single_temp = new Template('#{default}
                                    ') @multi_temp = new Template('
                                      ') @choice_temp = new Template('
                                    • #{choice}
                                    • ') + @choice_noclose_temp = new Template('
                                    • #{choice}
                                    • ') @no_results_temp = new Template('
                                    • ' + @results_none_found + ' "#{terms}"
                                    • ') set_up_html: -> - @container_id = @form_field.identify().replace(/(:|\.)/g, '_') + "_chzn" + @container_id = @form_field.identify().replace(/[^\w]/g, '_') + "_chzn" @f_width = if @form_field.getStyle("width") then parseInt @form_field.getStyle("width"), 10 else @form_field.getWidth() @@ -31,8 +33,6 @@ class Chosen extends AbstractChosen 'class': "chzn-container#{ if @is_rtl then ' chzn-rtl' else '' }" 'style': 'width: ' + (@f_width) + 'px' #use parens around @f_width so coffeescript doesn't think + ' px' is a function parameter - @default_text = if @form_field.readAttribute 'data-placeholder' then @form_field.readAttribute 'data-placeholder' else @default_text_default - base_template = if @is_multiple then new Element('div', container_props).update( @multi_temp.evaluate({ "default": @default_text}) ) else new Element('div', container_props).update( @single_temp.evaluate({ "default":@default_text }) ) @form_field.hide().insert({ after: base_template }) @@ -75,14 +75,16 @@ class Chosen extends AbstractChosen @search_results.observe "mouseout", (evt) => this.search_results_mouseout(evt) @form_field.observe "liszt:updated", (evt) => this.results_update_field(evt) + @form_field.observe "liszt:activate", (evt) => this.activate_field(evt) + @form_field.observe "liszt:open", (evt) => this.container_mousedown(evt) @search_field.observe "blur", (evt) => this.input_blur(evt) @search_field.observe "keyup", (evt) => this.keyup_checker(evt) @search_field.observe "keydown", (evt) => this.keydown_checker(evt) + @search_field.observe "focus", (evt) => this.input_focus(evt) if @is_multiple @search_choices.observe "click", (evt) => this.choices_click(evt) - @search_field.observe "focus", (evt) => this.input_focus(evt) else @container.observe "click", (evt) => evt.preventDefault() # gobble click of anchor @@ -116,7 +118,7 @@ class Chosen extends AbstractChosen @pending_destroy_click = false container_mouseup: (evt) -> - this.results_reset(evt) if evt.target.nodeName is "ABBR" + this.results_reset(evt) if evt.target.nodeName is "ABBR" and not @is_disabled blur_test: (evt) -> this.close_field() if not @active_field and @container.hasClassName("chzn-container-active") @@ -124,10 +126,6 @@ class Chosen extends AbstractChosen close_field: -> document.stopObserving "click", @click_test_action - if not @is_multiple - @selected_item.tabIndex = @search_field.tabIndex - @search_field.tabIndex = -1 - @active_field = false this.results_hide() @@ -139,17 +137,12 @@ class Chosen extends AbstractChosen this.search_field_scale() activate_field: -> - if not @is_multiple and not @active_field - @search_field.tabIndex = @selected_item.tabIndex - @selected_item.tabIndex = -1 - @container.addClassName "chzn-container-active" @active_field = true @search_field.value = @search_field.value @search_field.focus() - test_active_click: (evt) -> if evt.target.up('#' + @container_id) @active_field = true @@ -164,8 +157,8 @@ class Chosen extends AbstractChosen @search_choices.select("li.search-choice").invoke("remove") @choices = 0 else if not @is_multiple - @selected_item.down("span").update(@default_text) - if @form_field.options.length <= @disable_search_threshold + @selected_item.addClassName("chzn-default").down("span").update(@default_text) + if @disable_search or @form_field.options.length <= @disable_search_threshold @container.addClassName "chzn-container-single-nosearch" else @container.removeClassName "chzn-container-single-nosearch" @@ -224,8 +217,12 @@ class Chosen extends AbstractChosen @selected_item.addClassName('chzn-single-with-drop') if @result_single_selected this.result_do_highlight( @result_single_selected ) + else if @max_selected_options <= @choices + @form_field.fire("liszt:maxselected", {chosen: this}) + return false dd_top = if @is_multiple then @container.getHeight() else (@container.getHeight() - 1) + @form_field.fire("liszt:showing_dropdown", {chosen: this}) @dropdown.setStyle {"top": dd_top + "px", "left":0} @results_showing = true @@ -237,6 +234,7 @@ class Chosen extends AbstractChosen results_hide: -> @selected_item.removeClassName('chzn-single-with-drop') unless @is_multiple this.result_clear_highlight() + @form_field.fire("liszt:hiding_dropdown", {chosen: this}) @dropdown.setStyle({"left":"-9000px"}) @results_showing = false @@ -245,12 +243,7 @@ class Chosen extends AbstractChosen if @form_field.tabIndex ti = @form_field.tabIndex @form_field.tabIndex = -1 - - if @is_multiple - @search_field.tabIndex = ti - else - @selected_item.tabIndex = ti - @search_field.tabIndex = -1 + @search_field.tabIndex = ti show_search_field_default: -> if @is_multiple and @choices < 1 and not @active_field @@ -265,6 +258,7 @@ class Chosen extends AbstractChosen if target @result_highlight = target this.result_select(evt) + @search_field.focus() search_results_mouseover: (evt) -> target = if evt.target.hasClassName("active-result") then evt.target else evt.target.up(".active-result") @@ -280,15 +274,19 @@ class Chosen extends AbstractChosen this.results_show() choice_build: (item) -> + if @is_multiple and @max_selected_options <= @choices + @form_field.fire("liszt:maxselected", {chosen: this}) + return false choice_id = @container_id + "_c_" + item.array_index @choices += 1 @search_container.insert - before: @choice_temp.evaluate + before: (if item.disabled then @choice_noclose_temp else @choice_temp).evaluate id: choice_id choice: item.html position: item.array_index - link = $(choice_id).down('a') - link.observe "click", (evt) => this.choice_destroy_link_click(evt) + if not item.disabled + link = $(choice_id).down('a') + link.observe "click", (evt) => this.choice_destroy_link_click(evt) choice_destroy_link_click: (evt) -> evt.preventDefault() @@ -297,22 +295,27 @@ class Chosen extends AbstractChosen this.choice_destroy evt.target choice_destroy: (link) -> - @choices -= 1 - this.show_search_field_default() + if this.result_deselect link.readAttribute("rel") + @choices -= 1 + this.show_search_field_default() - this.results_hide() if @is_multiple and @choices > 0 and @search_field.value.length < 1 + this.results_hide() if @is_multiple and @choices > 0 and @search_field.value.length < 1 - this.result_deselect link.readAttribute("rel") - link.up('li').remove() + link.up('li').remove() - results_reset: (evt) -> + results_reset: -> @form_field.options[0].selected = true @selected_item.down("span").update(@default_text) @selected_item.addClassName("chzn-default") if not @is_multiple this.show_search_field_default() - evt.target.remove() + this.results_reset_cleanup() @form_field.simulate("change") if typeof Event.simulate is 'function' this.results_hide() if @active_field + + results_reset_cleanup: -> + @current_value = @form_field.value + deselect_trigger = @selected_item.down("abbr") + deselect_trigger.remove() if(deselect_trigger) result_select: (evt) -> if @result_highlight @@ -343,8 +346,10 @@ class Chosen extends AbstractChosen this.results_hide() unless evt.metaKey and @is_multiple @search_field.value = "" - - @form_field.simulate("change") if typeof Event.simulate is 'function' + + @form_field.simulate("change") if typeof Event.simulate is 'function' && (@is_multiple || @form_field.value != @current_value) + @current_value = @form_field.value + this.search_field_scale() result_activate: (el) -> @@ -355,17 +360,22 @@ class Chosen extends AbstractChosen result_deselect: (pos) -> result_data = @results_data[pos] - result_data.selected = false + + if not @form_field.options[result_data.options_index].disabled + result_data.selected = false - @form_field.options[result_data.options_index].selected = false - result = $(@container_id + "_o_" + pos) - result.removeClassName("result-selected").addClassName("active-result").show() + @form_field.options[result_data.options_index].selected = false + result = $(@container_id + "_o_" + pos) + result.removeClassName("result-selected").addClassName("active-result").show() - this.result_clear_highlight() - this.winnow_results() + this.result_clear_highlight() + this.winnow_results() - @form_field.simulate("change") if typeof Event.simulate is 'function' - this.search_field_scale() + @form_field.simulate("change") if typeof Event.simulate is 'function' + this.search_field_scale() + return true + else + return false single_deselect_control_build: -> @selected_item.down("span").insert { after: "" } if @allow_single_deselect and not @selected_item.down("abbr") @@ -481,8 +491,14 @@ class Chosen extends AbstractChosen this.choice_destroy @pending_backstroke.down("a") this.clear_backstroke() else - @pending_backstroke = @search_container.siblings("li.search-choice").last() - @pending_backstroke.addClassName("search-choice-focus") + next_available_destroy = @search_container.siblings().last() + if next_available_destroy and next_available_destroy.hasClassName("search-choice") and not next_available_destroy.hasClassName("search-choice-disabled") + @pending_backstroke = next_available_destroy + @pending_backstroke.addClassName("search-choice-focus") if @pending_backstroke + if @single_backstroke_delete + @keydown_backstroke() + else + @pending_backstroke.addClassName("search-choice-focus") clear_backstroke: -> @pending_backstroke.removeClassName("search-choice-focus") if @pending_backstroke diff --git a/admin/thirdparty/chosen/coffee/lib/abstract-chosen.coffee b/admin/thirdparty/chosen/coffee/lib/abstract-chosen.coffee index dc68b7da9..c05ca541b 100644 --- a/admin/thirdparty/chosen/coffee/lib/abstract-chosen.coffee +++ b/admin/thirdparty/chosen/coffee/lib/abstract-chosen.coffee @@ -10,7 +10,7 @@ class AbstractChosen this.set_default_values() @is_multiple = @form_field.multiple - @default_text_default = if @is_multiple then "Select Some Options" else "Select an Option" + this.set_default_text() this.setup() @@ -29,15 +29,30 @@ class AbstractChosen @result_single_selected = null @allow_single_deselect = if @options.allow_single_deselect? and @form_field.options[0]? and @form_field.options[0].text is "" then @options.allow_single_deselect else false @disable_search_threshold = @options.disable_search_threshold || 0 + @disable_search = @options.disable_search || false @search_contains = @options.search_contains || false @choices = 0 - @results_none_found = @options.no_results_text or "No results match" + @single_backstroke_delete = @options.single_backstroke_delete || false + @max_selected_options = @options.max_selected_options || Infinity + + set_default_text: -> + if @form_field.getAttribute("data-placeholder") + @default_text = @form_field.getAttribute("data-placeholder") + else if @is_multiple + @default_text = @options.placeholder_text_multiple || @options.placeholder_text || "Select Some Options" + else + @default_text = @options.placeholder_text_single || @options.placeholder_text || "Select an Option" + + @results_none_found = @form_field.getAttribute("data-no_results_text") || @options.no_results_text || "No results match" mouse_enter: -> @mouse_on_container = true mouse_leave: -> @mouse_on_container = false input_focus: (evt) -> - setTimeout (=> this.container_mousedown()), 50 unless @active_field + if @is_multiple + setTimeout (=> this.container_mousedown()), 50 unless @active_field + else + @activate_field() unless @active_field input_blur: (evt) -> if not @mouse_on_container @@ -60,6 +75,7 @@ class AbstractChosen "" results_update_field: -> + this.results_reset_cleanup() if not @is_multiple this.result_clear_highlight() @result_single_selected = null this.results_build() @@ -103,7 +119,7 @@ class AbstractChosen new_id generate_random_char: -> - chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ" + chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" rand = Math.floor(Math.random() * chars.length) newchar = chars.substring rand, rand+1 diff --git a/admin/thirdparty/chosen/coffee/lib/select-parser.coffee b/admin/thirdparty/chosen/coffee/lib/select-parser.coffee index 82b6ce1cc..799b58b98 100644 --- a/admin/thirdparty/chosen/coffee/lib/select-parser.coffee +++ b/admin/thirdparty/chosen/coffee/lib/select-parser.coffee @@ -5,7 +5,7 @@ class SelectParser @parsed = [] add_node: (child) -> - if child.nodeName is "OPTGROUP" + if child.nodeName.toUpperCase() is "OPTGROUP" this.add_group child else this.add_option child @@ -21,7 +21,7 @@ class SelectParser this.add_option( option, group_position, group.disabled ) for option in group.childNodes add_option: (option, group_position, group_disabled) -> - if option.nodeName is "OPTION" + if option.nodeName.toUpperCase() is "OPTION" if option.text != "" if group_position? @parsed[group_position].children += 1 diff --git a/admin/thirdparty/chosen/example.jquery.html b/admin/thirdparty/chosen/example.jquery.html index 7d36dcbc2..5ec7c477c 100644 --- a/admin/thirdparty/chosen/example.jquery.html +++ b/admin/thirdparty/chosen/example.jquery.html @@ -1189,7 +1189,7 @@
                                      Multiple Select - @@ -1203,6 +1203,24 @@
                                      +
                                      +

                                      It is also possible to prevent selected options being deselected by also making them disabled.

                                      +
                                      + +
                                      +
                                      +

                                      Default Text Support

                                      Chosen automatically sets the default field text ("Choose a country...") by reading the select element's data-placeholder value. If no data-placeholder value is present, it will default to "Select Some Option" or "Select Some Options" depending on whether the select is single or multiple. You can change these elements in the plugin js file as you see fit.

                                      @@ -1217,6 +1235,18 @@ $(".chzn-select").chosen({no_results_text: "No results matched"});
                                      + +

                                      Limit Selected Options in Multiselect

                                      +
                                      +

                                      You can easily limit how many options can user select:

                                      + + $(".chzn-select").chosen({max_selected_options: 5}); + +

                                      If you try to select another option with limit reached liszt:maxselected event is triggered:

                                      + + $(".chzn-select").bind("liszt:maxselected", function () { ... }); + +

                                      Allow Deselect on Single Selects

                                      @@ -1300,3 +1330,4 @@ + diff --git a/admin/thirdparty/chosen/example.proto.html b/admin/thirdparty/chosen/example.proto.html index d24a08bbf..2baca979a 100644 --- a/admin/thirdparty/chosen/example.proto.html +++ b/admin/thirdparty/chosen/example.proto.html @@ -54,12 +54,514 @@

                                      Chosen

                                      Chosen is a JavaScript plugin for jQuery and Prototype that makes long, unwieldy select boxes much more user-friendly. For more information (including usage, explanation and faqs), check out the online documentation.

                                      +

                                      Standard Select

                                      +
                                      +
                                      + Turns This + +
                                      +
                                      + Into This + +
                                      +
                                      +

                                      Multiple Select

                                      Turns This
                                      -
                                      - Into This - -
                                      -
                                      - -

                                      <optgroup> Support

                                      -
                                      -
                                      - Single Select with Groups - -
                                      -
                                      - Multiple Select with Groups - -
                                      -
                                      - -

                                      Selected and Disabled Support

                                      -
                                      -

                                      Chosen automatically highlights selected options and removes disabled options.

                                      -
                                      - Single Select - -
                                      -
                                      - Multiple Select - -
                                      -
                                      - -

                                      Default Text Support

                                      -
                                      -

                                      Chosen automatically sets the default field text ("Choose a country...") by reading the select element's data-placeholder value. If no data-placeholder value is present, it will default to "Select Some Option" or "Select Some Options" depending on whether the select is single or multiple. You can change these elements in the plugin js file as you see fit.

                                      - <select data-placeholder="Choose a country..." style="width:350px;" multiple class="chzn-select"> -

                                      Note: on single selects, the first element is assumed to be selected by the browser. To take advantage of the default text support, you will need to include a blank option as the first element of your select list.

                                      -
                                      - -

                                      No Results Text Support

                                      -
                                      -

                                      Setting the "No results" search text is as easy as passing an option when you create Chosen:

                                      - - New Chosen($("chzn_select_field"),{no_results_text: "No results matched"}); - -
                                      - -

                                      Allow Deselect on Single Selects

                                      -
                                      -

                                      When a single select box isn't a required field, you can set allow_single_deselect: true and Chosen will add a UI element for option deselection. This will only work if the first option has blank text.

                                      -
                                      - -
                                      -
                                      - -

                                      Right to Left Support

                                      -
                                      -

                                      Chosen supports right to left select boxes too. just add "chzn-rtl" in addition to "chzn-select" to your select tags and you are good to go.

                                      -

                                      <select class="chzn-select chzn-rtl">

                                      -
                                      - Single right to left select - -
                                      -
                                      - Multiple right to left select - -
                                      -
                                      - -

                                      Change / Update Events

                                      -
                                      -
                                        -
                                      • -

                                        Form Field Change

                                        -

                                        When working with form fields, you often want to perform some behavior after a value has been selected or deselected. Whenever a user selects a field in Chosen, it triggers a "change" event* on the original form field. That let's you do something like this:

                                        -

                                        $("#form_field").chosen().change( … );

                                        -

                                        Note: Prototype doesn't offer support for triggering standard browser events. Event.simulate is required to trigger the change event when using the Prototype version.

                                        -
                                      • -
                                      • -

                                        Updating Chosen Dynamically

                                        -

                                        If you need to update the options in your select field and want Chosen to pick up the changes, you'll need to trigger the "liszt:updated" event on the field. Chosen will re-build itself based on the updated content.

                                        -
                                          -
                                        • jQuery Version: $("#form_field").trigger("liszt:updated");
                                        • -
                                        • Prototype Version: Event.fire($("form_field"), "liszt:updated");
                                        • -
                                        -
                                      • -
                                      -
                                      - -

                                      Setup (for Prototype)

                                      -

                                      Using Chosen is easy as can be.

                                      -
                                        -
                                      1. Download the plugin and copy the chosen files to your app.
                                      2. -
                                      3. Activate the plugin by creating a new instance of Chosen: new Chosen(some_form_field);
                                      4. -
                                      5. Disco.
                                      6. -
                                      - -
                                      - - - - -orgia and The South Sandwich Islands">South Georgia and The South Sandwich Islands - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                      Into This + + + + + + + + + + + +
                                      +
                                      +

                                      Default Text Support

                                      Chosen automatically sets the default field text ("Choose a country...") by reading the select element's data-placeholder value. If no data-placeholder value is present, it will default to "Select Some Option" or "Select Some Options" depending on whether the select is single or multiple. You can change these elements in the plugin js file as you see fit.

                                      @@ -1267,7 +1231,19 @@ orgia and The South Sandwich Islands">South Georgia and The South Sandwich Islan

                                      Setting the "No results" search text is as easy as passing an option when you create Chosen:

                                      - New Chosen($("chzn_select_field"),{no_results_text: "No results matched"}); + new Chosen($("chzn_select_field"),{no_results_text: "No results matched"}); + +
                                      + +

                                      Limit Selected Options in Multiselect

                                      +
                                      +

                                      You can easily limit how many options can user select:

                                      + + new Chosen($("chzn_select_field"),{max_selected_options: 5}); + +

                                      If you try to select another option with limit reached liszt:maxselected event is triggered:

                                      + + $("chzn_select_field").observe("liszt:maxselected", function(evt) { ... });
                                      @@ -1371,3 +1347,4 @@ orgia and The South Sandwich Islands">South Georgia and The South Sandwich Islan }); +