From 36bceb6ed2b555dc9c79550f58cd10308a4bca5a Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Fri, 9 Mar 2018 09:17:04 -0500 Subject: [PATCH] Fix issue in Selectize.js processwire/processwire-issues#520 where Selectize.js had bottleneck in measureString() function that caused a slowdown because of DOM manipulation (was noticed when Selectize paired with Uikit 3) --- .../selectize/js/standalone/selectize.js | 48 ++++++++++++------- .../selectize/js/standalone/selectize.min.js | 2 +- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/wire/modules/Jquery/JqueryUI/selectize/js/standalone/selectize.js b/wire/modules/Jquery/JqueryUI/selectize/js/standalone/selectize.js index 37ddf749..c2097db0 100755 --- a/wire/modules/Jquery/JqueryUI/selectize/js/standalone/selectize.js +++ b/wire/modules/Jquery/JqueryUI/selectize/js/standalone/selectize.js @@ -993,10 +993,15 @@ } $to.css(styles); }; + + // since measureString seems to get called multiple times for each event, keep a cache (added by ProcessWire) + var measureStringData = { str: '', width: 0 }; /** * Measures the width of a string within a * parent element (in pixels). + * + * (updated by ProcessWire to avoid bottleneck of adding & deleting element from DOM on every call) * * @param {string} str * @param {object} $parent @@ -1007,25 +1012,34 @@ return 0; } - var $test = $('').css({ - position: 'absolute', - top: -99999, - left: -99999, - width: 'auto', - padding: 0, - whiteSpace: 'pre' - }).text(str).appendTo('body'); + var $test = $('#selectize-measureString'); - transferStyles($parent, $test, [ - 'letterSpacing', - 'fontSize', - 'fontFamily', - 'fontWeight', - 'textTransform' - ]); + if(!$test.length) { + + $test = $('').attr('id', 'selectize-measureString').css({ + position: 'absolute', + top: -99999, + left: -99999, + width: 'auto', + padding: 0, + whiteSpace: 'pre' + }).appendTo('body'); + + transferStyles($parent, $test, [ + 'letterSpacing', + 'fontSize', + 'fontFamily', + 'fontWeight', + 'textTransform' + ]); + } - var width = $test.width(); - $test.remove(); + if(str === measureStringData.str) { + var width = measureStringData.width; + } else { + $test.text(str); + var width = $test.width(); + } return width; }; diff --git a/wire/modules/Jquery/JqueryUI/selectize/js/standalone/selectize.min.js b/wire/modules/Jquery/JqueryUI/selectize/js/standalone/selectize.min.js index f511c9c2..04354ea1 100644 --- a/wire/modules/Jquery/JqueryUI/selectize/js/standalone/selectize.min.js +++ b/wire/modules/Jquery/JqueryUI/selectize/js/standalone/selectize.min.js @@ -1 +1 @@ -(function(a,b){if(typeof define==="function"&&define.amd){define("sifter",b)}else{if(typeof exports==="object"){module.exports=b()}else{a.Sifter=b()}}}(this,function(){var h=function(j,k){this.items=j;this.settings=k||{diacritics:true}};h.prototype.tokenize=function(m){m=b(String(m||"").toLowerCase());if(!m||!m.length){return[]}var j,q,l,k;var o=[];var p=m.split(/ +/);for(j=0,q=p.length;j0){q.items.push({score:k,id:t})}})}else{p.iterator(p.items,function(s,t){q.items.push({score:1,id:t})})}j=p.getSortFunction(q,r);if(j){q.items.sort(j)}q.total=q.items.length;if(typeof r.limit==="number"){q.items=q.items.slice(0,r.limit)}return q};var f=function(k,j){if(typeof k==="number"&&typeof j==="number"){return k>j?1:(kj){return 1}if(j>k){return -1}return 0};var d=function(l,j){var p,q,m,o;for(p=1,q=arguments.length;p=0&&V.data.length>0){var Z=V.data.match(R);var Y=document.createElement("span");Y.className="highlight";var W=V.splitText(aa);var T=W.splitText(Z[0].length);var U=W.cloneNode(true);Y.appendChild(U);W.parentNode.replaceChild(Y,W);ab=1}}else{if(V.nodeType===1&&V.childNodes&&!/(script|style)/i.test(V.tagName)){for(var X=0;X/g,">").replace(/"/g,""")};var f=function(P){return(P+"").replace(/\$/g,"$$$$")};var s={};s.before=function(P,S,R){var Q=P[S];P[S]=function(){R.apply(P,arguments);return Q.apply(P,arguments)}};s.after=function(P,S,R){var Q=P[S];P[S]=function(){var T=Q.apply(P,arguments);R.apply(P,arguments);return T}};var r=function(P){var Q=false;return function(){if(Q){return}Q=true;P.apply(this,arguments)}};var g=function(Q,P){var R;return function(){var S=this;var T=arguments;window.clearTimeout(R);R=window.setTimeout(function(){Q.apply(S,T)},P)}};var a=function(P,R,T){var S;var Q=P.trigger;var U={};P.trigger=function(){var V=arguments[0];if(R.indexOf(V)!==-1){U[V]=arguments}else{return Q.apply(P,arguments)}};T.apply(P,[]);P.trigger=Q;for(S in U){if(U.hasOwnProperty(S)){Q.apply(P,U[S])}}};var A=function(S,R,P,Q){S.on(R,P,function(T){var U=T.target;while(U&&U.parentNode!==S[0]){U=U.parentNode}T.currentTarget=U;return Q.apply(this,[T])})};var l=function(R){var Q={};if("selectionStart" in R){Q.start=R.selectionStart;Q.length=R.selectionEnd-Q.start}else{if(document.selection){R.focus();var S=document.selection.createRange();var P=document.selection.createRange().text.length;S.moveStart("character",-R.value.length);Q.start=S.text.length-P;Q.length=P}}return Q};var n=function(S,T,Q){var P,U,R={};if(Q){for(P=0,U=Q.length;P").css({position:"absolute",top:-99999,left:-99999,width:"auto",padding:0,whiteSpace:"pre"}).text(S).appendTo("body");n(R,Q,["letterSpacing","fontSize","fontFamily","fontWeight","textTransform"]);var P=Q.width();Q.remove();return P};var L=function(R){var P=null;var Q=function(V,ab){var Z,aa,W,Y,S;var T,U,X;V=V||window.event||{};ab=ab||{};if(V.metaKey||V.altKey){return}if(!ab.force&&R.data("grow")===false){return}Z=R.val();if(V.type&&V.type.toLowerCase()==="keydown"){aa=V.keyCode;W=((aa>=97&&aa<=122)||(aa>=65&&aa<=90)||(aa>=48&&aa<=57)||aa===32);if(aa===q||aa===o){X=l(R[0]);if(X.length){Z=Z.substring(0,X.start)+Z.substring(X.start+X.length)}else{if(aa===o&&X.start){Z=Z.substring(0,X.start-1)+Z.substring(X.start+1)}else{if(aa===q&&typeof X.start!=="undefined"){Z=Z.substring(0,X.start)+Z.substring(X.start+1)}}}}else{if(W){T=V.shiftKey;U=String.fromCharCode(V.keyCode);if(T){U=U.toUpperCase()}else{U=U.toLowerCase()}Z+=U}}}Y=R.attr("placeholder");if(!Z&&Y){Z=Y}S=K(Z,R)+4;if(S!==P){P=S;R.width(S);R.triggerHandler("resize")}};R.on("keydown keyup update blur",Q);Q()};var E=function(Q){var P=document.createElement("div");P.appendChild(Q.cloneNode(true));return P.innerHTML};var d=function(R,Q){if(!Q){Q={}}var P="Selectize";console.error(P+": "+R);if(Q.explanation){if(console.group){console.group()}console.error(Q.explanation);if(console.group){console.groupEnd()}}};var c=function(U,R){var W,S,P,Q,V,X=this;V=U[0];V.selectize=X;var T=window.getComputedStyle&&window.getComputedStyle(V,null);Q=T?T.getPropertyValue("direction"):V.currentStyle&&V.currentStyle.direction;Q=Q||U.parents("[dir]:first").attr("dir")||"";v.extend(X,{order:0,settings:R,$input:U,tabIndex:U.attr("tabindex")||"",tagType:V.tagName.toLowerCase()==="select"?k:h,rtl:/rtl/i.test(Q),eventNS:".selectize"+(++c.count),highlightedValue:null,isOpen:false,isDisabled:false,isRequired:U.is("[required]"),isInvalid:false,isLocked:false,isFocused:false,isInputHidden:false,isSetup:false,isShiftDown:false,isCmdDown:false,isCtrlDown:false,ignoreFocus:false,ignoreBlur:false,ignoreHover:false,hasOptions:false,currentResults:null,lastValue:"",caretPos:0,loading:0,loadedSearches:{},$activeOption:null,$activeItems:[],optgroups:{},options:{},userOptions:{},items:[],renderCache:{},onSearchChange:R.loadThrottle===null?X.onSearchChange:g(X.onSearchChange,R.loadThrottle)});X.sifter=new m(this.options,{diacritics:R.diacritics});if(X.settings.options){for(S=0,P=X.settings.options.length;S").addClass(ac.wrapperClass).addClass(ad).addClass(ah);ae=v("
").addClass(ac.inputClass).addClass("items").appendTo(aa);Q=v('').appendTo(ae).attr("tabindex",R.is(":disabled")?"-1":V.tabIndex);ab=v(ac.dropdownParent||aa);S=v("
").addClass(ac.dropdownClass).addClass(ah).hide().appendTo(ab);W=v("
").addClass(ac.dropdownContentClass).appendTo(S);if(Z=R.attr("id")){Q.attr("id",Z+"-selectized");v("label[for='"+Z+"']").attr("for",Z+"-selectized")}if(V.settings.copyClassesToDropdown){S.addClass(ad)}aa.css({width:R[0].style.width});if(V.plugins.names.length){X="plugin-"+V.plugins.names.join(" plugin-");aa.addClass(X);S.addClass(X)}if((ac.maxItems===null||ac.maxItems>1)&&V.tagType===k){R.attr("multiple","multiple")}if(V.settings.placeholder){Q.attr("placeholder",ac.placeholder)}if(!V.settings.splitOn&&V.settings.delimiter){var P=V.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");V.settings.splitOn=new RegExp("\\s*"+P+"+\\s*")}if(R.attr("autocorrect")){Q.attr("autocorrect",R.attr("autocorrect"))}if(R.attr("autocapitalize")){Q.attr("autocapitalize",R.attr("autocapitalize"))}V.$wrapper=aa;V.$control=ae;V.$control_input=Q;V.$dropdown=S;V.$dropdown_content=W;S.on("mouseenter","[data-selectable]",function(){return V.onOptionHover.apply(V,arguments)});S.on("mousedown click","[data-selectable]",function(){return V.onOptionSelect.apply(V,arguments)});A(ae,"mousedown","*:not(input)",function(){return V.onItemSelect.apply(V,arguments)});L(Q);ae.on({mousedown:function(){return V.onMouseDown.apply(V,arguments)},click:function(){return V.onClick.apply(V,arguments)}});Q.on({mousedown:function(ai){ai.stopPropagation()},keydown:function(){return V.onKeyDown.apply(V,arguments)},keyup:function(){return V.onKeyUp.apply(V,arguments)},keypress:function(){return V.onKeyPress.apply(V,arguments)},resize:function(){V.positionDropdown.apply(V,[])},blur:function(){return V.onBlur.apply(V,arguments)},focus:function(){V.ignoreBlur=false;return V.onFocus.apply(V,arguments)},paste:function(){return V.onPaste.apply(V,arguments)}});ag.on("keydown"+Y,function(ai){V.isCmdDown=ai[b?"metaKey":"ctrlKey"];V.isCtrlDown=ai[b?"altKey":"ctrlKey"];V.isShiftDown=ai.shiftKey});ag.on("keyup"+Y,function(ai){if(ai.keyCode===e){V.isCtrlDown=false}if(ai.keyCode===j){V.isShiftDown=false}if(ai.keyCode===J){V.isCmdDown=false}});ag.on("mousedown"+Y,function(ai){if(V.isFocused){if(ai.target===V.$dropdown[0]||ai.target.parentNode===V.$dropdown[0]){return false}if(!V.$control.has(ai.target).length&&ai.target!==V.$control[0]){V.blur(ai.target)}}});U.on(["scroll"+Y,"resize"+Y].join(" "),function(){if(V.isOpen){V.positionDropdown.apply(V,arguments)}});U.on("mousemove"+Y,function(){V.ignoreHover=false});this.revertSettings={$children:R.children().detach(),tabindex:R.attr("tabindex")};R.attr("tabindex",-1).hide().after(V.$wrapper);if(v.isArray(ac.items)){V.setValue(ac.items);delete ac.items}if(C){R.on("invalid"+Y,function(ai){ai.preventDefault();V.isInvalid=true;V.refreshState()})}V.updateOriginalInput();V.refreshItems();V.refreshState();V.updatePlaceholder();V.isSetup=true;if(R.is(":disabled")){V.disable()}V.on("change",this.onChange);R.data("selectize",V);R.addClass("selectized");V.trigger("initialize");if(ac.preload===true){V.onSearchChange("")}},setupTemplates:function(){var Q=this;var P=Q.settings.labelField;var R=Q.settings.optgroupLabelField;var S={optgroup:function(T){return'
'+T.html+"
"},optgroup_header:function(U,T){return'
'+T(U[R])+"
"},option:function(U,T){return'
'+T(U[P])+"
"},item:function(U,T){return'
'+T(U[P])+"
"},option_create:function(U,T){return'
Add '+T(U.input)+"
"}};Q.settings.render=v.extend({},S,Q.settings.render)},setupCallbacks:function(){var P,Q,R={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"};for(P in R){if(R.hasOwnProperty(P)){Q=this.settings[R[P]];if(Q){this.on(P,Q)}}}},onClick:function(Q){var P=this;if(!P.isFocused){P.focus();Q.preventDefault()}},onMouseDown:function(S){var Q=this;var R=S.isDefaultPrevented();var P=v(S.target);if(Q.isFocused){if(S.target!==Q.$control_input[0]){if(Q.settings.mode==="single"){Q.isOpen?Q.close():Q.open()}else{if(!R){Q.setActiveItem(null)}}return false}}else{if(!R){window.setTimeout(function(){Q.focus()},0)}}},onChange:function(){this.$input.trigger("change")},onPaste:function(Q){var P=this;if(P.isFull()||P.isInputHidden||P.isLocked){Q.preventDefault();return}if(P.settings.splitOn){setTimeout(function(){var S=P.$control_input.val();if(!S.match(P.settings.splitOn)){return}var R=v.trim(S).split(P.settings.splitOn);for(var T=0,U=R.length;TR){Q=P;P=R;R=Q}for(S=P;S<=R;S++){Y=Z.$control[0].childNodes[S];if(Z.$activeItems.indexOf(Y)===-1){v(Y).addClass("active");Z.$activeItems.push(Y)}}U.preventDefault()}else{if((T==="mousedown"&&Z.isCtrlDown)||(T==="keydown"&&this.isShiftDown)){if(W.hasClass("active")){X=Z.$activeItems.indexOf(W[0]);Z.$activeItems.splice(X,1);W.removeClass("active")}else{Z.$activeItems.push(W.addClass("active")[0])}}else{v(Z.$activeItems).removeClass("active");Z.$activeItems=[W.addClass("active")[0]]}}Z.hideInput();if(!this.isFocused){Z.focus()}},setActiveOption:function(P,V,R){var Q,W,U;var T,S;var X=this;if(X.$activeOption){X.$activeOption.removeClass("active")}X.$activeOption=null;P=v(P);if(!P.length){return}X.$activeOption=P.addClass("active");if(V||!O(V)){Q=X.$dropdown_content.height();W=X.$activeOption.outerHeight(true);V=X.$dropdown_content.scrollTop()||0;U=X.$activeOption.offset().top-X.$dropdown_content.offset().top+V;T=U;S=U-Q+W;if(U+W>Q+V){X.$dropdown_content.stop().animate({scrollTop:S},R?X.settings.scrollDuration:0)}else{if(U=0;S--){if(V.items.indexOf(y(X.items[S].id))!==-1){X.items.splice(S,1)}}}return X},refreshOptions:function(Z){var ag,af,ae,ac,aj,P,V,ah,R,ad,T,ai,U;var S,Y,aa;if(typeof Z==="undefined"){Z=true}var X=this;var Q=v.trim(X.$control_input.val());var ab=X.search(Q);var W=X.$dropdown_content;var ak=X.$activeOption&&y(X.$activeOption.attr("data-value"));ac=ab.items.length;if(typeof X.settings.maxOptions==="number"){ac=Math.min(ac,X.settings.maxOptions)}aj={};P=[];for(ag=0;ag0||U;if(X.hasOptions){if(ab.items.length>0){Y=ak&&X.getOption(ak);if(Y&&Y.length){S=Y}else{if(X.settings.mode==="single"&&X.items.length){S=X.getOption(X.items[0])}}if(!S||!S.length){if(aa&&!X.settings.addPrecedence){S=X.getAdjacentOption(aa,1)}else{S=W.find("[data-selectable]:first")}}}else{S=aa}X.setActiveOption(S);if(Z&&!X.isOpen){X.open()}}else{X.setActiveOption(null);if(Z&&X.isOpen){X.close()}}},addOption:function(S){var Q,T,R,P=this;if(v.isArray(S)){for(Q=0,T=S.length;Q=0&&Q0);P.$control_input.data("grow",!Q&&!R)},isFull:function(){return this.settings.maxItems!==null&&this.items.length>=this.settings.maxItems},updateOriginalInput:function(T){var S,U,R,Q,P=this;T=T||{};if(P.tagType===k){R=[];for(S=0,U=P.items.length;S'+D(Q)+"")}if(!R.length&&!this.$input.attr("multiple")){R.push('')}P.$input.html(R.join(""))}else{P.$input.val(P.getValue());P.$input.attr("value",P.$input.val())}if(P.isSetup){if(!T.silent){P.trigger("change",P.$input.val())}}},updatePlaceholder:function(){if(!this.settings.placeholder){return}var P=this.$control_input;if(this.items.length){P.removeAttr("placeholder")}else{P.attr("placeholder",this.settings.placeholder)}P.triggerHandler("update",{force:true})},open:function(){var P=this;if(P.isLocked||P.isOpen||(P.settings.mode==="multi"&&P.isFull())){return}P.focus();P.isOpen=true;P.refreshState();P.$dropdown.css({visibility:"hidden",display:"block"});P.positionDropdown();P.$dropdown.css({visibility:"visible"});P.trigger("dropdown_open",P.$dropdown)},close:function(){var P=this;var Q=P.isOpen;if(P.settings.mode==="single"&&P.items.length){P.hideInput();P.$control_input.blur()}P.isOpen=false;P.$dropdown.hide();P.setActiveOption(null);P.refreshState();if(Q){P.trigger("dropdown_close",P.$dropdown)}},positionDropdown:function(){var P=this.$control;var Q=this.settings.dropdownParent==="body"?P.offset():P.position();Q.top+=P.outerHeight(true);this.$dropdown.css({width:P.outerWidth(),top:Q.top,left:Q.left})},clear:function(Q){var P=this;if(!P.items.length){return}P.$control.children(":not(input)").remove();P.items=[];P.lastQuery=null;P.setCaret(0);P.setActiveItem(null);P.updatePlaceholder();P.updateOriginalInput({silent:Q});P.refreshState();P.showInput();P.trigger("clear")},insertAtCaret:function(P){var Q=Math.min(this.caretPos,this.items.length);if(Q===0){this.$control.prepend(P)}else{v(this.$control[0].childNodes[Q]).before(P)}this.setCaret(Q+1)},deleteSelection:function(S){var Q,P,W,X,Y,U,T,V,R;var Z=this;W=(S&&S.keyCode===o)?-1:1;X=l(Z.$control_input[0]);if(Z.$activeOption&&!Z.settings.hideSelected){T=Z.getAdjacentOption(Z.$activeOption,-1).attr("data-value")}Y=[];if(Z.$activeItems.length){R=Z.$control.children(".active:"+(W>0?"last":"first"));U=Z.$control.children(":not(input)").index(R);if(W>0){U++}for(Q=0,P=Z.$activeItems.length;Q0&&X.start===Z.$control_input.val().length){Y.push(Z.items[Z.caretPos])}}}}if(!Y.length||(typeof Z.settings.onDelete==="function"&&Z.settings.onDelete.apply(Z,[Y])===false)){return false}if(typeof U!=="undefined"){Z.setCaret(U)}while(Y.length){Z.removeItem(Y.pop())}Z.showInput();Z.positionDropdown();Z.refreshOptions(true);if(T){V=Z.getOption(T);if(V.length){Z.setActiveOption(V)}}return true},advanceSelection:function(T,Q){var R,U,V,W,S,P;var X=this;if(T===0){return}if(X.rtl){T*=-1}R=T>0?"last":"first";U=l(X.$control_input[0]);if(X.isFocused&&!X.isInputHidden){W=X.$control_input.val().length;S=T<0?U.start===0&&U.length===0:U.start===W;if(S&&!W){X.advanceCaret(T,Q)}}else{P=X.$control.children(".active:"+R);if(P.length){V=X.$control.children(":not(input)").index(P);X.setActiveItem(null);X.setCaret(T>0?V+1:V)}}},advanceCaret:function(T,S){var P=this,R,Q;if(T===0){return}R=T>0?"next":"prev";if(P.isShiftDown){Q=P.$control_input[R]();if(Q.length){P.hideInput();P.setActiveItem(Q);S&&S.preventDefault()}}else{P.setCaret(P.caretPos+T)}},setCaret:function(S){var Q=this;if(Q.settings.mode==="single"){S=Q.items.length}else{S=Math.max(0,Math.min(Q.items.length,S))}if(!Q.isPending){var R,V,T,P,U;P=Q.$control.children(":not(input)");for(R=0,V=P.length;R
'+R.title+'×
')}},Q);P.setup=(function(){var R=P.setup;return function(){R.apply(P,arguments);P.$dropdown_header=v(Q.html(Q));P.$dropdown.prepend(P.$dropdown_header)}})()});c.define("optgroup_columns",function(R){var Q=this;R=v.extend({equalizeWidth:true,equalizeHeight:true},R);this.getAdjacentOption=function(W,V){var T=W.closest("[data-group]").find("[data-selectable]");var U=T.index(W)+V;return U>=0&&U
';V=V.firstChild;U.body.appendChild(V);T=P.width=V.offsetWidth-V.clientWidth;U.body.removeChild(V)}return T};var S=function(){var U,Z,T,V,Y,X,W;W=v("[data-group]",Q.$dropdown_content);Z=W.length;if(!Z||!Q.$dropdown_content.width()){return}if(R.equalizeHeight){T=0;for(U=0;U1){Y=X-V*(Z-1);W.eq(Z-1).css({width:Y})}}};if(R.equalizeHeight||R.equalizeWidth){s.after(this,"positionDropdown",S);s.after(this,"refreshOptions",S)}});c.define("remove_button",function(P){P=v.extend({label:"×",title:"Remove",className:"remove",append:true},P);var Q=function(W,U){U.className="remove-single";var T=W;var V=''+U.label+"";var S=function(X,Y){return X+Y};W.setup=(function(){var X=T.setup;return function(){if(U.append){var aa=v(T.$input.context).attr("id");var Z=v("#"+aa);var Y=T.settings.render.item;T.settings.render.item=function(ab){return S(Y.apply(W,arguments),V)}}X.apply(W,arguments);W.$control.on("click","."+U.className,function(ab){ab.preventDefault();if(T.isLocked){return}T.clear()})}})()};var R=function(W,U){var T=W;var V=''+U.label+"";var S=function(X,Y){var Z=X.search(/(<\/[^>]+>\s*)$/);return X.substring(0,Z)+Y+X.substring(Z)};W.setup=(function(){var X=T.setup;return function(){if(U.append){var Y=T.settings.render.item;T.settings.render.item=function(Z){return S(Y.apply(W,arguments),V)}}X.apply(W,arguments);W.$control.on("click","."+U.className,function(aa){aa.preventDefault();if(T.isLocked){return}var Z=v(aa.currentTarget).parent();T.setActiveItem(Z);if(T.deleteSelection()){T.setCaret(T.items.length)}})}})()};if(this.settings.mode==="single"){Q(this,P);return}else{R(this,P)}});c.define("restore_on_backspace",function(Q){var P=this;Q.text=Q.text||function(R){return R[this.settings.labelField]};this.onKeyDown=(function(){var R=P.onKeyDown;return function(U){var S,T;if(U.keyCode===o&&this.$control_input.val()===""&&!this.$activeItems.length){S=this.caretPos-1;if(S>=0&&S0){q.items.push({score:k,id:t})}})}else{p.iterator(p.items,function(s,t){q.items.push({score:1,id:t})})}j=p.getSortFunction(q,r);if(j){q.items.sort(j)}q.total=q.items.length;if(typeof r.limit==="number"){q.items=q.items.slice(0,r.limit)}return q};var f=function(k,j){if(typeof k==="number"&&typeof j==="number"){return k>j?1:(kj){return 1}if(j>k){return -1}return 0};var d=function(l,j){var p,q,m,o;for(p=1,q=arguments.length;p=0&&W.data.length>0){var aa=W.data.match(S);var Z=document.createElement("span");Z.className="highlight";var X=W.splitText(ab);var U=X.splitText(aa[0].length);var V=X.cloneNode(true);Z.appendChild(V);X.parentNode.replaceChild(Z,X);ac=1}}else{if(W.nodeType===1&&W.childNodes&&!/(script|style)/i.test(W.tagName)){for(var Y=0;Y/g,">").replace(/"/g,""")};var f=function(Q){return(Q+"").replace(/\$/g,"$$$$")};var s={};s.before=function(Q,T,S){var R=Q[T];Q[T]=function(){S.apply(Q,arguments);return R.apply(Q,arguments)}};s.after=function(Q,T,S){var R=Q[T];Q[T]=function(){var U=R.apply(Q,arguments);S.apply(Q,arguments);return U}};var r=function(Q){var R=false;return function(){if(R){return}R=true;Q.apply(this,arguments)}};var g=function(R,Q){var S;return function(){var T=this;var U=arguments;window.clearTimeout(S);S=window.setTimeout(function(){R.apply(T,U)},Q)}};var a=function(Q,S,U){var T;var R=Q.trigger;var V={};Q.trigger=function(){var W=arguments[0];if(S.indexOf(W)!==-1){V[W]=arguments}else{return R.apply(Q,arguments)}};U.apply(Q,[]);Q.trigger=R;for(T in V){if(V.hasOwnProperty(T)){R.apply(Q,V[T])}}};var A=function(T,S,Q,R){T.on(S,Q,function(U){var V=U.target;while(V&&V.parentNode!==T[0]){V=V.parentNode}U.currentTarget=V;return R.apply(this,[U])})};var l=function(S){var R={};if("selectionStart" in S){R.start=S.selectionStart;R.length=S.selectionEnd-R.start}else{if(document.selection){S.focus();var T=document.selection.createRange();var Q=document.selection.createRange().text.length;T.moveStart("character",-S.value.length);R.start=T.text.length-Q;R.length=Q}}return R};var n=function(T,U,R){var Q,V,S={};if(R){for(Q=0,V=R.length;Q").attr("id","selectize-measureString").css({position:"absolute",top:-99999,left:-99999,width:"auto",padding:0,whiteSpace:"pre"}).appendTo("body");n(S,R,["letterSpacing","fontSize","fontFamily","fontWeight","textTransform"])}if(T===O.str){var Q=O.width}else{R.text(T);var Q=R.width()}return Q};var L=function(S){var Q=null;var R=function(W,ac){var aa,ab,X,Z,T;var U,V,Y;W=W||window.event||{};ac=ac||{};if(W.metaKey||W.altKey){return}if(!ac.force&&S.data("grow")===false){return}aa=S.val();if(W.type&&W.type.toLowerCase()==="keydown"){ab=W.keyCode;X=((ab>=97&&ab<=122)||(ab>=65&&ab<=90)||(ab>=48&&ab<=57)||ab===32);if(ab===q||ab===o){Y=l(S[0]);if(Y.length){aa=aa.substring(0,Y.start)+aa.substring(Y.start+Y.length)}else{if(ab===o&&Y.start){aa=aa.substring(0,Y.start-1)+aa.substring(Y.start+1)}else{if(ab===q&&typeof Y.start!=="undefined"){aa=aa.substring(0,Y.start)+aa.substring(Y.start+1)}}}}else{if(X){U=W.shiftKey;V=String.fromCharCode(W.keyCode);if(U){V=V.toUpperCase()}else{V=V.toLowerCase()}aa+=V}}}Z=S.attr("placeholder");if(!aa&&Z){aa=Z}T=K(aa,S)+4;if(T!==Q){Q=T;S.width(T);S.triggerHandler("resize")}};S.on("keydown keyup update blur",R);R()};var E=function(R){var Q=document.createElement("div");Q.appendChild(R.cloneNode(true));return Q.innerHTML};var d=function(S,R){if(!R){R={}}var Q="Selectize";console.error(Q+": "+S);if(R.explanation){if(console.group){console.group()}console.error(R.explanation);if(console.group){console.groupEnd()}}};var c=function(V,S){var X,T,Q,R,W,Y=this;W=V[0];W.selectize=Y;var U=window.getComputedStyle&&window.getComputedStyle(W,null);R=U?U.getPropertyValue("direction"):W.currentStyle&&W.currentStyle.direction;R=R||V.parents("[dir]:first").attr("dir")||"";v.extend(Y,{order:0,settings:S,$input:V,tabIndex:V.attr("tabindex")||"",tagType:W.tagName.toLowerCase()==="select"?k:h,rtl:/rtl/i.test(R),eventNS:".selectize"+(++c.count),highlightedValue:null,isOpen:false,isDisabled:false,isRequired:V.is("[required]"),isInvalid:false,isLocked:false,isFocused:false,isInputHidden:false,isSetup:false,isShiftDown:false,isCmdDown:false,isCtrlDown:false,ignoreFocus:false,ignoreBlur:false,ignoreHover:false,hasOptions:false,currentResults:null,lastValue:"",caretPos:0,loading:0,loadedSearches:{},$activeOption:null,$activeItems:[],optgroups:{},options:{},userOptions:{},items:[],renderCache:{},onSearchChange:S.loadThrottle===null?Y.onSearchChange:g(Y.onSearchChange,S.loadThrottle)});Y.sifter=new m(this.options,{diacritics:S.diacritics});if(Y.settings.options){for(T=0,Q=Y.settings.options.length;T").addClass(ad.wrapperClass).addClass(ae).addClass(ai);af=v("
").addClass(ad.inputClass).addClass("items").appendTo(ab);R=v('').appendTo(af).attr("tabindex",S.is(":disabled")?"-1":W.tabIndex);ac=v(ad.dropdownParent||ab);T=v("
").addClass(ad.dropdownClass).addClass(ai).hide().appendTo(ac);X=v("
").addClass(ad.dropdownContentClass).appendTo(T);if(aa=S.attr("id")){R.attr("id",aa+"-selectized");v("label[for='"+aa+"']").attr("for",aa+"-selectized")}if(W.settings.copyClassesToDropdown){T.addClass(ae)}ab.css({width:S[0].style.width});if(W.plugins.names.length){Y="plugin-"+W.plugins.names.join(" plugin-");ab.addClass(Y);T.addClass(Y)}if((ad.maxItems===null||ad.maxItems>1)&&W.tagType===k){S.attr("multiple","multiple")}if(W.settings.placeholder){R.attr("placeholder",ad.placeholder)}if(!W.settings.splitOn&&W.settings.delimiter){var Q=W.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");W.settings.splitOn=new RegExp("\\s*"+Q+"+\\s*")}if(S.attr("autocorrect")){R.attr("autocorrect",S.attr("autocorrect"))}if(S.attr("autocapitalize")){R.attr("autocapitalize",S.attr("autocapitalize"))}W.$wrapper=ab;W.$control=af;W.$control_input=R;W.$dropdown=T;W.$dropdown_content=X;T.on("mouseenter","[data-selectable]",function(){return W.onOptionHover.apply(W,arguments)});T.on("mousedown click","[data-selectable]",function(){return W.onOptionSelect.apply(W,arguments)});A(af,"mousedown","*:not(input)",function(){return W.onItemSelect.apply(W,arguments)});L(R);af.on({mousedown:function(){return W.onMouseDown.apply(W,arguments)},click:function(){return W.onClick.apply(W,arguments)}});R.on({mousedown:function(aj){aj.stopPropagation()},keydown:function(){return W.onKeyDown.apply(W,arguments)},keyup:function(){return W.onKeyUp.apply(W,arguments)},keypress:function(){return W.onKeyPress.apply(W,arguments)},resize:function(){W.positionDropdown.apply(W,[])},blur:function(){return W.onBlur.apply(W,arguments)},focus:function(){W.ignoreBlur=false;return W.onFocus.apply(W,arguments)},paste:function(){return W.onPaste.apply(W,arguments)}});ah.on("keydown"+Z,function(aj){W.isCmdDown=aj[b?"metaKey":"ctrlKey"];W.isCtrlDown=aj[b?"altKey":"ctrlKey"];W.isShiftDown=aj.shiftKey});ah.on("keyup"+Z,function(aj){if(aj.keyCode===e){W.isCtrlDown=false}if(aj.keyCode===j){W.isShiftDown=false}if(aj.keyCode===J){W.isCmdDown=false}});ah.on("mousedown"+Z,function(aj){if(W.isFocused){if(aj.target===W.$dropdown[0]||aj.target.parentNode===W.$dropdown[0]){return false}if(!W.$control.has(aj.target).length&&aj.target!==W.$control[0]){W.blur(aj.target)}}});V.on(["scroll"+Z,"resize"+Z].join(" "),function(){if(W.isOpen){W.positionDropdown.apply(W,arguments)}});V.on("mousemove"+Z,function(){W.ignoreHover=false});this.revertSettings={$children:S.children().detach(),tabindex:S.attr("tabindex")};S.attr("tabindex",-1).hide().after(W.$wrapper);if(v.isArray(ad.items)){W.setValue(ad.items);delete ad.items}if(C){S.on("invalid"+Z,function(aj){aj.preventDefault();W.isInvalid=true;W.refreshState()})}W.updateOriginalInput();W.refreshItems();W.refreshState();W.updatePlaceholder();W.isSetup=true;if(S.is(":disabled")){W.disable()}W.on("change",this.onChange);S.data("selectize",W);S.addClass("selectized");W.trigger("initialize");if(ad.preload===true){W.onSearchChange("")}},setupTemplates:function(){var R=this;var Q=R.settings.labelField;var S=R.settings.optgroupLabelField;var T={optgroup:function(U){return'
'+U.html+"
"},optgroup_header:function(V,U){return'
'+U(V[S])+"
"},option:function(V,U){return'
'+U(V[Q])+"
"},item:function(V,U){return'
'+U(V[Q])+"
"},option_create:function(V,U){return'
Add '+U(V.input)+"
"}};R.settings.render=v.extend({},T,R.settings.render)},setupCallbacks:function(){var Q,R,S={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"};for(Q in S){if(S.hasOwnProperty(Q)){R=this.settings[S[Q]];if(R){this.on(Q,R)}}}},onClick:function(R){var Q=this;if(!Q.isFocused){Q.focus();R.preventDefault()}},onMouseDown:function(T){var R=this;var S=T.isDefaultPrevented();var Q=v(T.target);if(R.isFocused){if(T.target!==R.$control_input[0]){if(R.settings.mode==="single"){R.isOpen?R.close():R.open()}else{if(!S){R.setActiveItem(null)}}return false}}else{if(!S){window.setTimeout(function(){R.focus()},0)}}},onChange:function(){this.$input.trigger("change")},onPaste:function(R){var Q=this;if(Q.isFull()||Q.isInputHidden||Q.isLocked){R.preventDefault();return}if(Q.settings.splitOn){setTimeout(function(){var T=Q.$control_input.val();if(!T.match(Q.settings.splitOn)){return}var S=v.trim(T).split(Q.settings.splitOn);for(var U=0,V=S.length;US){R=Q;Q=S;S=R}for(T=Q;T<=S;T++){Z=aa.$control[0].childNodes[T];if(aa.$activeItems.indexOf(Z)===-1){v(Z).addClass("active");aa.$activeItems.push(Z)}}V.preventDefault()}else{if((U==="mousedown"&&aa.isCtrlDown)||(U==="keydown"&&this.isShiftDown)){if(X.hasClass("active")){Y=aa.$activeItems.indexOf(X[0]);aa.$activeItems.splice(Y,1);X.removeClass("active")}else{aa.$activeItems.push(X.addClass("active")[0])}}else{v(aa.$activeItems).removeClass("active");aa.$activeItems=[X.addClass("active")[0]]}}aa.hideInput();if(!this.isFocused){aa.focus()}},setActiveOption:function(Q,W,S){var R,X,V;var U,T;var Y=this;if(Y.$activeOption){Y.$activeOption.removeClass("active")}Y.$activeOption=null;Q=v(Q);if(!Q.length){return}Y.$activeOption=Q.addClass("active");if(W||!P(W)){R=Y.$dropdown_content.height();X=Y.$activeOption.outerHeight(true);W=Y.$dropdown_content.scrollTop()||0;V=Y.$activeOption.offset().top-Y.$dropdown_content.offset().top+W;U=V;T=V-R+X;if(V+X>R+W){Y.$dropdown_content.stop().animate({scrollTop:T},S?Y.settings.scrollDuration:0)}else{if(V=0;T--){if(W.items.indexOf(y(Y.items[T].id))!==-1){Y.items.splice(T,1)}}}return Y},refreshOptions:function(aa){var ah,ag,af,ad,ak,Q,W,ai,S,ae,U,aj,V;var T,Z,ab;if(typeof aa==="undefined"){aa=true}var Y=this;var R=v.trim(Y.$control_input.val());var ac=Y.search(R);var X=Y.$dropdown_content;var al=Y.$activeOption&&y(Y.$activeOption.attr("data-value"));ad=ac.items.length;if(typeof Y.settings.maxOptions==="number"){ad=Math.min(ad,Y.settings.maxOptions)}ak={};Q=[];for(ah=0;ah0||V;if(Y.hasOptions){if(ac.items.length>0){Z=al&&Y.getOption(al);if(Z&&Z.length){T=Z}else{if(Y.settings.mode==="single"&&Y.items.length){T=Y.getOption(Y.items[0])}}if(!T||!T.length){if(ab&&!Y.settings.addPrecedence){T=Y.getAdjacentOption(ab,1)}else{T=X.find("[data-selectable]:first")}}}else{T=ab}Y.setActiveOption(T);if(aa&&!Y.isOpen){Y.open()}}else{Y.setActiveOption(null);if(aa&&Y.isOpen){Y.close()}}},addOption:function(T){var R,U,S,Q=this;if(v.isArray(T)){for(R=0,U=T.length;R=0&&R0);Q.$control_input.data("grow",!R&&!S)},isFull:function(){return this.settings.maxItems!==null&&this.items.length>=this.settings.maxItems},updateOriginalInput:function(U){var T,V,S,R,Q=this;U=U||{};if(Q.tagType===k){S=[];for(T=0,V=Q.items.length;T'+D(R)+"")}if(!S.length&&!this.$input.attr("multiple")){S.push('')}Q.$input.html(S.join(""))}else{Q.$input.val(Q.getValue());Q.$input.attr("value",Q.$input.val())}if(Q.isSetup){if(!U.silent){Q.trigger("change",Q.$input.val())}}},updatePlaceholder:function(){if(!this.settings.placeholder){return}var Q=this.$control_input;if(this.items.length){Q.removeAttr("placeholder")}else{Q.attr("placeholder",this.settings.placeholder)}Q.triggerHandler("update",{force:true})},open:function(){var Q=this;if(Q.isLocked||Q.isOpen||(Q.settings.mode==="multi"&&Q.isFull())){return}Q.focus();Q.isOpen=true;Q.refreshState();Q.$dropdown.css({visibility:"hidden",display:"block"});Q.positionDropdown();Q.$dropdown.css({visibility:"visible"});Q.trigger("dropdown_open",Q.$dropdown)},close:function(){var Q=this;var R=Q.isOpen;if(Q.settings.mode==="single"&&Q.items.length){Q.hideInput();Q.$control_input.blur()}Q.isOpen=false;Q.$dropdown.hide();Q.setActiveOption(null);Q.refreshState();if(R){Q.trigger("dropdown_close",Q.$dropdown)}},positionDropdown:function(){var Q=this.$control;var R=this.settings.dropdownParent==="body"?Q.offset():Q.position();R.top+=Q.outerHeight(true);this.$dropdown.css({width:Q.outerWidth(),top:R.top,left:R.left})},clear:function(R){var Q=this;if(!Q.items.length){return}Q.$control.children(":not(input)").remove();Q.items=[];Q.lastQuery=null;Q.setCaret(0);Q.setActiveItem(null);Q.updatePlaceholder();Q.updateOriginalInput({silent:R});Q.refreshState();Q.showInput();Q.trigger("clear")},insertAtCaret:function(Q){var R=Math.min(this.caretPos,this.items.length);if(R===0){this.$control.prepend(Q)}else{v(this.$control[0].childNodes[R]).before(Q)}this.setCaret(R+1)},deleteSelection:function(T){var R,Q,X,Y,Z,V,U,W,S;var aa=this;X=(T&&T.keyCode===o)?-1:1;Y=l(aa.$control_input[0]);if(aa.$activeOption&&!aa.settings.hideSelected){U=aa.getAdjacentOption(aa.$activeOption,-1).attr("data-value")}Z=[];if(aa.$activeItems.length){S=aa.$control.children(".active:"+(X>0?"last":"first"));V=aa.$control.children(":not(input)").index(S);if(X>0){V++}for(R=0,Q=aa.$activeItems.length;R0&&Y.start===aa.$control_input.val().length){Z.push(aa.items[aa.caretPos])}}}}if(!Z.length||(typeof aa.settings.onDelete==="function"&&aa.settings.onDelete.apply(aa,[Z])===false)){return false}if(typeof V!=="undefined"){aa.setCaret(V)}while(Z.length){aa.removeItem(Z.pop())}aa.showInput();aa.positionDropdown();aa.refreshOptions(true);if(U){W=aa.getOption(U);if(W.length){aa.setActiveOption(W)}}return true},advanceSelection:function(U,R){var S,V,W,X,T,Q;var Y=this;if(U===0){return}if(Y.rtl){U*=-1}S=U>0?"last":"first";V=l(Y.$control_input[0]);if(Y.isFocused&&!Y.isInputHidden){X=Y.$control_input.val().length;T=U<0?V.start===0&&V.length===0:V.start===X;if(T&&!X){Y.advanceCaret(U,R)}}else{Q=Y.$control.children(".active:"+S);if(Q.length){W=Y.$control.children(":not(input)").index(Q);Y.setActiveItem(null);Y.setCaret(U>0?W+1:W)}}},advanceCaret:function(U,T){var Q=this,S,R;if(U===0){return}S=U>0?"next":"prev";if(Q.isShiftDown){R=Q.$control_input[S]();if(R.length){Q.hideInput();Q.setActiveItem(R);T&&T.preventDefault()}}else{Q.setCaret(Q.caretPos+U)}},setCaret:function(T){var R=this;if(R.settings.mode==="single"){T=R.items.length}else{T=Math.max(0,Math.min(R.items.length,T))}if(!R.isPending){var S,W,U,Q,V;Q=R.$control.children(":not(input)");for(S=0,W=Q.length;S
'+S.title+'×
')}},R);Q.setup=(function(){var S=Q.setup;return function(){S.apply(Q,arguments);Q.$dropdown_header=v(R.html(R));Q.$dropdown.prepend(Q.$dropdown_header)}})()});c.define("optgroup_columns",function(S){var R=this;S=v.extend({equalizeWidth:true,equalizeHeight:true},S);this.getAdjacentOption=function(X,W){var U=X.closest("[data-group]").find("[data-selectable]");var V=U.index(X)+W;return V>=0&&V
';W=W.firstChild;V.body.appendChild(W);U=Q.width=W.offsetWidth-W.clientWidth;V.body.removeChild(W)}return U};var T=function(){var V,aa,U,W,Z,Y,X;X=v("[data-group]",R.$dropdown_content);aa=X.length;if(!aa||!R.$dropdown_content.width()){return}if(S.equalizeHeight){U=0;for(V=0;V1){Z=Y-W*(aa-1);X.eq(aa-1).css({width:Z})}}};if(S.equalizeHeight||S.equalizeWidth){s.after(this,"positionDropdown",T);s.after(this,"refreshOptions",T)}});c.define("remove_button",function(Q){Q=v.extend({label:"×",title:"Remove",className:"remove",append:true},Q);var R=function(X,V){V.className="remove-single";var U=X;var W=''+V.label+"";var T=function(Y,Z){return Y+Z};X.setup=(function(){var Y=U.setup;return function(){if(V.append){var ab=v(U.$input.context).attr("id");var aa=v("#"+ab);var Z=U.settings.render.item;U.settings.render.item=function(ac){return T(Z.apply(X,arguments),W)}}Y.apply(X,arguments);X.$control.on("click","."+V.className,function(ac){ac.preventDefault();if(U.isLocked){return}U.clear()})}})()};var S=function(X,V){var U=X;var W=''+V.label+"";var T=function(Y,Z){var aa=Y.search(/(<\/[^>]+>\s*)$/);return Y.substring(0,aa)+Z+Y.substring(aa)};X.setup=(function(){var Y=U.setup;return function(){if(V.append){var Z=U.settings.render.item;U.settings.render.item=function(aa){return T(Z.apply(X,arguments),W)}}Y.apply(X,arguments);X.$control.on("click","."+V.className,function(ab){ab.preventDefault();if(U.isLocked){return}var aa=v(ab.currentTarget).parent();U.setActiveItem(aa);if(U.deleteSelection()){U.setCaret(U.items.length)}})}})()};if(this.settings.mode==="single"){R(this,Q);return}else{S(this,Q)}});c.define("restore_on_backspace",function(R){var Q=this;R.text=R.text||function(S){return S[this.settings.labelField]};this.onKeyDown=(function(){var S=Q.onKeyDown;return function(V){var T,U;if(V.keyCode===o&&this.$control_input.val()===""&&!this.$activeItems.length){T=this.caretPos-1;if(T>=0&&T