');return e.attr("dir",this.options.get("dir")),this.$container=e,this.$container[0].classList.add("select2-container--"+this.options.get("theme")),o.StoreData(e[0],"element",this.$element),e},r}),u.define("select2/dropdown/attachContainer",[],function(){function e(e,t,n){e.call(this,t,n)}return e.prototype.position=function(e,t,n){n.find(".dropdown-wrapper").append(t),t[0].classList.add("select2-dropdown--below"),n[0].classList.add("select2-container--below")},e}),u.define("select2/dropdown/stopPropagation",[],function(){function e(){}return e.prototype.bind=function(e,t,n){e.call(this,t,n);this.$dropdown.on(["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"].join(" "),function(e){e.stopPropagation()})},e}),u.define("select2/selection/stopPropagation",[],function(){function e(){}return e.prototype.bind=function(e,t,n){e.call(this,t,n);this.$selection.on(["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"].join(" "),function(e){e.stopPropagation()})},e}),a=function(u){var d,p,e=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],t="onwheel"in document||9<=document.documentMode?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],h=Array.prototype.slice;if(u.event.fixHooks)for(var n=e.length;n;)u.event.fixHooks[e[--n]]=u.event.mouseHooks;var f=u.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var e=t.length;e;)this.addEventListener(t[--e],s,!1);else this.onmousewheel=s;u.data(this,"mousewheel-line-height",f.getLineHeight(this)),u.data(this,"mousewheel-page-height",f.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var e=t.length;e;)this.removeEventListener(t[--e],s,!1);else this.onmousewheel=null;u.removeData(this,"mousewheel-line-height"),u.removeData(this,"mousewheel-page-height")},getLineHeight:function(e){var t=u(e),e=t["offsetParent"in u.fn?"offsetParent":"parent"]();return e.length||(e=u("body")),parseInt(e.css("fontSize"),10)||parseInt(t.css("fontSize"),10)||16},getPageHeight:function(e){return u(e).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function s(e){var t,n=e||window.event,s=h.call(arguments,1),i=0,o=0,r=0,a=0,l=0,c=0;if(e=u.event.fix(n),e.type="mousewheel","detail"in n&&(r=-1*n.detail),"wheelDelta"in n&&(r=n.wheelDelta),"wheelDeltaY"in n&&(r=n.wheelDeltaY),"wheelDeltaX"in n&&(o=-1*n.wheelDeltaX),"axis"in n&&n.axis===n.HORIZONTAL_AXIS&&(o=-1*r,r=0),i=0===r?o:r,"deltaY"in n&&(i=r=-1*n.deltaY),"deltaX"in n&&(o=n.deltaX,0===r&&(i=-1*o)),0!==r||0!==o)return 1===n.deltaMode?(i*=t=u.data(this,"mousewheel-line-height"),r*=t,o*=t):2===n.deltaMode&&(i*=t=u.data(this,"mousewheel-page-height"),r*=t,o*=t),a=Math.max(Math.abs(r),Math.abs(o)),(!p||a', {
- 'class': 'select2-results__options select2-results__options--nested'
+ 'class': 'select2-results__options select2-results__options--nested',
+ 'role': 'none'
});
$childrenContainer.append($children);
@@ -1636,6 +1637,7 @@ S2.define('select2/selection/single',[
.attr('role', 'textbox')
.attr('aria-readonly', 'true');
this.$selection.attr('aria-labelledby', id);
+ this.$selection.attr('aria-controls', id);
this.$selection.on('mousedown', function (evt) {
// Only respond to left clicks
@@ -1888,6 +1890,15 @@ S2.define('select2/selection/placeholder',[
$placeholder[0].classList.add('select2-selection__placeholder');
$placeholder[0].classList.remove('select2-selection__choice');
+ var placeholderTitle = placeholder.title ||
+ placeholder.text ||
+ $placeholder.text();
+
+ this.$selection.find('.select2-selection__rendered').attr(
+ 'title',
+ placeholderTitle
+ );
+
return $placeholder;
};
@@ -2006,6 +2017,7 @@ S2.define('select2/selection/allowClear',[
decorated.call(this, data);
this.$selection.find('.select2-selection__clear').remove();
+ this.$selection[0].classList.remove('select2-selection--clearable');
if (this.$selection.find('.select2-selection__placeholder').length > 0 ||
data.length === 0) {
@@ -2028,6 +2040,7 @@ S2.define('select2/selection/allowClear',[
Utils.StoreData($remove[0], 'data', data);
this.$selection.prepend($remove);
+ this.$selection[0].classList.add('select2-selection--clearable');
};
return AllowClear;
@@ -2043,18 +2056,22 @@ S2.define('select2/selection/search',[
}
Search.prototype.render = function (decorated) {
+ var searchLabel = this.options.get('translations').get('search');
var $search = $(
'' +
- '' +
+ ' spellcheck="false" role="searchbox" aria-autocomplete="list" >' +
+ '' +
''
);
this.$searchContainer = $search;
- this.$search = $search.find('input');
+ this.$search = $search.find('textarea');
this.$search.prop('autocomplete', this.options.get('autocomplete'));
+ this.$search.attr('aria-label', searchLabel());
var $rendered = decorated.call(this);
@@ -3697,7 +3714,7 @@ S2.define('select2/data/ajax',[
if (this._request != null) {
// JSONP requests cannot always be aborted
- if ($.isFunction(this._request.abort)) {
+ if (typeof this._request.abort === 'function') {
this._request.abort();
}
@@ -3841,7 +3858,7 @@ S2.define('select2/data/tags',[
if (tag != null) {
var $option = self.option(tag);
- $option.attr('data-select2-tag', true);
+ $option.attr('data-select2-tag', 'true');
self.addOptions([$option]);
@@ -4177,6 +4194,7 @@ S2.define('select2/dropdown/search',[
Search.prototype.render = function (decorated) {
var $rendered = decorated.call(this);
+ var searchLabel = this.options.get('translations').get('search');
var $search = $(
'' +
@@ -4190,6 +4208,7 @@ S2.define('select2/dropdown/search',[
this.$search = $search.find('input');
this.$search.prop('autocomplete', this.options.get('autocomplete'));
+ this.$search.attr('aria-label', searchLabel());
$rendered.prepend($search);
@@ -4835,6 +4854,38 @@ S2.define('select2/dropdown/dropdownCss',[
return DropdownCSS;
});
+S2.define('select2/dropdown/tagsSearchHighlight',[
+ '../utils'
+], function (Utils) {
+ function TagsSearchHighlight () { }
+
+ TagsSearchHighlight.prototype.highlightFirstItem = function (decorated) {
+ var $options = this.$results
+ .find(
+ '.select2-results__option--selectable' +
+ ':not(.select2-results__option--selected)'
+ );
+
+ if ($options.length > 0) {
+ var $firstOption = $options.first();
+ var data = Utils.GetData($firstOption[0], 'data');
+ var firstElement = data.element;
+
+ if (firstElement && firstElement.getAttribute) {
+ if (firstElement.getAttribute('data-select2-tag') === 'true') {
+ $firstOption.trigger('mouseenter');
+
+ return;
+ }
+ }
+ }
+
+ decorated.call(this);
+ };
+
+ return TagsSearchHighlight;
+});
+
S2.define('select2/i18n/en',[],function () {
// English
return {
@@ -4882,6 +4933,9 @@ S2.define('select2/i18n/en',[],function () {
},
removeItem: function () {
return 'Remove item';
+ },
+ search: function() {
+ return 'Search';
}
};
});
@@ -4921,6 +4975,7 @@ S2.define('select2/defaults',[
'./dropdown/selectOnClose',
'./dropdown/closeOnSelect',
'./dropdown/dropdownCss',
+ './dropdown/tagsSearchHighlight',
'./i18n/en'
], function ($,
@@ -4937,7 +4992,7 @@ S2.define('select2/defaults',[
Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,
AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,
- DropdownCSS,
+ DropdownCSS, TagsSearchHighlight,
EnglishTranslation) {
function Defaults () {
@@ -5012,6 +5067,13 @@ S2.define('select2/defaults',[
SelectOnClose
);
}
+
+ if (options.tags) {
+ options.resultsAdapter = Utils.Decorate(
+ options.resultsAdapter,
+ TagsSearchHighlight
+ );
+ }
}
if (options.dropdownAdapter == null) {
@@ -5757,12 +5819,11 @@ S2.define('select2/core',[
var key = evt.which;
if (self.isOpen()) {
- if (key === KEYS.ESC || key === KEYS.TAB ||
- (key === KEYS.UP && evt.altKey)) {
+ if (key === KEYS.ESC || (key === KEYS.UP && evt.altKey)) {
self.close(evt);
evt.preventDefault();
- } else if (key === KEYS.ENTER) {
+ } else if (key === KEYS.ENTER || key === KEYS.TAB) {
self.trigger('results:select', {});
evt.preventDefault();
@@ -6009,6 +6070,7 @@ S2.define('select2/core',[
};
Select2.prototype.destroy = function () {
+ Utils.RemoveData(this.$container[0]);
this.$container.remove();
this._observer.disconnect();
diff --git a/dist/js/select2.min.js b/dist/js/select2.min.js
index a971560df9..87c0c56eeb 100644
--- a/dist/js/select2.min.js
+++ b/dist/js/select2.min.js
@@ -1,2 +1,2 @@
-/*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */
-!function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t="undefined"!=typeof window?require("jquery"):require("jquery")(e)),n(t),t}:n(jQuery)}(function(u){var e=function(){if(u&&u.fn&&u.fn.select2&&u.fn.select2.amd)var e=u.fn.select2.amd;var t,n,i,h,s,o,f,g,m,v,y,_,r,a,b;function w(e,t){return r.call(e,t)}function l(e,t){var n,i,r,s,o,a,l,c,u,d,p,h=t&&t.split("/"),f=y.map,g=f&&f["*"]||{};if(e){for(o=(e=e.split("/")).length-1,y.nodeIdCompat&&b.test(e[o])&&(e[o]=e[o].replace(b,"")),"."===e[0].charAt(0)&&h&&(e=h.slice(0,h.length-1).concat(e)),u=0;u":">",'"':""","'":"'","/":"/"};return"string"!=typeof e?e:String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})},r.__cache={};var n=0;return r.GetUniqueElementId=function(e){var t=e.getAttribute("data-select2-id");return null!=t||(t=e.id?"select2-data-"+e.id:"select2-data-"+(++n).toString()+"-"+r.generateChars(4),e.setAttribute("data-select2-id",t)),t},r.StoreData=function(e,t,n){var i=r.GetUniqueElementId(e);r.__cache[i]||(r.__cache[i]={}),r.__cache[i][t]=n},r.GetData=function(e,t){var n=r.GetUniqueElementId(e);return t?r.__cache[n]&&null!=r.__cache[n][t]?r.__cache[n][t]:s(e).data(t):r.__cache[n]},r.RemoveData=function(e){var t=r.GetUniqueElementId(e);null!=r.__cache[t]&&delete r.__cache[t],e.removeAttribute("data-select2-id")},r.copyNonInternalCssClasses=function(e,t){var n=e.getAttribute("class").trim().split(/\s+/);n=n.filter(function(e){return 0===e.indexOf("select2-")});var i=t.getAttribute("class").trim().split(/\s+/);i=i.filter(function(e){return 0!==e.indexOf("select2-")});var r=n.concat(i);e.setAttribute("class",r.join(" "))},r}),e.define("select2/results",["jquery","./utils"],function(h,f){function i(e,t,n){this.$element=e,this.data=n,this.options=t,i.__super__.constructor.call(this)}return f.Extend(i,f.Observable),i.prototype.render=function(){var e=h('');return this.options.get("multiple")&&e.attr("aria-multiselectable","true"),this.$results=e},i.prototype.clear=function(){this.$results.empty()},i.prototype.displayMessage=function(e){var t=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var n=h(''),i=this.options.get("translations").get(e.message);n.append(t(i(e.args))),n[0].className+=" select2-results__message",this.$results.append(n)},i.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},i.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n",{class:"select2-results__options select2-results__options--nested"});p.append(l),o.append(a),o.append(p)}else this.template(e,t);return f.StoreData(t,"data",e),t},i.prototype.bind=function(t,e){var l=this,n=t.id+"-results";this.$results.attr("id",n),t.on("results:all",function(e){l.clear(),l.append(e.data),t.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),t.on("results:append",function(e){l.append(e.data),t.isOpen()&&l.setClasses()}),t.on("query",function(e){l.hideMessages(),l.showLoading(e)}),t.on("select",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("unselect",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("open",function(){l.$results.attr("aria-expanded","true"),l.$results.attr("aria-hidden","false"),l.setClasses(),l.ensureHighlightVisible()}),t.on("close",function(){l.$results.attr("aria-expanded","false"),l.$results.attr("aria-hidden","true"),l.$results.removeAttr("aria-activedescendant")}),t.on("results:toggle",function(){var e=l.getHighlightedResults();0!==e.length&&e.trigger("mouseup")}),t.on("results:select",function(){var e=l.getHighlightedResults();if(0!==e.length){var t=f.GetData(e[0],"data");e.hasClass("select2-results__option--selected")?l.trigger("close",{}):l.trigger("select",{data:t})}}),t.on("results:previous",function(){var e=l.getHighlightedResults(),t=l.$results.find(".select2-results__option--selectable"),n=t.index(e);if(!(n<=0)){var i=n-1;0===e.length&&(i=0);var r=t.eq(i);r.trigger("mouseenter");var s=l.$results.offset().top,o=r.offset().top,a=l.$results.scrollTop()+(o-s);0===i?l.$results.scrollTop(0):o-s<0&&l.$results.scrollTop(a)}}),t.on("results:next",function(){var e=l.getHighlightedResults(),t=l.$results.find(".select2-results__option--selectable"),n=t.index(e)+1;if(!(n>=t.length)){var i=t.eq(n);i.trigger("mouseenter");var r=l.$results.offset().top+l.$results.outerHeight(!1),s=i.offset().top+i.outerHeight(!1),o=l.$results.scrollTop()+s-r;0===n?l.$results.scrollTop(0):rthis.$results.outerHeight()||s<0)&&this.$results.scrollTop(r)}},i.prototype.template=function(e,t){var n=this.options.get("templateResult"),i=this.options.get("escapeMarkup"),r=n(e,t);null==r?t.style.display="none":"string"==typeof r?t.innerHTML=i(r):h(t).append(r)},i}),e.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),e.define("select2/selection/base",["jquery","../utils","../keys"],function(n,i,r){function s(e,t){this.$element=e,this.options=t,s.__super__.constructor.call(this)}return i.Extend(s,i.Observable),s.prototype.render=function(){var e=n('');return this._tabindex=0,null!=i.GetData(this.$element[0],"old-tabindex")?this._tabindex=i.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),e.attr("title",this.$element.attr("title")),e.attr("tabindex",this._tabindex),e.attr("aria-disabled","false"),this.$selection=e},s.prototype.bind=function(e,t){var n=this,i=e.id+"-results";this.container=e,this.$selection.on("focus",function(e){n.trigger("focus",e)}),this.$selection.on("blur",function(e){n._handleBlur(e)}),this.$selection.on("keydown",function(e){n.trigger("keypress",e),e.which===r.SPACE&&e.preventDefault()}),e.on("results:focus",function(e){n.$selection.attr("aria-activedescendant",e.data._resultId)}),e.on("selection:update",function(e){n.update(e.data)}),e.on("open",function(){n.$selection.attr("aria-expanded","true"),n.$selection.attr("aria-owns",i),n._attachCloseHandler(e)}),e.on("close",function(){n.$selection.attr("aria-expanded","false"),n.$selection.removeAttr("aria-activedescendant"),n.$selection.removeAttr("aria-owns"),n.$selection.trigger("focus"),n._detachCloseHandler(e)}),e.on("enable",function(){n.$selection.attr("tabindex",n._tabindex),n.$selection.attr("aria-disabled","false")}),e.on("disable",function(){n.$selection.attr("tabindex","-1"),n.$selection.attr("aria-disabled","true")})},s.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger("blur",e)},1)},s.prototype._attachCloseHandler=function(e){n(document.body).on("mousedown.select2."+e.id,function(e){var t=n(e.target).closest(".select2");n(".select2.select2-container--open").each(function(){this!=t[0]&&i.GetData(this,"element").select2("close")})})},s.prototype._detachCloseHandler=function(e){n(document.body).off("mousedown.select2."+e.id)},s.prototype.position=function(e,t){t.find(".selection").append(e)},s.prototype.destroy=function(){this._detachCloseHandler(this.container)},s.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},s.prototype.isEnabled=function(){return!this.isDisabled()},s.prototype.isDisabled=function(){return this.options.get("disabled")},s}),e.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(e,t,n,i){function r(){r.__super__.constructor.apply(this,arguments)}return n.Extend(r,t),r.prototype.render=function(){var e=r.__super__.render.call(this);return e[0].classList.add("select2-selection--single"),e.html(''),e},r.prototype.bind=function(t,e){var n=this;r.__super__.bind.apply(this,arguments);var i=t.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",i).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",i),this.$selection.on("mousedown",function(e){1===e.which&&n.trigger("toggle",{originalEvent:e})}),this.$selection.on("focus",function(e){}),this.$selection.on("blur",function(e){}),t.on("focus",function(e){t.isOpen()||n.$selection.trigger("focus")})},r.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},r.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},r.prototype.selectionContainer=function(){return e("")},r.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(".select2-selection__rendered"),i=this.display(t,n);n.empty().append(i);var r=t.title||t.text;r?n.attr("title",r):n.removeAttr("title")}else this.clear()},r}),e.define("select2/selection/multiple",["jquery","./base","../utils"],function(r,e,d){function s(e,t){s.__super__.constructor.apply(this,arguments)}return d.Extend(s,e),s.prototype.render=function(){var e=s.__super__.render.call(this);return e[0].classList.add("select2-selection--multiple"),e.html(''),e},s.prototype.bind=function(e,t){var i=this;s.__super__.bind.apply(this,arguments);var n=e.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",n),this.$selection.on("click",function(e){i.trigger("toggle",{originalEvent:e})}),this.$selection.on("click",".select2-selection__choice__remove",function(e){if(!i.isDisabled()){var t=r(this).parent(),n=d.GetData(t[0],"data");i.trigger("unselect",{originalEvent:e,data:n})}}),this.$selection.on("keydown",".select2-selection__choice__remove",function(e){i.isDisabled()||e.stopPropagation()})},s.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},s.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},s.prototype.selectionContainer=function(){return r('')},s.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=this.$selection.find(".select2-selection__rendered").attr("id")+"-choice-",i=0;i×');r.attr("title",i()),r.attr("aria-label",i()),r.attr("aria-describedby",n),a.StoreData(r[0],"data",t),this.$selection.prepend(r)}},e}),e.define("select2/selection/search",["jquery","../utils","../keys"],function(i,l,c){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=i('');this.$searchContainer=t,this.$search=t.find("input"),this.$search.prop("autocomplete",this.options.get("autocomplete"));var n=e.call(this);return this._transferTabIndex(),n.append(this.$searchContainer),n},e.prototype.bind=function(e,t,n){var i=this,r=t.id+"-results",s=t.id+"-container";e.call(this,t,n),i.$search.attr("aria-describedby",s),t.on("open",function(){i.$search.attr("aria-controls",r),i.$search.trigger("focus")}),t.on("close",function(){i.$search.val(""),i.resizeSearch(),i.$search.removeAttr("aria-controls"),i.$search.removeAttr("aria-activedescendant"),i.$search.trigger("focus")}),t.on("enable",function(){i.$search.prop("disabled",!1),i._transferTabIndex()}),t.on("disable",function(){i.$search.prop("disabled",!0)}),t.on("focus",function(e){i.$search.trigger("focus")}),t.on("results:focus",function(e){e.data._resultId?i.$search.attr("aria-activedescendant",e.data._resultId):i.$search.removeAttr("aria-activedescendant")}),this.$selection.on("focusin",".select2-search--inline",function(e){i.trigger("focus",e)}),this.$selection.on("focusout",".select2-search--inline",function(e){i._handleBlur(e)}),this.$selection.on("keydown",".select2-search--inline",function(e){if(e.stopPropagation(),i.trigger("keypress",e),i._keyUpPrevented=e.isDefaultPrevented(),e.which===c.BACKSPACE&&""===i.$search.val()){var t=i.$selection.find(".select2-selection__choice").last();if(0this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define("select2/data/maximumSelectionLength",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("select",function(){i._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var i=this;this._checkIfMaximumSelected(function(){e.call(i,t,n)})},e.prototype._checkIfMaximumSelected=function(e,n){var i=this;this.current(function(e){var t=null!=e?e.length:0;0=i.maximumSelectionLength?i.trigger("results:message",{message:"maximumSelected",args:{maximum:i.maximumSelectionLength}}):n&&n()})},e}),e.define("select2/dropdown",["jquery","./utils"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('');return e.attr("dir",this.options.get("dir")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),e.define("select2/dropdown/search",["jquery"],function(s){function e(){}return e.prototype.render=function(e){var t=e.call(this),n=s('');return this.$searchContainer=n,this.$search=n.find("input"),this.$search.prop("autocomplete",this.options.get("autocomplete")),t.prepend(n),t},e.prototype.bind=function(e,t,n){var i=this,r=t.id+"-results";e.call(this,t,n),this.$search.on("keydown",function(e){i.trigger("keypress",e),i._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on("input",function(e){s(this).off("keyup")}),this.$search.on("keyup input",function(e){i.handleSearch(e)}),t.on("open",function(){i.$search.attr("tabindex",0),i.$search.attr("aria-controls",r),i.$search.trigger("focus"),window.setTimeout(function(){i.$search.trigger("focus")},0)}),t.on("close",function(){i.$search.attr("tabindex",-1),i.$search.removeAttr("aria-controls"),i.$search.removeAttr("aria-activedescendant"),i.$search.val(""),i.$search.trigger("blur")}),t.on("focus",function(){t.isOpen()||i.$search.trigger("focus")}),t.on("results:all",function(e){null!=e.query.term&&""!==e.query.term||(i.showSearch(e)?i.$searchContainer[0].classList.remove("select2-search--hide"):i.$searchContainer[0].classList.add("select2-search--hide"))}),t.on("results:focus",function(e){e.data._resultId?i.$search.attr("aria-activedescendant",e.data._resultId):i.$search.removeAttr("aria-activedescendant")})},e.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger("query",{term:t})}this._keyUpPrevented=!1},e.prototype.showSearch=function(e,t){return!0},e}),e.define("select2/dropdown/hidePlaceholder",[],function(){function e(e,t,n,i){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,i)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),i=t.length-1;0<=i;i--){var r=t[i];this.placeholder.id===r.id&&n.splice(i,1)}return n},e}),e.define("select2/dropdown/infiniteScroll",["jquery"],function(n){function e(e,t,n,i){this.lastParams={},e.call(this,t,n,i),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("query",function(e){i.lastParams=e,i.loading=!0}),t.on("query:append",function(e){i.lastParams=e,i.loading=!0}),this.$results.on("scroll",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);if(!this.loading&&e){var t=this.$results.offset().top+this.$results.outerHeight(!1);this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=t+50&&this.loadMore()}},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger("query:append",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n(''),t=this.options.get("translations").get("loadingMore");return e.html(t(this.lastParams)),e},e}),e.define("select2/dropdown/attachBody",["jquery","../utils"],function(f,a){function e(e,t,n){this.$dropdownParent=f(n.get("dropdownParent")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("open",function(){i._showDropdown(),i._attachPositioningHandler(t),i._bindContainerResultHandlers(t)}),t.on("close",function(){i._hideDropdown(),i._detachPositioningHandler(t)}),this.$dropdownContainer.on("mousedown",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr("class",n.attr("class")),t[0].classList.remove("select2"),t[0].classList.add("select2-container--open"),t.css({position:"absolute",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=f(""),n=e.call(this);return t.append(n),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){if(!this._containerResultsHandlersBound){var n=this;t.on("results:all",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:append",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:message",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("select",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("unselect",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0}},e.prototype._attachPositioningHandler=function(e,t){var n=this,i="scroll.select2."+t.id,r="resize.select2."+t.id,s="orientationchange.select2."+t.id,o=this.$container.parents().filter(a.hasScroll);o.each(function(){a.StoreData(this,"select2-scroll-position",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),o.on(i,function(e){var t=a.GetData(this,"select2-scroll-position");f(this).scrollTop(t.y)}),f(window).on(i+" "+r+" "+s,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n="scroll.select2."+t.id,i="resize.select2."+t.id,r="orientationchange.select2."+t.id;this.$container.parents().filter(a.hasScroll).off(n),f(window).off(n+" "+i+" "+r)},e.prototype._positionDropdown=function(){var e=f(window),t=this.$dropdown[0].classList.contains("select2-dropdown--above"),n=this.$dropdown[0].classList.contains("select2-dropdown--below"),i=null,r=this.$container.offset();r.bottom=r.top+this.$container.outerHeight(!1);var s={height:this.$container.outerHeight(!1)};s.top=r.top,s.bottom=r.top+s.height;var o=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=ar.bottom+o,d={left:r.left,top:s.bottom},p=this.$dropdownParent;"static"===p.css("position")&&(p=p.offsetParent());var h={top:0,left:0};(f.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),d.top-=h.top,d.left-=h.left,t||n||(i="below"),u||!c||t?!c&&u&&t&&(i="below"):i="above",("above"==i||t&&"below"!==i)&&(d.top=s.top-h.top-o),null!=i&&(this.$dropdown[0].classList.remove("select2-dropdown--below"),this.$dropdown[0].classList.remove("select2-dropdown--above"),this.$dropdown[0].classList.add("select2-dropdown--"+i),this.$container[0].classList.remove("select2-container--below"),this.$container[0].classList.remove("select2-container--above"),this.$container[0].classList.add("select2-container--"+i)),this.$dropdownContainer.css(d)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(e.minWidth=e.width,e.position="relative",e.width="auto"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),e.define("select2/dropdown/minimumResultsForSearch",[],function(){function e(e,t,n,i){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,i)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,i=0;i');return e.attr("dir",this.options.get("dir")),this.$container=e,this.$container[0].classList.add("select2-container--"+this.options.get("theme")),u.StoreData(e[0],"element",this.$element),e},d}),e.define("jquery-mousewheel",["jquery"],function(e){return e}),e.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(r,e,s,t,o){if(null==r.fn.select2){var a=["open","close","destroy"];r.fn.select2=function(t){if("object"==typeof(t=t||{}))return this.each(function(){var e=r.extend(!0,{},t);new s(r(this),e)}),this;if("string"!=typeof t)throw new Error("Invalid arguments for Select2: "+t);var n,i=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=o.GetData(this,"select2");null==e&&window.console&&console.error&&console.error("The select2('"+t+"') method was called on an element that is not using Select2."),n=e[t].apply(e,i)}),-1":">",'"':""","'":"'","/":"/"};return"string"!=typeof e?e:String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})},s.__cache={};var n=0;return s.GetUniqueElementId=function(e){var t=e.getAttribute("data-select2-id");return null!=t||(t=e.id?"select2-data-"+e.id:"select2-data-"+(++n).toString()+"-"+s.generateChars(4),e.setAttribute("data-select2-id",t)),t},s.StoreData=function(e,t,n){e=s.GetUniqueElementId(e);s.__cache[e]||(s.__cache[e]={}),s.__cache[e][t]=n},s.GetData=function(e,t){var n=s.GetUniqueElementId(e);return t?s.__cache[n]&&null!=s.__cache[n][t]?s.__cache[n][t]:r(e).data(t):s.__cache[n]},s.RemoveData=function(e){var t=s.GetUniqueElementId(e);null!=s.__cache[t]&&delete s.__cache[t],e.removeAttribute("data-select2-id")},s.copyNonInternalCssClasses=function(e,t){var n=(n=e.getAttribute("class").trim().split(/\s+/)).filter(function(e){return 0===e.indexOf("select2-")}),t=(t=t.getAttribute("class").trim().split(/\s+/)).filter(function(e){return 0!==e.indexOf("select2-")}),t=n.concat(t);e.setAttribute("class",t.join(" "))},s}),u.define("select2/results",["jquery","./utils"],function(d,p){function s(e,t,n){this.$element=e,this.data=n,this.options=t,s.__super__.constructor.call(this)}return p.Extend(s,p.Observable),s.prototype.render=function(){var e=d('');return this.options.get("multiple")&&e.attr("aria-multiselectable","true"),this.$results=e},s.prototype.clear=function(){this.$results.empty()},s.prototype.displayMessage=function(e){var t=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var n=d(''),s=this.options.get("translations").get(e.message);n.append(t(s(e.args))),n[0].className+=" select2-results__message",this.$results.append(n)},s.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},s.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n",{class:"select2-results__options select2-results__options--nested",role:"none"});i.append(l),o.append(a),o.append(i)}else this.template(e,t);return p.StoreData(t,"data",e),t},s.prototype.bind=function(t,e){var i=this,n=t.id+"-results";this.$results.attr("id",n),t.on("results:all",function(e){i.clear(),i.append(e.data),t.isOpen()&&(i.setClasses(),i.highlightFirstItem())}),t.on("results:append",function(e){i.append(e.data),t.isOpen()&&i.setClasses()}),t.on("query",function(e){i.hideMessages(),i.showLoading(e)}),t.on("select",function(){t.isOpen()&&(i.setClasses(),i.options.get("scrollAfterSelect")&&i.highlightFirstItem())}),t.on("unselect",function(){t.isOpen()&&(i.setClasses(),i.options.get("scrollAfterSelect")&&i.highlightFirstItem())}),t.on("open",function(){i.$results.attr("aria-expanded","true"),i.$results.attr("aria-hidden","false"),i.setClasses(),i.ensureHighlightVisible()}),t.on("close",function(){i.$results.attr("aria-expanded","false"),i.$results.attr("aria-hidden","true"),i.$results.removeAttr("aria-activedescendant")}),t.on("results:toggle",function(){var e=i.getHighlightedResults();0!==e.length&&e.trigger("mouseup")}),t.on("results:select",function(){var e,t=i.getHighlightedResults();0!==t.length&&(e=p.GetData(t[0],"data"),t.hasClass("select2-results__option--selected")?i.trigger("close",{}):i.trigger("select",{data:e}))}),t.on("results:previous",function(){var e,t=i.getHighlightedResults(),n=i.$results.find(".select2-results__option--selectable"),s=n.index(t);s<=0||(e=s-1,0===t.length&&(e=0),(s=n.eq(e)).trigger("mouseenter"),t=i.$results.offset().top,n=s.offset().top,s=i.$results.scrollTop()+(n-t),0===e?i.$results.scrollTop(0):n-t<0&&i.$results.scrollTop(s))}),t.on("results:next",function(){var e,t=i.getHighlightedResults(),n=i.$results.find(".select2-results__option--selectable"),s=n.index(t)+1;s>=n.length||((e=n.eq(s)).trigger("mouseenter"),t=i.$results.offset().top+i.$results.outerHeight(!1),n=e.offset().top+e.outerHeight(!1),e=i.$results.scrollTop()+n-t,0===s?i.$results.scrollTop(0):tthis.$results.outerHeight()||s<0)&&this.$results.scrollTop(n))},s.prototype.template=function(e,t){var n=this.options.get("templateResult"),s=this.options.get("escapeMarkup"),e=n(e,t);null==e?t.style.display="none":"string"==typeof e?t.innerHTML=s(e):d(t).append(e)},s}),u.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),u.define("select2/selection/base",["jquery","../utils","../keys"],function(n,s,i){function r(e,t){this.$element=e,this.options=t,r.__super__.constructor.call(this)}return s.Extend(r,s.Observable),r.prototype.render=function(){var e=n('');return this._tabindex=0,null!=s.GetData(this.$element[0],"old-tabindex")?this._tabindex=s.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),e.attr("title",this.$element.attr("title")),e.attr("tabindex",this._tabindex),e.attr("aria-disabled","false"),this.$selection=e},r.prototype.bind=function(e,t){var n=this,s=e.id+"-results";this.container=e,this.$selection.on("focus",function(e){n.trigger("focus",e)}),this.$selection.on("blur",function(e){n._handleBlur(e)}),this.$selection.on("keydown",function(e){n.trigger("keypress",e),e.which===i.SPACE&&e.preventDefault()}),e.on("results:focus",function(e){n.$selection.attr("aria-activedescendant",e.data._resultId)}),e.on("selection:update",function(e){n.update(e.data)}),e.on("open",function(){n.$selection.attr("aria-expanded","true"),n.$selection.attr("aria-owns",s),n._attachCloseHandler(e)}),e.on("close",function(){n.$selection.attr("aria-expanded","false"),n.$selection.removeAttr("aria-activedescendant"),n.$selection.removeAttr("aria-owns"),n.$selection.trigger("focus"),n._detachCloseHandler(e)}),e.on("enable",function(){n.$selection.attr("tabindex",n._tabindex),n.$selection.attr("aria-disabled","false")}),e.on("disable",function(){n.$selection.attr("tabindex","-1"),n.$selection.attr("aria-disabled","true")})},r.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger("blur",e)},1)},r.prototype._attachCloseHandler=function(e){n(document.body).on("mousedown.select2."+e.id,function(e){var t=n(e.target).closest(".select2");n(".select2.select2-container--open").each(function(){this!=t[0]&&s.GetData(this,"element").select2("close")})})},r.prototype._detachCloseHandler=function(e){n(document.body).off("mousedown.select2."+e.id)},r.prototype.position=function(e,t){t.find(".selection").append(e)},r.prototype.destroy=function(){this._detachCloseHandler(this.container)},r.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},r.prototype.isEnabled=function(){return!this.isDisabled()},r.prototype.isDisabled=function(){return this.options.get("disabled")},r}),u.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(e,t,n,s){function i(){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,t),i.prototype.render=function(){var e=i.__super__.render.call(this);return e[0].classList.add("select2-selection--single"),e.html(''),e},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments);var s=t.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",s).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",s),this.$selection.attr("aria-controls",s),this.$selection.on("mousedown",function(e){1===e.which&&n.trigger("toggle",{originalEvent:e})}),this.$selection.on("focus",function(e){}),this.$selection.on("blur",function(e){}),t.on("focus",function(e){t.isOpen()||n.$selection.trigger("focus")})},i.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},i.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},i.prototype.selectionContainer=function(){return e("")},i.prototype.update=function(e){var t,n;0!==e.length?(n=e[0],t=this.$selection.find(".select2-selection__rendered"),e=this.display(n,t),t.empty().append(e),(n=n.title||n.text)?t.attr("title",n):t.removeAttr("title")):this.clear()},i}),u.define("select2/selection/multiple",["jquery","./base","../utils"],function(i,e,c){function r(e,t){r.__super__.constructor.apply(this,arguments)}return c.Extend(r,e),r.prototype.render=function(){var e=r.__super__.render.call(this);return e[0].classList.add("select2-selection--multiple"),e.html(''),e},r.prototype.bind=function(e,t){var n=this;r.__super__.bind.apply(this,arguments);var s=e.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",s),this.$selection.on("click",function(e){n.trigger("toggle",{originalEvent:e})}),this.$selection.on("click",".select2-selection__choice__remove",function(e){var t;n.isDisabled()||(t=i(this).parent(),t=c.GetData(t[0],"data"),n.trigger("unselect",{originalEvent:e,data:t}))}),this.$selection.on("keydown",".select2-selection__choice__remove",function(e){n.isDisabled()||e.stopPropagation()})},r.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},r.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},r.prototype.selectionContainer=function(){return i('')},r.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=this.$selection.find(".select2-selection__rendered").attr("id")+"-choice-",s=0;s×')).attr("title",s()),e.attr("aria-label",s()),e.attr("aria-describedby",n),a.StoreData(e[0],"data",t),this.$selection.prepend(e),this.$selection[0].classList.add("select2-selection--clearable"))},e}),u.define("select2/selection/search",["jquery","../utils","../keys"],function(s,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=this.options.get("translations").get("search"),n=s('');this.$searchContainer=n,this.$search=n.find("textarea"),this.$search.prop("autocomplete",this.options.get("autocomplete")),this.$search.attr("aria-label",t());e=e.call(this);return this._transferTabIndex(),e.append(this.$searchContainer),e},e.prototype.bind=function(e,t,n){var s=this,i=t.id+"-results",r=t.id+"-container";e.call(this,t,n),s.$search.attr("aria-describedby",r),t.on("open",function(){s.$search.attr("aria-controls",i),s.$search.trigger("focus")}),t.on("close",function(){s.$search.val(""),s.resizeSearch(),s.$search.removeAttr("aria-controls"),s.$search.removeAttr("aria-activedescendant"),s.$search.trigger("focus")}),t.on("enable",function(){s.$search.prop("disabled",!1),s._transferTabIndex()}),t.on("disable",function(){s.$search.prop("disabled",!0)}),t.on("focus",function(e){s.$search.trigger("focus")}),t.on("results:focus",function(e){e.data._resultId?s.$search.attr("aria-activedescendant",e.data._resultId):s.$search.removeAttr("aria-activedescendant")}),this.$selection.on("focusin",".select2-search--inline",function(e){s.trigger("focus",e)}),this.$selection.on("focusout",".select2-search--inline",function(e){s._handleBlur(e)}),this.$selection.on("keydown",".select2-search--inline",function(e){var t;e.stopPropagation(),s.trigger("keypress",e),s._keyUpPrevented=e.isDefaultPrevented(),e.which!==l.BACKSPACE||""!==s.$search.val()||0<(t=s.$selection.find(".select2-selection__choice").last()).length&&(t=a.GetData(t[0],"data"),s.searchRemoveChoice(t),e.preventDefault())}),this.$selection.on("click",".select2-search--inline",function(e){s.$search.val()&&e.stopPropagation()});var t=document.documentMode,o=t&&t<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(e){o?s.$selection.off("input.search input.searchcheck"):s.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(e){var t;o&&"input"===e.type?s.$selection.off("input.search input.searchcheck"):(t=e.which)!=l.SHIFT&&t!=l.CTRL&&t!=l.ALT&&t!=l.TAB&&s.handleSearch(e)})},e.prototype._transferTabIndex=function(e){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},e.prototype.createPlaceholder=function(e,t){this.$search.attr("placeholder",t.text)},e.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),e.call(this,t),this.resizeSearch(),n&&this.$search.trigger("focus")},e.prototype.handleSearch=function(){var e;this.resizeSearch(),this._keyUpPrevented||(e=this.$search.val(),this.trigger("query",{term:e})),this._keyUpPrevented=!1},e.prototype.searchRemoveChoice=function(e,t){this.trigger("unselect",{data:t}),this.$search.val(t.text),this.handleSearch()},e.prototype.resizeSearch=function(){this.$search.css("width","25px");var e="100%";""===this.$search.attr("placeholder")&&(e=.75*(this.$search.val().length+1)+"em"),this.$search.css("width",e)},e}),u.define("select2/selection/selectionCss",["../utils"],function(n){function e(){}return e.prototype.render=function(e){var t=e.call(this),e=this.options.get("selectionCssClass")||"";return-1!==e.indexOf(":all:")&&(e=e.replace(":all:",""),n.copyNonInternalCssClasses(t[0],this.$element[0])),t.addClass(e),t},e}),u.define("select2/selection/eventRelay",["jquery"],function(o){function e(){}return e.prototype.bind=function(e,t,n){var s=this,i=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],r=["opening","closing","selecting","unselecting","clearing"];e.call(this,t,n),t.on("*",function(e,t){var n;-1!==i.indexOf(e)&&(t=t||{},n=o.Event("select2:"+e,{params:t}),s.$element.trigger(n),-1!==r.indexOf(e)&&(t.prevented=n.isDefaultPrevented()))})},e}),u.define("select2/translation",["jquery","require"],function(t,n){function s(e){this.dict=e||{}}return s.prototype.all=function(){return this.dict},s.prototype.get=function(e){return this.dict[e]},s.prototype.extend=function(e){this.dict=t.extend({},e.all(),this.dict)},s._cache={},s.loadPath=function(e){var t;return e in s._cache||(t=n(e),s._cache[e]=t),new s(s._cache[e])},s}),u.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Œ":"OE","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","œ":"oe","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ώ":"ω","ς":"σ","’":"'"}}),u.define("select2/data/base",["../utils"],function(n){function s(e,t){s.__super__.constructor.call(this)}return n.Extend(s,n.Observable),s.prototype.current=function(e){throw new Error("The `current` method must be defined in child classes.")},s.prototype.query=function(e,t){throw new Error("The `query` method must be defined in child classes.")},s.prototype.bind=function(e,t){},s.prototype.destroy=function(){},s.prototype.generateResultId=function(e,t){e=e.id+"-result-";return e+=n.generateChars(4),null!=t.id?e+="-"+t.id.toString():e+="-"+n.generateChars(4),e},s}),u.define("select2/data/select",["./base","../utils","jquery"],function(e,a,l){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return a.Extend(n,e),n.prototype.current=function(e){var t=this;e(Array.prototype.map.call(this.$element[0].querySelectorAll(":checked"),function(e){return t.item(l(e))}))},n.prototype.select=function(i){var e,r=this;if(i.selected=!0,null!=i.element&&"option"===i.element.tagName.toLowerCase())return i.element.selected=!0,void this.$element.trigger("input").trigger("change");this.$element.prop("multiple")?this.current(function(e){var t=[];(i=[i]).push.apply(i,e);for(var n=0;nthis.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),u.define("select2/data/maximumSelectionLength",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on("select",function(){s._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var s=this;this._checkIfMaximumSelected(function(){e.call(s,t,n)})},e.prototype._checkIfMaximumSelected=function(e,t){var n=this;this.current(function(e){e=null!=e?e.length:0;0=n.maximumSelectionLength?n.trigger("results:message",{message:"maximumSelected",args:{maximum:n.maximumSelectionLength}}):t&&t()})},e}),u.define("select2/dropdown",["jquery","./utils"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('');return e.attr("dir",this.options.get("dir")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),u.define("select2/dropdown/search",["jquery"],function(r){function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get("translations").get("search"),e=r('');return this.$searchContainer=e,this.$search=e.find("input"),this.$search.prop("autocomplete",this.options.get("autocomplete")),this.$search.attr("aria-label",n()),t.prepend(e),t},e.prototype.bind=function(e,t,n){var s=this,i=t.id+"-results";e.call(this,t,n),this.$search.on("keydown",function(e){s.trigger("keypress",e),s._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on("input",function(e){r(this).off("keyup")}),this.$search.on("keyup input",function(e){s.handleSearch(e)}),t.on("open",function(){s.$search.attr("tabindex",0),s.$search.attr("aria-controls",i),s.$search.trigger("focus"),window.setTimeout(function(){s.$search.trigger("focus")},0)}),t.on("close",function(){s.$search.attr("tabindex",-1),s.$search.removeAttr("aria-controls"),s.$search.removeAttr("aria-activedescendant"),s.$search.val(""),s.$search.trigger("blur")}),t.on("focus",function(){t.isOpen()||s.$search.trigger("focus")}),t.on("results:all",function(e){null!=e.query.term&&""!==e.query.term||(s.showSearch(e)?s.$searchContainer[0].classList.remove("select2-search--hide"):s.$searchContainer[0].classList.add("select2-search--hide"))}),t.on("results:focus",function(e){e.data._resultId?s.$search.attr("aria-activedescendant",e.data._resultId):s.$search.removeAttr("aria-activedescendant")})},e.prototype.handleSearch=function(e){var t;this._keyUpPrevented||(t=this.$search.val(),this.trigger("query",{term:t})),this._keyUpPrevented=!1},e.prototype.showSearch=function(e,t){return!0},e}),u.define("select2/dropdown/hidePlaceholder",[],function(){function e(e,t,n,s){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,s)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),s=t.length-1;0<=s;s--){var i=t[s];this.placeholder.id===i.id&&n.splice(s,1)}return n},e}),u.define("select2/dropdown/infiniteScroll",["jquery"],function(n){function e(e,t,n,s){this.lastParams={},e.call(this,t,n,s),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on("query",function(e){s.lastParams=e,s.loading=!0}),t.on("query:append",function(e){s.lastParams=e,s.loading=!0}),this.$results.on("scroll",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);!this.loading&&e&&(e=this.$results.offset().top+this.$results.outerHeight(!1),this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=e+50&&this.loadMore())},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger("query:append",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n(''),t=this.options.get("translations").get("loadingMore");return e.html(t(this.lastParams)),e},e}),u.define("select2/dropdown/attachBody",["jquery","../utils"],function(u,o){function e(e,t,n){this.$dropdownParent=u(n.get("dropdownParent")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var s=this;e.call(this,t,n),t.on("open",function(){s._showDropdown(),s._attachPositioningHandler(t),s._bindContainerResultHandlers(t)}),t.on("close",function(){s._hideDropdown(),s._detachPositioningHandler(t)}),this.$dropdownContainer.on("mousedown",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr("class",n.attr("class")),t[0].classList.remove("select2"),t[0].classList.add("select2-container--open"),t.css({position:"absolute",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=u(""),e=e.call(this);return t.append(e),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){var n;this._containerResultsHandlersBound||(n=this,t.on("results:all",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:append",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:message",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("select",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("unselect",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0)},e.prototype._attachPositioningHandler=function(e,t){var n=this,s="scroll.select2."+t.id,i="resize.select2."+t.id,r="orientationchange.select2."+t.id,t=this.$container.parents().filter(o.hasScroll);t.each(function(){o.StoreData(this,"select2-scroll-position",{x:u(this).scrollLeft(),y:u(this).scrollTop()})}),t.on(s,function(e){var t=o.GetData(this,"select2-scroll-position");u(this).scrollTop(t.y)}),u(window).on(s+" "+i+" "+r,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n="scroll.select2."+t.id,s="resize.select2."+t.id,t="orientationchange.select2."+t.id;this.$container.parents().filter(o.hasScroll).off(n),u(window).off(n+" "+s+" "+t)},e.prototype._positionDropdown=function(){var e=u(window),t=this.$dropdown[0].classList.contains("select2-dropdown--above"),n=this.$dropdown[0].classList.contains("select2-dropdown--below"),s=null,i=this.$container.offset();i.bottom=i.top+this.$container.outerHeight(!1);var r={height:this.$container.outerHeight(!1)};r.top=i.top,r.bottom=i.top+r.height;var o=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=ai.bottom+o,a={left:i.left,top:r.bottom},l=this.$dropdownParent;"static"===l.css("position")&&(l=l.offsetParent());i={top:0,left:0};(u.contains(document.body,l[0])||l[0].isConnected)&&(i=l.offset()),a.top-=i.top,a.left-=i.left,t||n||(s="below"),e||!c||t?!c&&e&&t&&(s="below"):s="above",("above"==s||t&&"below"!==s)&&(a.top=r.top-i.top-o),null!=s&&(this.$dropdown[0].classList.remove("select2-dropdown--below"),this.$dropdown[0].classList.remove("select2-dropdown--above"),this.$dropdown[0].classList.add("select2-dropdown--"+s),this.$container[0].classList.remove("select2-container--below"),this.$container[0].classList.remove("select2-container--above"),this.$container[0].classList.add("select2-container--"+s)),this.$dropdownContainer.css(a)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(e.minWidth=e.width,e.position="relative",e.width="auto"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),u.define("select2/dropdown/minimumResultsForSearch",[],function(){function e(e,t,n,s){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,s)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,s=0;s');return e.attr("dir",this.options.get("dir")),this.$container=e,this.$container[0].classList.add("select2-container--"+this.options.get("theme")),r.StoreData(e[0],"element",this.$element),e},o}),u.define("jquery-mousewheel",["jquery"],function(e){return e}),u.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(i,e,r,t,o){var a;return null==i.fn.select2&&(a=["open","close","destroy"],i.fn.select2=function(t){if("object"==typeof(t=t||{}))return this.each(function(){var e=i.extend(!0,{},t);new r(i(this),e)}),this;if("string"!=typeof t)throw new Error("Invalid arguments for Select2: "+t);var n,s=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=o.GetData(this,"select2");null==e&&window.console&&console.error&&console.error("The select2('"+t+"') method was called on an element that is not using Select2."),n=e[t].apply(e,s)}),-1` section of your page:
```
-
-
+
+
```
>>> Immediately following a new release, it takes some time for CDNs to catch up and get the new versions live on the CDN.
diff --git a/docs/pages/03.configuration/01.options-api/docs.md b/docs/pages/03.configuration/01.options-api/docs.md
index 9f1436ccb8..85371136a2 100644
--- a/docs/pages/03.configuration/01.options-api/docs.md
+++ b/docs/pages/03.configuration/01.options-api/docs.md
@@ -40,6 +40,6 @@ This is a list of all the Select2 configuration options.
| `templateSelection` | callback | | Customizes the way that [selections are rendered](/selections#templating). |
| `theme` | string | `default` | Allows you to set the [theme](/appearance#themes). |
| `tokenizer` | callback | | A callback that handles [automatic tokenization of free-text entry](/tagging#automatic-tokenization-into-tags). |
-| `tokenSeparators` | array | `[]` | The list of characters that should be used as token separators. |
+| `tokenSeparators` | array | `null` | The list of characters that should be used as token separators. |
| `width` | string | `resolve` | Supports [customization of the container width](/appearance#container-width). |
| `scrollAfterSelect` | boolean | `false` | If `true`, resolves issue for multiselects using `closeOnSelect: false` that caused the list of results to scroll to the first selection after each select/unselect (see https://github.com/select2/select2/pull/5150). This behaviour was intentional to deal with infinite scroll UI issues (if you need this behavior, set `false`) but it created an issue with multiselect dropdown boxes of fixed length. This pull request adds a configurable option to toggle between these two desirable behaviours. |
diff --git a/docs/pages/13.i18n/docs.md b/docs/pages/13.i18n/docs.md
index 46eaaf5eba..557b2af34f 100644
--- a/docs/pages/13.i18n/docs.md
+++ b/docs/pages/13.i18n/docs.md
@@ -7,7 +7,7 @@ process:
never_cache_twig: true
---
-{% do assets.addJs('https://cdn.jsdelivr.net/npm/select2@4.1.0-beta.1/dist/js/i18n/es.js', 90) %}
+{% do assets.addJs('https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/i18n/es.js', 90) %}
## Message translations
diff --git a/docs/themes/site/templates/partials/base.html.twig b/docs/themes/site/templates/partials/base.html.twig
index ffcfd744ff..9e7826131b 100644
--- a/docs/themes/site/templates/partials/base.html.twig
+++ b/docs/themes/site/templates/partials/base.html.twig
@@ -17,7 +17,7 @@
{% do assets.addCss('theme://css/custom.css',100) %}
{% do assets.addCss('theme://css/font-awesome.min.css',100) %}
{% do assets.addCss('theme://css/featherlight.min.css') %}
- {% do assets.addCss('https://cdn.jsdelivr.net/npm/select2@4.1.0-beta.1/dist/css/select2.min.css') %}
+ {% do assets.addCss('https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css') %}
{% do assets.addCss('theme://css/s2-docs.css', 100) %}
{% do assets.addCss('theme://css/theme.css',100) %}
@@ -33,7 +33,7 @@
{% block javascripts %}
{% do assets.addJs('jquery',101) %}
{% do assets.addJs('theme://js/modernizr.custom.71422.js',100) %}
- {% do assets.addJs('https://cdn.jsdelivr.net/npm/select2@4.1.0-beta.1/dist/js/select2.full.min.js', 100) %}
+ {% do assets.addJs('https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.full.min.js', 100) %}
{% do assets.addJs('https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js', 100) %}
{% do assets.addJs('theme://js/featherlight.min.js') %}
{% do assets.addJs('theme://js/clipboard.min.js') %}
diff --git a/package.json b/package.json
index 5f3d6f7358..f66948dc66 100644
--- a/package.json
+++ b/package.json
@@ -39,7 +39,7 @@
"src",
"dist"
],
- "version": "4.1.0-beta.1",
+ "version": "4.1.0-rc.0",
"jspm": {
"main": "js/select2",
"directories": {
diff --git a/src/js/select2/core.js b/src/js/select2/core.js
index 62ba22c2aa..27d0d68689 100644
--- a/src/js/select2/core.js
+++ b/src/js/select2/core.js
@@ -302,12 +302,11 @@ define([
var key = evt.which;
if (self.isOpen()) {
- if (key === KEYS.ESC || key === KEYS.TAB ||
- (key === KEYS.UP && evt.altKey)) {
+ if (key === KEYS.ESC || (key === KEYS.UP && evt.altKey)) {
self.close(evt);
evt.preventDefault();
- } else if (key === KEYS.ENTER) {
+ } else if (key === KEYS.ENTER || key === KEYS.TAB) {
self.trigger('results:select', {});
evt.preventDefault();
@@ -554,6 +553,7 @@ define([
};
Select2.prototype.destroy = function () {
+ Utils.RemoveData(this.$container[0]);
this.$container.remove();
this._observer.disconnect();
diff --git a/src/js/select2/data/ajax.js b/src/js/select2/data/ajax.js
index b5bcdd9d13..4ca133f1d7 100644
--- a/src/js/select2/data/ajax.js
+++ b/src/js/select2/data/ajax.js
@@ -45,7 +45,7 @@ define([
if (this._request != null) {
// JSONP requests cannot always be aborted
- if ($.isFunction(this._request.abort)) {
+ if (typeof this._request.abort === 'function') {
this._request.abort();
}
diff --git a/src/js/select2/data/tags.js b/src/js/select2/data/tags.js
index c9e3a04644..af2fd95369 100644
--- a/src/js/select2/data/tags.js
+++ b/src/js/select2/data/tags.js
@@ -78,7 +78,7 @@ define([
if (tag != null) {
var $option = self.option(tag);
- $option.attr('data-select2-tag', true);
+ $option.attr('data-select2-tag', 'true');
self.addOptions([$option]);
diff --git a/src/js/select2/defaults.js b/src/js/select2/defaults.js
index 3a65e60284..d036353c14 100644
--- a/src/js/select2/defaults.js
+++ b/src/js/select2/defaults.js
@@ -33,6 +33,7 @@ define([
'./dropdown/selectOnClose',
'./dropdown/closeOnSelect',
'./dropdown/dropdownCss',
+ './dropdown/tagsSearchHighlight',
'./i18n/en'
], function ($,
@@ -49,7 +50,7 @@ define([
Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,
AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,
- DropdownCSS,
+ DropdownCSS, TagsSearchHighlight,
EnglishTranslation) {
function Defaults () {
@@ -124,6 +125,13 @@ define([
SelectOnClose
);
}
+
+ if (options.tags) {
+ options.resultsAdapter = Utils.Decorate(
+ options.resultsAdapter,
+ TagsSearchHighlight
+ );
+ }
}
if (options.dropdownAdapter == null) {
diff --git a/src/js/select2/dropdown/search.js b/src/js/select2/dropdown/search.js
index c1c2976b69..05bbcf5b2c 100644
--- a/src/js/select2/dropdown/search.js
+++ b/src/js/select2/dropdown/search.js
@@ -5,6 +5,7 @@ define([
Search.prototype.render = function (decorated) {
var $rendered = decorated.call(this);
+ var searchLabel = this.options.get('translations').get('search');
var $search = $(
'' +
@@ -18,6 +19,7 @@ define([
this.$search = $search.find('input');
this.$search.prop('autocomplete', this.options.get('autocomplete'));
+ this.$search.attr('aria-label', searchLabel());
$rendered.prepend($search);
diff --git a/src/js/select2/dropdown/tagsSearchHighlight.js b/src/js/select2/dropdown/tagsSearchHighlight.js
new file mode 100644
index 0000000000..97d8adfb7f
--- /dev/null
+++ b/src/js/select2/dropdown/tagsSearchHighlight.js
@@ -0,0 +1,31 @@
+define([
+ '../utils'
+], function (Utils) {
+ function TagsSearchHighlight () { }
+
+ TagsSearchHighlight.prototype.highlightFirstItem = function (decorated) {
+ var $options = this.$results
+ .find(
+ '.select2-results__option--selectable' +
+ ':not(.select2-results__option--selected)'
+ );
+
+ if ($options.length > 0) {
+ var $firstOption = $options.first();
+ var data = Utils.GetData($firstOption[0], 'data');
+ var firstElement = data.element;
+
+ if (firstElement && firstElement.getAttribute) {
+ if (firstElement.getAttribute('data-select2-tag') === 'true') {
+ $firstOption.trigger('mouseenter');
+
+ return;
+ }
+ }
+ }
+
+ decorated.call(this);
+ };
+
+ return TagsSearchHighlight;
+});
diff --git a/src/js/select2/i18n/en.js b/src/js/select2/i18n/en.js
index 6321d5ad05..dc26336287 100644
--- a/src/js/select2/i18n/en.js
+++ b/src/js/select2/i18n/en.js
@@ -45,6 +45,9 @@ define(function () {
},
removeItem: function () {
return 'Remove item';
+ },
+ search: function() {
+ return 'Search';
}
};
});
diff --git a/src/js/select2/i18n/fr.js b/src/js/select2/i18n/fr.js
index 02c4d928f0..6ddce7bf50 100644
--- a/src/js/select2/i18n/fr.js
+++ b/src/js/select2/i18n/fr.js
@@ -31,6 +31,9 @@ define(function () {
},
removeAllItems: function () {
return 'Supprimer tous les éléments';
+ },
+ removeItem: function () {
+ return 'Supprimer l\'élément';
}
};
});
diff --git a/src/js/select2/i18n/hu.js b/src/js/select2/i18n/hu.js
index 9c62748c3c..13bd7279cf 100644
--- a/src/js/select2/i18n/hu.js
+++ b/src/js/select2/i18n/hu.js
@@ -28,6 +28,12 @@ define(function () {
},
removeAllItems: function () {
return 'Távolítson el minden elemet';
+ },
+ removeItem: function () {
+ return 'Elem eltávolítása';
+ },
+ search: function() {
+ return 'Keresés';
}
};
});
diff --git a/src/js/select2/i18n/te.js b/src/js/select2/i18n/te.js
new file mode 100644
index 0000000000..747afed319
--- /dev/null
+++ b/src/js/select2/i18n/te.js
@@ -0,0 +1,53 @@
+define(function() {
+ // Telugu
+ return {
+ errorLoading: function() {
+ return 'ఫలితాలు చూపించలేకపోతున్నాము';
+ },
+ inputTooLong: function(args) {
+ var overChars = args.input.length - args.maximum;
+ var message = overChars;
+
+ if (overChars != 1) {
+ message = message + ' అక్షరాలు తొలిగించండి';
+ } else {
+ message = message + ' అక్షరం తొలిగించండి';
+ }
+
+ return message;
+ },
+ inputTooShort: function(args) {
+ var remainingChars = args.minimum - args.input.length;
+
+ var message = remainingChars + ' లేక మరిన్ని అక్షరాలను జోడించండి';
+
+ return message;
+ },
+ loadingMore: function() {
+ return 'మరిన్ని ఫలితాలు…';
+ },
+ maximumSelected: function(args) {
+ var message = 'మీరు ' + args.maximum;
+
+ if (args.maximum != 1) {
+ message += ' అంశాల్ని మాత్రమే ఎంచుకోగలరు';
+ } else {
+ message += ' అంశాన్ని మాత్రమే ఎంచుకోగలరు';
+ }
+
+ return message;
+ },
+ noResults: function() {
+ return 'ఫలితాలు లేవు';
+ },
+ searching: function() {
+ return 'శోధిస్తున్నాము…';
+ },
+ removeAllItems: function() {
+ return 'అన్ని అంశాల్ని తొలిగించండి';
+ },
+ removeItem: function() {
+ return 'తొలిగించు';
+ }
+ };
+});
diff --git a/src/js/select2/results.js b/src/js/select2/results.js
index a70d808239..5b249d63dd 100644
--- a/src/js/select2/results.js
+++ b/src/js/select2/results.js
@@ -234,7 +234,8 @@ define([
}
var $childrenContainer = $('', {
- 'class': 'select2-results__options select2-results__options--nested'
+ 'class': 'select2-results__options select2-results__options--nested',
+ 'role': 'none'
});
$childrenContainer.append($children);
diff --git a/src/js/select2/selection/allowClear.js b/src/js/select2/selection/allowClear.js
index 4e8eff9381..d26362117f 100644
--- a/src/js/select2/selection/allowClear.js
+++ b/src/js/select2/selection/allowClear.js
@@ -93,6 +93,7 @@ define([
decorated.call(this, data);
this.$selection.find('.select2-selection__clear').remove();
+ this.$selection[0].classList.remove('select2-selection--clearable');
if (this.$selection.find('.select2-selection__placeholder').length > 0 ||
data.length === 0) {
@@ -115,6 +116,7 @@ define([
Utils.StoreData($remove[0], 'data', data);
this.$selection.prepend($remove);
+ this.$selection[0].classList.add('select2-selection--clearable');
};
return AllowClear;
diff --git a/src/js/select2/selection/placeholder.js b/src/js/select2/selection/placeholder.js
index 350d096acb..c58b83b0d4 100644
--- a/src/js/select2/selection/placeholder.js
+++ b/src/js/select2/selection/placeholder.js
@@ -25,6 +25,15 @@ define([
$placeholder[0].classList.add('select2-selection__placeholder');
$placeholder[0].classList.remove('select2-selection__choice');
+ var placeholderTitle = placeholder.title ||
+ placeholder.text ||
+ $placeholder.text();
+
+ this.$selection.find('.select2-selection__rendered').attr(
+ 'title',
+ placeholderTitle
+ );
+
return $placeholder;
};
diff --git a/src/js/select2/selection/search.js b/src/js/select2/selection/search.js
index b13dcfe3ce..b6201d1004 100644
--- a/src/js/select2/selection/search.js
+++ b/src/js/select2/selection/search.js
@@ -8,18 +8,22 @@ define([
}
Search.prototype.render = function (decorated) {
+ var searchLabel = this.options.get('translations').get('search');
var $search = $(
'' +
- '' +
+ ' spellcheck="false" role="searchbox" aria-autocomplete="list" >' +
+ '' +
''
);
this.$searchContainer = $search;
- this.$search = $search.find('input');
+ this.$search = $search.find('textarea');
this.$search.prop('autocomplete', this.options.get('autocomplete'));
+ this.$search.attr('aria-label', searchLabel());
var $rendered = decorated.call(this);
diff --git a/src/js/select2/selection/single.js b/src/js/select2/selection/single.js
index 20c80e0c05..f66c32a44b 100644
--- a/src/js/select2/selection/single.js
+++ b/src/js/select2/selection/single.js
@@ -37,6 +37,7 @@ define([
.attr('role', 'textbox')
.attr('aria-readonly', 'true');
this.$selection.attr('aria-labelledby', id);
+ this.$selection.attr('aria-controls', id);
this.$selection.on('mousedown', function (evt) {
// Only respond to left clicks
diff --git a/src/scss/_multiple.scss b/src/scss/_multiple.scss
index 473018ac6a..ab59be0942 100644
--- a/src/scss/_multiple.scss
+++ b/src/scss/_multiple.scss
@@ -30,6 +30,13 @@
margin-top: 5px;
margin-left: 5px;
padding: 0;
+ max-width: 100%;
+ resize: none;
+ height: 18px;
+ vertical-align: bottom;
+ font-family: sans-serif;
+ overflow: hidden;
+ word-break: keep-all;
&::-webkit-search-cancel-button {
-webkit-appearance: none;
diff --git a/src/scss/theme/default/_multiple.scss b/src/scss/theme/default/_multiple.scss
index 7e63f3f8ad..09d2a6ba50 100644
--- a/src/scss/theme/default/_multiple.scss
+++ b/src/scss/theme/default/_multiple.scss
@@ -5,15 +5,22 @@
cursor: text;
padding-bottom: 5px;
padding-right: 5px;
+ position: relative;
+
+ &.select2-selection--clearable {
+ padding-right: 25px;
+ }
.select2-selection__clear {
cursor: pointer;
- float: right;
font-weight: bold;
height: 20px;
margin-right: 10px;
margin-top: 5px;
+ position: absolute;
+ right: 0;
+
// This padding is to account for the bottom border for the first
// selection row and the top border of the second selection row.
// Without it, selections on the first row may be offset incorrectly
@@ -25,11 +32,21 @@
background-color: #e4e4e4;
border: 1px solid #aaa;
border-radius: 4px;
+ box-sizing: border-box;
display: inline-block;
margin-left: 5px;
margin-top: 5px;
padding: 0;
+ padding-left: 20px;
+
+ position: relative;
+
+ max-width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ vertical-align: bottom;
+ white-space: nowrap;
}
.select2-selection__choice__display {
@@ -54,6 +71,10 @@
padding: 0 4px;
+ position: absolute;
+ left: 0;
+ top: 0;
+
&:hover, &:focus {
background-color: #f1f1f1;
color: #333;
diff --git a/tests/dropdown/search-a11y-tests.js b/tests/dropdown/search-a11y-tests.js
index 0876de9fff..e33099850d 100644
--- a/tests/dropdown/search-a11y-tests.js
+++ b/tests/dropdown/search-a11y-tests.js
@@ -183,3 +183,19 @@ test('aria-controls should be removed when closed', function (assert) {
'There are no results for the search box to point to when it is closed'
);
});
+
+test('aria-label attribute is present', function (assert) {
+ var $select = $('#qunit-fixture .single');
+
+ var dropdown = new DropdownSearch($select, options);
+ var $dropdown = dropdown.render();
+
+ var container = new MockContainer();
+ dropdown.bind(container, $(''));
+
+ assert.equal(
+ $dropdown.find('input').attr('aria-label'),
+ 'Search',
+ 'The search box has a label'
+ );
+});
diff --git a/tests/options/translation-tests.js b/tests/options/translation-tests.js
index 7fdfd1e131..5e227c6421 100644
--- a/tests/options/translation-tests.js
+++ b/tests/options/translation-tests.js
@@ -53,7 +53,8 @@ test(
'noResults',
'searching',
'removeAllItems',
- 'removeItem'
+ 'removeItem',
+ 'search'
]
);
}
diff --git a/tests/results/focusing-tests.js b/tests/results/focusing-tests.js
index 08a2ef3c21..bf8caf0bd0 100644
--- a/tests/results/focusing-tests.js
+++ b/tests/results/focusing-tests.js
@@ -239,3 +239,113 @@ test('!scrollAfterSelect does not trigger results:focus', function (assert) {
container.trigger('select', {});
});
+
+test('tag result is highlighted with no other selections', function (assert) {
+ assert.expect(2);
+
+ var $ = require('jquery');
+
+ var $select = $('');
+ var $parent = $('');
+
+ var $container = $('');
+ var container = new MockContainer();
+
+ $parent.appendTo($('#qunit-fixture'));
+ $select.appendTo($parent);
+
+ var Utils = require('select2/utils');
+ var Options = require('select2/options');
+
+ var Results = require('select2/results');
+ var Tags = require('select2/dropdown/tagsSearchHighlight');
+ var TagResults = Utils.Decorate(Results, Tags);
+
+ var results = new TagResults($select, new Options({}));
+
+ // Fake the data adapter for the `setClasses` method
+ results.data = {};
+ results.data.current = function (callback) {
+ callback([]);
+ };
+
+ results.render();
+
+ results.bind(container, $container);
+
+ results.on('results:focus', function (params) {
+ assert.equal(params.data.id, 'tag');
+ assert.equal(params.data.text, 'Tag');
+ });
+
+ var tagElement = $('')[0];
+
+ container.trigger('results:all', {
+ data: {
+ results: [
+ {
+ id: 'tag',
+ text: 'Tag',
+ element: tagElement
+ }
+ ]
+ }
+ });
+});
+
+test('tag result is highlighted with other selections', function (assert) {
+ assert.expect(2);
+
+ var $ = require('jquery');
+
+ var $select = $('');
+ var $parent = $('');
+
+ var $container = $('');
+ var container = new MockContainer();
+
+ $parent.appendTo($('#qunit-fixture'));
+ $select.appendTo($parent);
+
+ var Utils = require('select2/utils');
+ var Options = require('select2/options');
+
+ var Results = require('select2/results');
+ var Tags = require('select2/dropdown/tagsSearchHighlight');
+ var TagResults = Utils.Decorate(Results, Tags);
+
+ var results = new TagResults($select, new Options({}));
+
+ // Fake the data adapter for the `setClasses` method
+ results.data = {};
+ results.data.current = function (callback) {
+ callback([{ id: 'test' }]);
+ };
+
+ results.render();
+
+ results.bind(container, $container);
+
+ results.on('results:focus', function (params) {
+ assert.equal(params.data.id, 'tag');
+ assert.equal(params.data.text, 'Tag');
+ });
+
+ var tagElement = $('')[0];
+
+ container.trigger('results:all', {
+ data: {
+ results: [
+ {
+ id: 'tag',
+ text: 'Tag',
+ element: tagElement
+ },
+ {
+ id: 'test',
+ text: 'Test'
+ }
+ ]
+ }
+ });
+});
diff --git a/tests/selection/placeholder-tests.js b/tests/selection/placeholder-tests.js
index 8a436ff338..b03a91419f 100644
--- a/tests/selection/placeholder-tests.js
+++ b/tests/selection/placeholder-tests.js
@@ -44,7 +44,6 @@ test('normalizing placeholder gives object for string', function (assert) {
assert.equal(normalized.text, 'placeholder');
});
-
test('text is shown for placeholder option on single', function (assert) {
var selection = new SinglePlaceholder(
$('#qunit-fixture .single'),
@@ -60,6 +59,50 @@ test('text is shown for placeholder option on single', function (assert) {
assert.equal($selection.text(), 'This is the placeholder');
});
+test('title is set for placeholder option on single', function (assert) {
+ var selection = new SinglePlaceholder(
+ $('#qunit-fixture .single'),
+ placeholderOptions
+ );
+
+ var $selection = selection.render();
+
+ selection.update([{
+ id: 'placeholder'
+ }]);
+
+ assert.equal(
+ $selection.find('.select2-selection__rendered').attr('title'),
+ 'This is the placeholder'
+ );
+});
+
+test('title is used for placeholder option on single', function (assert) {
+ var placeholderTitleOptions = new Options({
+ placeholder: {
+ id: 'placeholder',
+ text: 'This is the placeholder',
+ title: 'This is the placeholder title'
+ }
+ });
+
+ var selection = new SinglePlaceholder(
+ $('#qunit-fixture .single'),
+ placeholderTitleOptions
+ );
+
+ var $selection = selection.render();
+
+ selection.update([{
+ id: 'placeholder'
+ }]);
+
+ assert.equal(
+ $selection.find('.select2-selection__rendered').attr('title'),
+ 'This is the placeholder title'
+ );
+});
+
test('placeholder is shown when no options are selected', function (assert) {
var selection = new SinglePlaceholder(
$('#qunit-fixture .multiple'),
diff --git a/tests/selection/search-a11y-tests.js b/tests/selection/search-a11y-tests.js
index b2628df565..8a5bce0bdd 100644
--- a/tests/selection/search-a11y-tests.js
+++ b/tests/selection/search-a11y-tests.js
@@ -23,7 +23,7 @@ test('role attribute is set to searchbox', function (assert) {
selection.update([]);
assert.equal(
- $selection.find('input').attr('role'),
+ $selection.find('textarea').attr('role'),
'searchbox',
'The search box is marked as a search box'
);
@@ -43,7 +43,7 @@ test('aria-autocomplete attribute is present', function (assert) {
selection.update([]);
assert.equal(
- $selection.find('input').attr('aria-autocomplete'),
+ $selection.find('textarea').attr('aria-autocomplete'),
'list',
'The search box is marked as autocomplete'
);
@@ -62,7 +62,7 @@ test('aria-activedescendant should not be set initiailly', function (assert) {
// Update the selection so the search is rendered
selection.update([]);
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
assert.ok(
!$search.attr('aria-activedescendant'),
@@ -89,7 +89,7 @@ test('aria-activedescendant should be set after highlight', function (assert) {
}
});
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
assert.equal(
$search.attr('aria-activedescendant'),
@@ -111,7 +111,7 @@ test('activedescendant should remove if there is no ID', function (assert) {
// Update the selection so the search is rendered
selection.update([]);
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
$search.attr('aria-activedescendant', 'test');
container.trigger('results:focus', {
@@ -137,7 +137,7 @@ test('aria-activedescendant should be removed when closed', function (assert) {
// Update the selection so the search is rendered
selection.update([]);
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
$search.attr('aria-activedescendant', 'something');
container.trigger('close');
@@ -161,7 +161,7 @@ test('aria-controls should not be set initiailly', function (assert) {
// Update the selection so the search is rendered
selection.update([]);
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
assert.ok(
!$search.attr('aria-controls'),
@@ -182,7 +182,7 @@ test('aria-controls should be set when opened', function (assert) {
// Update the selection so the search is rendered
selection.update([]);
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
container.trigger('open');
@@ -205,7 +205,7 @@ test('aria-controls should be removed when closed', function (assert) {
// Update the selection so the search is rendered
selection.update([]);
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
$search.attr('aria-controls', 'something');
container.trigger('close');
@@ -215,3 +215,23 @@ test('aria-controls should be removed when closed', function (assert) {
'There are no results for the search box to point to when it is closed'
);
});
+
+test('aria-label attribute is present', function (assert) {
+ var $select = $('#qunit-fixture .multiple');
+
+ var CustomSelection = Utils.Decorate(MultipleSelection, InlineSearch);
+ var selection = new CustomSelection($select, options);
+ var $selection = selection.render();
+
+ var container = new MockContainer();
+ selection.bind(container, $(''));
+
+ // Update the selection so the search is rendered
+ selection.update([]);
+
+ assert.equal(
+ $selection.find('textarea').attr('aria-label'),
+ 'Search',
+ 'The search box has a label'
+ );
+});
\ No newline at end of file
diff --git a/tests/selection/search-placeholder-tests.js b/tests/selection/search-placeholder-tests.js
index d8704f697c..d76d839832 100644
--- a/tests/selection/search-placeholder-tests.js
+++ b/tests/selection/search-placeholder-tests.js
@@ -33,18 +33,19 @@ test('width does not extend the search box', function (assert) {
selection.bind(container, $container);
// Make it visible so the browser can place focus on the search
- $container.append($selection);
+ $container.find('div').append($selection);
$('#qunit-fixture').append($container);
// Update the selection so the search is rendered
selection.update([]);
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
assert.equal(
$search.outerWidth(),
- 100,
- 'The search should be the entire width of the container'
+ 93,
+ 'The search should be the entire width of the container, '+
+ 'minus the borders and the initial padding'
);
assert.equal(
diff --git a/tests/selection/search-tests.js b/tests/selection/search-tests.js
index 7106f8e241..baf8670ffa 100644
--- a/tests/selection/search-tests.js
+++ b/tests/selection/search-tests.js
@@ -38,7 +38,7 @@ test('backspace will remove a choice', function (assert) {
}
]);
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
var $choices = $selection.find('.select2-selection__choice');
assert.equal($search.length, 1, 'The search was visible');
@@ -75,7 +75,7 @@ test('backspace will set the search text', function (assert) {
}
]);
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
var $choices = $selection.find('.select2-selection__choice');
assert.equal($search.length, 1, 'The search was visible');
@@ -115,7 +115,7 @@ test('updating selection does not shift the focus', function (assert) {
// Make it visible so the browser can place focus on the search
$container.append($selection);
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
$search.trigger('focus');
assert.equal($search.length, 1, 'The search was not visible');
@@ -165,7 +165,7 @@ test('the focus event shifts the focus', function (assert) {
// The search should not be automatically focused
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
assert.notEqual(
document.activeElement,
@@ -214,7 +214,7 @@ test('search box without text should propagate click', function (assert) {
assert.ok(true, 'The click event should not have been trapped');
});
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
$search.trigger('click');
});
@@ -242,7 +242,7 @@ test('search box with text should not propagate click', function (assert) {
assert.ok(false, 'The click event should have been trapped');
});
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
$search.val('test');
$search.trigger('click');
});
@@ -271,12 +271,12 @@ test('search box with text should not close dropdown', function (assert) {
assert.ok(false, 'The dropdown should not have closed');
});
- var $search = $selection.find('input');
+ var $search = $selection.find('textarea');
$search.val('test');
$search.trigger('click');
});
-test('search box defaults autocomplete to off', function (assert) {
+QUnit.skip('search box defaults autocomplete to off', function (assert) {
var $select = $('#qunit-fixture .multiple');
var CustomSelection = Utils.Decorate(MultipleSelection, InlineSearch);
@@ -290,13 +290,13 @@ test('search box defaults autocomplete to off', function (assert) {
selection.update([]);
assert.equal(
- $selection.find('input').attr('autocomplete'),
+ $selection.find('textarea').attr('autocomplete'),
'off',
'The search box has autocomplete disabled'
);
});
-test('search box sets autocomplete from options', function (assert) {
+QUnit.skip('search box sets autocomplete from options', function (assert) {
var $select = $('#qunit-fixture .multiple');
var autocompleteOptions = new Options({
@@ -314,7 +314,7 @@ test('search box sets autocomplete from options', function (assert) {
selection.update([]);
assert.equal(
- $selection.find('input').attr('autocomplete'),
+ $selection.find('textarea').attr('autocomplete'),
'country-name',
'The search box sets the right autocomplete attribute'
);