/*! iCheck v1.0.1 by Damir Sultanov, http://git.io/arlzeA, MIT Licensed */ if ( 'function' != typeof(jQuery.fn.iCheck) ) { !function(a){function b(a,b,e){var f=a[0],g=/er/.test(e)?p:/bl/.test(e)?n:l,h=e==q?{checked:f[l],disabled:f[n],indeterminate:"true"==a.attr(p)||"false"==a.attr(o)}:f[g];if(/^(ch|di|in)/.test(e)&&!h)c(a,g);else if(/^(un|en|de)/.test(e)&&h)d(a,g);else if(e==q)for(g in h)h[g]?c(a,g,!0):d(a,g,!0);else b&&"toggle"!=e||(b||a[u]("ifClicked"),h?f[r]!==k&&d(a,g):c(a,g))}function c(b,c,e){var q=b[0],u=b.parent(),v=c==l,x=c==p,y=c==n,z=x?o:v?m:"enabled",A=f(b,z+g(q[r])),B=f(b,c+g(q[r]));if(!0!==q[c]){if(!e&&c==l&&q[r]==k&&q.name){var C=b.closest("form"),D='input[name="'+q.name+'"]',D=C.length?C.find(D):a(D);D.each(function(){this!==q&&a(this).data(i)&&d(a(this),c)})}x?(q[c]=!0,q[l]&&d(b,l,"force")):(e||(q[c]=!0),v&&q[p]&&d(b,p,!1)),h(b,v,c,e)}q[n]&&f(b,w,!0)&&u.find("."+j).css(w,"default"),u[s](B||f(b,c)||""),y?u.attr("aria-disabled","true"):u.attr("aria-checked",x?"mixed":"true"),u[t](A||f(b,z)||"")}function d(a,b,c){var d=a[0],e=a.parent(),i=b==l,k=b==p,q=b==n,u=k?o:i?m:"enabled",v=f(a,u+g(d[r])),x=f(a,b+g(d[r]));!1!==d[b]&&((k||!c||"force"==c)&&(d[b]=!1),h(a,i,u,c)),!d[n]&&f(a,w,!0)&&e.find("."+j).css(w,"pointer"),e[t](x||f(a,b)||""),q?e.attr("aria-disabled","false"):e.attr("aria-checked","false"),e[s](v||f(a,u)||"")}function e(b,c){b.data(i)&&(b.parent().html(b.attr("style",b.data(i).s||"")),c&&b[u](c),b.off(".i").unwrap(),a(v+'[for="'+b[0].id+'"]').add(b.closest(v)).off(".i"))}function f(a,b,c){return a.data(i)?a.data(i).o[b+(c?"":"Class")]:void 0}function g(a){return a.charAt(0).toUpperCase()+a.slice(1)}function h(a,b,c,d){d||(b&&a[u]("ifToggled"),a[u]("ifChanged")[u]("if"+g(c)))}var i="iCheck",j=i+"-helper",k="radio",l="checked",m="un"+l,n="disabled",o="determinate",p="in"+o,q="update",r="type",s="addClass",t="removeClass",u="trigger",v="label",w="cursor",x=/ipad|iphone|ipod|android|blackberry|windows phone|opera mini|silk/i.test(navigator.userAgent);a.fn[i]=function(f,g){var h='input[type="checkbox"], input[type="'+k+'"]',m=a(),o=function(b){b.each(function(){var b=a(this);m=b.is(h)?m.add(b):m.add(b.find(h))})};if(/^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i.test(f))return f=f.toLowerCase(),o(this),m.each(function(){var c=a(this);"destroy"==f?e(c,"ifDestroyed"):b(c,!0,f),a.isFunction(g)&&g()});if("object"!=typeof f&&f)return this;var w=a.extend({checkedClass:l,disabledClass:n,indeterminateClass:p,labelHover:!0,aria:!1},f),y=w.handle,z=w.hoverClass||"hover",A=w.focusClass||"focus",B=w.activeClass||"active",C=!!w.labelHover,D=w.labelHoverClass||"hover",E=0|(""+w.increaseArea).replace("%","");return("checkbox"==y||y==k)&&(h='input[type="'+y+'"]'),-50>E&&(E=-50),o(this),m.each(function(){var f=a(this);e(f);var g=this,h=g.id,m=-E+"%",o=100+2*E+"%",o={position:"absolute",top:m,left:m,display:"block",width:o,height:o,margin:0,padding:0,background:"#fff",border:0,opacity:0},m=x?{position:"absolute",visibility:"hidden"}:E?o:{position:"absolute",opacity:0},p="checkbox"==g[r]?w.checkboxClass||"icheckbox":w.radioClass||"i"+k,y=a(v+'[for="'+h+'"]').add(f.closest(v)),F=!!w.aria,G=i+"-"+Math.random().toString(36).substr(2,6),H='
")[u]("ifCreated").parent().append(w.insert),o=a('').css(o).appendTo(H),f.data(i,{o:w,s:f.attr("style")}).css(m),w.inheritClass&&H[s](g.className||""),w.inheritID&&h&&H.attr("id",i+"-"+h),"static"==H.css("position")&&H.css("position","relative"),b(f,!0,q),y.length&&y.on("click.i mouseover.i mouseout.i touchbegin.i touchend.i",function(c){var d=c[r],e=a(this);if(!g[n]){if("click"==d){if(a(c.target).is("a"))return;b(f,!1,!0)}else C&&(/ut|nd/.test(d)?(H[t](z),e[t](D)):(H[s](z),e[s](D)));if(!x)return!1;c.stopPropagation()}}),f.on("click.i focus.i blur.i keyup.i keydown.i keypress.i",function(a){var b=a[r];return a=a.keyCode,"click"==b?!1:"keydown"==b&&32==a?(g[r]==k&&g[l]||(g[l]?d(f,l):c(f,l)),!1):("keyup"==b&&g[r]==k?!g[l]&&c(f,l):/us|ur/.test(b)&&H["blur"==b?t:s](A),void 0)}),o.on("click mousedown mouseup mouseover mouseout touchbegin.i touchend.i",function(a){var c=a[r],d=/wn|up/.test(c)?B:z;if(!g[n]){if("click"==c?b(f,!1,!0):(/wn|er|in/.test(c)?H[s](d):H[t](d+" "+B),y.length&&C&&d==z&&y[/ut|nd/.test(c)?t:s](D)),!x)return!1;a.stopPropagation()}})})}}(window.jQuery||window.Zepto); } /* * Selecter v3.0.9 - 2014-02-10 * A jQuery plugin for replacing default select elements. Part of the Formstone Library. * http://formstone.it/selecter/ * * Copyright 2014 Ben Plum; MIT Licensed */ if ( 'function' != typeof(jQuery.fn.selecter) ) { !function(a,b){"use strict";function c(b){b=a.extend({},x,b||{}),null===w&&(w=a("body"));for(var c=a(this),e=0,f=c.length;f>e;e++)d(c.eq(e),b);return c}function d(b,c){if(!b.hasClass("selecter-element")){c=a.extend({},c,b.data("selecter-options")),c.external&&(c.links=!0);var d=b.find("option, optgroup"),g=d.filter("option"),h=g.filter(":selected"),n=""!==c.label?-1:g.index(h),p=c.links?"nav":"div";c.tabIndex=b[0].tabIndex,b[0].tabIndex=-1,c.multiple=b.prop("multiple"),c.disabled=b.is(":disabled");var q="<"+p+' class="selecter '+c.customClass;v?q+=" mobile":c.cover&&(q+=" cover"),q+=c.multiple?" multiple":" closed",c.disabled&&(q+=" disabled"),q+='" tabindex="'+c.tabIndex+'">',c.multiple||(q+='',q+=a(""),q+='
',q+="
",q+="",b.addClass("selecter-element").after(q);var s=b.next(".selecter"),u=a.extend({$select:b,$allOptions:d,$options:g,$selecter:s,$selected:s.find(".selecter-selected"),$itemsWrapper:s.find(".selecter-options"),index:-1,guid:t++},c);e(u),o(n,u),void 0!==a.fn.scroller&&u.$itemsWrapper.scroller(),u.$selecter.on("touchstart.selecter click.selecter",".selecter-selected",u,f).on("click.selecter",".selecter-item",u,j).on("close.selecter",u,i).data("selecter",u),u.$select.on("change.selecter",u,k),v||(u.$selecter.on("focus.selecter",u,l).on("blur.selecter",u,m),u.$select.on("focus.selecter",u,function(a){a.data.$selecter.trigger("focus")}))}}function e(b){for(var c="",d=b.links?"a":"span",e=0,f=0,g=b.$allOptions.length;g>f;f++){var h=b.$allOptions.eq(f);if("OPTGROUP"===h[0].tagName)c+='";else{var i=h.val();h.attr("value")||h.attr("value",i),c+="<"+d+' class="selecter-item',h.is(":selected")&&""===b.label&&(c+=" selected"),h.is(":disabled")&&(c+=" disabled"),c+='" ',c+=b.links?'href="'+i+'"':'data-value="'+i+'"',c+=">"+a("").text(r(h.text(),b.trim)).html()+"",e++}}b.$itemsWrapper.html(c),b.$items=b.$selecter.find(".selecter-item")}function f(c){c.preventDefault(),c.stopPropagation();var d=c.data;if(!d.$select.is(":disabled"))if(a(".selecter").not(d.$selecter).trigger("close.selecter",[d]),v){var e=d.$select[0];if(b.document.createEvent){var f=b.document.createEvent("MouseEvents");f.initMouseEvent("mousedown",!1,!0,b,0,0,0,0,0,!1,!1,!1,!1,0,null),e.dispatchEvent(f)}else e.fireEvent&&e.fireEvent("onmousedown")}else d.$selecter.hasClass("closed")?g(c):d.$selecter.hasClass("open")&&i(c)}function g(b){b.preventDefault(),b.stopPropagation();var c=b.data;if(!c.$selecter.hasClass("open")){var d=c.$selecter.offset(),e=w.outerHeight(),f=c.$itemsWrapper.outerHeight(!0),g=c.index>=0?c.$items.eq(c.index).position():{left:0,top:0};d.top+f>e&&c.$selecter.addClass("bottom"),c.$itemsWrapper.show(),c.$selecter.removeClass("closed").addClass("open"),w.on("click.selecter-"+c.guid,":not(.selecter-options)",c,h),void 0!==a.fn.scroller?c.$itemsWrapper.scroller("scroll",c.$itemsWrapper.find(".scroller-content").scrollTop()+g.top,0).scroller("reset"):c.$itemsWrapper.scrollTop(c.$itemsWrapper.scrollTop()+g.top)}}function h(b){b.preventDefault(),b.stopPropagation(),0===a(b.currentTarget).parents(".selecter").length&&i(b)}function i(a){a.preventDefault(),a.stopPropagation();var b=a.data;b.$selecter.hasClass("open")&&(b.$itemsWrapper.hide(),b.$selecter.removeClass("open bottom").addClass("closed"),w.off(".selecter-"+b.guid))}function j(b){b.preventDefault(),b.stopPropagation();var c=a(this),d=b.data;if(!d.$select.is(":disabled")){if(d.$itemsWrapper.is(":visible")){var e=d.$items.index(c);o(e,d),p(d)}d.multiple||i(b)}}function k(b,c){var d=a(this),e=b.data;if(!c&&!e.multiple){var f=e.$options.index(e.$options.filter("[value='"+s(d.val())+"']"));o(f,e),p(e)}}function l(b){b.preventDefault(),b.stopPropagation();var c=b.data;c.$select.is(":disabled")||c.multiple||(c.$selecter.addClass("focus").on("keydown.selecter"+c.guid,c,n),a(".selecter").not(c.$selecter).trigger("close.selecter",[c]))}function m(b){b.preventDefault(),b.stopPropagation();var c=b.data;c.$selecter.removeClass("focus").off("keydown.selecter"+c.guid+" keyup.selecter"+c.guid),a(".selecter").not(c.$selecter).trigger("close.selecter",[c])}function n(b){var c=b.data;if(13===b.keyCode)c.$selecter.hasClass("open")&&(i(b),o(c.index,c)),p(c);else if(!(9===b.keyCode||b.metaKey||b.altKey||b.ctrlKey||b.shiftKey)){b.preventDefault(),b.stopPropagation();var d=c.$items.length-1,e=c.index<0?0:c.index;if(a.inArray(b.keyCode,u?[38,40,37,39]:[38,40])>-1)e+=38===b.keyCode||u&&37===b.keyCode?-1:1,0>e&&(e=0),e>d&&(e=d);else{var f,g,h=String.fromCharCode(b.keyCode).toUpperCase();for(g=c.index+1;d>=g;g++)if(f=c.$options.eq(g).text().charAt(0).toUpperCase(),f===h){e=g;break}if(0>e)for(g=0;d>=g;g++)if(f=c.$options.eq(g).text().charAt(0).toUpperCase(),f===h){e=g;break}}e>=0&&o(e,c)}}function o(a,b){var c=b.$items.eq(a),d=c.hasClass("selected"),e=c.hasClass("disabled");if(!e){if(-1===a&&""!==b.label)b.$selected.html(b.label);else if(d)b.multiple&&(b.$options.eq(a).prop("selected",null),c.removeClass("selected"));else{{var f=c.html();c.data("value")}b.multiple?b.$options.eq(a).prop("selected",!0):(b.$selected.html(f).removeClass("placeholder"),b.$items.filter(".selected").removeClass("selected"),b.$select[0].selectedIndex=a),c.addClass("selected")}(!d||b.multiple)&&(b.index=a)}}function p(a){a.links?q(a):(a.callback.call(a.$selecter,a.$select.val(),a.index),a.$select.trigger("change",[!0]))}function q(a){var c=a.$select.val();a.external?b.open(c):b.location.href=c}function r(a,b){return 0===b?a:a.length>b?a.substring(0,b)+"...":a}function s(a){return a.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1")}var t=0,u=b.navigator.userAgent.toLowerCase().indexOf("firefox")>-1,v=/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(b.navigator.userAgent||b.navigator.vendor||b.opera),w=null,x={callback:a.noop,cover:!1,customClass:"",label:"",external:!1,links:!1,trim:0},y={defaults:function(b){return x=a.extend(x,b||{}),a(this)},disable:function(b){return a(this).each(function(c,d){var e=a(d).next(".selecter").data("selecter");if(e)if("undefined"!=typeof b){var f=e.$items.index(e.$items.filter("[data-value="+b+"]"));e.$items.eq(f).addClass("disabled"),e.$options.eq(f).prop("disabled",!0)}else e.$selecter.hasClass("open")&&e.$selecter.find(".selecter-selected").trigger("click.selecter"),e.$selecter.addClass("disabled"),e.$select.prop("disabled",!0)})},enable:function(b){return a(this).each(function(c,d){var e=a(d).next(".selecter").data("selecter");if(e)if("undefined"!=typeof b){var f=e.$items.index(e.$items.filter("[data-value="+b+"]"));e.$items.eq(f).removeClass("disabled"),e.$options.eq(f).prop("disabled",!1)}else e.$selecter.removeClass("disabled"),e.$select.prop("disabled",!1)})},destroy:function(){return a(this).each(function(b,c){var d=a(c).next(".selecter").data("selecter");d&&(d.$selecter.hasClass("open")&&d.$selecter.find(".selecter-selected").trigger("click.selecter"),void 0!==a.fn.scroller&&d.$selecter.find(".selecter-options").scroller("destroy"),d.$select[0].tabIndex=d.tabIndex,d.$select.off(".selecter").removeClass("selecter-element").show(),d.$selecter.off(".selecter").remove())})},refresh:function(){return a(this).each(function(b,c){var d=a(c).next(".selecter").data("selecter");if(d){var f=d.index;d.$allOptions=d.$select.find("option, optgroup"),d.$options=d.$allOptions.filter("option"),d.index=-1,f=d.$options.index(d.$options.filter(":selected")),e(d),o(f,d)}})}};a.fn.selecter=function(a){return y[a]?y[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?this:c.apply(this,arguments)},a.selecter=function(a){"defaults"===a&&y.defaults.apply(this,Array.prototype.slice.call(arguments,1))}}(jQuery,window); } /* * Stepper v3.0.5 - 2014-02-06 * A jQuery plugin for cross browser number inputs. Part of the Formstone Library. * http://formstone.it/stepper/ * * Copyright 2014 Ben Plum; MIT Licensed */ if ( 'function' != typeof(jQuery.fn.stepper) ) { !function(a){"use strict";function b(b){b=a.extend({},k,b||{});for(var d=a(this),e=0,f=d.length;f>e;e++)c(d.eq(e),b);return d}function c(b,c){if(!b.hasClass("stepper-input")){c=a.extend({},c,b.data("stepper-options"));var e=parseFloat(b.attr("min")),f=parseFloat(b.attr("max")),g=parseFloat(b.attr("step"))||1;b.addClass("stepper-input").wrap('
').after(''+c.labels.up+''+c.labels.down+"");var h=b.parent(".stepper"),j=a.extend({$stepper:h,$input:b,$arrow:h.find(".stepper-arrow"),min:void 0===typeof e||isNaN(e)?!1:e,max:void 0===typeof f||isNaN(f)?!1:f,step:void 0===typeof g||isNaN(g)?1:g,timer:null},c);j.digits=i(j.step),b.is(":disabled")&&h.addClass("disabled"),h.on("touchstart.stepper mousedown.stepper",".stepper-arrow",j,d).data("stepper",j)}}function d(b){b.preventDefault(),b.stopPropagation(),e(b);var c=b.data;if(!c.$input.is(":disabled")&&!c.$stepper.hasClass("disabled")){var d=a(b.target).hasClass("up")?c.step:-c.step;c.timer=g(c.timer,125,function(){f(c,d,!1)}),f(c,d),a("body").on("touchend.stepper mouseup.stepper",c,e)}}function e(b){b.preventDefault(),b.stopPropagation();var c=b.data;h(c.timer),a("body").off(".stepper")}function f(a,b){var c=parseFloat(a.$input.val()),d=b;void 0===typeof c||isNaN(c)?d=a.min!==!1?a.min:0:a.min!==!1&&ca.max&&(d-=a.step),d!==c&&(d=j(d,a.digits),a.$input.val(d).trigger("change"))}function g(a,b,c){return h(a),setInterval(c,b)}function h(a){a&&(clearInterval(a),a=null)}function i(a){var b=String(a);return b.indexOf(".")>-1?b.length-b.indexOf(".")-1:0}function j(a,b){var c=Math.pow(10,b);return Math.round(a*c)/c}var k={customClass:"",labels:{up:"Up",down:"Down"}},l={defaults:function(b){return k=a.extend(k,b||{}),a(this)},destroy:function(){return a(this).each(function(){var b=a(this).data("stepper");b&&(b.$stepper.off(".stepper").find(".stepper-arrow").remove(),b.$input.unwrap().removeClass("stepper-input"))})},disable:function(){return a(this).each(function(){var b=a(this).data("stepper");b&&(b.$input.attr("disabled","disabled"),b.$stepper.addClass("disabled"))})},enable:function(){return a(this).each(function(){var b=a(this).data("stepper");b&&(b.$input.attr("disabled",null),b.$stepper.removeClass("disabled"))})}};a.fn.stepper=function(a){return l[a]?l[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?this:b.apply(this,arguments)},a.stepper=function(a){"defaults"===a&&l.defaults.apply(this,Array.prototype.slice.call(arguments,1))}}(jQuery,this); }/*! CzrSelect2 namespaced version of Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.czrSelect2&&a.fn.czrSelect2.amd)var b=a.fn.czrSelect2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.slice(0,n.length-1).concat(a),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=v.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),n.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;hc;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("czrSelect2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('
    ');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('
  • '),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" czrSelect2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".czrSelect2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()}),e=b.$results.find(".czrSelect2-results__option[aria-selected]");e.each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="czrSelect2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="czrSelect2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j",{"class":"czrSelect2-results__options czrSelect2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("unselect",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):0>h-g&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("czrSelect2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-b+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".czrSelect2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".czrSelect2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("czrSelect2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".czrSelect2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("czrSelect2/keys",[],function(){var a={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};return a}),b.define("czrSelect2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.czrSelect2."+b.id,function(b){var c=a(b.target),d=c.closest(".czrSelect2"),e=a(".czrSelect2.czrSelect2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.czrSelect2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.czrSelect2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("czrSelect2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("czrSelect2-selection--single"),a.html(''),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".czrSelect2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".czrSelect2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},e.prototype.selectionContainer=function(){return a("")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".czrSelect2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("czrSelect2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("czrSelect2-selection--multiple"),a.html('
      '),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".czrSelect2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".czrSelect2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('
    • ×
    • ');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".czrSelect2-selection__rendered").append(e)},b}),b.define("czrSelect2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("CzrSelect2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".czrSelect2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".czrSelect2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e0||0===c.length)){var d=a('×');d.data("data",c),this.$selection.find(".czrSelect2-selection__rendered").prepend(d)}},c}),b.define("czrSelect2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".czrSelect2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".czrSelect2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".czrSelect2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".czrSelect2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}});var f=document.documentMode,g=f&&11>=f;this.$selection.on("input.searchcheck",".czrSelect2-search--inline",function(a){return g?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".czrSelect2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".czrSelect2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".czrSelect2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("czrSelect2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("czrSelect2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("czrSelect2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("czrSelect2/diacritics",[],function(){var 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","Ⓓ":"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","Ƣ":"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","ƣ":"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","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("czrSelect2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("czrSelect2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change"); if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("czrSelect2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("CzrSelect2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){d.status&&"0"===d.status||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("czrSelect2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("czrSelect2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("czrSelect2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("czrSelect2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("focus",function(){c.isOpen()&&e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("czrSelect2-search--hide"):e.$searchContainer.addClass("czrSelect2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("czrSelect2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("czrSelect2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('
    • '),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("czrSelect2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("czrSelect2"),b.addClass("czrSelect2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a(""),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.czrSelect2."+d.id,g="resize.czrSelect2."+d.id,h="orientationchange.czrSelect2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("czrSelect2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("czrSelect2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.czrSelect2."+d.id,f="resize.czrSelect2."+d.id,g="orientationchange.czrSelect2."+d.id,h=this.$container.parents().filter(b.hasScroll);h.off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("czrSelect2-dropdown--above"),d=this.$dropdown.hasClass("czrSelect2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.topf.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("czrSelect2-dropdown--below czrSelect2-dropdown--above").addClass("czrSelect2-dropdown--"+e),this.$container.removeClass("czrSelect2-container--below czrSelect2-container--above").addClass("czrSelect2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("czrSelect2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("czrSelect2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["czrSelect2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("czrSelect2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('CzrSelect2: The `data-czrSelect2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of CzrSelect2.'),a.data("data",a.data("czrSelect2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("CzrSelect2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of CzrSelect2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("czrSelect2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("czrSelect2")&&a.data("czrSelect2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("czrSelect2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("czrSelect2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="czrSelect2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.czrSelect2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.czrSelect2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("czrSelect2-container--open")}),this.on("close",function(){a.$container.removeClass("czrSelect2-container--open")}),this.on("enable",function(){a.$container.removeClass("czrSelect2-container--disabled")}),this.on("disable",function(){a.$container.addClass("czrSelect2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("czrSelect2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("czrSelect2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("czrSelect2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("czrSelect2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('CzrSelect2: The `czrSelect2("enable")` method has been deprecated and will be removed in later CzrSelect2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('CzrSelect2: Data can no longer be set using `czrSelect2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('CzrSelect2: The `czrSelect2("val")` method has been deprecated and will be removed in later CzrSelect2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".czrSelect2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("czrSelect2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("czrSelect2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null; },e.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("czrSelect2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("jquery-mousewheel",["jquery"],function(a){return a}),b.define("jquery.czrSelect2",["jquery","jquery-mousewheel","./czrSelect2/core","./czrSelect2/defaults"],function(a,b,c,d){if(null==a.fn.czrSelect2){var e=["open","close","destroy"];a.fn.czrSelect2=function(b){if(b=b||{},"object"==typeof b)return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,f=Array.prototype.slice.call(arguments,1);return this.each(function(){var c=a(this).data("czrSelect2");null==c&&window.console&&console.error&&console.error("The czrSelect2('"+b+"') method was called on an element that is not using CzrSelect2."),d=c[b].apply(c,f)}),a.inArray(b,e)>-1?this:d}throw new Error("Invalid arguments for CzrSelect2: "+b)}}return null==a.fn.czrSelect2.defaults&&(a.fn.czrSelect2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.czrSelect2");return a.fn.czrSelect2.amd=b,c});/*! rangeslider.js - v2.3.2 | (c) 2018 @andreruffert | MIT license | https://github.com/andreruffert/rangeslider.js */ !function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";function b(){var a=document.createElement("input");return a.setAttribute("type","range"),"text"!==a.type}function c(a,b){var c=Array.prototype.slice.call(arguments,2);return setTimeout(function(){return a.apply(null,c)},b)}function d(a,b){return b=b||100,function(){if(!a.debouncing){var c=Array.prototype.slice.apply(arguments);a.lastReturnVal=a.apply(window,c),a.debouncing=!0}return clearTimeout(a.debounceTimeout),a.debounceTimeout=setTimeout(function(){a.debouncing=!1},b),a.lastReturnVal}}function e(a){return a&&(0===a.offsetWidth||0===a.offsetHeight||!1===a.open)}function f(a){for(var b=[],c=a.parentNode;e(c);)b.push(c),c=c.parentNode;return b}function g(a,b){function c(a){void 0!==a.open&&(a.open=!a.open)}var d=f(a),e=d.length,g=[],h=a[b];if(e){for(var i=0;i'),this.$handle=a('
      '),this.$range=a('
      ').insertAfter(this.$element).prepend(this.$fill,this.$handle),this.$element.css({position:"absolute",width:"1px",height:"1px",overflow:"hidden",opacity:"0"}),this.handleDown=a.proxy(this.handleDown,this),this.handleMove=a.proxy(this.handleMove,this),this.handleEnd=a.proxy(this.handleEnd,this),this.init();var f=this;this.$window.on("resize."+this.identifier,d(function(){c(function(){f.update(!1,!1)},300)},20)),this.$document.on(this.startEvent,"#"+this.identifier+":not(."+this.options.disabledClass+")",this.handleDown),this.$element.on("change."+this.identifier,function(a,b){if(!b||b.origin!==f.identifier){var c=a.target.value,d=f.getPositionFromValue(c);f.setPosition(d)}})}Number.isNaN=Number.isNaN||function(a){return"number"==typeof a&&a!==a};var k="rangeslider",l=0,m=b(),n={polyfill:!0,orientation:"horizontal",rangeClass:"rangeslider",disabledClass:"rangeslider--disabled",activeClass:"rangeslider--active",horizontalClass:"rangeslider--horizontal",verticalClass:"rangeslider--vertical",fillClass:"rangeslider__fill",handleClass:"rangeslider__handle",startEvent:["mousedown","touchstart","pointerdown"],moveEvent:["mousemove","touchmove","pointermove"],endEvent:["mouseup","touchend","pointerup"]},o={orientation:{horizontal:{dimension:"width",direction:"left",directionStyle:"left",coordinate:"x"},vertical:{dimension:"height",direction:"top",directionStyle:"bottom",coordinate:"y"}}};return j.prototype.init=function(){this.update(!0,!1),this.onInit&&"function"==typeof this.onInit&&this.onInit()},j.prototype.update=function(a,b){a=a||!1,a&&(this.min=h(this.$element[0].getAttribute("min"),0),this.max=h(this.$element[0].getAttribute("max"),100),this.value=h(this.$element[0].value,Math.round(this.min+(this.max-this.min)/2)),this.step=h(this.$element[0].getAttribute("step"),1)),this.handleDimension=g(this.$handle[0],"offset"+i(this.DIMENSION)),this.rangeDimension=g(this.$range[0],"offset"+i(this.DIMENSION)),this.maxHandlePos=this.rangeDimension-this.handleDimension,this.grabPos=this.handleDimension/2,this.position=this.getPositionFromValue(this.value),this.$element[0].disabled?this.$range.addClass(this.options.disabledClass):this.$range.removeClass(this.options.disabledClass),this.setPosition(this.position,b)},j.prototype.handleDown=function(a){if(a.preventDefault(),!(a.button&&0!==a.button||(this.$document.on(this.moveEvent,this.handleMove),this.$document.on(this.endEvent,this.handleEnd),this.$range.addClass(this.options.activeClass),(" "+a.target.className+" ").replace(/[\n\t]/g," ").indexOf(this.options.handleClass)>-1))){var b=this.getRelativePosition(a),c=this.$range[0].getBoundingClientRect()[this.DIRECTION],d=this.getPositionFromNode(this.$handle[0])-c,e="vertical"===this.orientation?this.maxHandlePos-(b-this.grabPos):b-this.grabPos;this.setPosition(e),b>=d&&bc?c:a},j.prototype.setPosition=function(a,b){var c,d;void 0===b&&(b=!0),c=this.getValueFromPosition(this.cap(a,0,this.maxHandlePos)),d=this.getPositionFromValue(c),this.$fill[0].style[this.DIMENSION]=d+this.grabPos+"px",this.$handle[0].style[this.DIRECTION_STYLE]=d+"px",this.setValue(c),this.position=d,this.value=c,b&&this.onSlide&&"function"==typeof this.onSlide&&this.onSlide(d,c)},j.prototype.getPositionFromNode=function(a){for(var b=0;null!==a;)b+=a.offsetLeft,a=a.offsetParent;return b},j.prototype.getRelativePosition=function(a){var b=i(this.COORDINATE),c=this.$range[0].getBoundingClientRect()[this.DIRECTION],d=0;return void 0!==a.originalEvent["client"+b]?d=a.originalEvent["client"+b]:a.originalEvent.touches&&a.originalEvent.touches[0]&&void 0!==a.originalEvent.touches[0]["client"+b]?d=a.originalEvent.touches[0]["client"+b]:a.currentPoint&&void 0!==a.currentPoint[this.COORDINATE]&&(d=a.currentPoint[this.COORDINATE]),d-c},j.prototype.getPositionFromValue=function(a){var b;return b=(a-this.min)/(this.max-this.min),Number.isNaN(b)?0:b*this.maxHandlePos},j.prototype.getValueFromPosition=function(a){var b,c;return b=a/(this.maxHandlePos||1),c=this.step*Math.round(b*(this.max-this.min)/this.step)+this.min,Number(c.toFixed(this.toFixed))},j.prototype.setValue=function(a){a===this.value&&""!==this.$element[0].value||this.$element.val(a).trigger("input",{origin:this.identifier})},j.prototype.destroy=function(){this.$document.off("."+this.identifier),this.$window.off("."+this.identifier),this.$element.off("."+this.identifier).removeAttr("style").removeData("plugin_"+k),this.$range&&this.$range.length&&this.$range[0].parentNode.removeChild(this.$range[0])},a.fn[k]=function(b){var c=Array.prototype.slice.call(arguments,1);return this.each(function(){var d=a(this),e=d.data("plugin_"+k);e||d.data("plugin_"+k,e=new j(this,b)),"string"==typeof b&&e[b].apply(e,c)})},"rangeslider.js is available in jQuery context e.g $(selector).rangeslider(options);"});/*! wp-color-picker-alpha 2.1.3, https://github.com/kallookoo/wp-color-picker-alpha, GPLv2 Licensed */ (function($){if($.wp.wpColorPicker.prototype._hasAlpha){return}var image='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg==',_after='
      ',_wrap='
      ',_button='',_deprecated=(wpColorPickerL10n.current!==undefined);if(_deprecated){var _before=''}else{var _before='',_wrappingLabel='',_wrappingLabelText=''}Color.fn.toString=function(){if(this._alpha<1){return this.toCSS('rgba',this._alpha).replace(/\s+/g,'')}var hex=parseInt(this._color,10).toString(16);if(this.error){return ''}if(hex.length<6){hex=('00000'+hex).substr(-6)}return '#'+hex};$.widget('wp.wpColorPicker',$.wp.wpColorPicker,{_hasAlpha:true,_create:function(){if(!$.support.iris){return}var self=this,el=self.element;$.extend(self.options,el.data());if(self.options.type==='hue'){return self._createHueOnly()}self.close=$.proxy(self.close,self);self.initialValue=el.val();el.addClass('wp-color-picker');if(_deprecated){el.hide().wrap(_wrap);self.wrap=el.parent();self.toggler=$(_before).insertBefore(el).css({backgroundColor:self.initialValue}).attr('title',wpColorPickerL10n.pick).attr('data-current',wpColorPickerL10n.current);self.pickerContainer=$(_after).insertAfter(el);self.button=$(_button).addClass('hidden')}else{if(!el.parent('label').length){el.wrap(_wrappingLabel);self.wrappingLabelText=$(_wrappingLabelText).insertBefore(el).text(wpColorPickerL10n.defaultLabel)}self.wrappingLabel=el.parent();self.wrappingLabel.wrap(_wrap);self.wrap=self.wrappingLabel.parent();self.toggler=$(_before).insertBefore(self.wrappingLabel).css({backgroundColor:self.initialValue});self.toggler.find('.wp-color-result-text').text(wpColorPickerL10n.pick);self.pickerContainer=$(_after).insertAfter(self.wrappingLabel);self.button=$(_button)}if(self.options.defaultColor){self.button.addClass('wp-picker-default').val(wpColorPickerL10n.defaultString);if(!_deprecated){self.button.attr('aria-label',wpColorPickerL10n.defaultAriaLabel)}}else{self.button.addClass('wp-picker-clear').val(wpColorPickerL10n.clear);if(!_deprecated){self.button.attr('aria-label',wpColorPickerL10n.clearAriaLabel)}}if(_deprecated){el.wrap('').after(self.button)}else{self.wrappingLabel.wrap('', ' ', '' ].join(''); }, /* * @return string * simple helper to build the setting wp api ready id */ build_setId : function ( setId ) { if ( _.isUndefined( window.themeServerControlParams ) || ! _.isArray( themeServerControlParams.wpBuiltinSettings ) ) { //api.errorLog( 'build_setId => missing themeServerControlParams !'); return setId; } //exclude the WP built-in settings like blogdescription, show_on_front, etc if ( _.contains( themeServerControlParams.wpBuiltinSettings, setId ) ) return setId; // //extract the setting id for theme mods // var _pattern; //exclude the WP built-in settings like sidebars_widgets*, nav_menu_*, widget_*, custom_css // var _patterns = [ 'widget_', 'nav_menu', 'sidebars_', 'custom_css' ], // _isExcld = false; // _.each( _patterns, function( _ptrn ) { // if ( _isExcld ) // return; // _isExcld = _ptrn == setId.substring( 0, _ptrn.length ); // }); // if ( _isExcld ) // return setId; if ( ! _.contains( themeServerControlParams.themeSettingList, setId ) ) return setId; return -1 == setId.indexOf( themeServerControlParams.themeOptions ) ? [ themeServerControlParams.themeOptions +'[' , setId , ']' ].join('') : setId; }, /* * @return string * simple helper to extract the option name from a setting id */ getOptionName : function( name ) { if ( _.isEmpty( window.themeServerControlParams ) || _.isEmpty( themeServerControlParams.themeOptions ) ) { //api.errorLog( 'getOptionName => missing themeServerControlParams !'); return name; } var self = this; //targets only the options of the theme if ( -1 == name.indexOf( themeServerControlParams.themeOptions) ) return name; return name.replace(/\[|\]/g, '').replace( themeServerControlParams.themeOptions, ''); }, //@return bool //@uses api.czr_partials hasPartRefresh : function( setId ) { if ( ! _.has( api, 'czr_partials') ) return; return _.contains( _.map( api.czr_partials(), function( partial, key ) { return _.contains( partial.settings, setId ); }), true ); }, //@return the array of controls in a given section_id getSectionControlIds : function( section_id ) { section_id = section_id || api.czr_activeSectionId(); return ! api.section.has( section_id ) ? [] : _.map( api.section( section_id ).controls(), function( _ctrl ) { return _ctrl.id; }); }, //1) get the control of a given section //2) for each control get the associated setting(s) //=> important, a control might have several associated settings. Typical example : header_image. //@return [] of setting ids for a given czr section getSectionSettingIds : function( section_id ) { section_id = section_id || api.czr_activeSectionId(); if ( ! api.section.has( section_id) ) return; var self = this, _sec_settings = [], _sec_controls = self.getSectionControlIds( section_id ); _.each( _sec_controls, function( ctrlId ) { _.each( api.control(ctrlId).settings, function( _instance, _k ) { _sec_settings.push( _instance.id ); }); }); return _sec_settings; }, ////////////////////////////////////////////////// /// STRINGS HELPERS ////////////////////////////////////////////////// capitalize : function( string ) { if( ! _.isString(string) ) return string; return string.charAt(0).toUpperCase() + string.slice(1); }, truncate : function( string, n, useWordBoundary ){ if ( ! _.isString( string ) ) return ''; n = n || 20; var isTooLong = string.length > n, s_ = isTooLong ? string.substr(0,n-1) : string; s_ = (useWordBoundary && isTooLong) ? s_.substr(0,s_.lastIndexOf(' ')) : s_; return isTooLong ? s_ + '...' : s_; }, ////////////////////////////////////////////////// /// STRINGS HELPERS ////////////////////////////////////////////////// //is a module multi item ? //@return bool isMultiItemModule : function( module_type, moduleInst ) { if ( _.isUndefined( module_type ) && ! _.isObject( moduleInst ) ) return; if ( _.isObject( moduleInst ) && _.has( moduleInst, 'module_type' ) ) module_type = moduleInst.module_type; else if ( _.isUndefined( module_type ) || _.isNull( module_type ) ) return; if ( ! _.has( api.czrModuleMap, module_type ) ) return; return api.czrModuleMap[module_type].crud || api.czrModuleMap[module_type].multi_item || false; }, //is a module crud ? //@return bool isCrudModule : function( module_type, moduleInst ) { if ( _.isUndefined( module_type ) && ! _.isObject( moduleInst ) ) return; if ( _.isObject( moduleInst ) && _.has( moduleInst, 'module_type' ) ) module_type = moduleInst.module_type; else if ( _.isUndefined( module_type ) || _.isNull( module_type ) ) return; if ( ! _.has( api.czrModuleMap, module_type ) ) return; return api.czrModuleMap[module_type].crud || false; }, //is a module crud ? //@return bool hasModuleModOpt : function( module_type, moduleInst ) { if ( _.isUndefined( module_type ) && ! _.isObject( moduleInst ) ) return; if ( _.isObject( moduleInst ) && _.has( moduleInst, 'module_type' ) ) module_type = moduleInst.module_type; else if ( _.isUndefined( module_type ) || _.isNull( module_type ) ) return; if ( ! _.has( api.czrModuleMap, module_type ) ) return; return api.czrModuleMap[module_type].has_mod_opt || false; }, //@self explanatory: removes a collection of input from a parent item or modOpt instance //Triggered by : user actions usually when an item is collapsed or when the modOpt panel is closed removeInputCollection : function() { var inputParentInst = this;//<= because fired with .call( inputParentInst ) if ( ! _.isFunction( inputParentInst ) ) { throw new Error( 'removeInputCollection : inputParentInst is not valid.' ); } if ( ! _.has( inputParentInst, 'czr_Input') ) return; //remove each input api.Value() instance inputParentInst.czr_Input.each( function( _input ) { inputParentInst.czr_Input.remove( _input.id ); }); //reset the input collection property inputParentInst.inputCollection({}); }, //Re-instantiate a module control based on its id //@param wpSetId : the api id of the control to refresh refreshModuleControl : function( wpSetId ) { var _constructor = api.controlConstructor.czr_module, _control_type = api.control( wpSetId ).params.type, _control_data = api.settings.controls[wpSetId]; //remove the container and its control $.when( api.control( wpSetId ).container.remove() ).done( function() { //remove the control from the api control collection api.control.remove( wpSetId ); //re-instantiate the control with the updated _control_data api.control.add( wpSetId, new _constructor( wpSetId, { params : _control_data, previewer : api.previewer }) ); }); }, // BOOLEAN CHECK // @return bool isChecked : function( v ) { if ( _.isBoolean( v ) ) { return v; } else if ( _.isNumber( v ) ) { return v > 0; } else if ( _.isString( v ) ) { return '0' !== v && '' !== v && 'off' !== v; } return false; }, // COLORS hexToRgb : function( hex ) { // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; try { hex = hex.replace(shorthandRegex, function(m, r, g, b) { return r + r + g + g + b + b; }); } catch( er ) { api.errorLog( 'Error in Helpers::hexToRgb : ' + er ); return hex; } var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec( hex ); result = result ? [ parseInt(result[1], 16),//r parseInt(result[2], 16),//g parseInt(result[3], 16)//b ] : []; return 'rgb(' + result.join(',') + ')'; }, rgbToHex : function ( r, g, b ) { var componentToHex = function(c) { var hex = c.toString(16); return hex.length == 1 ? "0" + hex : hex; }; return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); }, // inspired from wp.template in wp-includes/js/wp-util.js parseTemplate : _.memoize(function ( html ) { var compiled, /* * Underscore's default ERB-style templates are incompatible with PHP * when asp_tags is enabled, so WordPress uses Mustache-inspired templating syntax. * * @see trac ticket #22344. */ options = { evaluate: /<#([\s\S]+?)#>/g, interpolate: /\{\{\{([\s\S]+?)\}\}\}/g, escape: /\{\{([^\}]+?)\}\}(?!\})/g, variable: 'data' }; return function ( data ) { compiled = compiled || _.template( html, options ); return compiled( data ); }; }) });//$.extend // $( window ).on( 'message', function( e, o) { // api.consoleLog('WHAT ARE WE LISTENING TO?', e, o ); // }); })( wp.customize , jQuery, _); (function (api, $, _) { api.CZR_Helpers = api.CZR_Helpers || {}; ////////////////////////////////////////////////// /// ACTIONS AND DOM LISTENERS ////////////////////////////////////////////////// //adds action to an existing event map //@event map = [ {event1}, {event2}, ... ] //@new_event = { trigger : event name , actions : [ 'cb1', 'cb2', ... ] } api.CZR_Helpers = $.extend( api.CZR_Helpers, { addActions : function( event_map, new_events, instance ) { var control = this; instance = instance || control; instance[event_map] = instance[event_map] || []; new_event_map = _.clone( instance[event_map] ); instance[event_map] = _.union( new_event_map, ! _.isArray(new_events) ? [new_events] : new_events ); }, doActions : function( action, $dom_el, obj ) { $dom_el.trigger( action, obj ); }, //@args = {model : model, dom_el : $_view_el, refreshed : _refreshed } setupDOMListeners : function( event_map , args, instance ) { var control = this, _defaultArgs = { model : {}, dom_el : {} }; instance = instance || control; //event_map : are we good ? if ( ! _.isArray( event_map ) ) { api.errare( 'setupDomListeners : event_map should be an array', args ); return; } //args : are we good ? if ( ! _.isObject( args ) ) { api.errare( 'setupDomListeners : args should be an object', event_map ); return; } args = _.extend( _defaultArgs, args ); // => we need a dom_el as an existing jQuery object if ( ! ( args.dom_el instanceof jQuery ) || 1 > args.dom_el.length ) { api.errare( 'setupDomListeners : dom element should be an existing dom element', args ); return; } //loop on the event map and map the relevant callbacks by event name // @param _event : //{ // trigger : '', // selector : '', // name : '', // actions : '' // }, _.map( event_map , function( _event ) { if ( ! _.isString( _event.selector ) || _.isEmpty( _event.selector ) ) { api.errare( 'setupDOMListeners : selector must be a string not empty. Aborting setup of action(s) : ' + _event.actions.join(',') ); return; } //Are we good ? if ( ! _.isString( _event.selector ) || _.isEmpty( _event.selector ) ) { api.errare( 'setupDOMListeners : selector must be a string not empty. Aborting setup of action(s) : ' + _event.actions.join(',') ); return; } // if ( ! _event.name && ! _.isEmpty( _event.name ) ) { // api.errare('in setupDOMListeners : missing name', _event ); // } // DON'T CREATE THE SAME LISTENERS MULTIPLE TIMES //Make sure that we add this listener only once to a particular dom element //A listener id is a combination of event name + selector //if not set, the name is a concatenation of trigger + selector var _name = ( _event.name && ! _.isEmpty( _event.name ) ) ? _event.name : [ _event.trigger, _event.selector ].join(''); var _currentListenerCollection = args.dom_el.data( 'czr-listener-collection' ); if ( ! _currentListenerCollection || ! _.isArray( _currentListenerCollection ) ) { _currentListenerCollection = [ _name ]; } else { _currentListenerCollection = _.isArray( _currentListenerCollection ) ? _currentListenerCollection : []; if ( ! _.contains( _currentListenerCollection, _name ) ) { _currentListenerCollection.push( _name ); } else { api.errare('setupDOMListeners : aborting because listener already created for event : ' + _name ); return; } } // add this listener to the collection args.dom_el.data( 'czr-listener-collection' , _currentListenerCollection ); //LISTEN TO THE DOM => USES EVENT DELEGATION args.dom_el.on( _event.trigger , _event.selector, function( e, event_params ) { //stop propagation to ancestors modules, typically a sektion e.stopPropagation(); //particular treatment if ( api.utils.isKeydownButNotEnterEvent( e ) ) { return; } e.preventDefault(); // Keep this AFTER the key filter above //It is important to deconnect the original object from its source //=> because we will extend it when used as params for the action chain execution var actionsParams = $.extend( true, {}, args ); //always get the latest model from the collection if ( _.has( actionsParams, 'model') && _.has( actionsParams.model, 'id') ) { if ( _.has( instance, 'get' ) ) actionsParams.model = instance(); else actionsParams.model = instance.getModel( actionsParams.model.id ); } //always add the event obj to the passed args //+ the dom event $.extend( actionsParams, { event : _event, dom_event : e } ); //add the event param => useful for triggered event $.extend( actionsParams, event_params ); //SETUP THE EMITTERS //inform the container that something has happened //pass the model and the current dom_el //the model is always passed as parameter if ( ! _.has( actionsParams, 'event' ) || ! _.has( actionsParams.event, 'actions' ) ) { api.errare( 'executeEventActionChain : missing obj.event or obj.event.actions' ); return; } if ( serverControlParams.isDevMode ) { control.executeEventActionChain( actionsParams, instance ); } else { try { control.executeEventActionChain( actionsParams, instance ); } catch( er ) { api.errare( 'In setupDOMListeners : problem when trying to fire actions : ' + actionsParams.event.actions , er ); } } });//.on() });//_.map() },//setupDomListeners //GENERIC METHOD TO SETUP EVENT LISTENER //NOTE : the args.event must alway be defined //Example of args : // { // trigger : 'click keydown', // selector : [ '.' + module.control.css_attr.open_pre_add_btn, '.' + module.control.css_attr.cancel_pre_add_btn ].join(','), // name : 'pre_add_item', // actions : [ // 'closeAllItems', // 'closeRemoveDialogs', // function(obj) { // var module = this; // module.preItemExpanded.set( ! module.preItemExpanded() ); // }, // ], // }, executeEventActionChain : function( args, instance ) { var control = this; //if the actions param is not an array but is an anonymous function, fire it and stop there if ( 'function' === typeof( args.event.actions ) ) return args.event.actions.call( instance, args ); //execute the various actions required //first normalizes the provided actions into an array of callback methods //then loop on the array and fire each cb if exists if ( ! _.isArray( args.event.actions ) ) args.event.actions = [ args.event.actions ]; //if one of the callbacks returns false, then we break the loop //=> allows us to stop a chain of callbacks if a condition is not met var _break = false; _.map( args.event.actions, function( _cb ) { if ( _break ) return; var _cbCandidate = function() {}; // is the _cb an anonymous function ? // if not, we expect the method to exist in the provided object instance if ( 'function' === typeof( _cb ) ) { _cbCandidate = _cb; } else { if ( 'function' != typeof( instance[ _cb ] ) ) { throw new Error( 'executeEventActionChain : the action : ' + _cb + ' has not been found when firing event : ' + args.event.selector ); } else { _cbCandidate = instance[ _cb ]; } } // Allow other actions to be bound before action and after // // => we don't want the event in the object here => we use the one in the event map if set // => otherwise will loop infinitely because triggering always the same cb from args.event.actions[_cb] // => the dom element shall be get from the passed args and fall back to the controler container. var $_dom_el = ( _.has(args, 'dom_el') && -1 != args.dom_el.length ) ? args.dom_el : control.container; if ( 'string' === typeof( _cb ) ) { $_dom_el.trigger( 'before_' + _cb, _.omit( args, 'event' ) ); } //executes the _cb and stores the result in a local var var _cb_return = _cbCandidate.call( instance, args ); //shall we stop the action chain here ? if ( false === _cb_return ) _break = true; if ( 'string' === typeof( _cb ) ) { //allow other actions to be bound after $_dom_el.trigger( 'after_' + _cb, _.omit( args, 'event' ) ); } });//_.map } });//$.extend })( wp.customize , jQuery, _); (function (api, $, _) { /***************************************************************************** * CAPTURE PREVIEW INFORMATIONS ON REFRESH + REACT TO THEM *****************************************************************************/ //This promise will let us know when we have the first set of preview query ready to use //This is needed for modules contextually dependant //For example, the slider module will initialize the module model based on the contextual informations, if no items have been set yet. api.czr_wpQueryDataReady = api.czr_wpQueryDataReady || $.Deferred(); api.czr_wpQueryInfos = api.czr_wpQueryInfos || new api.Value(); //Data are sent by the preview frame when the panel has sent the 'sync' or even better 'active' event api.bind( 'ready', function() { /* WP CONDITIONAL TAGS => stores and observes the WP conditional tags sent by the preview */ api.previewer.bind( 'czr-query-data-ready', function( data ) { api.czr_wpQueryInfos( data ); if ( 'pending' == api.czr_wpQueryDataReady.state() ) { api.czr_wpQueryDataReady.resolve( data ); } }); //PARTIAL REFRESHS => stores and observes the partials data sent by the preview //=> this is used in api.CZR_Helpers.hasPartRefresh( control_id ) //=> as of WP4.7.5, there's no way to get the list of control with partial refresh in the customize-control api api.previewer.bind( 'czr-partial-refresh-data', function( data ) { api.czr_partials = api.czr_partials || new api.Value(); api.czr_partials.set( data ); }); //PARTIAL REFRESHS : React on partial refresh done // @data : { set_id : api setting id } api.previewer.bind( 'czr-partial-refresh-done', function( data ) { if ( ! _.has( data, 'set_id' ) ) return; var setId = api.CZR_Helpers.build_setId( data.set_id ); if ( ! api.has( setId ) ) return; //inform the control var ctrlId = api.CZR_Helpers.getControlSettingId( setId ); if ( ! api.control.has( ctrlId ) ) return; api.control( ctrlId ).trigger( 'czr-partial-refresh-done' ); }); });//api.bind('ready') })( wp.customize , jQuery, _ );var CZRInputMths = CZRInputMths || {}; //extends api.Value //an input is instanciated with the typical set of options : // container : $(this), // id : _id, // input_options : {} <= a set of options that are used when setting up the input type // input_parent : {} can be an item instance or a modOpt instance (Value instance, has a parent module) // input_value : $(this).find('[data-czrtype]').val(), // module : module, // transport : inherit or specified in the template with data-transport="postMessage" or "refresh". // type : $(this).attr('data-input-type'), // is_mod_opt : bool, // is_preItemInput : bool ( function ( api, $, _ ) { $.extend( CZRInputMths , { initialize: function( name, options ) { if ( _.isUndefined( options.input_parent ) || _.isEmpty(options.input_parent) ) { throw new Error('No input_parent assigned to input ' + options.id + '. Aborting'); } if ( _.isUndefined(options.module ) ) { throw new Error('No module assigned to input ' + options.id + '. Aborting'); } api.Value.prototype.initialize.call( this, null, options ); var input = this; //input.options = options; //write the options as properties, name is included $.extend( input, options || {} ); // store the constructor options input.constructorOptions = $.extend( true, {}, options ); //DEFERRED STATES //store the state of ready. input.isReady = $.Deferred(); //initialize to the provided value if any if ( ! _.isUndefined( options.input_value ) ) { input.set( options.input_value ); } // Setup a default user event map // can be overriden when setting up the input var trigger_map = { text : 'keyup', textarea : 'keyup', password : 'keyup', color : 'colorpickerchange', range : 'input propertychange' }; // Default Input Event Map input.input_event_map = [ //set input value { trigger : $.trim( ['change', trigger_map[input.type] || '' ].join(' ') ),//was 'propertychange change click keyup input',//colorpickerchange is a custom colorpicker event @see method setupColorPicker => otherwise we don't selector : 'input[data-czrtype], select[data-czrtype], textarea[data-czrtype]', name : 'set_input_value', actions : function( obj ) { if ( ! _.has( input.input_parent, 'syncElements') || ! _.has( input.input_parent.syncElements, input.id ) ) { throw new Error('WARNING : THE INPUT ' + input.id + ' HAS NO SYNCED ELEMENT.'); } }//was 'updateInput' } ]; // 1) Check the input instance to see if the default callback has been overriden in an extended Constructor // ( @see column width module in Nimble Builder to see how the overrides works ) // 2) if not, try to find a match with the provided constructor type // => fire the relevant callback with the provided input_options // input.type_map is declared in extend_api_base if ( input[input.type] && _.isFunction( input[input.type]) ) { try { input[input.type]( options.input_options || null ); } catch( er ) { api.errare( 'Error in overriden callback method in input init => for input id :' + input.id + ' in module type : ' + input.module.module_type, er ); } } else if ( api.czrInputMap && _.has( api.czrInputMap, input.type ) ) { var _meth = api.czrInputMap[ input.type ]; if ( _.isFunction( input[_meth]) ) { try { input[_meth]( options.input_options || null ); } catch( er ) { api.errare( 'Error in input init => for input id :' + input.id + ' in module type : ' + input.module.module_type, er ); } } else if ( _.isFunction( api.czrInputMap[ input.type ] ) ) { try { api.czrInputMap[ input.type ].apply( input, [ options.input_options || null ] ); } catch( er ) { api.errare( 'Error in input init => for input id :' + input.id + ' in module type : ' + input.module.module_type, er ); } } } else { api.errare('Warning the input : ' + input.id + ' with type ' + input.type + ' has no corresponding method defined in api.czrInputMap.'); } // Visibility => typically used when implementing the input dependencies // true by default input.visible = new api.Value( true ); input.isReady.done( function() { input.visible.bind( function( visible ) { if ( visible ) { input.container.stop( true, true ).slideDown( 200 ); } else { input.container.stop( true, true ).slideUp( 200 ); } }); }); // Enabled status => control the toggling of a "disabled" css class => blur + decrease opacity // used for the hueman pro slide module input.enabled = new api.Value( true ); input.isReady.done( function() { input.enabled.bind( function( enabled ) { input.container.toggleClass( 'disabled', ! enabled ); }); }); }, // this method is not fired automatically // It has to be invoked once the input has been instantiated // input instantiation is performed from what is found in the DOM // @see api.CZR_Helpers.setupInputCollectionFromDOM ready : function() { var input = this; input.setupDOMListeners( input.input_event_map , { dom_el : input.container }, input ); //Setup individual input listener input.callbacks.add( function() { return input.inputReact.apply( input, arguments ); } ); //synchronizer setup //the input instance must be initialized. => initialize method has been done. $.when( input.setupSynchronizer() ).done( function() { input.isReady.resolve( input ); } ); }, //fired when input is intanciated and ready. //=> we must have an input instance to synchronize, //invoking this method in the initialize() method is too early, instance not ready setupSynchronizer: function() { var input = this, input_parent = input.input_parent, $_input_el = input.container.find('[data-czrtype]'), is_textarea = input.container.find('[data-czrtype]').is('textarea'); //@hack => todo //for text area inputs, the synchronizer is buggy // if ( is_textarea ) { // api.errorLog('TO DO : THE TEXTAREA INPUT ARE NOT IMPLEMENTED YET IN THE SYNCHRONIZER!'); // } var syncElement = new api.Element( $_input_el ); input_parent.syncElements = input_parent.syncElements || {}; input_parent.syncElements[input.id] = syncElement;//adds the input syncElement to the collection syncElement.sync( input );//sync with the input instance syncElement.set( input() ); }, //@return void() //react to a single input change //update the collection of input //cb of input.callbacks.add inputReact : function( to, from, data ) { var input = this, _current_input_parent = input.input_parent(), _new_model = _.clone( _current_input_parent ),//initialize it to the current value _isPreItemInput = input.is_preItemInput; //is this input currently enabled ? if ( ! input.enabled() ) return; //make sure the _new_model is an object and is not empty _new_model = ( ! _.isObject(_new_model) || _.isEmpty(_new_model) ) ? {} : _new_model; //set the new val to the changed property _new_model[ input.id ] = to; //inform the input_parent : item or modOpt input.input_parent.set( _new_model, { input_changed : input.id, input_value : input(), input_transport : input.transport, not_preview_sent : 'postMessage' === input.transport,//<= this parameter set to true will prevent the setting to be sent to the preview ( @see api.Setting.prototype.preview override ). This is useful to decide if a specific input should refresh or not the preview. inputRegistrationParams : input.constructorOptions } ); //Trigger and send specific events when changing a published input item if ( ! _isPreItemInput ) { //inform the input_parent that an input has changed //=> useful to handle dependant reactions between different inputs input.input_parent.trigger( input.id + ':changed', to ); //Each input instantiated in an item or a modOpt can have a specific transport set. //the input transport is hard coded in the module js template, with the attribute : data-transport="postMessage" or "refresh" //=> this is optional, if not set, then the transport will be inherited from the one of the module, which is inherited from the control. //send input to the preview. On update only, not on creation. if ( ! _.isEmpty( from ) || ! _.isUndefined( from ) && 'postMessage' === input.transport ) { input.module.sendInputToPreview( { input_id : input.id, input_parent_id : input.input_parent.id, to : to, from : from } ); } } }, /*----------------------------------------- SOME DEFAULT CALLBACKS ------------------------------------------*/ setupColorPicker : function() { var input = this; input.container.find('input').iris( { palettes: true, hide:false, change : function( e, o ) { //if the input val is not updated here, it's not detected right away. //weird //is there a "change complete" kind of event for iris ? //$(this).val($(this).wpColorPicker('color')); //input.container.find('[data-czrtype]').trigger('colorpickerchange'); //synchronizes with the original input //OLD => $(this).val( $(this).wpColorPicker('color') ).trigger('colorpickerchange').trigger('change'); $(this).val( o.color.toString() ).trigger('colorpickerchange').trigger('change'); } }); }, setupColorPickerAlpha : function() { var input = this; input.container.find('input').wpColorPicker({ palettes: true, //hide:false, width: window.innerWidth >= 1440 ? 271 : 251, change : function( e, o ) { //if the input val is not updated here, it's not detected right away. //weird //is there a "change complete" kind of event for iris ? //$(this).val($(this).wpColorPicker('color')); //input.container.find('[data-czrtype]').trigger('colorpickerchange'); //synchronizes with the original input //OLD => $(this).val( $(this).wpColorPicker('color') ).trigger('colorpickerchange').trigger('change'); $(this).val( o.color.toString() ).trigger('colorpickerchange').trigger('change'); }, clear : function( e, o ) { //$(this).val('').trigger('colorpickerchange').trigger('change'); input(''); } }); }, setupSelect : function() { var input = this; $('select', input.container ).not('.no-selecter-js') .each( function() { $(this).selecter({ //triggers a change event on the view, passing the newly selected value + index as parameters. // callback : function(value, index) { // self.triggerSettingChange( window.event || {} , value, index); // first param is a null event. // } }); }); }, setupIcheck : function( obj ) { var input = this; $( 'input[type=checkbox]', input.container ).each( function(e) { if ( 0 !== $(this).closest('div[class^="icheckbox"]').length ) return; $(this).iCheck({ checkboxClass: 'icheckbox_flat-grey', checkedClass: 'checked', radioClass: 'iradio_flat-grey', }) .on( 'ifChanged', function(e){ $(this).val( false === $(this).is(':checked') ? 0 : 1 ); $(e.currentTarget).trigger('change'); }); }); }, // DEPRECATED since april 2nd 2019 // setupGutenCheck : function( params ) { // var input = this; // var $input = input.container.find('input[type=checkbox]'), // $checkWrapper = $( '.czr-toggle-check', input.container ); // var _do_ = function() { // $input.closest('.czr-toggle-check').toggleClass( 'is-checked', $input.is(':checked') ); // $checkWrapper.find('svg').remove(); // $checkWrapper.append( // ! $input.is(':checked') ? '' : '' // ); // }; // $input.on( 'change', _do_ ); // _do_(); // }, // when input and label are tied by an id - for relationship // clicking on any of them changes the input // => We need a unique ID here so that input and label are tied by a unique link // The unique ID is generated server side as a GUID // @see https://www.w3.org/TR/html401/interact/forms.html#h-17.9.1 // @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input/checkbox setupNimbleCheck : function( params ) { var input = this; var $input = input.container.find('input[type=checkbox]'), $checkWrapper = $( '.czr-toggle-check', input.container ); var _do_ = function() {}; // $input.on( 'change', _do_ ); // _do_(); }, setupRadio : function( obj ) { var input = this; $( 'input[type=radio]', input.container ).each( function(e) { if ( 0 !== $(this).closest('div[class^="icheckbox"]').length ) return; $(this).iCheck({ checkboxClass: 'icheckbox_flat-grey', checkedClass: 'checked', radioClass: 'iradio_flat-grey', }) .on( 'ifChanged', function(e){ $(e.currentTarget).trigger('change'); }); }); }, setupStepper : function( obj ) { var input = this; $('input[type="number"]',input.container ).each( function( e ) { $(this).stepper(); }); }, // Empty for the moment, to be overriden setupSimpleRange : function() {}, //@use rangeslider https://github.com/andreruffert/rangeslider.js setupRangeSlider : function( options ) { var input = this, $handle, _updateHandle = function(el, val) { var _unit = input.container.find('input').data( 'unit' ); el.textContent = val + ( _.isEmpty( input.container.find('input').data( 'unit' ) ) ? '' : _unit ); }; $( input.container ).find('input').rangeslider( { // Feature detection the default is `true`. // Set this to `false` if you want to use // the polyfill also in Browsers which support // the native element. polyfill: false, // Default CSS classes rangeClass: 'rangeslider', disabledClass: 'rangeslider--disabled', horizontalClass: 'rangeslider--horizontal', verticalClass: 'rangeslider--vertical', fillClass: 'rangeslider__fill', handleClass: 'rangeslider__handle', // Callback function onInit: function() { $handle = $('.rangeslider__handle', this.$range); $('.rangeslider__handle', this.$range); _updateHandle( $handle[0], this.value ); }, // Callback function onSlide: function(position, value) { _updateHandle( $handle[0], value ); }, // Callback function //onSlideEnd: function(position, value) {} } ); // .on('input', function() { // _updateHandle( $handle[0], this.value ); // }); }, // for h_alignment and h_text_alignment types setupHAlignement : function( input_options ) { var input = this, $wrapper = $('.sek-h-align-wrapper', input.container ); // on init $wrapper.find( 'div[data-sek-align="' + input() +'"]' ).addClass('selected'); // on click $wrapper.on( 'click', '[data-sek-align]', function(evt) { evt.preventDefault(); $wrapper.find('.selected').removeClass('selected'); $.when( $(this).addClass('selected') ).done( function() { input( $(this).data('sek-align') ); }); }); } });//$.extend })( wp.customize , jQuery, _ );var CZRInputMths = CZRInputMths || {}; ( function ( api, $, _ ) { $.extend( CZRInputMths , { // callback for data-input-type="upload" setupImageUploaderSaveAsId : function() { this.setupImageUploader(); }, // callback for data-input-type="upload_url" setupImageUploaderSaveAsUrl : function() { this.setupImageUploader( { save_as_url : true } ); }, //@param args { save_as_url : false } setupImageUploader : function( args ) { var input = this, _model = input(); args = _.extend( { save_as_url : false }, args || {} ); input.save_as_url = args.save_as_url; //an instance field where we'll store the current attachment input.attachment = {}; //do we have an html template and a input container? if ( ! input.container ) return this; input.tmplRendered = $.Deferred(); input.setupContentRendering( _model, {} ); //valid just in the init input.tmplRendered .done( function(){ input.czrImgUploaderBinding(); }) .fail( function() { api.errorLog( 'setupImageUploader => failed to fetch the template.'); }); }, setupContentRendering : function( to, from ) { var input = this, _attachment; //retrieve new image if 'to' is different from the saved one //NEED A BETTER WAY? if ( ( input.attachment.id != to ) && from !== to ) { if ( _.isEmpty( to ) ) { input.attachment = {}; input.renderImageUploaderTemplate(); // handles the case when a url is provided // Occurs for example when contextualizing the header_image with skope } else if ( ! _.isNumber( to ) ) { input.renderImageUploaderTemplate( { fromUrl : true, url : to }); } //Has this image already been fetched ? _attachment = wp.media.attachment( to ); if ( _.isObject( _attachment ) && _.has( _attachment, 'attributes' ) && _.has( _attachment.attributes, 'sizes' ) ) { input.attachment = _attachment.attributes; input.renderImageUploaderTemplate(); } // If not, try to fetch it but only if the candidate "to" is a number else { if ( _.isNumber( to ) ) { wp.media.attachment( to ).fetch().done( function() { input.attachment = this.attributes; input.renderImageUploaderTemplate(); }).fail( function() { api.errorLog('renderImageUploaderTemplate => failed attempt to fetch an img with id : ' + to ); // input.attachment = {}; // input.renderImageUploaderTemplate(); }); } } }//Standard reaction, the image has been updated by the user or init else if ( ! input.attachment.id || input.attachment.id === to ) { input.renderImageUploaderTemplate(); } }, czrImgUploaderBinding : function() { var input = this; //Bind events // Shortcut so that we don't have to use _.bind every time we add a callback. _.bindAll( input, 'czrImgUploadRemoveFile', 'czrImgUploadOpenFrame', 'czrImgUploadSelect'); // Bind events, with delegation to facilitate re-rendering. input.container.on( 'click keydown', '.upload-button', input.czrImgUploadOpenFrame ); input.container.on( 'click keydown', '.thumbnail-image img', input.czrImgUploadOpenFrame ); input.container.on( 'click keydown', '.remove-button', input.czrImgUploadRemoveFile ); input.bind( input.id + ':changed', function( to, from ){ input.tmplRendered = $.Deferred(); input.setupContentRendering( to, from ); }); }, /** * Open the media modal. */ czrImgUploadOpenFrame: function( event ) { if ( api.utils.isKeydownButNotEnterEvent( event ) ) { return; } event.preventDefault(); if ( ! this.frame ) { this.czrImgUploadInitFrame(); } this.frame.open(); }, /** * Create a media modal select frame, and store it so the instance can be reused when needed. */ czrImgUploadInitFrame: function() { var input = this, button_labels = this.getUploaderLabels(); input.frame = wp.media({ button: { text: button_labels.frame_button }, states: [ new wp.media.controller.Library({ title: button_labels.frame_title, library: wp.media.query({ type: 'image' }), multiple: false, date: false }) ] }); // When a file is selected, run a callback. input.frame.on( 'select', input.czrImgUploadSelect ); }, /** * Called when the "Remove" link is clicked. Empties the setting. * * @param {object} event jQuery Event object */ czrImgUploadRemoveFile: function( event ) { var input = this; if ( api.utils.isKeydownButNotEnterEvent( event ) ) { return; } event.preventDefault(); //reset the attachment class field input.attachment = {}; //set the model input.set(''); }, /** * Callback handler for when an attachment is selected in the media modal. * Gets the selected image information, and sets it within the input. */ czrImgUploadSelect: function() { var node, input = this, attachment = input.frame.state().get( 'selection' ).first().toJSON(), // Get the attachment from the modal frame. mejsSettings = window._wpmejsSettings || {}; //save the attachment in a class field input.attachment = attachment; //set the model input.set( input.save_as_url ? attachment.url : attachment.id ); }, ////////////////////////////////////////////////// /// HELPERS ////////////////////////////////////////////////// // @param args = { fromUrl : true, url : to } || null renderImageUploaderTemplate: function( args ) { var input = this; args = _.extend( { fromUrl : false, url : '' }, args || {} ); // //do we have view template script? // if ( 0 === $( '#tmpl-czr-input-img-uploader-view-content' ).length ) { // throw new Error('renderImageUploaderTemplate => Missing template for input ' + input.id ); // } // var view_template = wp.template('czr-input-img-uploader-view-content'); // // do we have an html template and a module container? // if ( ! view_template || ! input.container ) // return; var $_view_el = input.container.find('.' + input.module.control.css_attr.img_upload_container ); if ( ! $_view_el.length || 1 > input.container.length ) return; var _template_params = { button_labels : input.getUploaderLabels(), settings : input.id, attachment : input.attachment, fromUrl : args.url, canUpload : true }; if ( $('#tmpl-czr-img-uploader').length > 0 ) { $_view_el.html( wp.template( 'czr-img-uploader' )( _template_params ) ); input.tmplRendered.resolve(); input.container.trigger( input.id + ':content_rendered' ); } else { api.CZR_Helpers.getModuleTmpl( { tmpl : 'img-uploader', module_type: 'all_modules', module_id : input.module.id } ).done( function( _serverTmpl_ ) { //console.log( 'renderModuleParts => success response =>', input.module.id, _serverTmpl_); $_view_el.html( api.CZR_Helpers.parseTemplate( _serverTmpl_ )( _template_params ) ); input.tmplRendered.resolve(); input.container.trigger( input.id + ':content_rendered' ); }).fail( function( _r_ ) { //console.log( 'renderModuleParts => fail response =>', _r_); input.tmplRendered.reject( 'renderImageUploaderTemplate => Problem when fetching the tmpl from server for module : '+ input.module.id ); }); } return true; }, getUploaderLabels : function() { var _ts = serverControlParams.i18n, input = this, _map = { 'select' : _ts.select_image, 'change' : _ts.change_image, 'remove' : _ts.remove_image, 'default' : _ts.default_image, 'placeholder' : _ts.placeholder_image, 'frame_title' : _ts.frame_title_image, 'frame_button': _ts.frame_button_image }; //are we fine ? var _fallbackmap = {}; _.each( _map, function( ts_string, key ) { if ( _.isEmpty( ts_string ) ) { api.errorLog( 'A translated string is missing ( ' + key + ' ) for the image uploader input in module : ' + input.module.id ); _fallbackmap[ key ] = key; return; } else { _fallbackmap[ key ] = ts_string; } }); return _fallbackmap; } });//$.extend })( wp.customize , jQuery, _ );/* Fix caching, czrSelect2 default one seems to not correctly work, or it doesn't what I think it should */ // the content_picker options are set in the module with : // $.extend( module.inputOptions, { // 'content_picker' : { // post : '',//<= all post types // taxonomy : ''//<= all taxonomy types // } // }); // To narrow down the post or taxonomy types, the option can be set this way : // $.extend( module.inputOptions, { // 'content_picker' : { // post : [ 'page', 'cpt1', ...] // taxonomy : [ 'category', 'tag', 'Custom_Tax_1', ... ] // } // }); // To disable all posts or taxonomy, use '_none_' // $.extend( module.inputOptions, { // 'content_picker' : { // post : [ 'page', 'cpt1', ...] // taxonomy : '_none_' //<= won't load or search in taxonomies when requesting wp in ajax // } // }); // // input is an object structured this way // { // id:"2838" // object_type:"post" // title:"The Importance of Water and Drinking Lots Of It" // type_label:"Post" // url:"http://customizr-dev.dev/?p=2838" // } var CZRInputMths = CZRInputMths || {}; ( function ( api, $, _ ) { $.extend( CZRInputMths , { // fired in the input::initialize() setupContentPicker: function( wpObjectTypes ) { var input = this, _event_map = []; /* Dummy for the prototype purpose */ //input.object = ['post']; //this.control.params.object_types - array('page', 'post') $.extend( _.isObject( wpObjectTypes ) ? wpObjectTypes : {}, { post : '', taxonomy : '' } ); input.wpObjectTypes = wpObjectTypes; /* Methodize this or use a template */ input.container.find('.czr-input').append(''); // Overrides the default input_event_map declared in ::initialize() input.input_event_map = [ //set input value { trigger : 'change', selector : 'select[data-select-type]', name : 'set_input_value', actions : function( obj ){ var $_changed_input = $( obj.dom_event.currentTarget, obj.dom_el ), _raw_val = $( $_changed_input, obj.dom_el ).czrSelect2( 'data' ), _val_candidate = {}, _default = { id : '', type_label : '', title : '', object_type : '', url : '' }; _raw_val = _.isArray( _raw_val ) ? _raw_val[0] : _raw_val; if ( ! _.isObject( _raw_val ) || _.isEmpty( _raw_val ) ) { api.errare( 'Content Picker Input : the picked value should be an object not empty.'); return; } //normalize and purge useless czrSelect2 fields //=> skip a possible _custom_ id, used for example in the slider module to set a custom url _.each( _default, function( val, k ){ if ( '_custom_' !== _raw_val.id ) { if ( ! _.has( _raw_val, k ) || _.isEmpty( _raw_val[ k ] ) ) { api.errare( 'content_picker : missing input param : ' + k ); return; } } _val_candidate[ k ] = _raw_val[ k ]; } ); //set the value now input.set( _val_candidate ); } } ]; //input.setupDOMListeners( _event_map , { dom_el : input.container }, input ); //setup when ready. input.isReady.done( function() { input.setupContentSelecter(); }); }, // input is an object structured this way // { // id:"2838" // object_type:"post" // title:"The Importance of Water and Drinking Lots Of It" // type_label:"Post" // url:"http://customizr-dev.dev/?p=2838" // } setupContentSelecter : function() { var input = this; //set the previously selected value if ( ! _.isEmpty( input() ) ) { var _attributes = { value : input().id || '', title : input().title || '', selected : "selected" }; //input.container.find('select') input.container.find('select').append( $( '