-
Notifications
You must be signed in to change notification settings - Fork 610
/
Craft.min.js
2 lines (2 loc) · 302 KB
/
Craft.min.js
1
2
!function(p){p.extend(Craft,{navHeight:48,t:function(t,e,i){if(void 0!==Craft.translations[t]&&void 0!==Craft.translations[t][e]&&(e=Craft.translations[t][e]),i)for(var s in i)i.hasOwnProperty(s)&&(e=e.replace("{"+s+"}",i[s]));return e},formatDate:function(t){return"object"!=typeof t&&(t=new Date(t)),p.datepicker.formatDate(Craft.datepickerOptions.dateFormat,t)},formatNumber:function(t,e){return void 0===e&&(e=",.0f"),d3.formatLocale(d3FormatLocaleDefinition).format(e)(t)},escapeHtml:function(t){return p("<div/>").text(t).html()},getText:function(t){return p("<div/>").html(t).text()},encodeUriComponent:function(t){t=encodeURIComponent(t);var e={"!":"%21","*":"%2A","'":"%27","(":"%28",")":"%29"};for(var i in e){var s=new RegExp("\\"+i,"g");t=t.replace(s,e[i])}return t},selectFullValue:function(t){var e=p(t),i=e.val();if(void 0!==e[0].setSelectionRange){var s=2*i.length;e[0].setSelectionRange(0,s)}else e.val(i)},formatInputId:function(t){return this.rtrim(t.replace(/[\[\]\\]+/g,"-"),"-")},getUrl:function(t,e,i){if("string"!=typeof t&&(t=""),-1!==t.search("://")||"/"===t[0])return t;t=Craft.trim(t,"/");var s="";if(p.isPlainObject(e)){var n=[];for(var a in e)if(e.hasOwnProperty(a)){var r=e[a];"#"===a?s=r:null!==r&&""!==r&&n.push(a+"="+r)}e=n}e=Garnish.isArray(e)?e.join("&"):Craft.trim(e,"&?");var o,l=t.indexOf("?");if(-1!==l&&(e=t.substr(l+1)+(e?"&"+e:""),t=t.substr(0,l)),i){if(o=i,t){var h=o.match(/[&\?]p=[^&]+/);h&&(o=o.replace(h[0],h[0]+"/"+t),t="")}}else o=Craft.baseUrl;if(-1!==(l=o.indexOf("?"))&&(e=o.substr(l+1)+(e?"&"+e:""),o=o.substr(0,l)),!Craft.omitScriptNameInUrls&&t)if(Craft.usePathInfo)-1===o.search(Craft.scriptName)&&(o=Craft.rtrim(o,"/")+"/"+Craft.scriptName);else{if(e&&"p="===e.substr(0,2)){var d,c=e.indexOf("&");e=-1!==c?(d=e.substring(2,c),e.substr(c+1)):(d=e.substr(2),null),t=(d=Craft.rtrim(d))+(t?"/"+t:"")}e="p="+t+(e?"&"+e:""),t=null}return t&&(o=Craft.rtrim(o,"/")+"/"+t),e&&(o+="?"+e),s&&(o+="#"+s),o},getCpUrl:function(t,e){return this.getUrl(t,e,Craft.baseCpUrl)},getSiteUrl:function(t,e){return this.getUrl(t,e,Craft.baseSiteUrl)},getActionUrl:function(t,e){return Craft.getUrl(t,e,Craft.actionUrl)},redirectTo:function(t){document.location.href=this.getUrl(t)},getCsrfInput:function(){return Craft.csrfTokenName?'<input type="hidden" name="'+Craft.csrfTokenName+'" value="'+Craft.csrfTokenValue+'"/>':""},postActionRequest:function(t,e,i,s){"function"==typeof e&&(s=i,i=e,e={});var n={"X-Registered-Asset-Bundles":Object.keys(Craft.registeredAssetBundles).join(","),"X-Registered-Js-Files":Object.keys(Craft.registeredJsFiles).join(",")};Craft.csrfTokenValue&&Craft.csrfTokenName&&(n["X-CSRF-Token"]=Craft.csrfTokenValue);var a=p.ajax(p.extend({url:Craft.getActionUrl(t),type:"POST",dataType:"json",headers:n,data:e,success:i,error:function(t,e){i&&i(null,e,t)},complete:function(t,e){"success"!==e&&(void 0!==Craft.cp?Craft.cp.displayError():alert(Craft.t("app","An unknown error occurred.")))}},s));return s&&"function"==typeof s.send&&s.send(a),a},_waitingOnAjax:!1,_ajaxQueue:[],queueActionRequest:function(t,e,i,s){"function"==typeof e&&(s=i,i=e,e=void 0),Craft._ajaxQueue.push([t,e,i,s]),Craft._waitingOnAjax||Craft._postNextActionRequestInQueue()},_postNextActionRequestInQueue:function(){Craft._waitingOnAjax=!0;var s=Craft._ajaxQueue.shift();Craft.postActionRequest(s[0],s[1],function(t,e,i){s[2]&&"function"==typeof s[2]&&s[2](t,e,i),Craft._ajaxQueue.length?Craft._postNextActionRequestInQueue():Craft._waitingOnAjax=!1},s[3])},stringToArray:function(t){if("string"!=typeof t)return t;for(var e=t.split(","),i=0;i<e.length;i++)e[i]=p.trim(e[i]);return e},expandPostArray:function(t){var e,i={};for(var s in t)if(t.hasOwnProperty(s)){var n,a=t[s],r=s.match(/^(\w+)(\[.*)?/);if(r[2])for(n=r[2].match(/\[[^\[\]]*\]/g),e=0;e<n.length;e++)n[e]=n[e].substring(1,n[e].length-1);else n=[];n.unshift(r[1]);var o=i;for(e=0;e<n.length;e++)e<n.length-1?("object"!=typeof o[n[e]]&&(n[e+1]&&parseInt(n[e+1])!=n[e+1]?o[n[e]]={}:o[n[e]]=[]),o=o[n[e]]):(n[e]||(n[e]=o.length),o[n[e]]=a)}return i},compare:function(t,e,i){if(typeof t!=typeof e)return!1;if("object"!=typeof t)return t===e;if(t.length!==e.length)return!1;if(t instanceof Array!=e instanceof Array)return!1;if(!(t instanceof Array))if(void 0===i||!0===i){if(!Craft.compare(Craft.getObjectKeys(t).sort(),Craft.getObjectKeys(e).sort()))return!1}else if(!Craft.compare(Craft.getObjectKeys(t),Craft.getObjectKeys(e)))return!1;for(var s in t)if(t.hasOwnProperty(s)&&!Craft.compare(t[s],e[s]))return!1;return!0},getObjectKeys:function(t){var e=[];for(var i in t)t.hasOwnProperty(i)&&e.push(i);return e},escapeChars:function(t){Garnish.isArray(t)||(t=t.split());for(var e="",i=0;i<t.length;i++)e+="\\"+t[i];return e},ltrim:function(t,e){if(!t)return t;void 0===e&&(e=" \t\n\r\0\v");var i=new RegExp("^["+Craft.escapeChars(e)+"]+");return t.replace(i,"")},rtrim:function(t,e){if(!t)return t;void 0===e&&(e=" \t\n\r\0\v");var i=new RegExp("["+Craft.escapeChars(e)+"]+$");return t.replace(i,"")},trim:function(t,e){return t=Craft.ltrim(t,e),t=Craft.rtrim(t,e)},filterArray:function(t,e){for(var i=[],s=0;s<t.length;s++){("function"==typeof e?e(t[s],s):t[s])&&i.push(t[s])}return i},inArray:function(t,e){return-1!==p.inArray(t,e)},removeFromArray:function(t,e){var i=p.inArray(t,e);return-1!==i&&(e.splice(i,1),!0)},getLast:function(t){return t.length?t[t.length-1]:null},uppercaseFirst:function(t){return t.charAt(0).toUpperCase()+t.slice(1)},lowercaseFirst:function(t){return t.charAt(0).toLowerCase()+t.slice(1)},secondsToHumanTimeDuration:function(t,e){void 0===e&&(e=!0);var i=Math.floor(t/604800);t%=604800;var s=Math.floor(t/86400);t%=86400;var n,a=Math.floor(t/3600);t%=3600,e?(n=Math.floor(t/60),t%=60):(n=Math.round(t/60),t=0);var r=[];return i&&r.push(i+" "+(1===i?Craft.t("app","week"):Craft.t("app","weeks"))),s&&r.push(s+" "+(1===s?Craft.t("app","day"):Craft.t("app","days"))),a&&r.push(a+" "+(1===a?Craft.t("app","hour"):Craft.t("app","hours"))),!n&&(e||i||s||a)||r.push(n+" "+(1===n?Craft.t("app","minute"):Craft.t("app","minutes"))),!t&&(!e||i||s||a||n)||r.push(t+" "+(1===t?Craft.t("app","second"):Craft.t("app","seconds"))),r.join(", ")},asciiString:function(t){for(var e,i="",s=0;s<t.length;s++)e=t.charAt(s),i+=Craft.asciiCharMap[e]||e;return i},preventOutlineOnMouseFocus:function(t){var e=p(t),i=".preventOutlineOnMouseFocus";e.on("mousedown"+i,function(){e.addClass("no-outline"),e.trigger("focus")}).on("keydown"+i+" blur"+i,function(t){t.keyCode!==Garnish.SHIFT_KEY&&t.keyCode!==Garnish.CTRL_KEY&&t.keyCode!==Garnish.CMD_KEY&&e.removeClass("no-outline")})},createErrorList:function(t){for(var e=p(document.createElement("ul")).addClass("errors"),i=0;i<t.length;i++){var s=p(document.createElement("li"));s.appendTo(e),s.html(t[i])}return e},appendHeadHtml:function(t){if(t){var e=p("link[href]");if(e.length){for(var i=[],s=0;s<e.length;s++){var n=e.eq(s).attr("href");i.push(n.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&"))}var a=new RegExp('<link\\s[^>]*href="(?:'+i.join("|")+')".*?><\/script>',"g");t=t.replace(a,"")}p("head").append(t)}},appendFootHtml:function(t){if(t){var e=p("script[src]");if(e.length){for(var i=[],s=0;s<e.length;s++){var n=e.eq(s).attr("src");i.push(n.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&"))}var a=new RegExp('<script\\s[^>]*src="(?:'+i.join("|")+')".*?><\/script>',"g");t=t.replace(a,"")}Garnish.$bod.append(t)}},initUiElements:function(t){p(".grid",t).grid(),p(".info",t).infoicon(),p(".checkbox-select",t).checkboxselect(),p(".fieldtoggle",t).fieldtoggle(),p(".lightswitch",t).lightswitch(),p(".nicetext",t).nicetext(),p(".pill",t).pill(),p(".formsubmit",t).formsubmit(),p(".menubtn",t).menubtn()},_elementIndexClasses:{},_elementSelectorModalClasses:{},_elementEditorClasses:{},registerElementIndexClass:function(t,e){if(void 0!==this._elementIndexClasses[t])throw"An element index class has already been registered for the element type “"+t+"”.";this._elementIndexClasses[t]=e},registerElementSelectorModalClass:function(t,e){if(void 0!==this._elementSelectorModalClasses[t])throw"An element selector modal class has already been registered for the element type “"+t+"”.";this._elementSelectorModalClasses[t]=e},registerElementEditorClass:function(t,e){if(void 0!==this._elementEditorClasses[t])throw"An element editor class has already been registered for the element type “"+t+"”.";this._elementEditorClasses[t]=e},createElementIndex:function(t,e,i){return new(void 0!==this._elementIndexClasses[t]?this._elementIndexClasses[t]:Craft.BaseElementIndex)(t,e,i)},createElementSelectorModal:function(t,e){return new(void 0!==this._elementSelectorModalClasses[t]?this._elementSelectorModalClasses[t]:Craft.BaseElementSelectorModal)(t,e)},createElementEditor:function(t,e,i){return new(void 0!==this._elementEditorClasses[t]?this._elementEditorClasses[t]:Craft.BaseElementEditor)(e,i)},getLocalStorage:function(t,e){return t="Craft-"+Craft.systemUid+"."+t,"undefined"!=typeof localStorage&&void 0!==localStorage[t]?JSON.parse(localStorage[t]):e},setLocalStorage:function(t,e){if("undefined"!=typeof localStorage){t="Craft-"+Craft.systemUid+"."+t;try{localStorage[t]=JSON.stringify(e)}catch(t){}}},getElementInfo:function(t){var e=p(t);return e.hasClass("element")||(e=e.find(".element:first")),{id:e.data("id"),siteId:e.data("site-id"),label:e.data("label"),status:e.data("status"),url:e.data("url"),hasThumb:e.hasClass("hasthumb"),$element:e}},setElementSize:function(t,e){var i=p(t);if("small"!==e&&"large"!==e&&(e="small"),!i.hasClass(e)){var s="small"===e?"large":"small";if(i.addClass(e).removeClass(s),i.hasClass("hasthumb")){var n=i.find("> .elementthumb > img"),a=p("<img/>",{sizes:("small"===e?"30":"100")+"px",srcset:n.attr("srcset")||n.attr("data-pfsrcset")});n.replaceWith(a),picturefill({elements:[a[0]]})}}}}),p.extend(p.fn,{animateLeft:function(t,e,i,s){return"ltr"===Craft.orientation?this.velocity({left:t},e,i,s):this.velocity({right:t},e,i,s)},animateRight:function(t,e,i,s){return"ltr"===Craft.orientation?this.velocity({right:t},e,i,s):this.velocity({left:t},e,i,s)},disable:function(){return this.each(function(){var t=p(this);t.addClass("disabled"),t.data("activatable")&&t.removeAttr("tabindex")})},enable:function(){return this.each(function(){var t=p(this);t.removeClass("disabled"),t.data("activatable")&&t.attr("tabindex","0")})},grid:function(){return this.each(function(){var t=p(this),e={};t.data("item-selector")&&(e.itemSelector=t.data("item-selector")),t.data("cols")&&(e.cols=parseInt(t.data("cols"))),t.data("max-cols")&&(e.maxCols=parseInt(t.data("max-cols"))),t.data("min-col-width")&&(e.minColWidth=parseInt(t.data("min-col-width"))),t.data("mode")&&(e.mode=t.data("mode")),t.data("fill-mode")&&(e.fillMode=t.data("fill-mode")),t.data("col-class")&&(e.colClass=t.data("col-class")),t.data("snap-to-grid")&&(e.snapToGrid=!!t.data("snap-to-grid")),new Craft.Grid(this,e)})},infoicon:function(){return this.each(function(){new Craft.InfoIcon(this)})},checkboxselect:function(){return this.each(function(){p.data(this,"checkboxselect")||new Garnish.CheckboxSelect(this)})},fieldtoggle:function(){return this.each(function(){p.data(this,"fieldtoggle")||new Craft.FieldToggle(this)})},lightswitch:function(e,t,i){return"settings"===e?("string"==typeof t?(e={})[t]=i:e=t,this.each(function(){var t=p.data(this,"lightswitch");t&&t.setSettings(e)})):(p.isPlainObject(e)||(e={}),this.each(function(){var t=p.extend({},e);Garnish.hasAttr(this,"data-value")&&(t.value=p(this).attr("data-value")),p.data(this,"lightswitch")||new Craft.LightSwitch(this,t)}))},nicetext:function(){return this.each(function(){p.data(this,"nicetext")||new Garnish.NiceText(this)})},pill:function(){return this.each(function(){p.data(this,"pill")||new Garnish.Pill(this)})},formsubmit:function(){this.on("click",function(t){var e=p(t.currentTarget);if(!e.attr("data-confirm")||confirm(e.attr("data-confirm"))){var i=e.data("menu")?e.data("menu").$anchor:e,s=i.attr("data-form")?p("#"+i.attr("data-form")):i.closest("form");e.attr("data-action")&&p('<input type="hidden" name="action"/>').val(e.attr("data-action")).appendTo(s),e.attr("data-redirect")&&p('<input type="hidden" name="redirect"/>').val(e.attr("data-redirect")).appendTo(s),e.attr("data-param")&&p('<input type="hidden"/>').attr({name:e.attr("data-param"),value:e.attr("data-value")}).appendTo(s),s.trigger("submit")}})},menubtn:function(){return this.each(function(){var t=p(this);if(!t.data("menubtn")&&t.next().hasClass("menu")){var e={};t.data("menu-anchor")&&(e.menuAnchor=t.data("menu-anchor")),new Garnish.MenuBtn(t,e)}})}}),Garnish.$doc.ready(function(){Craft.initUiElements()}),Craft.BaseElementEditor=Garnish.Base.extend({$element:null,elementId:null,siteId:null,$form:null,$fieldsContainer:null,$cancelBtn:null,$saveBtn:null,$spinner:null,$siteSelect:null,$siteSpinner:null,hud:null,init:function(t,e){void 0===e&&p.isPlainObject(t)&&(e=t,t=null),this.$element=p(t),this.setSettings(e,Craft.BaseElementEditor.defaults),this.loadHud()},setElementAttribute:function(t,e){this.settings.attributes||(this.settings.attributes={}),null===e?delete this.settings.attributes[t]:this.settings.attributes[t]=e},getBaseData:function(){var t=p.extend({},this.settings.params);return this.settings.siteId?t.siteId=this.settings.siteId:this.$element&&this.$element.data("site-id")&&(t.siteId=this.$element.data("site-id")),this.settings.elementId?t.elementId=this.settings.elementId:this.$element&&this.$element.data("id")&&(t.elementId=this.$element.data("id")),this.settings.elementType&&(t.elementType=this.settings.elementType),this.settings.attributes&&(t.attributes=this.settings.attributes),t},loadHud:function(){this.onBeginLoading();var t=this.getBaseData();t.includeSites=this.settings.showSiteSwitcher,Craft.postActionRequest("elements/get-editor-html",t,p.proxy(this,"showHud"))},showHud:function(t,e){if(this.onEndLoading(),"success"===e){var i=p();if(t.sites){var s=p('<div class="hud-header"/>'),n=p('<div class="select"/>').appendTo(s);this.$siteSelect=p("<select/>").appendTo(n),this.$siteSpinner=p('<div class="spinner hidden"/>').appendTo(s);for(var a=0;a<t.sites.length;a++){var r=t.sites[a];p('<option value="'+r.id+'"'+(r.id==t.siteId?' selected="selected"':"")+">"+r.name+"</option>").appendTo(this.$siteSelect)}this.addListener(this.$siteSelect,"change","switchSite"),i=i.add(s)}this.$form=p("<div/>"),this.$fieldsContainer=p('<div class="fields"/>').appendTo(this.$form),this.updateForm(t),this.onCreateForm(this.$form);var o=p('<div class="hud-footer"/>').appendTo(this.$form),l=p('<div class="buttons right"/>').appendTo(o);if(this.$cancelBtn=p('<div class="btn">'+Craft.t("app","Cancel")+"</div>").appendTo(l),this.$saveBtn=p('<input class="btn submit" type="submit" value="'+Craft.t("app","Save")+'"/>').appendTo(l),this.$spinner=p('<div class="spinner hidden"/>').appendTo(l),i=i.add(this.$form),this.hud)this.hud.updateBody(i),this.hud.updateSizeAndPosition();else{var h=this.settings.hudTrigger||this.$element;this.hud=new Garnish.HUD(h,i,{bodyClass:"body elementeditor",closeOtherHUDs:!1,onShow:p.proxy(this,"onShowHud"),onHide:p.proxy(this,"onHideHud"),onSubmit:p.proxy(this,"saveElement")}),this.hud.$hud.data("elementEditor",this),this.hud.on("hide",p.proxy(function(){delete this.hud},this))}i.find(".text:first").trigger("focus"),this.addListener(this.$cancelBtn,"click",function(){this.hud.hide()})}},switchSite:function(){var t=this.$siteSelect.val();t!=this.siteId&&(this.$siteSpinner.removeClass("hidden"),this.reloadForm({siteId:t},p.proxy(function(t){this.$siteSpinner.addClass("hidden"),"success"!==t&&this.$siteSelect.val(this.siteId)},this)))},reloadForm:function(t,i){t=p.extend(this.getBaseData(),t),Craft.postActionRequest("elements/get-editor-html",t,p.proxy(function(t,e){"success"===e&&this.updateForm(t),i&&i(e)},this))},updateForm:function(t){this.siteId=t.siteId,this.$fieldsContainer.html(t.html);for(var e=this.$fieldsContainer.find("> .meta > .field > .heading > .instructions"),i=0;i<e.length;i++)e.eq(i).replaceWith(p("<span/>",{class:"info",html:e.eq(i).children().html()})).infoicon();Garnish.requestAnimationFrame(p.proxy(function(){Craft.appendHeadHtml(t.headHtml),Craft.appendFootHtml(t.footHtml),Craft.initUiElements(this.$fieldsContainer)},this))},saveElement:function(){var t=this.settings.validators;if(p.isArray(t))for(var e=0;e<t.length;e++)if(p.isFunction(t[e])&&!t[e].call())return!1;this.$spinner.removeClass("hidden");var i=p.param(this.getBaseData())+"&"+this.hud.$body.serialize();Craft.postActionRequest("elements/save-element",i,p.proxy(function(t,e){if(this.$spinner.addClass("hidden"),"success"===e)if(t.success){if(this.$element&&this.siteId==this.$element.data("site-id")){var i=this.$element.find(".title"),s=i.find("a");s.length&&t.cpEditUrl?(s.attr("href",t.cpEditUrl),s.text(t.newTitle)):i.text(t.newTitle)}this.closeHud(),this.onSaveElement(t)}else this.updateForm(t),Garnish.shake(this.hud.$hud)},this))},closeHud:function(){this.hud.hide(),delete this.hud},onShowHud:function(){this.settings.onShowHud(),this.trigger("showHud")},onHideHud:function(){this.settings.onHideHud(),this.trigger("hideHud")},onBeginLoading:function(){this.$element&&this.$element.addClass("loading"),this.settings.onBeginLoading(),this.trigger("beginLoading")},onEndLoading:function(){this.$element&&this.$element.removeClass("loading"),this.settings.onEndLoading(),this.trigger("endLoading")},onSaveElement:function(t){this.settings.onSaveElement(t),this.trigger("saveElement",{response:t})},onCreateForm:function(t){this.settings.onCreateForm(t)}},{defaults:{hudTrigger:null,showSiteSwitcher:!0,elementId:null,elementType:null,siteId:null,attributes:null,params:null,elementIndex:null,onShowHud:p.noop,onHideHud:p.noop,onBeginLoading:p.noop,onEndLoading:p.noop,onCreateForm:p.noop,onSaveElement:p.noop,validators:[]}}),Craft.BaseElementIndex=Garnish.Base.extend({initialized:!1,elementType:null,instanceState:null,sourceStates:null,sourceStatesStorageKey:null,searchTimeout:null,sourceSelect:null,$container:null,$main:null,$mainSpinner:null,isIndexBusy:!1,$sidebar:null,showingSidebar:null,sourceKey:null,sourceViewModes:null,$source:null,sourcesByKey:null,$visibleSources:null,$customizeSourcesBtn:null,customizeSourcesModal:null,$toolbar:null,$toolbarFlexContainer:null,toolbarOffset:null,$search:null,searching:!1,searchText:null,$clearSearchBtn:null,$statusMenuBtn:null,statusMenu:null,status:null,$siteMenuBtn:null,siteMenu:null,siteId:null,$sortMenuBtn:null,sortMenu:null,$sortAttributesList:null,$sortDirectionsList:null,$scoreSortAttribute:null,$structureSortAttribute:null,$elements:null,$viewModeBtnContainer:null,viewModeBtns:null,viewMode:null,view:null,_autoSelectElements:null,actions:null,actionsHeadHtml:null,actionsFootHtml:null,$selectAllContainer:null,$selectAllCheckbox:null,showingActionTriggers:!1,_$detachedToolbarItems:null,_$triggers:null,init:function(t,e,i){if(this.elementType=t,this.$container=e,this.setSettings(i,Craft.BaseElementIndex.defaults),this.instanceState=this.getDefaultInstanceState(),this.sourceStates={},this.settings.storageKey&&p.extend(this.instanceState,Craft.getLocalStorage(this.settings.storageKey),{}),this.sourceStatesStorageKey="BaseElementIndex."+this.elementType+"."+this.settings.context,p.extend(this.sourceStates,Craft.getLocalStorage(this.sourceStatesStorageKey,{})),this.$main=this.$container.find(".main"),this.$toolbar=this.$container.find(".toolbar:first"),this.$toolbarFlexContainer=this.$toolbar.children(".flex"),this.$statusMenuBtn=this.$toolbarFlexContainer.find(".statusmenubtn:first"),this.$siteMenuBtn=this.$container.find(".sitemenubtn:first"),this.$sortMenuBtn=this.$toolbarFlexContainer.find(".sortmenubtn:first"),this.$search=this.$toolbarFlexContainer.find(".search:first input:first"),this.$clearSearchBtn=this.$toolbarFlexContainer.find(".search:first > .clear"),this.$mainSpinner=this.$toolbarFlexContainer.find(".spinner:first"),this.$sidebar=this.$container.find(".sidebar:first"),this.$customizeSourcesBtn=this.$sidebar.find(".customize-sources"),this.$elements=this.$container.find(".elements:first"),this.settings.hideSidebar&&(this.$sidebar.hide(),p(".body, .content",this.$container).removeClass("has-sidebar")),(this.settings.toolbarFixed||null===this.settings.toolbarFixed&&"index"===this.settings.context)&&!Garnish.isMobileBrowser(!0)&&(this.addListener(Garnish.$win,"resize","updateFixedToolbar"),this.addListener(Garnish.$scrollContainer,"scroll","updateFixedToolbar")),this.initSources()){if(this.$customizeSourcesBtn.length&&this.addListener(this.$customizeSourcesBtn,"click","createCustomizeSourcesModal"),this.$statusMenuBtn.length&&(this.statusMenu=this.$statusMenuBtn.menubtn().data("menubtn").menu,this.statusMenu.on("optionselect",p.proxy(this,"_handleStatusChange"))),this.$siteMenuBtn.length){this.siteMenu=this.$siteMenuBtn.menubtn().data("menubtn").menu;var s=this.siteMenu.$options.filter(".sel:first");if(s.length||(s=this.siteMenu.$options.first()),s.length?this._setSite(s.data("site-id")):this.settings.criteria={id:"0"},this.siteMenu.on("optionselect",p.proxy(this,"_handleSiteChange")),this.siteId){var n=Craft.getLocalStorage("BaseElementIndex.siteId");if(n&&n!=this.siteId){var a=this.siteMenu.$options.filter('[data-site-id="'+n+'"]:first');a.length&&a.trigger("click")}}}else this.settings.criteria&&this.settings.criteria.siteId?this._setSite(this.settings.criteria.siteId):this._setSite(Craft.siteId);this.addListener(this.$search,"textchange",p.proxy(function(){!this.searching&&this.$search.val()?this.startSearching():this.searching&&!this.$search.val()&&this.stopSearching(),this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout(p.proxy(this,"updateElementsIfSearchTextChanged"),500)},this)),this.addListener(this.$search,"keypress",p.proxy(function(t){t.keyCode===Garnish.RETURN_KEY&&(t.preventDefault(),this.searchTimeout&&clearTimeout(this.searchTimeout),this.updateElementsIfSearchTextChanged())},this)),this.addListener(this.$clearSearchBtn,"click",p.proxy(function(){this.$search.val(""),this.searchTimeout&&clearTimeout(this.searchTimeout),Garnish.isMobileBrowser(!0)||this.$search.trigger("focus"),this.stopSearching(),this.updateElementsIfSearchTextChanged()},this)),Garnish.isMobileBrowser(!0)||this.$search.trigger("focus"),this.$sortMenuBtn.length&&(this.sortMenu=this.$sortMenuBtn.menubtn().data("menubtn").menu,this.$sortAttributesList=this.sortMenu.$container.children(".sort-attributes"),this.$sortDirectionsList=this.sortMenu.$container.children(".sort-directions"),this.sortMenu.on("optionselect",p.proxy(this,"_handleSortChange"))),this.initialized=!0,this.afterInit(),this.selectDefaultSource(),this.updateElements()}},afterInit:function(){this.onAfterInit()},getSourceContainer:function(){return this.$sidebar.find("nav>ul")},get $sources(){if(this.sourceSelect)return this.sourceSelect.$items},initSources:function(){var t=this._getSourcesInList(this.getSourceContainer());return 0!==t.length&&(this.sourceSelect||(this.sourceSelect=new Garnish.Select(this.$sidebar.find("nav"),{multi:!1,allowEmpty:!1,vertical:!0,onSelectionChange:p.proxy(this,"_handleSourceSelectionChange")})),this.sourcesByKey={},this._initSources(t),!0)},selectDefaultSource:function(){var t,e=this.getDefaultSourceKey();e&&(t=this.getSourceByKey(e),-1===this.$visibleSources.index(t)&&(t=null)),e&&t||(t=this.$visibleSources.first()),t.length&&this.selectSource(t)},refreshSources:function(){this.sourceSelect.removeAllItems();var t={context:this.settings.context,elementType:this.elementType};this.setIndexBusy(),Craft.postActionRequest(this.settings.refreshSourcesAction,t,p.proxy(function(t,e){this.setIndexAvailable(),"success"===e?(this.getSourceContainer().replaceWith(t.html),this.initSources(),this.selectDefaultSource()):Craft.cp.displayError(Craft.t("app","An unknown error occurred."))},this))},updateFixedToolbar:function(t){this.updateFixedToolbar._scrollTop=Garnish.$scrollContainer.scrollTop(),992<Garnish.$win.width()&&17<=this.updateFixedToolbar._scrollTop?((this.updateFixedToolbar._makingFixed=!this.$toolbar.hasClass("fixed"))&&(this.$elements.css("padding-top",this.$toolbar.outerHeight()+21),this.$toolbar.addClass("fixed")),(this.updateFixedToolbar._makingFixed||"resize"===t.type)&&this.$toolbar.css({top:Garnish.$scrollContainer.offset().top,width:this.$main.width()})):this.$toolbar.hasClass("fixed")&&(this.$toolbar.removeClass("fixed"),this.$toolbar.css("width",""),this.$elements.css("padding-top",""),this.$toolbar.css("top","0"))},initSource:function(t){this.sourceSelect.addItems(t),this.initSourceToggle(t),(this.sourcesByKey[t.data("key")]=t).data("hasNestedSources")&&-1!==this.instanceState.expandedSources.indexOf(t.data("key"))&&this._expandSource(t)},initSourceToggle:function(t){var e=this._getSourceToggle(t);e.length?(this.removeListener(e,"click","_handleSourceToggleClick"),this.addListener(e,"click","_handleSourceToggleClick"),t.data("hasNestedSources",!0)):t.data("hasNestedSources",!1)},deinitSource:function(t){this.sourceSelect.removeItems(t),this.deinitSourceToggle(t),delete this.sourcesByKey[t.data("key")]},deinitSourceToggle:function(t){if(t.data("hasNestedSources")){var e=this._getSourceToggle(t);this.removeListener(e,"click")}t.removeData("hasNestedSources")},getDefaultInstanceState:function(){return{selectedSource:null,expandedSources:[]}},getDefaultSourceKey:function(){return this.instanceState.selectedSource},getDefaultExpandedSources:function(){return this.instanceState.expandedSources},startSearching:function(){this.$clearSearchBtn.removeClass("hidden"),this.$scoreSortAttribute||(this.$scoreSortAttribute=p('<li><a data-attr="score">'+Craft.t("app","Score")+"</a></li>"),this.sortMenu.addOptions(this.$scoreSortAttribute.children())),this.$scoreSortAttribute.prependTo(this.$sortAttributesList),this.setSortAttribute("score"),this.getSortAttributeOption("structure").addClass("disabled"),this.searching=!0},stopSearching:function(){this.$clearSearchBtn.addClass("hidden"),this.$scoreSortAttribute.detach(),this.getSortAttributeOption("structure").removeClass("disabled"),this.setStoredSortOptionsForSource(),this.searching=!1},setInstanceState:function(t,e){"object"==typeof t?p.extend(this.instanceState,t):this.instanceState[t]=e,this.storeInstanceState()},storeInstanceState:function(){this.settings.storageKey&&Craft.setLocalStorage(this.settings.storageKey,this.instanceState)},getSourceState:function(t,e,i){return void 0===this.sourceStates[t]&&(this.sourceStates[t]={}),void 0===e?this.sourceStates[t]:void 0!==this.sourceStates[t][e]?this.sourceStates[t][e]:void 0!==i?i:null},getSelectedSourceState:function(t,e){return this.getSourceState(this.instanceState.selectedSource,t,e)},setSelecetedSourceState:function(t,e){var i=this.getSelectedSourceState();"object"==typeof t?p.extend(i,t):i[t]=e,this.sourceStates[this.instanceState.selectedSource]=i,Craft.setLocalStorage(this.sourceStatesStorageKey,this.sourceStates)},storeSortAttributeAndDirection:function(){var t=this.getSelectedSortAttribute();"score"!==t&&this.setSelecetedSourceState({order:t,sort:this.getSelectedSortDirection()})},getViewParams:function(){var t=p.extend({status:this.status,siteId:this.siteId,search:this.searchText,limit:this.settings.batchSize},this.settings.criteria),e={context:this.settings.context,elementType:this.elementType,source:this.instanceState.selectedSource,criteria:t,disabledElementIds:this.settings.disabledElementIds,viewState:p.extend({},this.getSelectedSourceState())};return e.viewState.order=this.getSelectedSortAttribute(),e.viewState.sort=this.getSelectedSortDirection(),"structure"===this.getSelectedSortAttribute()&&(void 0===this.instanceState.collapsedElementIds&&(this.instanceState.collapsedElementIds=[]),e.collapsedElementIds=this.instanceState.collapsedElementIds),e},updateElements:function(){if(this.initialized){this.setIndexBusy(),this.view&&(this.view.destroy(),delete this.view),this.$elements.html("");var i=this.getViewParams();Craft.postActionRequest(this.settings.updateElementsAction,i,p.proxy(function(t,e){this.setIndexAvailable(),"success"===e?this._updateView(i,t):Craft.cp.displayError(Craft.t("app","An unknown error occurred."))},this))}},updateElementsIfSearchTextChanged:function(){this.searchText!==(this.searchText=this.searching?this.$search.val():null)&&this.updateElements()},showActionTriggers:function(){this.showingActionTriggers||(this.$toolbar.css("min-height",this.$toolbar.height()),this._$detachedToolbarItems=this.$toolbarFlexContainer.children().not(this.$selectAllContainer).not(this.$mainSpinner),this._$detachedToolbarItems.detach(),this._$triggers?this._$triggers.insertAfter(this.$selectAllContainer):this._createTriggers(),this.showingActionTriggers=!0)},submitAction:function(t,e){var i=this.view.getSelectedElementIds();if(0!==i.length){for(var s,n=0;n<this.actions.length;n++)if(this.actions[n].type===t){s=this.actions[n];break}if(s&&(!s.confirm||confirm(s.confirm))){var a=this.getViewParams(),r=p.extend(a,e,{elementAction:t,elementIds:i});this.setIndexBusy(),this._autoSelectElements=i,Craft.postActionRequest(this.settings.submitActionsAction,r,p.proxy(function(t,e){this.setIndexAvailable(),"success"===e&&(t.success?(this._updateView(a,t),t.message&&Craft.cp.displayNotice(t.message),this.afterAction(s,r)):Craft.cp.displayError(t.message))},this))}}},afterAction:function(t,e){Craft.cp.runQueue(),this.onAfterAction(t,e)},hideActionTriggers:function(){this.showingActionTriggers&&(this._$detachedToolbarItems.insertBefore(this.$mainSpinner),this._$triggers.detach(),this.$toolbarFlexContainer.children().not(this.$selectAllContainer).removeClass("hidden"),this.$toolbar.css("min-height",""),this.showingActionTriggers=!1)},updateActionTriggers:function(){if(this.actions){var t=this.view.getSelectedElements().length;0!==t?(t===this.view.getEnabledElements().length?(this.$selectAllCheckbox.removeClass("indeterminate"),this.$selectAllCheckbox.addClass("checked"),this.$selectAllBtn.attr("aria-checked","true")):(this.$selectAllCheckbox.addClass("indeterminate"),this.$selectAllCheckbox.removeClass("checked"),this.$selectAllBtn.attr("aria-checked","mixed")),this.showActionTriggers()):(this.$selectAllCheckbox.removeClass("indeterminate checked"),this.$selectAllBtn.attr("aria-checked","false"),this.hideActionTriggers())}},getSelectedElements:function(){return this.view?this.view.getSelectedElements():p()},getSelectedElementIds:function(){return this.view?this.view.getSelectedElementIds():[]},getSortAttributeOption:function(t){return this.$sortAttributesList.find('a[data-attr="'+t+'"]:first')},getSelectedSortAttribute:function(){return this.$sortAttributesList.find("a.sel:first").data("attr")},setSortAttribute:function(t){var e=this.getSortAttributeOption(t);if(e.length){this.$sortAttributesList.find("a.sel").removeClass("sel"),e.addClass("sel");var i=e.text();this.$sortMenuBtn.attr("title",Craft.t("app","Sort by {attribute}",{attribute:i})),this.$sortMenuBtn.text(i),this.setSortDirection("score"===t?"desc":"asc"),"structure"===t?this.$sortDirectionsList.find("a").addClass("disabled"):this.$sortDirectionsList.find("a").removeClass("disabled")}},getSortDirectionOption:function(t){return this.$sortDirectionsList.find("a[data-dir="+t+"]:first")},getSelectedSortDirection:function(){return this.$sortDirectionsList.find("a.sel:first").data("dir")},getSelectedViewMode:function(){return this.getSelectedSourceState("mode")},setSortDirection:function(t){"desc"!==t&&(t="asc"),this.$sortMenuBtn.attr("data-icon",t),this.$sortDirectionsList.find("a.sel").removeClass("sel"),this.getSortDirectionOption(t).addClass("sel")},getSourceByKey:function(t){return void 0===this.sourcesByKey[t]?null:this.sourcesByKey[t]},selectSource:function(t){if(!t||!t.length)return!1;if(this.$source&&this.$source[0]&&this.$source[0]===t[0]&&t.data("key")===this.sourceKey)return!1;if(this.$source=t,this.sourceKey=t.data("key"),this.setInstanceState("selectedSource",this.sourceKey),this.sourceSelect.selectItem(t),Craft.cp.updateSidebarMenuLabel(),this.searching&&(this.searchText=null,this.$search.val(""),this.stopSearching()),Garnish.hasAttr(this.$source,"data-has-structure")?(this.$structureSortAttribute||(this.$structureSortAttribute=p('<li><a data-attr="structure">'+Craft.t("app","Structure")+"</a></li>"),this.sortMenu.addOptions(this.$structureSortAttribute.children())),this.$structureSortAttribute.prependTo(this.$sortAttributesList)):this.$structureSortAttribute&&this.$structureSortAttribute.removeClass("sel").detach(),this.setStoredSortOptionsForSource(),this.$viewModeBtnContainer&&this.$viewModeBtnContainer.remove(),this.viewModeBtns={},this.viewMode=null,this.sourceViewModes=this.getViewModesForSource(),1<this.sourceViewModes.length){this.$viewModeBtnContainer=p('<div class="btngroup"/>').insertBefore(this.$mainSpinner);for(var e=0;e<this.sourceViewModes.length;e++){var i=this.sourceViewModes[e],s=p('<div data-view="'+i.mode+'" role="button" class="btn'+(void 0!==i.className?" "+i.className:"")+'" title="'+i.title+'"'+(void 0!==i.icon?' data-icon="'+i.icon+'"':"")+"/>").appendTo(this.$viewModeBtnContainer);this.viewModeBtns[i.mode]=s,this.addListener(s,"click",{mode:i.mode},function(t){this.selectViewMode(t.data.mode),this.updateElements()})}}var n=this.getSelectedViewMode();return n&&this.doesSourceHaveViewMode(n)||(n=this.viewMode&&this.doesSourceHaveViewMode(this.viewMode)?this.viewMode:this.sourceViewModes[0].mode),this.selectViewMode(n),this.onSelectSource(),!0},selectSourceByKey:function(t){var e=this.getSourceByKey(t);return!!e&&this.selectSource(e)},setStoredSortOptionsForSource:function(){var t=this.getSelectedSourceState("order"),e=this.getSelectedSourceState("sort");t&&e||(t=this.getDefaultSort(),Garnish.isArray(t)&&(e=t[1],t=t[0])),"asc"!==e&&"desc"!==e&&(e="asc"),this.setSortAttribute(t),this.setSortDirection(e)},getDefaultSort:function(){return this.$source&&Garnish.hasAttr(this.$source,"data-default-sort")?this.$source.attr("data-default-sort").split(":"):[this.$sortAttributesList.find("a:first").data("attr"),"asc"]},getViewModesForSource:function(){var t=[{mode:"table",title:Craft.t("app","Display in a table"),icon:"list"}];return this.$source&&Garnish.hasAttr(this.$source,"data-has-thumbs")&&t.push({mode:"thumbs",title:Craft.t("app","Display as thumbnails"),icon:"grid"}),t},doesSourceHaveViewMode:function(t){for(var e=0;e<this.sourceViewModes.length;e++)if(this.sourceViewModes[e].mode===t)return!0;return!1},selectViewMode:function(t,e){e||this.doesSourceHaveViewMode(t)||(t=this.sourceViewModes[0].mode),t!==this.viewMode&&(this.viewMode&&void 0!==this.viewModeBtns[this.viewMode]&&this.viewModeBtns[this.viewMode].removeClass("active"),this.viewMode=t,this.setSelecetedSourceState("mode",this.viewMode),void 0!==this.viewModeBtns[this.viewMode]&&this.viewModeBtns[this.viewMode].addClass("active"))},createView:function(t,e){return new(this.getViewClass(t))(this,this.$elements,e)},getViewClass:function(t){switch(t){case"table":return Craft.TableElementIndexView;case"thumbs":return Craft.ThumbsElementIndexView;default:throw'View mode "'+t+'" not supported.'}},rememberDisabledElementId:function(t){-1===p.inArray(t,this.settings.disabledElementIds)&&this.settings.disabledElementIds.push(t)},forgetDisabledElementId:function(t){var e=p.inArray(t,this.settings.disabledElementIds);-1!==e&&this.settings.disabledElementIds.splice(e,1)},enableElements:function(t){t.removeClass("disabled").parents(".disabled").removeClass("disabled");for(var e=0;e<t.length;e++){var i=p(t[e]).data("id");this.forgetDisabledElementId(i)}this.onEnableElements(t)},disableElements:function(t){t.removeClass("sel").addClass("disabled");for(var e=0;e<t.length;e++){var i=p(t[e]).data("id");this.rememberDisabledElementId(i)}this.onDisableElements(t)},getElementById:function(t){return this.view.getElementById(t)},enableElementsById:function(t){t=p.makeArray(t);for(var e=0;e<t.length;e++){var i=t[e],s=this.getElementById(i);s&&s.length?this.enableElements(s):this.forgetDisabledElementId(i)}},disableElementsById:function(t){t=p.makeArray(t);for(var e=0;e<t.length;e++){var i=t[e],s=this.getElementById(i);s&&s.length?this.disableElements(s):this.rememberDisabledElementId(i)}},selectElementAfterUpdate:function(t){null===this._autoSelectElements&&(this._autoSelectElements=[]),this._autoSelectElements.push(t)},addButton:function(t){this.getButtonContainer().append(t)},isShowingSidebar:function(){return null===this.showingSidebar&&(this.showingSidebar=this.$sidebar.length&&!this.$sidebar.hasClass("hidden")),this.showingSidebar},getButtonContainer:function(){if(this.settings.buttonContainer)return p(this.settings.buttonContainer);var t=p("#button-container");return t.length||(t=p('<div id="button-container"/>').appendTo(Craft.cp.$header)),t},setIndexBusy:function(){this.$mainSpinner.removeClass("invisible"),this.isIndexBusy=!0},setIndexAvailable:function(){this.$mainSpinner.addClass("invisible"),this.isIndexBusy=!1},createCustomizeSourcesModal:function(){var t=new Craft.CustomizeSourcesModal(this,{onHide:function(){t.destroy()}});return t},disable:function(){this.sourceSelect&&this.sourceSelect.disable(),this.view&&this.view.disable(),this.base()},enable:function(){this.sourceSelect&&this.sourceSelect.enable(),this.view&&this.view.enable(),this.base()},onAfterInit:function(){this.settings.onAfterInit(),this.trigger("afterInit")},onSelectSource:function(){this.settings.onSelectSource(this.sourceKey),this.trigger("selectSource",{sourceKey:this.sourceKey})},onSelectSite:function(){this.settings.onSelectSite(this.siteId),this.trigger("selectSite",{siteId:this.siteId})},onUpdateElements:function(){this.settings.onUpdateElements(),this.trigger("updateElements")},onSelectionChange:function(){this.settings.onSelectionChange(),this.trigger("selectionChange")},onEnableElements:function(t){this.settings.onEnableElements(t),this.trigger("enableElements",{elements:t})},onDisableElements:function(t){this.settings.onDisableElements(t),this.trigger("disableElements",{elements:t})},onAfterAction:function(t,e){this.settings.onAfterAction(t,e),this.trigger("afterAction",{action:t,params:e})},_handleSourceSelectionChange:function(){this.sourceSelect.totalSelected?this.selectSource(this.sourceSelect.$selectedItems)&&this.updateElements():this.sourceSelect.selectItem(this.$visibleSources.first())},_handleActionTriggerSubmit:function(t){t.preventDefault();var e=p(t.currentTarget);if(!e.hasClass("disabled")&&!e.data("custom-handler")){var i=e.data("action"),s=Garnish.getPostData(e);this.submitAction(i,s)}},_handleMenuActionTriggerSubmit:function(t){var e=p(t.option);if(!e.hasClass("disabled")&&!e.data("custom-handler")){var i=e.data("action");this.submitAction(i)}},_handleStatusChange:function(t){this.statusMenu.$options.removeClass("sel");var e=p(t.selectedOption).addClass("sel");this.$statusMenuBtn.html(e.html()),this.status=e.data("status"),this.updateElements()},_handleSiteChange:function(t){this.siteMenu.$options.removeClass("sel");var e=p(t.selectedOption).addClass("sel");this.$siteMenuBtn.html(e.html()),this._setSite(e.data("site-id")),this.onSelectSite()},_setSite:function(t){var e,i;this.siteId=t,this.$visibleSources=p();for(var s=!1,n=0;n<this.$sources.length;n++)void 0===(i=this.$sources.eq(n)).data("sites")||-1!==i.data("sites").toString().split(",").indexOf(t.toString())?(i.parent().removeClass("hidden"),this.$visibleSources=this.$visibleSources.add(i),e||(e=i)):(i.parent().addClass("hidden"),this.$source&&this.$source.get(0)==i.get(0)&&(s=!0));s&&this.selectSource(e);var a,r=this.getSourceContainer().children(".heading");for(n=0;n<r.length;n++)0!==(a=r.eq(n)).nextUntil(".heading",":not(.hidden)").length?a.removeClass("hidden"):a.addClass("hidden");this.initialized&&(Craft.setLocalStorage("BaseElementIndex.siteId",t),this.updateElements())},_handleSortChange:function(t){var e=p(t.selectedOption);e.hasClass("disabled")||e.hasClass("sel")||(e.parent().parent().is(this.$sortAttributesList)?this.setSortAttribute(e.data("attr")):this.setSortDirection(e.data("dir")),this.storeSortAttributeAndDirection(),this.updateElements())},_handleSelectionChange:function(){this.updateActionTriggers(),this.onSelectionChange()},_handleSourceToggleClick:function(t){this._toggleSource(p(t.currentTarget).prev("a")),t.stopPropagation()},_getSourcesInList:function(t){return t.children("li").children("a")},_getChildSources:function(t){var e=t.siblings("ul");return this._getSourcesInList(e)},_getSourceToggle:function(t){return t.siblings(".toggle")},_initSources:function(t){for(var e=0;e<t.length;e++)this.initSource(p(t[e]))},_deinitSources:function(t){for(var e=0;e<t.length;e++)this.deinitSource(p(t[e]))},_toggleSource:function(t){t.parent("li").hasClass("expanded")?this._collapseSource(t):this._expandSource(t)},_expandSource:function(t){t.parent("li").addClass("expanded");var e=this._getChildSources(t);this._initSources(e);var i=t.data("key");-1===this.instanceState.expandedSources.indexOf(i)&&(this.instanceState.expandedSources.push(i),this.storeInstanceState())},_collapseSource:function(t){t.parent("li").removeClass("expanded");var e=this._getChildSources(t);this._deinitSources(e);var i=this.instanceState.expandedSources.indexOf(t.data("key"));-1!==i&&(this.instanceState.expandedSources.splice(i,1),this.storeInstanceState())},_updateView:function(t,e){this.actions&&(this.hideActionTriggers(),this.actions=this.actionsHeadHtml=this.actionsFootHtml=this._$triggers=null),this.$selectAllContainer&&this.$selectAllContainer.detach(),e.actions&&e.actions.length&&(this.actions=e.actions,this.actionsHeadHtml=e.actionsHeadHtml,this.actionsFootHtml=e.actionsFootHtml,this.$selectAllContainer?(this.$selectAllCheckbox.removeClass("indeterminate checked"),this.$selectAllBtn.attr("aria-checked","false")):(this.$selectAllContainer=p('<div class="selectallcontainer"/>'),this.$selectAllBtn=p('<div class="btn"/>').appendTo(this.$selectAllContainer),this.$selectAllCheckbox=p('<div class="checkbox"/>').appendTo(this.$selectAllBtn),this.$selectAllBtn.attr({role:"checkbox",tabindex:"0","aria-checked":"false"}),this.addListener(this.$selectAllBtn,"click",function(){0===this.view.getSelectedElements().length?this.view.selectAllElements():this.view.deselectAllElements()}),this.addListener(this.$selectAllBtn,"keydown",function(t){t.keyCode===Garnish.SPACE_KEY&&(t.preventDefault(),p(t.currentTarget).trigger("click"))})),this.$selectAllContainer.prependTo(this.$toolbarFlexContainer)),this.$elements.html(e.html),Craft.appendHeadHtml(e.headHtml),Craft.appendFootHtml(e.footHtml);var i=this.actions||this.settings.selectable;if(this.view=this.createView(this.getSelectedViewMode(),{context:this.settings.context,batchSize:this.settings.batchSize,params:t,selectable:i,multiSelect:this.actions||this.settings.multiSelect,checkboxMode:!!this.actions,onSelectionChange:p.proxy(this,"_handleSelectionChange")}),this._autoSelectElements){if(i)for(var s=0;s<this._autoSelectElements.length;s++)this.view.selectElementById(this._autoSelectElements[s]);this._autoSelectElements=null}this.onUpdateElements()},_createTriggers:function(){var t,e,i=[],s=[],n=[];for(t=0;t<this.actions.length;t++){var a=this.actions[t];if(a.trigger){var r=p('<form id="'+Craft.formatInputId(a.type)+'-actiontrigger"/>').data("action",a.type).append(a.trigger);this.addListener(r,"submit","_handleActionTriggerSubmit"),i.push(r)}else a.destructive?n.push(a):s.push(a)}if(s.length||n.length){var o=p("<form/>");e=p('<div class="btn menubtn" data-icon="settings" title="'+Craft.t("app","Actions")+'"/>').appendTo(o);var l=p('<ul class="menu"/>').appendTo(o),h=this._createMenuTriggerList(s,!1),d=this._createMenuTriggerList(n,!0);h&&h.appendTo(l),h&&d&&p("<hr/>").appendTo(l),d&&d.appendTo(l),i.push(o)}for(this._$triggers=p(),t=0;t<i.length;t++){var c=p("<div/>").append(i[t]);this._$triggers=this._$triggers.add(c)}this._$triggers.insertAfter(this.$selectAllContainer),Craft.appendHeadHtml(this.actionsHeadHtml),Craft.appendFootHtml(this.actionsFootHtml),Craft.initUiElements(this._$triggers),e&&e.data("menubtn").on("optionSelect",p.proxy(this,"_handleMenuActionTriggerSubmit"))},_createMenuTriggerList:function(t,e){if(t&&t.length){for(var i=p("<ul/>"),s=0;s<t.length;s++){var n=t[s].type;p("<li/>").append(p("<a/>",{id:Craft.formatInputId(n)+"-actiontrigger",class:e?"error":null,"data-action":n,text:t[s].name})).appendTo(i)}return i}}},{defaults:{context:"index",modal:null,storageKey:null,criteria:null,batchSize:50,disabledElementIds:[],selectable:!1,multiSelect:!1,buttonContainer:null,hideSidebar:!1,refreshSourcesAction:"element-indexes/get-source-tree-html",updateElementsAction:"element-indexes/get-elements",submitActionsAction:"element-indexes/perform-action",toolbarFixed:null,onAfterInit:p.noop,onSelectSource:p.noop,onSelectSite:p.noop,onUpdateElements:p.noop,onSelectionChange:p.noop,onEnableElements:p.noop,onDisableElements:p.noop,onAfterAction:p.noop}}),Craft.BaseElementIndexView=Garnish.Base.extend({$container:null,$loadingMoreSpinner:null,$elementContainer:null,$scroller:null,elementIndex:null,thumbLoader:null,elementSelect:null,loadingMore:!1,_totalVisible:null,_morePending:null,_handleEnableElements:null,_handleDisableElements:null,init:function(t,e,i){this.elementIndex=t,this.$container=p(e),this.setSettings(i,Craft.BaseElementIndexView.defaults),this.$loadingMoreSpinner=p('<div class="centeralign hidden"><div class="spinner loadingmore"></div></div>').insertAfter(this.$container),this.$elementContainer=this.getElementContainer();var s=this.$elementContainer.children();this.setTotalVisible(s.length),this.setMorePending(this.settings.batchSize&&s.length==this.settings.batchSize),this.thumbLoader=new Craft.ElementThumbLoader,this.thumbLoader.load(s),this.settings.selectable&&(this.elementSelect=new Garnish.Select(this.$elementContainer,s.filter(":not(.disabled)"),{multi:this.settings.multiSelect,vertical:this.isVerticalList(),handle:"index"===this.settings.context?".checkbox, .element:first":null,filter:":not(a):not(.toggle)",checkboxMode:this.settings.checkboxMode,onSelectionChange:p.proxy(this,"onSelectionChange")}),this._handleEnableElements=p.proxy(function(t){this.elementSelect.addItems(t.elements)},this),this._handleDisableElements=p.proxy(function(t){this.elementSelect.removeItems(t.elements)},this),this.elementIndex.on("enableElements",this._handleEnableElements),this.elementIndex.on("disableElements",this._handleDisableElements)),"index"===this.settings.context&&(this._handleElementEditing=p.proxy(function(t){var e=p(t.target);if("A"!==e.prop("nodeName")){var i;if(e.hasClass("element"))i=e;else if(!(i=e.closest(".element")).length)return;Garnish.hasAttr(i,"data-editable")&&this.createElementEditor(i)}},this),this.addListener(this.$elementContainer,"dblclick",this._handleElementEditing),p.isTouchCapable()&&this.addListener(this.$elementContainer,"taphold",this._handleElementEditing)),this.afterInit(),this.settings.batchSize&&("index"===this.settings.context?this.$scroller=Garnish.$scrollContainer:this.$scroller=this.elementIndex.$main,this.$scroller.scrollTop(0),this.addListener(this.$scroller,"scroll","maybeLoadMore"),this.maybeLoadMore())},getElementContainer:function(){throw"Classes that extend Craft.BaseElementIndexView must supply a getElementContainer() method."},afterInit:function(){},getAllElements:function(){return this.$elementContainer.children()},getEnabledElements:function(){return this.$elementContainer.children(":not(.disabled)")},getElementById:function(t){var e=this.$elementContainer.children('[data-id="'+t+'"]:first');return e.length?e:null},getSelectedElements:function(){if(!this.elementSelect)throw"This view is not selectable.";return this.elementSelect.$selectedItems},getSelectedElementIds:function(){var t=this.getSelectedElements(),e=[];if(t)for(var i=0;i<t.length;i++)e.push(t.eq(i).data("id"));return e},selectElement:function(t){if(!this.elementSelect)throw"This view is not selectable.";return this.elementSelect.selectItem(t,!0),!0},selectElementById:function(t){if(!this.elementSelect)throw"This view is not selectable.";var e=this.getElementById(t);return!!e&&(this.elementSelect.selectItem(e,!0),!0)},selectAllElements:function(){this.elementSelect.selectAll()},deselectAllElements:function(){this.elementSelect.deselectAll()},isVerticalList:function(){return!1},getTotalVisible:function(){return this._totalVisible},setTotalVisible:function(t){this._totalVisible=t},getMorePending:function(){return this._morePending},setMorePending:function(t){this._morePending=t},maybeLoadMore:function(){this.canLoadMore()&&this.loadMore()},canLoadMore:function(){if(!this.getMorePending()||!this.settings.batchSize)return!1;if(this.$scroller[0]!==Garnish.$win[0])return this.$scroller.prop("scrollHeight")-this.$scroller.scrollTop()<=this.$scroller.outerHeight()+15;var t=Garnish.$win.innerHeight(),e=Garnish.$win.scrollTop();return this.$container.offset().top+this.$container.height()<=t+e},loadMore:function(){if(this.getMorePending()&&!this.loadingMore&&this.settings.batchSize){this.loadingMore=!0,this.$loadingMoreSpinner.removeClass("hidden"),this.removeListener(this.$scroller,"scroll");var t=this.getLoadMoreParams();Craft.postActionRequest(this.settings.loadMoreElementsAction,t,p.proxy(function(t,e){if(this.loadingMore=!1,this.$loadingMoreSpinner.addClass("hidden"),"success"===e){var i=p(t.html);this.appendElements(i),Craft.appendHeadHtml(t.headHtml),Craft.appendFootHtml(t.footHtml),this.elementSelect&&(this.elementSelect.addItems(i.filter(":not(.disabled)")),this.elementIndex.updateActionTriggers()),this.setTotalVisible(this.getTotalVisible()+i.length),this.setMorePending(i.length==this.settings.batchSize),this.addListener(this.$scroller,"scroll","maybeLoadMore"),this.maybeLoadMore()}},this))}},getLoadMoreParams:function(){var t=p.extend(!0,{},this.settings.params);return t.criteria.offset=this.getTotalVisible(),t},appendElements:function(t){t.appendTo(this.$elementContainer),this.thumbLoader.load(t),this.onAppendElements(t)},onAppendElements:function(t){this.settings.onAppendElements(t),this.trigger("appendElements",{newElements:t})},onSelectionChange:function(){this.settings.onSelectionChange(),this.trigger("selectionChange")},createElementEditor:function(t){Craft.createElementEditor(this.elementIndex.elementType,t,{elementIndex:this.elementIndex})},disable:function(){this.elementSelect&&this.elementSelect.disable()},enable:function(){this.elementSelect&&this.elementSelect.enable()},destroy:function(){this.$loadingMoreSpinner.remove(),this.thumbLoader.destroy(),delete this.thumbLoader,this.elementSelect&&(this.elementIndex.off("enableElements",this._handleEnableElements),this.elementIndex.off("disableElements",this._handleDisableElements),this.elementSelect.destroy(),delete this.elementSelect),this.base()}},{defaults:{context:"index",batchSize:null,params:null,selectable:!1,multiSelect:!1,checkboxMode:!1,loadMoreElementsAction:"element-indexes/get-more-elements",onAppendElements:p.noop,onSelectionChange:p.noop}}),Craft.BaseElementSelectInput=Garnish.Base.extend({thumbLoader:null,elementSelect:null,elementSort:null,modal:null,elementEditor:null,$container:null,$elementsContainer:null,$elements:null,$addElementBtn:null,_initialized:!1,init:function(t){if(!p.isPlainObject(t)){for(var e={},i=["id","name","elementType","sources","criteria","sourceElementId","limit","modalStorageKey","fieldId"],s=0;s<i.length&&void 0!==arguments[s];s++)e[i[s]]=arguments[s];t=e}this.setSettings(t,Craft.BaseElementSelectInput.defaults),this.settings.modalStorageKey&&(this.modalStorageKey="BaseElementSelectInput."+this.settings.modalStorageKey),1==this.settings.limit&&(this.settings.sortable=!1),this.$container=this.getContainer(),this.$container.data("elementSelect",this),this.$elementsContainer=this.getElementsContainer(),this.$addElementBtn=this.getAddElementsBtn(),this.$addElementBtn&&1==this.settings.limit&&this.$addElementBtn.css("position","absolute").css("top",0).css(Craft.left,0),this.thumbLoader=new Craft.ElementThumbLoader,this.initElementSelect(),this.initElementSort(),this.resetElements(),this.$addElementBtn&&this.addListener(this.$addElementBtn,"activate","showModal"),this._initialized=!0},get totalSelected(){return this.$elements.length},getContainer:function(){return p("#"+this.settings.id)},getElementsContainer:function(){return this.$container.children(".elements")},getElements:function(){return this.$elementsContainer.children()},getAddElementsBtn:function(){return this.$container.children(".btn.add")},initElementSelect:function(){this.settings.selectable&&(this.elementSelect=new Garnish.Select({multi:this.settings.sortable,filter:":not(.delete)"}))},initElementSort:function(){this.settings.sortable&&(this.elementSort=new Garnish.DragSort({container:this.$elementsContainer,filter:this.settings.selectable?p.proxy(function(){return this.elementSort.$targetItem.hasClass("sel")?this.elementSelect.getSelectedItems():this.elementSort.$targetItem},this):null,ignoreHandleSelector:".delete",axis:this.getElementSortAxis(),collapseDraggees:!0,magnetStrength:4,helperLagBase:1.5,onSortChange:this.settings.selectable?p.proxy(function(){this.elementSelect.resetItemOrder()},this):null}))},getElementSortAxis:function(){return"list"===this.settings.viewMode?"y":null},canAddMoreElements:function(){return!this.settings.limit||this.$elements.length<this.settings.limit},updateAddElementsBtn:function(){this.canAddMoreElements()?this.enableAddElementsBtn():this.disableAddElementsBtn()},disableAddElementsBtn:function(){this.$addElementBtn&&!this.$addElementBtn.hasClass("disabled")&&(this.$addElementBtn.addClass("disabled"),1==this.settings.limit&&(this._initialized?this.$addElementBtn.velocity("fadeOut",Craft.BaseElementSelectInput.ADD_FX_DURATION):this.$addElementBtn.hide()))},enableAddElementsBtn:function(){this.$addElementBtn&&this.$addElementBtn.hasClass("disabled")&&(this.$addElementBtn.removeClass("disabled"),1==this.settings.limit&&(this._initialized?this.$addElementBtn.velocity("fadeIn",Craft.BaseElementSelectInput.REMOVE_FX_DURATION):this.$addElementBtn.show()))},resetElements:function(){null!==this.$elements?this.removeElements(this.$elements):this.$elements=p(),this.addElements(this.getElements())},addElements:function(t){this.thumbLoader.load(t),this.settings.selectable&&this.elementSelect.addItems(t),this.settings.sortable&&this.elementSort.addItems(t),this.settings.editable&&(this._handleShowElementEditor=p.proxy(function(t){var e=p(t.currentTarget);!Garnish.hasAttr(e,"data-editable")||e.hasClass("disabled")||e.hasClass("loading")||(this.elementEditor=this.createElementEditor(e))},this),this.addListener(t,"dblclick",this._handleShowElementEditor),p.isTouchCapable()&&this.addListener(t,"taphold",this._handleShowElementEditor)),t.find(".delete").on("click",p.proxy(function(t){this.removeElement(p(t.currentTarget).closest(".element"))},this)),this.$elements=this.$elements.add(t),this.updateAddElementsBtn()},createElementEditor:function(t){return Craft.createElementEditor(this.settings.elementType,t)},removeElements:function(t){if(this.settings.selectable&&this.elementSelect.removeItems(t),this.modal){for(var e=[],i=0;i<t.length;i++){var s=t.eq(i).data("id");s&&e.push(s)}e.length&&this.modal.elementIndex.enableElementsById(e)}t.children("input").prop("disabled",!0),this.$elements=this.$elements.not(t),this.updateAddElementsBtn(),this.onRemoveElements()},removeElement:function(t){this.removeElements(t),this.animateElementAway(t,function(){t.remove()})},animateElementAway:function(t,e){t.css("z-index",0);var i={opacity:-1};i["margin-"+Craft.left]=-(t.outerWidth()+parseInt(t.css("margin-"+Craft.right))),"list"!==this.settings.viewMode&&0!==this.$elements.length||(i["margin-bottom"]=-(t.outerHeight()+parseInt(t.css("margin-bottom")))),t.velocity(i,Craft.BaseElementSelectInput.REMOVE_FX_DURATION,e)},showModal:function(){this.canAddMoreElements()&&(this.modal?this.modal.show():this.modal=this.createModal())},createModal:function(){return Craft.createElementSelectorModal(this.settings.elementType,this.getModalSettings())},getModalSettings:function(){return p.extend({closeOtherModals:!1,storageKey:this.modalStorageKey,sources:this.settings.sources,criteria:this.settings.criteria,multiSelect:1!=this.settings.limit,showSiteMenu:this.settings.showSiteMenu,disabledElementIds:this.getDisabledElementIds(),onSelect:p.proxy(this,"onModalSelect")},this.settings.modalSettings)},getSelectedElementIds:function(){for(var t=[],e=0;e<this.$elements.length;e++)t.push(this.$elements.eq(e).data("id"));return t},getDisabledElementIds:function(){var t=this.getSelectedElementIds();return this.settings.sourceElementId&&t.push(this.settings.sourceElementId),t},onModalSelect:function(t){if(this.settings.limit){var e=this.settings.limit-this.$elements.length;t.length>e&&(t=t.slice(0,e))}this.selectElements(t),this.updateDisabledElementsInModal()},selectElements:function(t){for(var e=0;e<t.length;e++){var i=t[e],s=this.createNewElement(i);this.appendElement(s),this.addElements(s),this.animateElementIntoPlace(i.$element,s)}this.onSelectElements(t)},createNewElement:function(t){var e=t.$element.clone();return Craft.setElementSize(e,"large"===this.settings.viewMode?"large":"small"),e.addClass("removable"),e.prepend('<input type="hidden" name="'+this.settings.name+'[]" value="'+t.id+'"><a class="delete icon" title="'+Craft.t("app","Remove")+'"></a>'),e},appendElement:function(t){t.appendTo(this.$elementsContainer)},animateElementIntoPlace:function(t,e){var i=t.offset(),s=e.offset(),n=e.clone().appendTo(Garnish.$bod);e.css("visibility","hidden"),n.css({position:"absolute",zIndex:1e4,top:i.top,left:i.left});var a={top:s.top,left:s.left};n.velocity(a,Craft.BaseElementSelectInput.ADD_FX_DURATION,function(){n.remove(),e.css("visibility","visible")})},updateDisabledElementsInModal:function(){this.modal.elementIndex&&this.modal.elementIndex.disableElementsById(this.getDisabledElementIds())},getElementById:function(t){for(var e=0;e<this.$elements.length;e++){var i=this.$elements.eq(e);if(i.data("id")==t)return i}},onSelectElements:function(t){this.trigger("selectElements",{elements:t}),this.settings.onSelectElements(t)},onRemoveElements:function(){this.trigger("removeElements"),this.settings.onRemoveElements()}},{ADD_FX_DURATION:200,REMOVE_FX_DURATION:200,defaults:{id:null,name:null,fieldId:null,elementType:null,sources:null,criteria:{},sourceElementId:null,viewMode:"list",limit:null,showSiteMenu:!1,modalStorageKey:null,modalSettings:{},onSelectElements:p.noop,onRemoveElements:p.noop,sortable:!0,selectable:!0,editable:!0,editorSettings:{}}}),Craft.BaseElementSelectorModal=Garnish.Modal.extend({elementType:null,elementIndex:null,$body:null,$selectBtn:null,$sidebar:null,$sources:null,$sourceToggles:null,$main:null,$search:null,$elements:null,$tbody:null,$primaryButtons:null,$secondaryButtons:null,$cancelBtn:null,$footerSpinner:null,init:function(t,e){this.elementType=t,this.setSettings(e,Craft.BaseElementSelectorModal.defaults);var i=p('<div class="modal elementselectormodal"></div>').appendTo(Garnish.$bod),s=p('<div class="body"><div class="spinner big"></div></div>').appendTo(i),n=p('<div class="footer"/>').appendTo(i);this.base(i,this.settings),this.$footerSpinner=p('<div class="spinner hidden"/>').appendTo(n),this.$primaryButtons=p('<div class="buttons right"/>').appendTo(n),this.$secondaryButtons=p('<div class="buttons left secondary-buttons"/>').appendTo(n),this.$cancelBtn=p('<div class="btn">'+Craft.t("app","Cancel")+"</div>").appendTo(this.$primaryButtons),this.$selectBtn=p('<div class="btn disabled submit">'+Craft.t("app","Select")+"</div>").appendTo(this.$primaryButtons),this.$body=s,this.addListener(this.$cancelBtn,"activate","cancel"),this.addListener(this.$selectBtn,"activate","selectElements")},onFadeIn:function(){this.elementIndex?Garnish.isMobileBrowser(!0)||this.elementIndex.$search.trigger("focus"):this._createElementIndex(),this.base()},onSelectionChange:function(){this.updateSelectBtnState()},updateSelectBtnState:function(){this.$selectBtn&&(this.elementIndex.getSelectedElements().length?this.enableSelectBtn():this.disableSelectBtn())},enableSelectBtn:function(){this.$selectBtn.removeClass("disabled")},disableSelectBtn:function(){this.$selectBtn.addClass("disabled")},enableCancelBtn:function(){this.$cancelBtn.removeClass("disabled")},disableCancelBtn:function(){this.$cancelBtn.addClass("disabled")},showFooterSpinner:function(){this.$footerSpinner.removeClass("hidden")},hideFooterSpinner:function(){this.$footerSpinner.addClass("hidden")},cancel:function(){this.$cancelBtn.hasClass("disabled")||this.hide()},selectElements:function(){if(this.elementIndex&&this.elementIndex.getSelectedElements().length){this.elementIndex.view.elementSelect.clearMouseUpTimeout();var t=this.elementIndex.getSelectedElements(),e=this.getElementInfo(t);this.onSelect(e),this.settings.disableElementsOnSelect&&this.elementIndex.disableElements(this.elementIndex.getSelectedElements()),this.settings.hideOnSelect&&this.hide()}},getElementInfo:function(t){for(var e=[],i=0;i<t.length;i++){var s=p(t[i]),n=Craft.getElementInfo(s);e.push(n)}return e},show:function(){this.updateSelectBtnState(),this.base()},onSelect:function(t){this.settings.onSelect(t)},disable:function(){this.elementIndex&&this.elementIndex.disable(),this.base()},enable:function(){this.elementIndex&&this.elementIndex.enable(),this.base()},_createElementIndex:function(){var t={context:"modal",elementType:this.elementType,sources:this.settings.sources};null!==this.settings.showSiteMenu&&"auto"!==this.settings.showSiteMenu&&(t.showSiteMenu=this.settings.showSiteMenu?"1":"0"),Craft.postActionRequest("elements/get-modal-body",t,p.proxy(function(t,e){"success"===e&&(this.$body.html(t.html),this.$body.has(".sidebar:not(.hidden)").length&&this.$body.addClass("has-sidebar"),this.elementIndex=Craft.createElementIndex(this.elementType,this.$body,{context:"modal",modal:this,storageKey:this.settings.storageKey,criteria:this.settings.criteria,disabledElementIds:this.settings.disabledElementIds,selectable:!0,multiSelect:this.settings.multiSelect,buttonContainer:this.$secondaryButtons,onSelectionChange:p.proxy(this,"onSelectionChange"),hideSidebar:this.settings.hideSidebar}),this.addListener(this.elementIndex.$elements,"doubletap",function(t,e){e.firstTap.target===e.secondTap.target&&this.selectElements()}))},this))}},{defaults:{resizable:!0,storageKey:null,sources:null,criteria:null,multiSelect:!1,showSiteMenu:null,disabledElementIds:[],disableElementsOnSelect:!1,hideOnSelect:!0,onCancel:p.noop,onSelect:p.noop,hideIndexSidebar:!1}}),Craft.BaseInputGenerator=Garnish.Base.extend({$source:null,$target:null,$form:null,settings:null,listening:null,timeout:null,init:function(t,e,i){this.$source=p(t),this.$target=p(e),this.$form=this.$source.closest("form"),this.setSettings(i),this.startListening()},setNewSource:function(t){var e=this.listening;this.stopListening(),this.$source=p(t),e&&this.startListening()},startListening:function(){this.listening||(this.listening=!0,this.addListener(this.$source,"textchange","onSourceTextChange"),this.addListener(this.$target,"textchange","onTargetTextChange"),this.addListener(this.$form,"submit","onFormSubmit"))},stopListening:function(){this.listening&&(this.listening=!1,this.timeout&&clearTimeout(this.timeout),this.removeAllListeners(this.$source),this.removeAllListeners(this.$target),this.removeAllListeners(this.$form))},onSourceTextChange:function(){this.timeout&&clearTimeout(this.timeout),this.timeout=setTimeout(p.proxy(this,"updateTarget"),250)},onTargetTextChange:function(){this.$target.get(0)===document.activeElement&&this.stopListening()},onFormSubmit:function(){this.timeout&&clearTimeout(this.timeout),this.updateTarget()},updateTarget:function(){var t=this.$source.val(),e=this.generateTargetValue(t);this.$target.val(e),this.$target.trigger("change"),this.$target.is(":focus")&&Craft.selectFullValue(this.$target)},generateTargetValue:function(t){return t}}),Craft.AdminTable=Garnish.Base.extend({settings:null,totalItems:null,sorter:null,$noItems:null,$table:null,$tbody:null,$deleteBtns:null,init:function(t){this.setSettings(t,Craft.AdminTable.defaults),this.settings.allowDeleteAll||(this.settings.minItems=1),this.$noItems=p(this.settings.noItemsSelector),this.$table=p(this.settings.tableSelector),this.$tbody=this.$table.children("tbody"),this.totalItems=this.$tbody.children().length,this.settings.sortable&&(this.sorter=new Craft.DataTableSorter(this.$table,{onSortChange:p.proxy(this,"reorderItems")})),this.$deleteBtns=this.$table.find(".delete:not(.disabled)"),this.addListener(this.$deleteBtns,"click","handleDeleteBtnClick"),this.updateUI()},addRow:function(t){if(!(this.settings.maxItems&&this.totalItems>=this.settings.maxItems)){var e=p(t).appendTo(this.$tbody),i=e.find(".delete");this.settings.sortable&&this.sorter.addItems(e),this.$deleteBtns=this.$deleteBtns.add(i),this.addListener(i,"click","handleDeleteBtnClick"),this.totalItems++,this.updateUI()}},reorderItems:function(){if(this.settings.sortable){for(var i=[],t=0;t<this.sorter.$items.length;t++){var e=p(this.sorter.$items[t]).attr(this.settings.idAttribute);i.push(e)}var s={ids:JSON.stringify(i)};Craft.postActionRequest(this.settings.reorderAction,s,p.proxy(function(t,e){"success"===e&&(t.success?(this.onReorderItems(i),Craft.cp.displayNotice(Craft.t("app",this.settings.reorderSuccessMessage))):Craft.cp.displayError(Craft.t("app",this.settings.reorderFailMessage)))},this))}},handleDeleteBtnClick:function(t){if(!(this.settings.minItems&&this.totalItems<=this.settings.minItems)){var e=p(t.target).closest("tr");this.confirmDeleteItem(e)&&this.deleteItem(e)}},confirmDeleteItem:function(t){var e=this.getItemName(t);return confirm(Craft.t("app",this.settings.confirmDeleteMessage,{name:e}))},deleteItem:function(i){var t={id:this.getItemId(i)};Craft.postActionRequest(this.settings.deleteAction,t,p.proxy(function(t,e){"success"===e&&this.handleDeleteItemResponse(t,i)},this))},handleDeleteItemResponse:function(t,e){var i=this.getItemId(e),s=this.getItemName(e);t.success?(this.sorter&&this.sorter.removeItems(e),e.remove(),this.totalItems--,this.updateUI(),this.onDeleteItem(i),Craft.cp.displayNotice(Craft.t("app",this.settings.deleteSuccessMessage,{name:Craft.escapeHtml(s)}))):Craft.cp.displayError(Craft.t("app",this.settings.deleteFailMessage,{name:Craft.escapeHtml(s)}))},onReorderItems:function(t){this.settings.onReorderItems(t)},onDeleteItem:function(t){this.settings.onDeleteItem(t)},getItemId:function(t){return t.attr(this.settings.idAttribute)},getItemName:function(t){return t.attr(this.settings.nameAttribute)},updateUI:function(){if(0===this.totalItems?(this.$table.hide(),this.$noItems.removeClass("hidden")):(this.$table.show(),this.$noItems.addClass("hidden")),this.settings.sortable){var t=this.$table.find(".move");1===this.totalItems?t.addClass("disabled"):t.removeClass("disabled")}this.settings.minItems&&this.totalItems<=this.settings.minItems?this.$deleteBtns.addClass("disabled"):this.$deleteBtns.removeClass("disabled"),this.settings.newItemBtnSelector&&(this.settings.maxItems&&this.totalItems>=this.settings.maxItems?p(this.settings.newItemBtnSelector).addClass("hidden"):p(this.settings.newItemBtnSelector).removeClass("hidden"))}},{defaults:{tableSelector:null,noItemsSelector:null,newItemBtnSelector:null,idAttribute:"data-id",nameAttribute:"data-name",sortable:!1,allowDeleteAll:!0,minItems:0,maxItems:null,reorderAction:null,deleteAction:null,reorderSuccessMessage:Craft.t("app","New order saved."),reorderFailMessage:Craft.t("app","Couldn’t save new order."),confirmDeleteMessage:Craft.t("app","Are you sure you want to delete “{name}”?"),deleteSuccessMessage:Craft.t("app","“{name}” deleted."),deleteFailMessage:Craft.t("app","Couldn’t delete “{name}”."),onReorderItems:p.noop,onDeleteItem:p.noop}}),Craft.AssetEditor=Craft.BaseElementEditor.extend({reloadIndex:!1,updateForm:function(t){if(this.base(t),this.$element.data("id")){var e=this.$fieldsContainer.find("> .meta > .image-preview-container.editable");e.length&&this.addListener(e,"click","showImageEditor")}},showImageEditor:function(){new Craft.AssetImageEditor(this.$element.data("id"),{onSave:function(){this.reloadIndex=!0,this.reloadForm()}.bind(this),allowDegreeFractions:Craft.isImagick})},onHideHud:function(){this.reloadIndex&&this.settings.elementIndex&&this.settings.elementIndex.updateElements(),this.base()}}),Craft.registerElementEditorClass("craft\\elements\\Asset",Craft.AssetEditor),Craft.AssetImageEditor=Garnish.Modal.extend({$body:null,$footer:null,$imageTools:null,$buttons:null,$cancelBtn:null,$replaceBtn:null,$saveBtn:null,$editorContainer:null,$straighten:null,$croppingCanvas:null,$spinnerCanvas:null,canvas:null,image:null,viewport:null,focalPoint:null,grid:null,croppingCanvas:null,clipper:null,croppingRectangle:null,cropperHandles:null,cropperGrid:null,croppingShade:null,imageStraightenAngle:0,viewportRotation:0,originalWidth:0,originalHeight:0,imageVerticeCoords:null,zoomRatio:1,animationInProgress:!1,currentView:"",assetId:null,cacheBust:null,draggingCropper:!1,scalingCropper:!1,draggingFocal:!1,previousMouseX:0,previousMouseY:0,shiftKeyHeld:!1,editorHeight:0,editorWidth:0,cropperState:!1,scaleFactor:1,flipData:{},focalPointState:!1,croppingConstraint:!1,spinnerInterval:null,maxImageSize:null,lastLoadedDimensions:null,imageIsLoading:!1,renderImage:null,renderCropper:null,init:function(t,e){this.cacheBust=Date.now(),this.setSettings(e,Craft.AssetImageEditor.defaults),this.assetId=t,this.flipData={x:0,y:0},this.$container=p('<form class="modal fitted imageeditor"></form>').appendTo(Garnish.$bod),this.$body=p('<div class="body"></div>').appendTo(this.$container),this.$footer=p('<div class="footer"/>').appendTo(this.$container),this.base(this.$container,this.settings),this.$buttons=p('<div class="buttons right"/>').appendTo(this.$footer),this.$cancelBtn=p('<div class="btn cancel">'+Craft.t("app","Cancel")+"</div>").appendTo(this.$buttons),this.$replaceBtn=p('<div class="btn submit save replace">'+Craft.t("app","Save")+"</div>").appendTo(this.$buttons),this.settings.allowSavingAsNew&&(this.$saveBtn=p('<div class="btn submit save copy">'+Craft.t("app","Save as a new asset")+"</div>").appendTo(this.$buttons),this.addListener(this.$saveBtn,"activate",this.saveImage.bind(this))),this.addListener(this.$replaceBtn,"activate",this.saveImage.bind(this)),this.addListener(this.$cancelBtn,"activate",p.proxy(this,"hide")),this.removeListener(this.$shade,"click"),this.maxImageSize=this.getMaxImageSize(),Craft.postActionRequest("assets/image-editor",{assetId:t},p.proxy(this,"loadEditor"))},getMaxImageSize:function(){var t=Garnish.$doc.get(0).documentElement.clientWidth,e=Garnish.$doc.get(0).documentElement.clientHeight;return Math.max(e,t)*(1<window.devicePixelRatio?2:1)},loadEditor:function(r){r.html||alert(Craft.t("Could not load the image editor.","app")),this.$body.html(r.html),this.$tabs=p(".tabs li",this.$body),this.$viewsContainer=p(".views",this.$body),this.$views=p("> div",this.$viewsContainer),this.$imageTools=p(".image-container .image-tools",this.$body),this.$editorContainer=p(".image-container .image",this.$body),this.editorHeight=this.$editorContainer.innerHeight(),this.editorWidth=this.$editorContainer.innerWidth(),this._showSpinner(),this.updateSizeAndPosition(),this.canvas=new fabric.StaticCanvas("image-canvas"),this.$croppingCanvas=p("#cropping-canvas",this.$editorContainer),this.$croppingCanvas.width(this.editorWidth),this.$croppingCanvas.height(this.editorHeight),this.canvas.enableRetinaScaling=!0,this.renderImage=function(){Garnish.requestAnimationFrame(this.canvas.renderAll.bind(this.canvas))}.bind(this);var t=Craft.getActionUrl("assets/edit-image",{assetId:this.assetId,size:this.maxImageSize,cacheBust:this.cacheBust});fabric.Image.fromURL(t,p.proxy(function(t){this.image=t,this.image.set({originX:"center",originY:"center",left:this.editorWidth/2,top:this.editorHeight/2}),this.canvas.add(this.image),this.originalHeight=this.image.getHeight(),this.originalWidth=this.image.getWidth(),this.zoomRatio=1,this.lastLoadedDimensions=this.getScaledImageDimensions(),this._setFittedImageVerticeCoordinates(),this._repositionEditorElements();var e={imageDimensions:this.getScaledImageDimensions(),offsetX:0,offsetY:0},i=!1;if(r.focalPoint){var s=r.focalPoint,n=e.imageDimensions.width*s.x,a=e.imageDimensions.height*s.y;e.offsetX=n-e.imageDimensions.width/2,e.offsetY=a-e.imageDimensions.height/2,i=!0}this.storeFocalPointState(e),i&&this._createFocalPoint(),this._createViewport(),this.storeCropperState(),this._addControlListeners(),this.addListener(this.$croppingCanvas,"mousemove",this._handleMouseMove.bind(this)),this.addListener(this.$croppingCanvas,"mousedown",this._handleMouseDown.bind(this)),this.addListener(this.$croppingCanvas,"mouseup",this._handleMouseUp.bind(this)),this.addListener(this.$croppingCanvas,"mouseout",function(t){this._handleMouseUp(t),this._handleMouseMove(t)}.bind(this)),this._hideSpinner(),this.renderImage(),this.$tabs.first().trigger("click")},this))},_reloadImage:function(){if(!this.imageIsLoading){this.imageIsLoading=!0,this.maxImageSize=this.getMaxImageSize();var t=Craft.getActionUrl("assets/edit-image",{assetId:this.assetId,size:this.maxImageSize,cacheBust:this.cacheBust});this.image.setSrc(t,function(t){this.originalHeight=t.getHeight(),this.originalWidth=t.getWidth(),this.lastLoadedDimensions={width:this.originalHeight,height:this.originalWidth},this.updateSizeAndPosition(),this.renderImage(),this.imageIsLoading=!1}.bind(this))}},updateSizeAndPosition:function(){if(this.$container){var t=window.innerWidth,e=window.innerHeight;this.$container.css({width:t,"min-width":t,left:0,height:e,"min-height":e,top:0}),this.$body.css({height:e-58}),t<e?this.$container.addClass("vertical"):this.$container.removeClass("vertical"),this.$spinnerCanvas&&this.$spinnerCanvas.css({left:this.$spinnerCanvas.parent().width()/2-this.$spinnerCanvas.width()/2+"px",top:this.$spinnerCanvas.parent().height()/2-this.$spinnerCanvas.height()/2+"px"}),this.$editorContainer&&this.image&&this._repositionEditorElements()}},_repositionEditorElements:function(){var t={width:this.editorWidth,height:this.editorHeight};this.editorHeight=this.$editorContainer.innerHeight(),this.editorWidth=this.$editorContainer.innerWidth(),this.canvas.setDimensions({width:this.editorWidth,height:this.editorHeight});var e=this.getScaledImageDimensions();if("crop"===this.currentView){this.zoomRatio=this.getZoomToFitRatio(this.getScaledImageDimensions());var i=this._getBoundingRectangle(this.imageVerticeCoords);this._setFittedImageVerticeCoordinates(),this._repositionCropper(i)}else this.zoomRatio=this.getZoomToCoverRatio(this.getScaledImageDimensions())*this.scaleFactor;this._repositionImage(t),this._repositionViewport(),this._repositionFocalPoint(t),this._zoomImage(),this.renderImage(),(1.5<e.width/this.lastLoadedDimensions.width||1.5<e.height/this.lastLoadedDimensions.height)&&this._reloadImage()},_repositionImage:function(t){this.image.set({left:this.image.left-(t.width-this.editorWidth)/2,top:this.image.top-(t.height-this.editorHeight)/2})},_createViewport:function(){this.viewport=new fabric.Rect({width:this.image.width,height:this.image.height,fill:"rgba(127,0,0,1)",originX:"center",originY:"center",globalCompositeOperation:"destination-in",left:this.image.left,top:this.image.top}),this.canvas.add(this.viewport),this.renderImage()},_createFocalPoint:function(){var t=this.focalPointState,e=this.getScaledImageDimensions().width/t.imageDimensions.width,i=t.offsetX*e*this.zoomRatio*this.scaleFactor,s=t.offsetY*e*this.zoomRatio*this.scaleFactor;i+=this.image.left,s+=this.image.top;var n=0,a=0;this.viewport&&0===t.offsetX&&0===t.offsetY&&(a="crop"!==this.currentView?(n=this.viewport.left-this.image.left,this.viewport.top-this.image.top):(n=this.clipper.left-this.image.left,this.clipper.top-this.image.top),i+=n,s+=a,t.offsetX+=n/(e*this.zoomRatio*this.scaleFactor),t.offsetY+=a/(e*this.zoomRatio*this.scaleFactor)),this.focalPoint=new fabric.Group([new fabric.Circle({radius:8,fill:"rgba(0,0,0,0.5)",strokeWidth:2,stroke:"rgba(255,255,255,0.8)",left:0,top:0,originX:"center",originY:"center"}),new fabric.Circle({radius:1,fill:"rgba(255,255,255,0)",strokeWidth:2,stroke:"rgba(255,255,255,0.8)",left:0,top:0,originX:"center",originY:"center"})],{originX:"center",originY:"center",left:i,top:s}),this.storeFocalPointState(t),this.canvas.add(this.focalPoint)},toggleFocalPoint:function(){this.focalPoint?(this.canvas.remove(this.focalPoint),this.focalPoint=null):this._createFocalPoint(),this.renderImage()},_repositionViewport:function(){if(this.viewport){var t={left:this.editorWidth/2,top:this.editorHeight/2};if("crop"===this.currentView)t.width=this.editorWidth,t.height=this.editorHeight;else if(this.cropperState){var e=this.cropperState,i=this.getScaledImageDimensions().width/e.imageDimensions.width;t.width=e.width*i*this.zoomRatio,t.height=e.height*i*this.zoomRatio,this.image.set({left:this.editorWidth/2-e.offsetX*i,top:this.editorHeight/2-e.offsetY*i})}else p.extend(t,this.getScaledImageDimensions());this.viewport.set(t)}},_repositionFocalPoint:function(t){if(this.focalPoint){var e=this.focalPoint.left-this.editorWidth/2,i=this.focalPoint.top-this.editorHeight/2,s=this.image.width,n=this.getScaledImageDimensions().width*this.zoomRatio/s/this.scaleFactor;e-=(t.width-this.editorWidth)/2,i-=(t.height-this.editorHeight)/2,e*=n,i*=n,this.focalPoint.set({left:this.editorWidth/2+e,top:this.editorHeight/2+i})}},hasOrientationChanged:function(){return this.viewportRotation%180!=0},getScaledImageDimensions:function(){var t=this.originalHeight/this.originalWidth,e={};return this.editorHeight/this.editorWidth<t?(e.height=Math.min(this.editorHeight,this.originalHeight),e.width=Math.round(this.originalWidth/(this.originalHeight/e.height))):(e.width=Math.min(this.editorWidth,this.originalWidth),e.height=Math.round(this.originalHeight*(e.width/this.originalWidth))),e},_zoomImage:function(){var t=this.getScaledImageDimensions();this.image.set({width:t.width*this.zoomRatio,height:t.height*this.zoomRatio})},_addControlListeners:function(){this.addListener(this.$tabs,"click","_handleTabClick"),this.addListener(p(".focal-point"),"click",function(t){this.toggleFocalPoint(t)}.bind(this)),this.addListener(p(".rotate-left"),"click",function(){this.rotateImage(-90)}.bind(this)),this.addListener(p(".rotate-right"),"click",function(){this.rotateImage(90)}.bind(this)),this.addListener(p(".flip-vertical"),"click",function(){this.flipImage("y")}.bind(this)),this.addListener(p(".flip-horizontal"),"click",function(){this.flipImage("x")}.bind(this)),this.straighteningInput=new Craft.SlideRuleInput("slide-rule",{onStart:function(){this._showGrid()}.bind(this),onChange:function(t){this.straighten(t)}.bind(this),onEnd:function(){this._hideGrid(),this._cleanupFocalPointAfterStraighten()}.bind(this)}),this.addListener(Garnish.$doc,"keydown",function(t){t.keyCode===Garnish.SHIFT_KEY&&(this.shiftKeyHeld=!0)}.bind(this)),this.addListener(Garnish.$doc,"keyup",function(t){t.keyCode===Garnish.SHIFT_KEY&&(this.shiftKeyHeld=!1)}.bind(this)),new Garnish.MenuBtn(p(".crop .menubtn",this.$container),{onOptionSelect:function(t){p(".constraint",this.$container).html(p(t).html()),this.setCroppingConstraint(p(t).data("constraint")),this.enforceCroppingConstraint()}.bind(this)}).menu.$container.addClass("dark")},_handleTabClick:function(t){if(!this.animationInProgress){var e=p(t.currentTarget),i=e.data("view");this.$tabs.removeClass("selected"),e.addClass("selected"),this.showView(i)}},showView:function(t){this.currentView!==t&&(this.$views.addClass("hidden"),this.$views.filter('[data-view="'+t+'"]').removeClass("hidden"),"rotate"===t?this.enableSlider():this.disableSlider(),this.updateSizeAndPosition(),"crop"===this.currentView&&"crop"!==t?this.disableCropMode():"crop"!==this.currentView&&"crop"===t&&this.enableCropMode(),this.currentView=t)},storeCropperState:function(t){if(t)this.cropperState=t;else if(this.clipper){var e=1/this.zoomRatio;this.cropperState={offsetX:(this.clipper.left-this.image.left)*e,offsetY:(this.clipper.top-this.image.top)*e,height:this.clipper.height*e,width:this.clipper.width*e,imageDimensions:this.getScaledImageDimensions()}}else{var i=this.getScaledImageDimensions();this.cropperState={offsetX:0,offsetY:0,height:i.height,width:i.width,imageDimensions:i}}},storeFocalPointState:function(t){if(t)this.focalPointState=t;else if(this.focalPoint){var e=1/this.zoomRatio;this.focalPointState={offsetX:(this.focalPoint.left-this.image.left)*e/this.scaleFactor,offsetY:(this.focalPoint.top-this.image.top)*e/this.scaleFactor,imageDimensions:this.getScaledImageDimensions()}}},rotateImage:function(e){if(!this.animationInProgress){if(90!==e&&-90!==e)return!1;this.animationInProgress=!0,this.viewportRotation+=e,this.viewportRotation=parseInt((this.viewportRotation+360)%360,10);var t,i=this.image.angle+e,s=this.getScaledImageDimensions();t=this.hasOrientationChanged()?this.getZoomToCoverRatio({height:s.width,width:s.height}):this.getZoomToCoverRatio(s),this.zoomRatio>t&&(t=this.zoomRatio);var n={angle:90===e?"+=90":"-=90"},a={angle:i,width:s.width*t,height:s.height*t},r=1;this.scaleFactor<1?(r=1/this.scaleFactor,this.scaleFactor=1):(this.viewport.width>this.editorHeight?r=this.editorHeight/this.viewport.width:this.viewport.height>this.editorWidth&&(r=this.editorWidth/this.viewport.height),this.scaleFactor=r),r<1&&(a.width*=r,a.height*=r);var o=this.cropperState,l=o.offsetX,h=o.offsetY,d=e*(Math.PI/180),c=l*Math.cos(d)-h*Math.sin(d),u=l*Math.sin(d)+h*Math.cos(d),p=s.width/o.imageDimensions.width,g=c*p*this.zoomRatio*this.scaleFactor,f=u*p*this.zoomRatio*this.scaleFactor;a.left=this.editorWidth/2-g,a.top=this.editorHeight/2-f,o.offsetX=c,o.offsetY=u;var m=o.width;o.width=o.height,o.height=m,this.storeCropperState(o),this.focalPoint&&this.canvas.remove(this.focalPoint),this.viewport.animate(n,{duration:this.settings.animationDuration,onComplete:function(){var t=this.viewport.height*r;this.viewport.height=this.viewport.width*r,this.viewport.width=t,this.viewport.set({angle:0})}.bind(this)}),this.image.animate(a,{onChange:this.canvas.renderAll.bind(this.canvas),duration:this.settings.animationDuration,onComplete:function(){var t=parseFloat((this.image.angle+360)%360);this.image.set({angle:t}),this.animationInProgress=!1,this.focalPoint?(this._adjustFocalPointByAngle(e),this.straighten(this.straighteningInput),this.canvas.add(this.focalPoint)):this._resetFocalPointPosition()}.bind(this)})}},flipImage:function(t){if(!this.animationInProgress){this.animationInProgress=!0,this.hasOrientationChanged()&&(t="y"===t?"x":"y"),this.focalPoint?this.canvas.remove(this.focalPoint):this._resetFocalPointPosition();var e=this.editorWidth/2,i=this.editorHeight/2;this.straighteningInput.setValue(-this.imageStraightenAngle),this.imageStraightenAngle=-this.imageStraightenAngle;var s,n,a={angle:this.viewportRotation+this.imageStraightenAngle},r=this.cropperState,o=this.focalPointState;"y"===t&&this.hasOrientationChanged()||"y"!==t&&!this.hasOrientationChanged()?(r.offsetX=-r.offsetX,o.offsetX=-o.offsetX,n=this.image.left-e,a.left=e-n):(r.offsetY=-r.offsetY,o.offsetY=-o.offsetY,s=this.image.top-i,a.top=i-s),"y"===t?(a.scaleY=-1*this.image.scaleY,this.flipData.y=1-this.flipData.y):(a.scaleX=-1*this.image.scaleX,this.flipData.x=1-this.flipData.x),this.storeCropperState(r),this.storeFocalPointState(o),this.image.animate(a,{onChange:this.canvas.renderAll.bind(this.canvas),duration:this.settings.animationDuration,onComplete:function(){this.animationInProgress=!1,this.focalPoint&&(this._adjustFocalPointByAngle(0),this.canvas.add(this.focalPoint))}.bind(this)})}},straighten:function(t){if(!this.animationInProgress){this.animationInProgress=!0;var e=this.image.angle;this.imageStraightenAngle=(this.settings.allowDegreeFractions?parseFloat(t.value):Math.round(parseFloat(t.value)))%360,this.image.set({angle:this.viewportRotation+this.imageStraightenAngle}),this.zoomRatio=this.getZoomToCoverRatio(this.getScaledImageDimensions())*this.scaleFactor,this._zoomImage(),this.cropperState&&this._adjustEditorElementsOnStraighten(e),this.renderImage(),this.animationInProgress=!1}},_adjustEditorElementsOnStraighten:function(t){var e,i,s,n,a,r=this.getScaledImageDimensions(),o=this.image.angle-t,l=this.cropperState,h=this.zoomRatio,d=1;do{var c=l.offsetX,u=l.offsetY,p=o*(Math.PI/180);s=c*Math.cos(p)-u*Math.sin(p),n=c*Math.sin(p)+u*Math.cos(p),e=s*h*(a=r.width/l.imageDimensions.width),i=n*h*a;var g=this.getImageVerticeCoords(h),f={width:this.viewport.width,height:this.viewport.height,left:this.editorWidth/2-this.viewport.width/2+e,top:this.editorHeight/2-this.viewport.height/2+i};h*=d=this._getZoomRatioToFitRectangle(f,g)}while(1!==d);this.image.set({left:this.editorWidth/2-e,top:this.editorHeight/2-i}),l.offsetX=s,l.offsetY=n,l.width=this.viewport.width/h/a,l.height=this.viewport.height/h/a,this.storeCropperState(l),this.zoomRatio=h,this.focalPoint?(this._adjustFocalPointByAngle(o),this._isCenterInside(this.focalPoint,this.viewport)?this.focalPoint.set({opacity:1}):this.focalPoint.set({opacity:0})):0!==o&&this._resetFocalPointPosition(),this._zoomImage()},_cleanupFocalPointAfterStraighten:function(){if(this.focalPoint&&!this._isCenterInside(this.focalPoint,this.viewport)){this.focalPoint.set({opacity:1});var t=this.focalPointState;t.offsetX=0,t.offsetY=0,this.storeFocalPointState(t),this.toggleFocalPoint()}},_resetFocalPointPosition:function(){var t=this.focalPointState;t.offsetX=0,t.offsetY=0,this.storeFocalPointState(t)},_isCenterInside:function(t,e){return t.left>e.left-e.width/2&&t.top>e.top-e.height/2&&t.left<e.left+e.width/2&&t.top<e.top+e.height/2},_adjustFocalPointByAngle:function(t){var e=t*(Math.PI/180),i=this.focalPointState,s=i.offsetX,n=i.offsetY,a=s*Math.cos(e)-n*Math.sin(e),r=s*Math.sin(e)+n*Math.cos(e),o=this.getScaledImageDimensions().width/i.imageDimensions.width,l=a*o*this.zoomRatio,h=r*o*this.zoomRatio;this.focalPoint.left=this.image.left+l,this.focalPoint.top=this.image.top+h,i.offsetX=a,i.offsetY=r,this.storeFocalPointState(i)},_getZoomRatioToFitRectangle:function(t,e){for(var i,s,n=this._getRectangleVertices(t),a=0;a<n.length&&(i=n[a],this.arePointsInsideRectangle([i],e));a++)i=!1;if(i){var r=this._getEdgeCrossed(e,i),o=t.left+t.width/2,l=t.top+t.height/2,h=Math.abs((r[1].y-r[0].y)*i.x-(r[1].x-r[0].x)*i.y+r[1].x*r[0].y-r[1].y*r[0].x)/Math.sqrt(Math.pow(r[1].y-r[0].y,2)+Math.pow(r[1].x-r[0].x,2)),d=Math.abs((r[1].y-r[0].y)*o-(r[1].x-r[0].x)*l+r[1].x*r[0].y-r[1].y*r[0].x)/Math.sqrt(Math.pow(r[1].y-r[0].y,2)+Math.pow(r[1].x-r[0].x,2));s=(h+d)/d}else s=1;return s},saveImage:function(t){var e=p(t.currentTarget);if(e.hasClass("disabled"))return!1;p(".btn",this.$buttons).addClass("disabled"),this.$buttons.append('<div class="spinner"></div>');var i={assetId:this.assetId,viewportRotation:this.viewportRotation,imageRotation:this.imageStraightenAngle,replace:e.hasClass("replace")?1:0};if(this.cropperState){var s={};s.height=this.cropperState.height,s.width=this.cropperState.width,s.offsetX=this.cropperState.offsetX,s.offsetY=this.cropperState.offsetY,i.imageDimensions=this.cropperState.imageDimensions,i.cropData=s}else i.imageDimensions=this.getScaledImageDimensions();this.focalPoint&&(i.focalPoint=this.focalPointState),i.flipData=this.flipData,i.zoom=this.zoomRatio,Craft.postActionRequest("assets/save-image",i,function(t){this.$buttons.find(".btn").removeClass("disabled").end().find(".spinner").remove(),t.error?alert(t.error):(this.onSave(),this.hide(),Craft.cp.runQueue())}.bind(this))},getZoomToCoverRatio:function(t){var e=Math.abs(this.imageStraightenAngle)*(Math.PI/180),i=Math.sin(e)*t.height+Math.cos(e)*t.width,s=Math.sin(e)*t.width+Math.cos(e)*t.height;return Math.max(i/t.width,s/t.height)},getZoomToFitRatio:function(t){var e=this._getImageBoundingBox(t),i=1;if(e.height>this.editorHeight||e.width>this.editorWidth){var s=this.editorHeight/e.height,n=this.editorWidth/e.width;i=Math.min(n,s)}return i},getCombinedZoomRatio:function(t){return this.getZoomToCoverRatio(t)/this.getZoomToFitRatio(t)},_showGrid:function(){if(!this.grid){var t,e={strokeWidth:1,stroke:"rgba(255,255,255,0.5)"},i=this.viewport.width,s=this.viewport.height,n=i/9,a=s/9,r=[new fabric.Rect({strokeWidth:2,stroke:"rgba(255,255,255,1)",originX:"center",originY:"center",width:i,height:s,left:i/2,top:s/2,fill:"rgba(255,255,255,0)"})];for(t=1;t<=8;t++)r.push(new fabric.Line([t*n,0,t*n,s],e));for(t=1;t<=8;t++)r.push(new fabric.Line([0,t*a,i,t*a],e));this.grid=new fabric.Group(r,{left:this.editorWidth/2,top:this.editorHeight/2,originX:"center",originY:"center",angle:this.viewport.angle}),this.canvas.add(this.grid),this.renderImage()}},_hideGrid:function(){this.canvas.remove(this.grid),this.grid=null,this.renderImage()},onFadeOut:function(){this.removeListener(this.$croppingCanvas,"mousemove",this._handleMouseMove.bind(this)),this.removeListener(this.$croppingCanvas,"mousedown",this._handleMouseDown.bind(this)),this.removeListener(this.$croppingCanvas,"mouseup",this._handleMouseUp.bind(this)),this.removeListener(this.$croppingCanvas,"mouseout",function(t){this._handleMouseUp(t),this._handleMouseMove(t)}.bind(this)),this.destroy()},show:function(){this.base(),p("html").addClass("noscroll")},hide:function(){this.removeAllListeners(),this.straighteningInput.removeAllListeners(),p("html").removeClass("noscroll"),this.base()},onSave:function(){this.settings.onSave(),this.trigger("save")},enableSlider:function(){this.$imageTools.removeClass("hidden")},disableSlider:function(){this.$imageTools.addClass("hidden")},enableCropMode:function(){var t=this.getScaledImageDimensions();this.zoomRatio=this.getZoomToFitRatio(t);var e={width:this.editorWidth,height:this.editorHeight},i={width:t.width*this.zoomRatio,height:t.height*this.zoomRatio,left:this.editorWidth/2,top:this.editorHeight/2},s=function(){this._setFittedImageVerticeCoordinates();var t=this.cropperState,e=this.getScaledImageDimensions(),i=e.width/t.imageDimensions.width,s={left:this.image.left+t.offsetX*i*this.zoomRatio,top:this.image.top+t.offsetY*i*this.zoomRatio,width:t.width*i*this.zoomRatio,height:t.height*i*this.zoomRatio};this._showCropper(s),this.focalPoint&&(i=e.width/this.focalPointState.imageDimensions.width,this.focalPoint.left=this.image.left+this.focalPointState.offsetX*i*this.zoomRatio,this.focalPoint.top=this.image.top+this.focalPointState.offsetY*i*this.zoomRatio,this.canvas.add(this.focalPoint))}.bind(this);this._editorModeTransition(s,i,e)},disableCropMode:function(){var t={},e={left:this.editorWidth/2,top:this.editorHeight/2};this._hideCropper();var i=this.getZoomToCoverRatio(this.getScaledImageDimensions())*this.scaleFactor,s=i/this.zoomRatio;this.zoomRatio=i;var n=(this.clipper.left-this.image.left)*s,a=(this.clipper.top-this.image.top)*s;e.left=this.editorWidth/2-n,e.top=this.editorHeight/2-a,t.height=this.clipper.height*s,t.width=this.clipper.width*s,(!this.focalPoint||this.focalPoint&&!this._isCenterInside(this.focalPoint,this.clipper))&&(this.focalPoint&&this.toggleFocalPoint(),this._resetFocalPointPosition());var r=function(){if(this.focalPoint){var t=this.getScaledImageDimensions().width/this.focalPointState.imageDimensions.width;this.focalPoint.left=this.image.left+this.focalPointState.offsetX*t*this.zoomRatio,this.focalPoint.top=this.image.top+this.focalPointState.offsetY*t*this.zoomRatio,this.canvas.add(this.focalPoint)}}.bind(this);this._editorModeTransition(r,e,t)},_editorModeTransition:function(t,e,i){this.animationInProgress||(this.animationInProgress=!0,this.focalPoint&&(this.canvas.remove(this.focalPoint),this.renderImage()),this.image.animate(e,{onChange:this.canvas.renderAll.bind(this.canvas),duration:this.settings.animationDuration,onComplete:function(){t(),this.animationInProgress=!1,this.renderImage()}.bind(this)}),this.viewport.animate(i,{duration:this.settings.animationDuration}))},_showSpinner:function(){this.$spinnerCanvas=p('<canvas id="spinner-canvas"></canvas>').appendTo(p(".image",this.$container));var i=document.getElementById("spinner-canvas").getContext("2d"),s=new Date,n=i.canvas.width,a=i.canvas.height;this.spinnerInterval=window.setInterval(function(){var t=parseInt((new Date-s)/1e3*16)/16;i.save(),i.clearRect(0,0,n,a),i.translate(n/2,a/2),i.rotate(2*Math.PI*t);for(var e=0;e<16;e++)i.beginPath(),i.rotate(2*Math.PI/16),i.moveTo(n/10,0),i.lineTo(n/4,0),i.lineWidth=n/30,i.strokeStyle="rgba(255,255,255,"+e/16+")",i.stroke();i.restore()},1e3/30)},_hideSpinner:function(){window.clearInterval(this.spinnerInterval),this.$spinnerCanvas.remove(),this.$spinnerCanvas=null},_showCropper:function(t){this._setupCropperLayer(t),this._redrawCropperElements(),this.renderCropper()},_hideCropper:function(){this.clipper&&(this.croppingCanvas.remove(this.clipper),this.croppingCanvas.remove(this.croppingShade),this.croppingCanvas.remove(this.cropperHandles),this.croppingCanvas.remove(this.cropperGrid),this.croppingCanvas.remove(this.croppingRectangle),this.croppingCanvas=null,this.renderCropper=null)},_setupCropperLayer:function(t){this.croppingCanvas=new fabric.StaticCanvas("cropping-canvas",{backgroundColor:"rgba(0,0,0,0)",hoverCursor:"default",selection:!1}),this.croppingCanvas.setDimensions({width:this.editorWidth,height:this.editorHeight}),this.renderCropper=function(){Garnish.requestAnimationFrame(this.croppingCanvas.renderAll.bind(this.croppingCanvas))}.bind(this),p("#cropping-canvas",this.$editorContainer).css({position:"absolute",top:0,left:0}),this.croppingShade=new fabric.Rect({left:this.editorWidth/2,top:this.editorHeight/2,originX:"center",originY:"center",width:this.editorWidth,height:this.editorHeight,fill:"rgba(0,0,0,0.7)"});var e=this.getScaledImageDimensions(),i=0===this.imageStraightenAngle?1:1.2*this.getCombinedZoomRatio(e),s=e.width/i,n=e.height/i;if(this.hasOrientationChanged()){var a=n;n=s,s=a}this.clipper=new fabric.Rect({left:this.editorWidth/2,top:this.editorHeight/2,originX:"center",originY:"center",width:s,height:n,stroke:"black",fill:"rgba(128,0,0,1)",strokeWidth:0}),t&&this.clipper.set(t),this.clipper.globalCompositeOperation="destination-out",this.croppingCanvas.add(this.croppingShade),this.croppingCanvas.add(this.clipper)},_redrawCropperElements:function(){this.cropperHandles&&(this.croppingCanvas.remove(this.cropperHandles),this.croppingCanvas.remove(this.cropperGrid),this.croppingCanvas.remove(this.croppingRectangle));var t={strokeWidth:4,stroke:"rgb(255,255,255)",fill:!1},e={strokeWidth:2,stroke:"rgba(255,255,255,0.5)"},i=[new fabric.Path("M 0,10 L 0,0 L 10,0",t),new fabric.Path("M "+(this.clipper.width-8)+",0 L "+(this.clipper.width+4)+",0 L "+(this.clipper.width+4)+",10",t),new fabric.Path("M "+(this.clipper.width+4)+","+(this.clipper.height-8)+" L"+(this.clipper.width+4)+","+(this.clipper.height+4)+" L "+(this.clipper.width-8)+","+(this.clipper.height+4),t),new fabric.Path("M 10,"+(this.clipper.height+4)+" L 0,"+(this.clipper.height+4)+" L 0,"+(this.clipper.height-8),t)];this.cropperHandles=new fabric.Group(i,{left:this.clipper.left,top:this.clipper.top,originX:"center",originY:"center"}),this.croppingRectangle=new fabric.Rect({left:this.clipper.left,top:this.clipper.top,width:this.clipper.width,height:this.clipper.height,fill:"rgba(0,0,0,0)",stroke:"rgba(255,255,255,0.8)",strokeWidth:2,originX:"center",originY:"center"}),this.cropperGrid=new fabric.Group([new fabric.Line([.33*this.clipper.width,0,.33*this.clipper.width,this.clipper.height],e),new fabric.Line([.66*this.clipper.width,0,.66*this.clipper.width,this.clipper.height],e),new fabric.Line([0,.33*this.clipper.height,this.clipper.width,.33*this.clipper.height],e),new fabric.Line([0,.66*this.clipper.height,this.clipper.width,.66*this.clipper.height],e)],{left:this.clipper.left,top:this.clipper.top,originX:"center",originY:"center"}),this.croppingCanvas.add(this.cropperHandles),this.croppingCanvas.add(this.cropperGrid),this.croppingCanvas.add(this.croppingRectangle)},_repositionCropper:function(t){if(this.croppingCanvas){var e=this.clipper.left-this.croppingCanvas.width/2,i=this.clipper.top-this.croppingCanvas.height/2;this.croppingCanvas.setDimensions({width:this.editorWidth,height:this.editorHeight});var s=this._getBoundingRectangle(this.imageVerticeCoords).width/t.width;this.clipper.width=Math.round(this.clipper.width*s),this.clipper.height=Math.round(this.clipper.height*s),this.clipper.left=this.editorWidth/2+e*s,this.clipper.top=this.editorHeight/2+i*s,this.croppingShade.set({width:this.editorWidth,height:this.editorHeight,left:this.editorWidth/2,top:this.editorHeight/2}),this._redrawCropperElements(),this.renderCropper()}},_getBoundingRectangle:function(t){return{width:Math.max(t.a.x,t.b.x,t.c.x,t.d.x)-Math.min(t.a.x,t.b.x,t.c.x,t.d.x),height:Math.max(t.a.y,t.b.y,t.c.y,t.d.y)-Math.min(t.a.y,t.b.y,t.c.y,t.d.y)}},_handleMouseDown:function(t){var e=this.focalPoint&&this._isMouseOver(t,this.focalPoint),i=this.croppingCanvas&&this._isMouseOver(t,this.clipper),s=this.croppingCanvas&&this._cropperHandleHitTest(t);(s||i||e)&&(this.previousMouseX=t.pageX,this.previousMouseY=t.pageY,e?this.draggingFocal=!0:s?this.scalingCropper=s:i&&(this.draggingCropper=!0))},_handleMouseMove:function(t){this.focalPoint&&this.draggingFocal?(this._handleFocalDrag(t),this.storeFocalPointState(),this.renderImage()):this.draggingCropper||this.scalingCropper?(this.draggingCropper?this._handleCropperDrag(t):this._handleCropperResize(t),this._redrawCropperElements(),this.storeCropperState(),this.renderCropper()):this._setMouseCursor(t),this.previousMouseX=t.pageX,this.previousMouseY=t.pageY},_handleMouseUp:function(t){this.draggingCropper=!1,this.scalingCropper=!1,this.draggingFocal=!1},_handleCropperDrag:function(t){var e=t.pageX-this.previousMouseX,i=t.pageY-this.previousMouseY;if(0!==e||0!==i){var s={left:this.clipper.left-this.clipper.width/2,top:this.clipper.top-this.clipper.height/2,width:this.clipper.width,height:this.clipper.height},n=this._getRectangleVertices(s,e,i);this.arePointsInsideRectangle(n,this.imageVerticeCoords)&&this.clipper.set({left:this.clipper.left+e,top:this.clipper.top+i})}},_handleFocalDrag:function(t){if(this.focalPoint){var e=t.pageX-this.previousMouseX,i=t.pageY-this.previousMouseY;if(0===e&&0===i)return;var s=this.focalPoint.left+e,n=this.focalPoint.top+i;if("crop"===this.currentView){if(!this.arePointsInsideRectangle([{x:s,y:n}],this.imageVerticeCoords))return}else if(!(this.viewport.left-this.viewport.width/2-s<0&&0<this.viewport.left+this.viewport.width/2-s&&this.viewport.top-this.viewport.height/2-n<0&&0<this.viewport.top+this.viewport.height/2-n))return;this.focalPoint.set({left:this.focalPoint.left+e,top:this.focalPoint.top+i})}},setCroppingConstraint:function(t){switch(this.updateSizeAndPosition(),t){case"none":t=!1;break;case"original":t=this.originalWidth/this.originalHeight;break;case"current":t=this.clipper.width/this.clipper.height;break;default:t=parseFloat(t)}this.croppingConstraint=t},enforceCroppingConstraint:function(){if(!this.animationInProgress&&this.croppingConstraint){this.animationInProgress=!0;var t={left:this.clipper.left-this.clipper.width/2,top:this.clipper.top-this.clipper.height/2,width:this.clipper.width,height:this.clipper.height};if(this.clipper.width>this.clipper.height*this.croppingConstraint){var e=t.height;t.height=this.clipper.width/this.croppingConstraint,t.top-=(t.height-e)/2,this.arePointsInsideRectangle(this._getRectangleVertices(t),this.imageVerticeCoords)||(t.width=this.clipper.height*this.croppingConstraint,t.height=t.width/this.croppingConstraint)}else{var i=t.width;t.width=this.clipper.height*this.croppingConstraint,t.left-=(t.width-i)/2,this.arePointsInsideRectangle(this._getRectangleVertices(t),this.imageVerticeCoords)||(t.height=this.clipper.width/this.croppingConstraint,t.width=t.height*this.croppingConstraint)}var s={height:t.height,width:t.width};this.clipper.animate(s,{onChange:function(){this._redrawCropperElements(),this.croppingCanvas.renderAll()}.bind(this),duration:this.settings.animationDuration,onComplete:function(){this._redrawCropperElements(),this.animationInProgress=!1,this.renderCropper()}.bind(this)})}},_handleCropperResize:function(t){var e=t.pageX-this.previousMouseX,i=t.pageY-this.previousMouseY,s=0,n=0;if("b"!==this.scalingCropper&&"t"!==this.scalingCropper||(e=0),"l"!==this.scalingCropper&&"r"!==this.scalingCropper||(i=0),0!==e||0!==i){var a={left:this.clipper.left-this.clipper.width/2,top:this.clipper.top-this.clipper.height/2,width:this.clipper.width,height:this.clipper.height};if(this.croppingConstraint){var r=0;switch(this.scalingCropper){case"t":r=-i;break;case"b":r=i;break;case"r":r=e;break;case"l":r=-e;break;case"tr":r=-i+e;break;case"tl":r=-i-e;break;case"br":r=i+e;break;case"bl":r=i-e}1<this.croppingConstraint?i=(e=r)/this.croppingConstraint:e=(i=r)*this.croppingConstraint,a.height+=i,a.width+=e,this.scalingCropper.match(/t/)&&(a.top-=i,a.left-=e/2,s=-i/2),this.scalingCropper.match(/b/)&&(a.left+=-e/2,s=i/2),this.scalingCropper.match(/r/)&&(a.top+=-i/2,n=e/2),this.scalingCropper.match(/l/)&&(a.top-=i/2,a.left-=e,n=-e/2)}else{if(this.shiftKeyHeld&&("tl"===this.scalingCropper||"tr"===this.scalingCropper||"bl"===this.scalingCropper||"br"===this.scalingCropper))Math.abs(e)>Math.abs(i)?(i=e/(this.clipper.width/this.clipper.height),i*="tr"===this.scalingCropper||"bl"===this.scalingCropper?-1:1):(e=i*(this.clipper.width/this.clipper.height),e*="tr"===this.scalingCropper||"bl"===this.scalingCropper?-1:1);this.scalingCropper.match(/t/)&&(a.top+=i,a.height-=i),this.scalingCropper.match(/b/)&&(a.height+=i),this.scalingCropper.match(/r/)&&(a.width+=e),this.scalingCropper.match(/l/)&&(a.left+=e,a.width-=e),s=i/2,n=e/2}a.height<30||a.width<30||this.arePointsInsideRectangle(this._getRectangleVertices(a),this.imageVerticeCoords)&&(this.clipper.set({top:this.clipper.top+s,left:this.clipper.left+n,width:a.width,height:a.height}),this._redrawCropperElements())}},_setMouseCursor:function(t){var e="default",i=this.croppingCanvas&&this._cropperHandleHitTest(t);this.focalPoint&&this._isMouseOver(t,this.focalPoint)?e="pointer":i?"t"===i||"b"===i?e="ns-resize":"l"===i||"r"===i?e="ew-resize":"tl"===i||"br"===i?e="nwse-resize":"bl"!==i&&"tr"!==i||(e="nesw-resize"):this.croppingCanvas&&this._isMouseOver(t,this.clipper)&&(e="move"),p(".body").css("cursor",e)},_cropperHandleHitTest:function(t){var e=this.$croppingCanvas.offset(),i=t.pageX-e.left,s=t.pageY-e.top,n=this.clipper.left-this.clipper.width/2,a=n+this.clipper.width,r=this.clipper.top-this.clipper.height/2,o=r+this.clipper.height;if(i<n+10&&n-3<i){if(s<r+10&&r-3<s)return"tl";if(s<o+3&&o-10<s)return"bl"}if(a-13<i&&i<a+3){if(s<r+10&&r-3<s)return"tr";if(s<o+2&&o-10<s)return"br"}return i<n+3&&n-3<i&&s<o-10&&r+10<s?"l":i<a+1&&a-5<i&&s<o-10&&r+10<s?"r":s<r+4&&r-2<s&&n+10<i&&i<a-10?"t":s<o+2&&o-4<s&&n+10<i&&i<a-10&&"b"},_isMouseOver:function(t,e){var i=this.$croppingCanvas.offset(),s=t.pageX-i.left,n=t.pageY-i.top,a=e.left-e.width/2,r=a+e.width,o=e.top-e.height/2,l=o+e.height;return a<=s&&s<=r&&o<=n&&n<=l},_getRectangleVertices:function(t,e,i){void 0===e&&(e=0),void 0===i&&(i=0);var s={x:t.left+e,y:t.top+i},n={x:s.x+t.width,y:s.y},a={x:n.x,y:n.y+t.height};return[s,n,a,{x:s.x,y:a.y}]},_setFittedImageVerticeCoordinates:function(){this.imageVerticeCoords=this.getImageVerticeCoords("fit")},getImageVerticeCoords:function(t){var e,i=-1*((this.hasOrientationChanged()?90:0)+this.imageStraightenAngle)*(Math.PI/180),s=this.getScaledImageDimensions();e="number"==typeof t?t:"cover"===t?this.getZoomToCoverRatio(s):this.getZoomToFitRatio(s);var n=s.height*e,a=s.width*e,r=Math.cos(i)*n,o=Math.sin(i)*a,l=Math.cos(i)*a,h=Math.sin(i)*n,d=(this.editorHeight-(r+o))/2,c=(this.editorWidth-(h+l))/2;return{a:{x:c+l,y:d},b:{x:this.editorWidth-c,y:d+r},c:{x:c+h,y:this.editorHeight-d},d:{x:c,y:d+o}}},_debug:function(t){this.canvas.remove(this.debugger),this.debugger=t,this.canvas.add(this.debugger)},arePointsInsideRectangle:function(t,e){for(var i=this._getVector(e.a,e.b),s=this._getVector(e.b,e.c),n=this._getScalarProduct(i,i),a=this._getScalarProduct(s,s),r=0;r<t.length;r++){var o=t[r],l=this._getVector(e.a,o),h=this._getVector(e.b,o),d=this._getScalarProduct(i,l),c=this._getScalarProduct(s,h);if(!(0<=d&&d<=n)||!(0<=c&&c<=a))return!1}return!0},_getVector:function(t,e){return{x:e.x-t.x,y:e.y-t.y}},_getScalarProduct:function(t,e){return t.x*e.x+t.y*e.y},_getVectorMagnitude:function(t){return Math.sqrt(t.x*t.x+t.y*t.y)},_getAngleBetweenVectors:function(t,e){return Math.round(180*Math.acos(Math.min(1,this._getScalarProduct(t,e)/(this._getVectorMagnitude(t)*this._getVectorMagnitude(e))))/Math.PI*100)/100},_getEdgeCrossed:function(t,e){for(var i=[[t.a,t.b],[t.b,t.c],[t.c,t.d],[t.d,t.a]],s={x:this.editorWidth/2,y:this.editorHeight/2},n=180,a=null,r=0;r<i.length;r++){var o=i[r],l=this._getVector(o[0],s),h=this._getVector(o[0],o[1]),d=this._getVector(o[0],e),c=Math.abs(this._getAngleBetweenVectors(l,d)-(this._getAngleBetweenVectors(l,h)+this._getAngleBetweenVectors(h,d)));c<n&&(n=c,a=o)}return a},_getImageBoundingBox:function(t){var e={},i=Math.abs(this.imageStraightenAngle)*(Math.PI/180),s=t.height/t.width;if(e.height=t.width*(Math.sin(i)+Math.cos(i)*s),e.width=t.width*(Math.cos(i)+Math.sin(i)*s),this.hasOrientationChanged()){var n=e.width;e.width=e.height,e.height=n}return e}},{defaults:{animationDuration:100,allowSavingAsNew:!0,onSave:p.noop,allowDegreeFractions:!0}}),Craft.AssetIndex=Craft.BaseElementIndex.extend({$includeSubfoldersContainer:null,$includeSubfoldersCheckbox:null,showingIncludeSubfoldersCheckbox:!1,$uploadButton:null,$uploadInput:null,$progressBar:null,$folders:null,uploader:null,promptHandler:null,progressBar:null,_uploadTotalFiles:0,_uploadFileProgress:{},_uploadedAssetIds:[],_currentUploaderSettings:{},_assetDrag:null,_folderDrag:null,_expandDropTargetFolderTimeout:null,_tempExpandedFolders:[],_fileConflictTemplate:{choices:[{value:"keepBoth",title:Craft.t("app","Keep both")},{value:"replace",title:Craft.t("app","Replace it")}]},_folderConflictTemplate:{choices:[{value:"replace",title:Craft.t("app","Replace the folder (all existing files will be deleted)")},{value:"merge",title:Craft.t("app","Merge the folder (any conflicting files will be replaced)")}]},init:function(t,e,i){this.base(t,e,i),"index"===this.settings.context?(this._folderDrag||this._initIndexPageMode(),this.addListener(Garnish.$win,"resize,scroll","_positionProgressBar")):(this.addListener(this.$main,"scroll","_positionProgressBar"),this.settings.modal&&this.settings.modal.on("updateSizeAndPosition",p.proxy(this,"_positionProgressBar")))},initSources:function(){return"index"!==this.settings.context||this._folderDrag||this._initIndexPageMode(),this.base()},initSource:function(t){this.base(t),this._createFolderContextMenu(t),"index"===this.settings.context&&(this._folderDrag&&1<this._getSourceLevel(t)&&this._getFolderIdFromSourceKey(t.data("key"))&&this._folderDrag.addItems(t.parent()),this._assetDrag&&this._assetDrag.updateDropTargets())},deinitSource:function(t){this.base(t);var e=t.data("contextmenu");e&&e.destroy(),"index"===this.settings.context&&(this._folderDrag&&1<this._getSourceLevel(t)&&this._folderDrag.removeItems(t.parent()),this._assetDrag&&this._assetDrag.updateDropTargets())},_getSourceLevel:function(t){return t.parentsUntil("nav","ul").length},_initIndexPageMode:function(){if(!this._folderDrag){this.settings.selectable=!0,this.settings.multiSelect=!0;var t=p.proxy(this,"_onDragStart"),e=p.proxy(this,"_onDropTargetChange");this._assetDrag=new Garnish.DragDrop({activeDropTargetClass:"sel",helperOpacity:.75,filter:p.proxy(function(){return this.view.getSelectedElements()},this),helper:p.proxy(function(t){return this._getFileDragHelper(t)},this),dropTargets:p.proxy(function(){for(var t=[],e=0;e<this.$sources.length;e++){var i=this.$sources.eq(e);this._getFolderIdFromSourceKey(i.data("key"))&&t.push(i)}return t},this),onDragStart:t,onDropTargetChange:e,onDragStop:p.proxy(this,"_onFileDragStop")}),this._folderDrag=new Garnish.DragDrop({activeDropTargetClass:"sel",helperOpacity:.75,filter:p.proxy(function(){for(var t=this.sourceSelect.getSelectedItems(),e=[],i=0;i<t.length;i++){var s=t.eq(i);this._getFolderIdFromSourceKey(s.data("key"))&&(s.hasClass("sel")&&1<this._getSourceLevel(s)&&e.push(s.parent()[0]))}return p(e)},this),helper:p.proxy(function(t){var e=p('<div class="sidebar" style="padding-top: 0; padding-bottom: 0;"/>'),i=p("<nav/>").appendTo(e),s=p("<ul/>").appendTo(i);return t.appendTo(s).removeClass("expanded"),t.children("a").addClass("sel"),t.css({"padding-top":this._folderDrag.$draggee.css("padding-top"),"padding-right":this._folderDrag.$draggee.css("padding-right"),"padding-bottom":this._folderDrag.$draggee.css("padding-bottom"),"padding-left":this._folderDrag.$draggee.css("padding-left")}),e},this),dropTargets:p.proxy(function(){var t=[],e=[];this._folderDrag.$draggee.find("a[data-key]").each(function(){e.push(p(this).data("key"))});for(var i=0;i<this.$sources.length;i++){var s=this.$sources.eq(i),n=s.data("key");this._getFolderIdFromSourceKey(n)&&(Craft.inArray(n,e)||t.push(s))}return t},this),onDragStart:t,onDropTargetChange:e,onDragStop:p.proxy(this,"_onFolderDragStop")})}},_onFileDragStop:function(){if(this._assetDrag.$activeDropTarget&&this._assetDrag.$activeDropTarget[0]!==this.$source[0]){for(var r=this.$source,o=this._getFolderIdFromSourceKey(this._assetDrag.$activeDropTarget.data("key")),l=[],t=0;t<this._assetDrag.$draggee.length;t++){var e=Craft.getElementInfo(this._assetDrag.$draggee[t]).id;l.push(e)}if(l.length){this.setIndexBusy(),this._positionProgressBar(),this.progressBar.resetProgressBar(),this.progressBar.setItemCount(l.length),this.progressBar.showProgressBar();var i=[];for(t=0;t<l.length;t++)i.push({action:"assets/move-asset",params:{assetId:l[t],folderId:o}});var h=p.proxy(function(t){this.promptHandler.resetPrompts();for(var e=0;e<t.length;e++){var i=t[e];i.conflict&&this.promptHandler.addPrompt({assetId:i.assetId,suggestedFilename:i.suggestedFilename,prompt:{message:i.conflict,choices:this._fileConflictTemplate.choices}}),i.error&&alert(i.error)}this.setIndexAvailable(),this.progressBar.hideProgressBar();var s=!1,n=function(){this.sourceSelect.selectItem(r),this._totalVisible-=this._assetDrag.$draggee.length;for(var t=0;t<l.length;t++)p("[data-id="+l[t]+"]").remove();this.view.deselectAllElements(),this._collapseExtraExpandedFolders(o),s&&this.updateElements()};if(this.promptHandler.getPromptCount()){var a=p.proxy(function(t){for(var e=[],i=0;i<t.length;i++)"cancel"!==t[i].choice?("keepBoth"===t[i].choice&&e.push({action:"assets/move-asset",params:{folderId:o,assetId:t[i].assetId,filename:t[i].suggestedFilename}}),"replace"===t[i].choice&&e.push({action:"assets/move-asset",params:{folderId:o,assetId:t[i].assetId,force:!0}})):s=!0;0===e.length?n.apply(this):(this.setIndexBusy(),this.progressBar.resetProgressBar(),this.progressBar.setItemCount(this.promptHandler.getPromptCount()),this.progressBar.showProgressBar(),this._performBatchRequests(e,h))},this);this._assetDrag.fadeOutHelpers(),this.promptHandler.showBatchPrompts(a)}else n.apply(this),this._assetDrag.fadeOutHelpers()},this);return void this._performBatchRequests(i,h)}}else this.$source.addClass("sel"),this._collapseExtraExpandedFolders();this._assetDrag.returnHelpersToDraggees()},_onFolderDragStop:function(){if(this._folderDrag.$activeDropTarget&&0===this._folderDrag.$activeDropTarget.siblings("ul").children("li").filter(this._folderDrag.$draggee).length){var t=this._getFolderIdFromSourceKey(this._folderDrag.$activeDropTarget.data("key"));this._collapseExtraExpandedFolders(t);for(var a=[],e=0;e<this._folderDrag.$draggee.length;e++){var i=this._folderDrag.$draggee.eq(e).children("a"),s=this._getFolderIdFromSourceKey(i.data("key")),n=this._getSourceByFolderId(s);if(this._getFolderIdFromSourceKey(this._getParentSource(n).data("key"))!=t){a.push(s);break}}if(a.length){a.sort(),a.reverse(),this.setIndexBusy(),this._positionProgressBar(),this.progressBar.resetProgressBar(),this.progressBar.setItemCount(a.length),this.progressBar.showProgressBar();var r=[];for(e=0;e<a.length;e++)r.push({action:"assets/move-folder",params:{folderId:a[e],parentId:t}});this.requestId++;var o=[],l="",h=function(t){this.promptHandler.resetPrompts();for(var e=0;e<t.length;e++){var n=t[e];n.success&&(n.transferList&&(o=n.transferList),n.newFolderId&&(l=this._folderDrag.$activeDropTarget.data("key")+"/folder:"+n.newFolderId)),n.conflict&&(n.prompt={message:n.conflict,choices:this._folderConflictTemplate.choices},this.promptHandler.addPrompt(n)),n.error&&alert(n.error)}if(this.promptHandler.getPromptCount()){var i=p.proxy(function(t){this.promptHandler.resetPrompts();for(var e=[],i={},s=0;s<t.length;s++)"cancel"!==t[s].choice&&("replace"===t[s].choice&&(i.force=!0),"merge"===t[s].choice&&(i.merge=!0),i.folderId=n.folderId,i.parentId=n.parentId,e.push({action:"assets/move-folder",params:i}));0===e.length?p.proxy(this,"_performActualFolderMove",o,a,l)():(this.setIndexBusy(),this.progressBar.resetProgressBar(),this.progressBar.setItemCount(this.promptHandler.getPromptCount()),this.progressBar.showProgressBar(),this._performBatchRequests(e,h))},this);this.promptHandler.showBatchPrompts(i),this.setIndexAvailable(),this.progressBar.hideProgressBar()}else p.proxy(this,"_performActualFolderMove",o,a,l)()}.bind(this);return void this._performBatchRequests(r,h)}}else this.$source.addClass("sel"),this._collapseExtraExpandedFolders();this._folderDrag.returnHelpersToDraggees()},_performActualFolderMove:function(t,e,n){this.setIndexBusy(),this.progressBar.resetProgressBar(),this.progressBar.setItemCount(1),this.progressBar.showProgressBar();var i=function(t){for(var e=0,i=t.length,s=0;s<t.length;s++)Craft.postActionRequest("assets/delete-folder",{folderId:t[s]},function(){++e===i&&(this.setIndexAvailable(),this.progressBar.hideProgressBar(),this._folderDrag.returnHelpersToDraggees(),this.setInstanceState("selectedSource",n),this.refreshSources())}.bind(this))}.bind(this);if(0<t.length){for(var s=[],a=0;a<t.length;a++)s.push({action:"assets/move-asset",params:t[a]});this._performBatchRequests(s,function(){i(e)})}else i(e)},_getParentSource:function(t){if(1<this._getSourceLevel(t))return t.parent().parent().siblings("a")},_selectSourceByFolderId:function(t){for(var e=this._getSourceByFolderId(t),i=e.parent().parents("li"),s=0;s<i.length;s++){var n=p(i[s]);n.hasClass("expanded")||n.children(".toggle").trigger("click")}this.selectSource(e),this.updateElements()},afterInit:function(){this.$uploadButton||(this.$uploadButton=p('<div class="btn submit" data-icon="upload" style="position: relative; overflow: hidden;" role="button">'+Craft.t("app","Upload files")+"</div>"),this.addButton(this.$uploadButton),this.$uploadInput=p('<input type="file" multiple="multiple" name="assets-upload" />').hide().insertBefore(this.$uploadButton)),this.promptHandler=new Craft.PromptHandler,this.progressBar=new Craft.ProgressBar(this.$main,!0);var t={url:Craft.getActionUrl("assets/save-asset"),fileInput:this.$uploadInput,dropZone:this.$container};t.events={fileuploadstart:p.proxy(this,"_onUploadStart"),fileuploadprogressall:p.proxy(this,"_onUploadProgress"),fileuploaddone:p.proxy(this,"_onUploadComplete")},this.settings.criteria&&void 0!==this.settings.criteria.kind&&(t.allowedKinds=this.settings.criteria.kind),this._currentUploaderSettings=t,this.uploader=new Craft.Uploader(this.$uploadButton,t),this.$uploadButton.on("click",p.proxy(function(){this.$uploadButton.hasClass("disabled")||this.isIndexBusy||this.$uploadButton.parent().find("input[name=assets-upload]").trigger("click")},this)),this.base()},onSelectSource:function(){var t=this._getFolderIdFromSourceKey(this.sourceKey);t&&this.$source.attr("data-upload")?(this.uploader.setParams({folderId:t}),this.$uploadButton.removeClass("disabled")):this.$uploadButton.addClass("disabled"),this.base()},_getFolderIdFromSourceKey:function(t){var e=t.match(/\bfolder:(\d+)$/);return e?e[1]:null},startSearching:function(){if(this.$source.siblings("ul").length){if(null===this.$includeSubfoldersContainer){var t="includeSubfolders-"+Math.floor(1e9*Math.random());this.$includeSubfoldersContainer=p('<div style="margin-bottom: -23px; opacity: 0;"/>').insertAfter(this.$search);var e=p('<div style="padding-top: 5px;"/>').appendTo(this.$includeSubfoldersContainer);this.$includeSubfoldersCheckbox=p('<input type="checkbox" id="'+t+'" class="checkbox"/>').appendTo(e),p('<label class="light smalltext" for="'+t+'"/>').text(" "+Craft.t("app","Search in subfolders")).appendTo(e),this.addListener(this.$includeSubfoldersCheckbox,"change",function(){this.setSelecetedSourceState("includeSubfolders",this.$includeSubfoldersCheckbox.prop("checked")),this.updateElements()})}else this.$includeSubfoldersContainer.velocity("stop");var i=this.getSelectedSourceState("includeSubfolders",!1);this.$includeSubfoldersCheckbox.prop("checked",i),this.$includeSubfoldersContainer.velocity({marginBottom:0,opacity:1},"fast"),this.showingIncludeSubfoldersCheckbox=!0}this.base()},stopSearching:function(){this.showingIncludeSubfoldersCheckbox&&(this.$includeSubfoldersContainer.velocity("stop"),this.$includeSubfoldersContainer.velocity({marginBottom:-23,opacity:0},"fast"),this.showingIncludeSubfoldersCheckbox=!1),this.base()},getViewParams:function(){var t=this.base();return this.showingIncludeSubfoldersCheckbox&&this.$includeSubfoldersCheckbox.prop("checked")&&(t.criteria.includeSubfolders=!0),t},_onUploadStart:function(){this.setIndexBusy(),this._positionProgressBar(),this.progressBar.resetProgressBar(),this.progressBar.showProgressBar(),this.promptHandler.resetPrompts()},_onUploadProgress:function(t,e){var i=parseInt(e.loaded/e.total*100,10);this.progressBar.setProgressPercentage(i)},_onUploadComplete:function(t,e){var i=e.result,s=e.files[0].name,n=!0;i.success||i.conflict?(this._uploadedAssetIds.push(i.assetId),i.conflict&&(i.prompt={message:Craft.t("app",i.conflict,{file:i.filename}),choices:this._fileConflictTemplate.choices},this.promptHandler.addPrompt(i)),Craft.cp.runQueue()):(i.error?alert(Craft.t("app","Upload failed. The error message was: “{error}”",{error:i.error})):alert(Craft.t("app","Upload failed for {filename}.",{filename:s})),n=!1),this.uploader.isLastUpload()&&(this.setIndexAvailable(),this.progressBar.hideProgressBar(),this.promptHandler.getPromptCount()?this.promptHandler.showBatchPrompts(p.proxy(this,"_uploadFollowup")):n&&this._updateAfterUpload())},_updateAfterUpload:function(){"index"!==this.settings.context&&(this.setSortAttribute("dateModified"),this.setSortDirection("desc")),this.updateElements()},_uploadFollowup:function(t){this.setIndexBusy(),this.progressBar.resetProgressBar(),this.promptHandler.resetPrompts();var e=function(){this.setIndexAvailable(),this.progressBar.hideProgressBar(),this._updateAfterUpload()}.bind(this);this.progressBar.setItemCount(t.length);var r=function(i,s,n){var t={},e=null,a=function(t,e){"success"===e&&t.assetId?this._uploadedAssetIds.push(t.assetId):t.error&&alert(t.error),s++,this.progressBar.incrementProcessedItemCount(1),this.progressBar.updateProgressBar(),s===i.length?n():r(i,s,n)}.bind(this);"replace"===i[s].choice?(e="assets/replace-file",t.sourceAssetId=i[s].assetId,i[s].conflictingAssetId?t.assetId=i[s].conflictingAssetId:t.targetFilename=i[s].filename):"cancel"===i[s].choice&&(e="assets/delete-asset",t.assetId=i[s].assetId),e?Craft.postActionRequest(e,t,a):a({assetId:i[s].assetId},"success")}.bind(this);this.progressBar.showProgressBar(),r(t,0,e)},onUpdateElements:function(){this._onUpdateElements(!1,this.view.getAllElements()),this.view.on("appendElements",p.proxy(function(t){this._onUpdateElements(!0,t.newElements)},this)),this.base()},_onUpdateElements:function(t,e){if("index"===this.settings.context&&(t||this._assetDrag.removeAllItems(),this._assetDrag.addItems(e)),this._uploadedAssetIds.length){if(this.view.settings.selectable)for(var i=0;i<this._uploadedAssetIds.length;i++)this.view.selectElementById(this._uploadedAssetIds[i]);this._uploadedAssetIds=[]}this.base(t,e),this.removeListener(this.$elements,"keydown"),this.addListener(this.$elements,"keydown",this._onKeyDown.bind(this)),this.view.elementSelect.on("focusItem",this._onElementFocus.bind(this))},_onKeyDown:function(t){if(t.keyCode===Garnish.SPACE_KEY&&t.shiftKey){if(Craft.PreviewFileModal.openInstance)Craft.PreviewFileModal.openInstance.selfDestruct();else{var e=this.view.elementSelect.$focusedItem.find(".element");e.length&&this._loadPreview(e)}return t.stopPropagation(),!1}},_onElementFocus:function(t){var e=p(t.item).find(".element");Craft.PreviewFileModal.openInstance&&e.length&&this._loadPreview(e)},_loadPreview:function(t){var e={};t.data("image-width")&&(e.startingWidth=t.data("image-width"),e.startingHeight=t.data("image-height")),new Craft.PreviewFileModal(t.data("id"),this.view.elementSelect,e)},_onDragStart:function(){this._tempExpandedFolders=[]},_getFileDragHelper:function(t){var e,i;switch(this.getSelectedSourceState("mode")){case"table":e=p('<div class="elements datatablesorthelper"/>').appendTo(Garnish.$bod),i=p('<div class="tableview"/>').appendTo(e);var s=p('<table class="data"/>').appendTo(i),n=p("<tbody/>").appendTo(s);t.appendTo(n),this._$firstRowCells=this.view.$table.children("tbody").children("tr:first").children();for(var a=t.children(),r=0;r<a.length;r++){var o=p(a[r]);if(o.hasClass("checkbox-cell"))o.remove(),e.css("margin-"+Craft.left,19);else{var l=p(this._$firstRowCells[r]),h=l.width();l.width(h),o.width(h)}}return e;case"thumbs":return e=p('<div class="elements thumbviewhelper"/>').appendTo(Garnish.$bod),i=p('<ul class="thumbsview"/>').appendTo(e),t.appendTo(i),e}return p()},_onDropTargetChange:function(t){if(clearTimeout(this._expandDropTargetFolderTimeout),t){var e=this._getFolderIdFromSourceKey(t.data("key"));e?(this.dropTargetFolder=this._getSourceByFolderId(e),this._hasSubfolders(this.dropTargetFolder)&&!this._isExpanded(this.dropTargetFolder)&&(this._expandDropTargetFolderTimeout=setTimeout(p.proxy(this,"_expandFolder"),500))):this.dropTargetFolder=null}t&&t[0]!==this.$source[0]?this.$source.removeClass("sel"):this.$source.addClass("sel")},_collapseExtraExpandedFolders:function(t){var e;clearTimeout(this._expandDropTargetFolderTimeout),t&&(e=this._getSourceByFolderId(t).parents("li").children("a"));for(var i=this._tempExpandedFolders.length-1;0<=i;i--){var s=this._tempExpandedFolders[i];void 0!==e&&0!==e.filter('[data-key="'+s.data("key")+'"]').length||(this._collapseFolder(s),this._tempExpandedFolders.splice(i,1))}},_getSourceByFolderId:function(t){return this.$sources.filter('[data-key$="folder:'+t+'"]')},_hasSubfolders:function(t){return t.siblings("ul").find("li").length},_isExpanded:function(t){return t.parent("li").hasClass("expanded")},_expandFolder:function(){this._collapseExtraExpandedFolders(this._getFolderIdFromSourceKey(this.dropTargetFolder.data("key"))),this.dropTargetFolder.siblings(".toggle").trigger("click"),this._tempExpandedFolders.push(this.dropTargetFolder)},_collapseFolder:function(t){t.parent().hasClass("expanded")&&t.siblings(".toggle").trigger("click")},_createFolderContextMenu:function(t){if(this._getFolderIdFromSourceKey(t.data("key"))){var e=[{label:Craft.t("app","New subfolder"),onClick:p.proxy(this,"_createSubfolder",t)}];"index"===this.settings.context&&1<this._getSourceLevel(t)&&(e.push({label:Craft.t("app","Rename folder"),onClick:p.proxy(this,"_renameFolder",t)}),e.push({label:Craft.t("app","Delete folder"),onClick:p.proxy(this,"_deleteFolder",t)})),new Garnish.ContextMenu(t,e,{menuClass:"menu"})}},_createSubfolder:function(n){var t=prompt(Craft.t("app","Enter the name of the folder"));if(t){var e={parentId:this._getFolderIdFromSourceKey(n.data("key")),folderName:t};this.setIndexBusy(),Craft.postActionRequest("assets/create-folder",e,p.proxy(function(t,e){if(this.setIndexAvailable(),"success"===e&&t.success){this._prepareParentForChildren(n);var i=p('<li><a data-key="'+n.data("key")+"/folder:"+t.folderId+'"'+(Garnish.hasAttr(n,"data-has-thumbs")?" data-has-thumbs":"")+' data-upload="'+n.attr("data-upload")+'">'+t.folderName+"</a></li>"),s=i.children("a:first");this._appendSubfolder(n,i),this.initSource(s)}"success"===e&&t.error&&alert(t.error)},this))}},_deleteFolder:function(s){if(confirm(Craft.t("app","Really delete folder “{folder}”?",{folder:p.trim(s.text())}))){var t={folderId:this._getFolderIdFromSourceKey(s.data("key"))};this.setIndexBusy(),Craft.postActionRequest("assets/delete-folder",t,p.proxy(function(t,e){if(this.setIndexAvailable(),"success"===e&&t.success){var i=this._getParentSource(s);this.deinitSource(s),s.parent().remove(),this._cleanUpTree(i)}"success"===e&&t.error&&alert(t.error)},this))}},_renameFolder:function(i){var t=p.trim(i.text()),e=prompt(Craft.t("app","Rename folder"),t);if(e&&e!==t){var s={folderId:this._getFolderIdFromSourceKey(i.data("key")),newName:e};this.setIndexBusy(),Craft.postActionRequest("assets/rename-folder",s,p.proxy(function(t,e){this.setIndexAvailable(),"success"===e&&t.success&&(i.text(t.newName),this._getFolderIdFromSourceKey(this.sourceSelect.$selectedItems.data("key"))===this._getFolderIdFromSourceKey(i.data("key"))&&this.updateElements()),"success"===e&&t.error&&alert(t.error)},this),"json")}},_prepareParentForChildren:function(t){this._hasSubfolders(t)||(t.parent().addClass("expanded").append('<div class="toggle"></div><ul></ul>'),this.initSourceToggle(t))},_appendSubfolder:function(t,e){for(var i=t.siblings("ul").children("li"),s=p.trim(e.children("a:first").text()),n=!1,a=0;a<i.length;a++){var r=p(i[a]);if(p.trim(r.children("a:first").text())>s){r.before(e),n=!0;break}}n||t.siblings("ul").append(e)},_cleanUpTree:function(t){null!==t&&0===t.siblings("ul").children("li").length&&(this.deinitSourceToggle(t),t.siblings("ul").remove(),t.siblings(".toggle").remove(),t.parent().removeClass("expanded"))},_positionProgressBar:function(){this.progressBar||(this.progressBar=new Craft.ProgressBar(this.$main,!0));var t=p(),e=0,i=0,s=(e="index"===this.settings.context?(t=this.progressBar.$progressBar.closest("#content"),Garnish.$win.scrollTop()):(t=this.progressBar.$progressBar.closest(".main"),this.$main.scrollTop()))-t.offset().top,n=Garnish.$win.height();i=t.height()>n?n/2-6+s:t.height()/2-6,"index"!==this.settings.context&&(i=e+(t.height()/2-6)),this.progressBar.$progressBar.css({top:i})},_performBatchRequests:function(i,s){for(var n=[],t=function(t){Craft.postActionRequest(t.action,t.params,function(t,e){this.progressBar.incrementProcessedItemCount(1),this.progressBar.updateProgressBar(),"success"===e&&(n.push(t),Craft.cp.runQueue()),n.length>=i.length&&s(n)}.bind(this))}.bind(this),e=0;e<i.length;e++)t(i[e])}}),Craft.registerElementIndexClass("craft\\elements\\Asset",Craft.AssetIndex),Craft.AssetSelectInput=Craft.BaseElementSelectInput.extend({requestId:0,hud:null,uploader:null,progressBar:null,originalFilename:"",originalExtension:"",init:function(){0<arguments.length&&"object"==typeof arguments[0]&&(arguments[0].editorSettings={onShowHud:p.proxy(this.resetOriginalFilename,this),onCreateForm:p.proxy(this._renameHelper,this),validators:[p.proxy(this.validateElementForm,this)]}),this.base.apply(this,arguments),this._attachUploader(),this.addListener(this.$elementsContainer,"keydown",this._onKeyDown.bind(this)),this.elementSelect.on("focusItem",this._onElementFocus.bind(this))},_onKeyDown:function(t){if(t.keyCode===Garnish.SPACE_KEY&&t.shiftKey){if(Craft.PreviewFileModal.openInstance)Craft.PreviewFileModal.openInstance.selfDestruct();else{var e=this.elementSelect.$focusedItem;e.length&&this._loadPreview(e)}return t.stopPropagation(),!1}},_onElementFocus:function(t){var e=p(t.item);Craft.PreviewFileModal.openInstance&&e.length&&this._loadPreview(e)},_loadPreview:function(t){var e={};t.data("image-width")&&(e.startingWidth=t.data("image-width"),e.startingHeight=t.data("image-height")),new Craft.PreviewFileModal(t.data("id"),this.elementSelect,e)},createElementEditor:function(t){return Craft.createElementEditor(this.settings.elementType,t,{params:{defaultFieldLayoutId:this.settings.defaultFieldLayoutId}})},_attachUploader:function(){this.progressBar=new Craft.ProgressBar(p('<div class="progress-shade"></div>').appendTo(this.$container));var t={url:Craft.getActionUrl("assets/save-asset"),dropZone:this.$container,formData:{fieldId:this.settings.fieldId,elementId:this.settings.sourceElementId}};void 0!==Craft.csrfTokenName&&void 0!==Craft.csrfTokenValue&&(t.formData[Craft.csrfTokenName]=Craft.csrfTokenValue),void 0!==this.settings.criteria.kind&&(t.allowedKinds=this.settings.criteria.kind),t.canAddMoreFiles=p.proxy(this,"canAddMoreFiles"),t.events={},t.events.fileuploadstart=p.proxy(this,"_onUploadStart"),t.events.fileuploadprogressall=p.proxy(this,"_onUploadProgress"),t.events.fileuploaddone=p.proxy(this,"_onUploadComplete"),this.uploader=new Craft.Uploader(this.$container,t)},selectUploadedFile:function(t){if(this.canAddMoreElements()){var e=t.$element;e.addClass("removable"),e.prepend('<input type="hidden" name="'+this.settings.name+'[]" value="'+t.id+'"><a class="delete icon" title="'+Craft.t("app","Remove")+'"></a>'),e.appendTo(this.$elementsContainer);var i=-(e.outerWidth()+10);this.$addElementBtn.css("margin-"+Craft.left,i+"px");var s={};s["margin-"+Craft.left]=0,this.$addElementBtn.velocity(s,"fast"),this.addElements(e),delete this.modal}},_onUploadStart:function(){this.progressBar.$progressBar.css({top:Math.round(this.$container.outerHeight()/2)-6}),this.$container.addClass("uploading"),this.progressBar.resetProgressBar(),this.progressBar.showProgressBar()},_onUploadProgress:function(t,e){var i=parseInt(e.loaded/e.total*100,10);this.progressBar.setProgressPercentage(i)},_onUploadComplete:function(t,e){if(e.result.error)alert(e.result.error);else{var i=e.result.assetId;Craft.postActionRequest("elements/get-element-html",{elementId:i,siteId:this.settings.criteria.siteId},function(t){if(t.error)alert(t.error);else{var e=p(t.html);Craft.appendHeadHtml(t.headHtml),this.selectUploadedFile(Craft.getElementInfo(e))}this.uploader.isLastUpload()&&(this.progressBar.hideProgressBar(),this.$container.removeClass("uploading"))}.bind(this)),Craft.cp.runQueue()}},canAddMoreFiles:function(t){return!this.settings.limit||this.$elements.length+t<this.settings.limit},_parseFilename:function(t){var e=t.split("."),i="";return 1<e.length&&(i=e.pop()),{extension:i,baseFileName:e.join(".")}},_renameHelper:function(t){p(".renameHelper",t).on("focus",p.proxy(function(t){var e=t.currentTarget,i=this._parseFilename(e.value);""===this.originalFilename&&""===this.originalExtension&&(this.originalFilename=i.baseFileName,this.originalExtension=i.extension);var s=i.baseFileName.length;if(void 0!==e.selectionStart)e.selectionStart=0,e.selectionEnd=s;else if(document.selection&&document.selection.createRange){e.select();var n=document.selection.createRange();n.collapse(!0),n.moveEnd("character",s),n.moveStart("character",0),n.select()}},this))},resetOriginalFilename:function(){this.originalFilename="",this.originalExtension=""},validateElementForm:function(){var t=p(".renameHelper",this.elementEditor.hud.$hud.data("elementEditor").$form),e=this._parseFilename(t.val());return e.extension===this.originalExtension||(""===e.extension?this.originalFilename!==e.baseFileName?(t.val(e.baseFileName+"."+this.originalExtension),!0):confirm(Craft.t("app","Are you sure you want to remove the extension “.{ext}”?",{ext:this.originalExtension})):confirm(Craft.t("app","Are you sure you want to change the extension from “.{oldExt}” to “.{newExt}”?",{oldExt:this.originalExtension,newExt:e.extension})))}}),Craft.AssetSelectorModal=Craft.BaseElementSelectorModal.extend({$selectTransformBtn:null,_selectedTransform:null,init:function(t,e){e=p.extend({},Craft.AssetSelectorModal.defaults,e),this.base(t,e),e.transforms.length&&this.createSelectTransformButton(e.transforms)},createSelectTransformButton:function(t){if(t&&t.length){var e=p('<div class="btngroup"/>').appendTo(this.$primaryButtons);this.$selectBtn.appendTo(e),this.$selectTransformBtn=p('<div class="btn menubtn disabled">'+Craft.t("app","Select transform")+"</div>").appendTo(e);for(var i=p('<div class="menu" data-align="right"></div>').insertAfter(this.$selectTransformBtn),s=p("<ul></ul>").appendTo(i),n=0;n<t.length;n++)p('<li><a data-transform="'+t[n].handle+'">'+t[n].name+"</a></li>").appendTo(s);var a=new Garnish.MenuBtn(this.$selectTransformBtn,{onOptionSelect:p.proxy(this,"onSelectTransform")});a.disable(),this.$selectTransformBtn.data("menuButton",a)}},onSelectionChange:function(t){var e=this.elementIndex.getSelectedElements(),i=!1;if(e.length&&this.settings.transforms.length){i=!0;for(var s=0;s<e.length&&p(".element.hasthumb:first",e[s]).length;s++);}var n=null;this.$selectTransformBtn&&(n=this.$selectTransformBtn.data("menuButton")),i?(n&&n.enable(),this.$selectTransformBtn.removeClass("disabled")):this.$selectTransformBtn&&(n&&n.disable(),this.$selectTransformBtn.addClass("disabled")),this.base()},onSelectTransform:function(t){var e=p(t).data("transform");this.selectImagesWithTransform(e)},selectImagesWithTransform:function(t){void 0===Craft.AssetSelectorModal.transformUrls[t]&&(Craft.AssetSelectorModal.transformUrls[t]={});for(var e=this.elementIndex.getSelectedElements(),i=[],s=0;s<e.length;s++){var n=p(e[s]),a=Craft.getElementInfo(n).id;void 0===Craft.AssetSelectorModal.transformUrls[t][a]&&i.push(a)}i.length?(this.showFooterSpinner(),this.fetchMissingTransformUrls(i,t,p.proxy(function(){this.hideFooterSpinner(),this.selectImagesWithTransform(t)},this))):(this._selectedTransform=t,this.selectElements(),this._selectedTransform=null)},fetchMissingTransformUrls:function(i,s,n){var a=i.pop(),t={assetId:a,handle:s};Craft.postActionRequest("assets/generate-transform",t,p.proxy(function(t,e){Craft.AssetSelectorModal.transformUrls[s][a]=!1,"success"===e&&t.url&&(Craft.AssetSelectorModal.transformUrls[s][a]=t.url),i.length?this.fetchMissingTransformUrls(i,s,n):n()},this))},getElementInfo:function(t){var e=this.base(t);if(this._selectedTransform)for(var i=0;i<e.length;i++){var s=e[i].id;void 0!==Craft.AssetSelectorModal.transformUrls[this._selectedTransform][s]&&!1!==Craft.AssetSelectorModal.transformUrls[this._selectedTransform][s]&&(e[i].url=Craft.AssetSelectorModal.transformUrls[this._selectedTransform][s])}return e},onSelect:function(t){this.settings.onSelect(t,this._selectedTransform)}},{defaults:{canSelectImageTransforms:!1,transforms:[]},transformUrls:{}}),Craft.registerElementSelectorModalClass("craft\\elements\\Asset",Craft.AssetSelectorModal),Craft.AuthManager=Garnish.Base.extend({remainingSessionTime:null,checkRemainingSessionTimer:null,showLoginModalTimer:null,decrementLogoutWarningInterval:null,showingLogoutWarningModal:!1,showingLoginModal:!1,logoutWarningModal:null,loginModal:null,$logoutWarningPara:null,$passwordInput:null,$passwordSpinner:null,$loginBtn:null,$loginErrorPara:null,submitLoginIfLoggedOut:!1,init:function(){this.updateRemainingSessionTime(Craft.remainingSessionTime)},setCheckRemainingSessionTimer:function(t){this.checkRemainingSessionTimer&&clearTimeout(this.checkRemainingSessionTimer),this.checkRemainingSessionTimer=setTimeout(p.proxy(this,"checkRemainingSessionTime"),1e3*t)},checkRemainingSessionTime:function(t){p.ajax({url:Craft.getActionUrl("users/get-remaining-session-time",t?null:"dontExtendSession=1"),type:"GET",dataType:"json",complete:p.proxy(function(t,e){"success"===e?(void 0!==t.responseJSON.csrfTokenValue&&void 0!==Craft.csrfTokenValue&&(Craft.csrfTokenValue=t.responseJSON.csrfTokenValue),this.updateRemainingSessionTime(t.responseJSON.timeout),this.submitLoginIfLoggedOut=!1):this.updateRemainingSessionTime(-1)},this)})},updateRemainingSessionTime:function(t){this.remainingSessionTime=parseInt(t),-1!==this.remainingSessionTime&&this.remainingSessionTime<Craft.AuthManager.minSafeSessiotTime?(this.remainingSessionTime?(this.showingLogoutWarningModal||this.showLogoutWarningModal(),this.remainingSessionTime<Craft.AuthManager.checkInterval&&(this.showLoginModalTimer&&clearTimeout(this.showLoginModalTimer),this.showLoginModalTimer=setTimeout(p.proxy(this,"showLoginModal"),1e3*this.remainingSessionTime))):this.showingLoginModal?this.submitLoginIfLoggedOut&&this.submitLogin():this.showLoginModal(),this.setCheckRemainingSessionTimer(Craft.AuthManager.checkInterval)):(this.hideLogoutWarningModal(),this.hideLoginModal(),-1!==this.remainingSessionTime&&this.remainingSessionTime<Craft.AuthManager.minSafeSessiotTime+Craft.AuthManager.checkInterval?this.setCheckRemainingSessionTimer(this.remainingSessionTime-Craft.AuthManager.minSafeSessiotTime+1):this.setCheckRemainingSessionTimer(Craft.AuthManager.checkInterval))},showLogoutWarningModal:function(){var t;if(t=!!this.showingLoginModal&&(this.hideLoginModal(!0),!0),this.showingLogoutWarningModal=!0,!this.logoutWarningModal){var e=p('<form id="logoutwarningmodal" class="modal alert fitted"/>'),i=p('<div class="body"/>').appendTo(e),s=p('<div class="buttons right"/>').appendTo(i),n=p('<div class="btn">'+Craft.t("app","Log out now")+"</div>").appendTo(s),a=p('<input type="submit" class="btn submit" value="'+Craft.t("app","Keep me logged in")+'" />').appendTo(s);this.$logoutWarningPara=p("<p/>").prependTo(i),this.logoutWarningModal=new Garnish.Modal(e,{autoShow:!1,closeOtherModals:!1,hideOnEsc:!1,hideOnShadeClick:!1,shadeClass:"modal-shade dark logoutwarningmodalshade",onFadeIn:function(){Garnish.isMobileBrowser(!0)||setTimeout(function(){a.trigger("focus")},100)}}),this.addListener(n,"activate","logout"),this.addListener(e,"submit","renewSession")}t?this.logoutWarningModal.quickShow():this.logoutWarningModal.show(),this.updateLogoutWarningMessage(),this.decrementLogoutWarningInterval=setInterval(p.proxy(this,"decrementLogoutWarning"),1e3)},updateLogoutWarningMessage:function(){this.$logoutWarningPara.text(Craft.t("app","Your session will expire in {time}.",{time:Craft.secondsToHumanTimeDuration(this.remainingSessionTime)})),this.logoutWarningModal.updateSizeAndPosition()},decrementLogoutWarning:function(){0<this.remainingSessionTime&&(this.remainingSessionTime--,this.updateLogoutWarningMessage()),0===this.remainingSessionTime&&clearInterval(this.decrementLogoutWarningInterval)},hideLogoutWarningModal:function(t){this.showingLogoutWarningModal=!1,this.logoutWarningModal&&(t?this.logoutWarningModal.quickHide():this.logoutWarningModal.hide(),this.decrementLogoutWarningInterval&&clearInterval(this.decrementLogoutWarningInterval))},showLoginModal:function(){var t;if(t=!!this.showingLogoutWarningModal&&(this.hideLogoutWarningModal(!0),!0),this.showingLoginModal=!0,!this.loginModal){var e=p('<form id="loginmodal" class="modal alert fitted"/>'),i=p('<div class="body"><h2>'+Craft.t("app","Your session has ended.")+"</h2><p>"+Craft.t("app","Enter your password to log back in.")+"</p></div>").appendTo(e),s=p('<div class="inputcontainer">').appendTo(i),n=p('<div class="flex"/>').appendTo(s),a=p('<div class="flex-grow"/>').appendTo(n),r=p("<div/>").appendTo(n),o=p('<div class="passwordwrapper"/>').appendTo(a);this.$passwordInput=p('<input type="password" class="text password fullwidth" placeholder="'+Craft.t("app","Password")+'"/>').appendTo(o),this.$passwordSpinner=p('<div class="spinner hidden"/>').appendTo(s),this.$loginBtn=p('<input type="submit" class="btn submit disabled" value="'+Craft.t("app","Login")+'" />').appendTo(r),this.$loginErrorPara=p('<p class="error"/>').appendTo(i),this.loginModal=new Garnish.Modal(e,{autoShow:!1,closeOtherModals:!1,hideOnEsc:!1,hideOnShadeClick:!1,shadeClass:"modal-shade dark loginmodalshade",onFadeIn:p.proxy(function(){Garnish.isMobileBrowser(!0)||setTimeout(p.proxy(function(){this.$passwordInput.trigger("focus")},this),100)},this),onFadeOut:p.proxy(function(){this.$passwordInput.val("")},this)}),new Craft.PasswordInput(this.$passwordInput,{onToggleInput:p.proxy(function(t){this.$passwordInput=t},this)}),this.addListener(this.$passwordInput,"textchange","validatePassword"),this.addListener(e,"submit","login")}t?this.loginModal.quickShow():this.loginModal.show()},hideLoginModal:function(t){this.showingLoginModal=!1,this.loginModal&&(t?this.loginModal.quickHide():this.loginModal.hide())},logout:function(){p.get({url:Craft.getActionUrl("users/logout"),dataType:"json",success:p.proxy(function(){Craft.redirectTo("")},this)})},renewSession:function(t){t&&t.preventDefault(),this.hideLogoutWarningModal(),this.checkRemainingSessionTime(!0)},validatePassword:function(){return 6<=this.$passwordInput.val().length?(this.$loginBtn.removeClass("disabled"),!0):(this.$loginBtn.addClass("disabled"),!1)},login:function(t){t&&t.preventDefault(),this.validatePassword()&&(this.$passwordSpinner.removeClass("hidden"),this.clearLoginError(),void 0!==Craft.csrfTokenValue?(this.submitLoginIfLoggedOut=!0,this.checkRemainingSessionTime()):this.submitLogin())},submitLogin:function(){var t={loginName:Craft.username,password:this.$passwordInput.val()};Craft.postActionRequest("users/login",t,p.proxy(function(t,e){this.$passwordSpinner.addClass("hidden"),"success"===e?t.success?(this.hideLoginModal(),this.checkRemainingSessionTime()):(this.showLoginError(t.error),Garnish.shake(this.loginModal.$container),Garnish.isMobileBrowser(!0)||this.$passwordInput.trigger("focus")):this.showLoginError()},this))},showLoginError:function(t){null==t&&(t=Craft.t("app","An unknown error occurred.")),this.$loginErrorPara.text(t),this.loginModal.updateSizeAndPosition()},clearLoginError:function(){this.showLoginError("")}},{checkInterval:60,minSafeSessiotTime:120}),Craft.CategoryIndex=Craft.BaseElementIndex.extend({editableGroups:null,$newCategoryBtnGroup:null,$newCategoryBtn:null,init:function(t,e,i){this.on("selectSource",p.proxy(this,"updateButton")),this.on("selectSite",p.proxy(this,"updateButton")),this.base(t,e,i)},afterInit:function(){this.editableGroups=[];for(var t=0;t<Craft.editableCategoryGroups.length;t++){var e=Craft.editableCategoryGroups[t];this.getSourceByKey("group:"+e.id)&&this.editableGroups.push(e)}this.base()},getDefaultSourceKey:function(){if("index"===this.settings.context&&"undefined"!=typeof defaultGroupHandle)for(var t=0;t<this.$sources.length;t++){var e=p(this.$sources[t]);if(e.data("handle")===defaultGroupHandle)return e.data("key")}return this.base()},updateButton:function(){if(this.$source){var t,e,i,s=this.$source.data("handle");if(this.editableGroups.length){var n,a;if(this.$newCategoryBtnGroup&&this.$newCategoryBtnGroup.remove(),s)for(t=0;t<this.editableGroups.length;t++)if(this.editableGroups[t].handle===s){n=this.editableGroups[t];break}if(this.$newCategoryBtnGroup=p('<div class="btngroup submit"/>'),n?(e=this._getGroupTriggerHref(n),i="index"===this.settings.context?Craft.t("app","New category"):Craft.t("app","New {group} category",{group:n.name}),this.$newCategoryBtn=p('<a class="btn submit add icon" '+e+">"+Craft.escapeHtml(i)+"</a>").appendTo(this.$newCategoryBtnGroup),"index"!==this.settings.context&&this.addListener(this.$newCategoryBtn,"click",function(t){this._openCreateCategoryModal(t.currentTarget.getAttribute("data-id"))}),1<this.editableGroups.length&&(a=p('<div class="btn submit menubtn"></div>').appendTo(this.$newCategoryBtnGroup))):this.$newCategoryBtn=a=p('<div class="btn submit add icon menubtn">'+Craft.t("app","New category")+"</div>").appendTo(this.$newCategoryBtnGroup),a){var r='<div class="menu"><ul>';for(t=0;t<this.editableGroups.length;t++){var o=this.editableGroups[t];"index"!==this.settings.context&&o===n||(e=this._getGroupTriggerHref(o),i="index"===this.settings.context?o.name:Craft.t("app","New {group} category",{group:o.name}),r+="<li><a "+e+'">'+Craft.escapeHtml(i)+"</a></li>")}p(r+="</ul></div>").appendTo(this.$newCategoryBtnGroup);var l=new Garnish.MenuBtn(a);"index"!==this.settings.context&&l.on("optionSelect",p.proxy(function(t){this._openCreateCategoryModal(t.option.getAttribute("data-id"))},this))}this.addButton(this.$newCategoryBtnGroup)}if("index"===this.settings.context&&"undefined"!=typeof history){var h="categories";s&&(h+="/"+s),history.replaceState({},"",Craft.getUrl(h))}}},_getGroupTriggerHref:function(t){if("index"!==this.settings.context)return'data-id="'+t.id+'"';var e="categories/"+t.handle+"/new";if(this.siteId&&this.siteId!=Craft.primarySiteId)for(var i=0;i<Craft.sites.length;i++)Craft.sites[i].id==this.siteId&&(e+="/"+Craft.sites[i].handle);return'href="'+Craft.getUrl(e)+'"'},_openCreateCategoryModal:function(i){if(!this.$newCategoryBtn.hasClass("loading")){for(var t,e=0;e<this.editableGroups.length;e++)if(this.editableGroups[e].id==i){t=this.editableGroups[e];break}if(t){this.$newCategoryBtn.addClass("inactive");var s=this.$newCategoryBtn.text();this.$newCategoryBtn.text(Craft.t("app","New {group} category",{group:t.name})),Craft.createElementEditor(this.elementType,{hudTrigger:this.$newCategoryBtnGroup,elementType:"craft\\elements\\Category",siteId:this.siteId,attributes:{groupId:i},onBeginLoading:p.proxy(function(){this.$newCategoryBtn.addClass("loading")},this),onEndLoading:p.proxy(function(){this.$newCategoryBtn.removeClass("loading")},this),onHideHud:p.proxy(function(){this.$newCategoryBtn.removeClass("inactive").text(s)},this),onSaveElement:p.proxy(function(t){var e="group:"+i;this.sourceKey!==e&&this.selectSourceByKey(e),this.selectElementAfterUpdate(t.id),this.updateElements()},this)})}}}}),Craft.registerElementIndexClass("craft\\elements\\Category",Craft.CategoryIndex),Craft.CategorySelectInput=Craft.BaseElementSelectInput.extend({setSettings:function(){this.base.apply(this,arguments),this.settings.sortable=!1},getModalSettings:function(){var t=this.base();return t.hideOnSelect=!1,t},getElements:function(){return this.$elementsContainer.find(".element")},onModalSelect:function(o){this.modal.disable(),this.modal.disableCancelBtn(),this.modal.disableSelectBtn(),this.modal.showFooterSpinner();for(var t=this.getSelectedElementIds(),e=0;e<o.length;e++)t.push(o[e].id);var i={categoryIds:t,siteId:o[0].siteId,id:this.settings.id,name:this.settings.name,branchLimit:this.settings.branchLimit,selectionLabel:this.settings.selectionLabel};Craft.postActionRequest("elements/get-categories-input-html",i,p.proxy(function(t,e){if(this.modal.enable(),this.modal.enableCancelBtn(),this.modal.enableSelectBtn(),this.modal.hideFooterSpinner(),"success"===e){var i=p(t.html).children(".elements");this.$elementsContainer.replaceWith(i),this.$elementsContainer=i,this.resetElements();for(var s=[],n=0;n<o.length;n++){var a=o[n],r=this.getElementById(a.id);r&&(this.animateElementIntoPlace(a.$element,r),s.push(a))}this.updateDisabledElementsInModal(),this.modal.hide(),this.onSelectElements(s)}},this))},removeElement:function(t){var e=t.add(t.parent().siblings("ul").find(".element"));this.removeElements(e);for(var i=0;i<e.length;i++)this._animateCategoryAway(e,i)},_animateCategoryAway:function(i,t){var e;t===i.length-1&&(e=p.proxy(function(){var t=i.first().parent().parent(),e=t.parent();e[0]===this.$elementsContainer[0]||t.siblings().length?t.remove():e.remove()},this));var s=p.proxy(function(){this.animateElementAway(i.eq(t),e)},this);0===t?s():setTimeout(s,100*t)}}),Craft.charts={},Craft.charts.DataTable=Garnish.Base.extend({columns:null,rows:null,init:function(t){columns=t.columns,rows=t.rows,rows.forEach(p.proxy(function(i){p.each(i,function(t){var e;switch(columns[t].type){case"date":e=d3.timeParse("%Y-%m-%d"),i[t]=e(i[t]);break;case"datetime":e=d3.timeParse("%Y-%m-%d %H:00:00"),i[t]=e(i[t]);break;case"percent":i[t]=i[t]/100;break;case"number":i[t]=+i[t]}})},this)),this.columns=columns,this.rows=rows}}),Craft.charts.Tip=Garnish.Base.extend({$container:null,$tip:null,init:function(t){this.$container=t,this.$tip=p('<div class="tooltip"></div>').appendTo(this.$container),this.hide()},setContent:function(t){this.$tip.html(t)},setPosition:function(t){this.$tip.css("left",t.left+"px"),this.$tip.css("top",t.top+"px")},show:function(){this.$tip.css("display","block")},hide:function(){this.$tip.css("display","none")}}),Craft.charts.BaseChart=Garnish.Base.extend({$container:null,$chart:null,chartBaseClass:"cp-chart",dataTable:null,formatLocale:null,timeFormatLocale:null,orientation:null,svg:null,width:null,height:null,init:function(t,e){this.$container=t,this.setSettings(Craft.charts.BaseChart.defaults),this.setSettings(e);var i={formats:window.d3Formats,formatLocaleDefinition:window.d3FormatLocaleDefinition,timeFormatLocaleDefinition:window.d3TimeFormatLocaleDefinition};this.setSettings(i),d3.select(window).on("resize",p.proxy(function(){this.resize()},this))},setSettings:function(t,e){var i=void 0===this.settings?{}:this.settings;this.settings=p.extend(!0,{},i,e,t)},draw:function(t,e){this.setSettings(e),this.dataTable=t,this.formatLocale=d3.formatLocale(this.settings.formatLocaleDefinition),this.timeFormatLocale=d3.timeFormatLocale(this.settings.timeFormatLocaleDefinition),this.orientation=this.settings.orientation,this.$chart&&this.$chart.remove();var i=this.chartBaseClass;this.settings.chartClass&&(i+=" "+this.settings.chartClass),this.$chart=p('<div class="'+i+'" />').appendTo(this.$container)},resize:function(){this.draw(this.dataTable,this.settings)},onAfterDrawTicks:function(){p(".tick",this.$chart).each(function(t,e){var i=p("text",e);i.clone().appendTo(e),i.attr("stroke","#ffffff"),i.attr("stroke-width",3)})}},{defaults:{formatLocaleDefinition:null,timeFormatLocaleDefinition:null,formats:{numberFormat:",.2f",percentFormat:",.2%",currencyFormat:"$,.2f",shortDateFormats:{day:"%-m/%-d",month:"%-m/%y",year:"%Y"}},margin:{top:0,right:0,bottom:0,left:0},chartClass:null,colors:["#0594D1","#DE3800","#FF9A00","#009802","#9B009B"]}}),Craft.charts.Area=Craft.charts.BaseChart.extend({tip:null,drawingArea:null,init:function(t,e){this.base(t,Craft.charts.Area.defaults),this.setSettings(e)},draw:function(t,e){this.base(t,e),this.tip&&(this.tip=null);var i=this.getChartMargin();this.width=this.$chart.width()-i.left-i.right,this.height=this.$chart.height()-i.top-i.bottom;var s={width:this.width+(i.left+i.right),height:this.height+(i.top+i.bottom),translateX:"rtl"!==this.orientation?i.left:i.right,translateY:i.top};this.svg=d3.select(this.$chart.get(0)).append("svg").attr("width",s.width).attr("height",s.height),this.drawingArea=this.svg.append("g").attr("transform","translate("+s.translateX+","+s.translateY+")"),this.drawTicks(),this.drawAxes(),this.drawChart(),this.drawTipTriggers()},drawTicks:function(){var t=this.getX(!0),e=d3.axisBottom(t).tickFormat(this.getXFormatter()).ticks(3);this.drawingArea.append("g").attr("class","x ticks-axis").attr("transform","translate(0, "+this.height+")").call(e);var i,s=this.getY();"rtl"!==this.orientation?(i=d3.axisLeft(s).tickFormat(this.getYFormatter()).tickValues(this.getYTickValues()).ticks(2),this.drawingArea.append("g").attr("class","y ticks-axis").call(i)):(i=d3.axisRight(s).tickFormat(this.getYFormatter()).tickValues(this.getYTickValues()).ticks(2),this.drawingArea.append("g").attr("class","y ticks-axis").attr("transform","translate("+this.width+",0)").call(i)),this.onAfterDrawTicks()},drawAxes:function(){if(this.settings.xAxis.showAxis){var t=this.getX(),e=d3.axisBottom(t).ticks(0).tickSizeOuter(0);this.drawingArea.append("g").attr("class","x axis").attr("transform","translate(0, "+this.height+")").call(e)}if(this.settings.yAxis.showAxis){var i,s=this.getY();"rtl"===this.orientation?(i=d3.axisLeft(s).ticks(0),this.drawingArea.append("g").attr("class","y axis").attr("transform","translate("+(this.width-0)+", 0)").call(i)):(i=d3.axisRight(s).ticks(0),this.drawingArea.append("g").attr("class","y axis").attr("transform","translate(0, 0)").call(i))}},drawChart:function(){var e=this.getX(!0),i=this.getY();if(this.settings.xAxis.gridlines){var t=d3.axisBottom(e);this.drawingArea.append("g").attr("class","x grid-line").attr("transform","translate(0,"+this.height+")").call(t.tickSize(-this.height,0,0).tickFormat(""))}if(this.settings.yAxis.gridlines){var s=d3.axisLeft(i);this.drawingArea.append("g").attr("class","y grid-line").attr("transform","translate(0 , 0)").call(s.tickSize(-this.width,0).tickFormat("").tickValues(this.getYTickValues()).ticks(2))}var n=d3.line().x(function(t){return e(t[0])}).y(function(t){return i(t[1])});this.drawingArea.append("g").attr("class","chart-line").append("path").datum(this.dataTable.rows).style("fill","none").style("stroke",this.settings.colors[0]).style("stroke-width","3px").attr("d",n);var a=d3.area().x(function(t){return e(t[0])}).y0(this.height).y1(function(t){return i(t[1])});this.drawingArea.append("g").attr("class","chart-area").append("path").datum(this.dataTable.rows).style("fill",this.settings.colors[0]).style("fill-opacity","0.3").attr("d",a),this.settings.plots&&this.drawingArea.append("g").attr("class","plots").selectAll("circle").data(this.dataTable.rows).enter().append("circle").style("fill",this.settings.colors[0]).attr("class",p.proxy(function(t,e){return"plot plot-"+e},this)).attr("r",4).attr("cx",p.proxy(function(t){return e(t[0])},this)).attr("cy",p.proxy(function(t){return i(t[1])},this))},drawTipTriggers:function(){if(this.settings.tips){this.tip||(this.tip=new Craft.charts.Tip(this.$chart));var t=this.getChartMargin(),e=(this.drawingArea.select(".x path.domain").node().getTotalLength()-t.left-t.right-12)/(this.dataTable.rows.length-1),i=Math.max(0,e),c=this.getX(!0),u=this.getY();this.drawingArea.append("g").attr("class","tip-triggers").selectAll("rect").data(this.dataTable.rows).enter().append("rect").attr("class","tip-trigger").style("fill","transparent").style("fill-opacity","1").attr("width",i).attr("height",this.height).attr("x",p.proxy(function(t){return c(t[0])-i/2},this)).on("mouseover",p.proxy(function(t,e){this.drawingArea.select(".plot-"+e).attr("r",5);var i=p("<div />"),s=p('<div class="x-value" />').appendTo(i),n=p('<div class="y-value" />').appendTo(i);s.html(this.getXFormatter()(t[0])),n.html(this.getYFormatter()(t[1]));var a=i.get(0);this.tip.setContent(a);var r,o=this.getChartMargin(),l=u(t[1])+24;if("rtl"!==this.orientation){r=c(t[0])+o.left+24;var h=this.$chart.offset().left+r+this.tip.$tip.width();this.$chart.offset().left+this.$chart.width()-24<h&&(r=c(t[0])-(this.tip.$tip.width()+24))}else r=c(t[0])-(this.tip.$tip.width()+o.left+24);r<0&&(r=c(t[0])+o.left+24);var d={top:l,left:r};this.tip.setPosition(d),this.tip.show()},this)).on("mouseout",p.proxy(function(t,e){this.drawingArea.select(".plot-"+e).attr("r",4),this.tip.hide()},this))}},getChartMargin:function(){var t=this.settings.margin,e=this.getYTickValues(),s=0;return p.each(e,p.proxy(function(t,e){var i=8*this.getYFormatter()(e).length;s<i&&(s=i)},this)),s+=10,t.left=s,t},getX:function(t){var e=d3.min(this.dataTable.rows,function(t){return t[0]}),i=d3.max(this.dataTable.rows,function(t){return t[0]}),s=[e,i];"rtl"===this.orientation&&(s=[i,e]);var n=0,a=0;t&&(a=n=0);var r=d3.scaleTime().range([n,this.width-a]);return r.domain(s),r},getY:function(){var t=[0,this.getYMaxValue()],e=d3.scaleLinear().range([this.height,0]);return e.domain(t),e},getXFormatter:function(){return this.settings.xAxis.formatter!==p.noop?this.settings.xAxis.formatter(this):Craft.charts.utils.getTimeFormatter(this.timeFormatLocale,this.settings)},getYFormatter:function(){return this.settings.yAxis.formatter!==p.noop?this.settings.yAxis.formatter(this):Craft.charts.utils.getNumberFormatter(this.formatLocale,this.dataTable.columns[1].type,this.settings)},getYMaxValue:function(){return d3.max(this.dataTable.rows,function(t){return t[1]})},getYTickValues:function(){var t=this.getYMaxValue();return 1<t?[t/2,t]:[0,t]}},{defaults:{chartClass:"area",margin:{top:25,right:5,bottom:25,left:0},plots:!0,tips:!0,xAxis:{gridlines:!1,showAxis:!0,formatter:p.noop},yAxis:{gridlines:!0,showAxis:!1,formatter:p.noop}}}),Craft.charts.utils={getDuration:function(t){var e=parseInt(t,10),i={hours:Math.floor(e/3600),minutes:Math.floor((e-3600*i.hours)/60),seconds:e-3600*i.hours-60*i.minutes};return i.hours<10&&(i.hours="0"+i.hours),i.minutes<10&&(i.minutes="0"+i.minutes),i.seconds<10&&(i.seconds="0"+i.seconds),i.hours+":"+i.minutes+":"+i.seconds},getTimeFormatter:function(t,e){switch(e.dataScale){case"year":return t.format("%Y");case"month":return t.format(e.formats.shortDateFormats.month);case"hour":return t.format(e.formats.shortDateFormats.day+" %H:00:00");default:return t.format(e.formats.shortDateFormats.day)}},getNumberFormatter:function(t,e,i){switch(e){case"currency":return t.format(i.formats.currencyFormat);case"percent":return t.format(i.formats.percentFormat);case"time":return Craft.charts.utils.getDuration;case"number":return t.format(i.formats.numberFormat)}}},Craft.ColorInput=Garnish.Base.extend({$container:null,$input:null,$colorContainer:null,$colorPreview:null,$colorInput:null,init:function(t){this.$container=p(t),this.$input=this.$container.children(".color-input"),this.$colorContainer=this.$container.children(".color"),this.$colorPreview=this.$colorContainer.children(".color-preview"),this.createColorInput(),this.handleTextChange(),this.addListener(this.$input,"textchange","handleTextChange")},createColorInput:function(){var t=document.createElement("input");t.setAttribute("type","color"),"color"===t.type&&(this.$colorContainer.removeClass("static"),this.$colorInput=p(t).addClass("hidden").insertAfter(this.$input),this.addListener(this.$colorContainer,"click",function(){this.$colorInput.trigger("click")}),this.addListener(this.$colorInput,"change","updateColor"))},updateColor:function(){this.$input.val(this.$colorInput.val()),this.$input.data("garnish-textchange-value",this.$colorInput.val()),this.handleTextChange()},handleTextChange:function(){var t=this.$input.val();t.length&&"#"!==t?("#"!==t[0]&&(t="#"+t,this.$input.val(t),this.$input.data("garnish-textchange-value",t)),this.$colorPreview.css("background-color",t),this.$colorInput&&this.$colorInput.val(t)):this.$colorPreview.css("background-color","")}},{_browserSupportsColorInputs:null,doesBrowserSupportColorInputs:function(){return Craft.ColorInput._browserSupportsColorInputs,Craft.ColorInput._browserSupportsColorInputs}}),Craft.CP=Garnish.Base.extend({authManager:null,$nav:null,$mainContainer:null,$alerts:null,$crumbs:null,$notificationContainer:null,$main:null,$primaryForm:null,$header:null,$mainContent:null,$details:null,$selectedTab:null,$sidebar:null,$contentContainer:null,$edition:null,$collapsibleTables:null,fixedHeader:!1,enableQueue:!0,jobInfo:null,displayedJobInfo:null,displayedJobInfoUnchanged:1,trackJobProgressTimeout:null,jobProgressIcon:null,checkingForUpdates:!1,forcingRefreshOnUpdatesCheck:!1,checkForUpdatesCallbacks:null,init:function(){0!==Craft.remainingSessionTime&&(this.authManager=new Craft.AuthManager),this.$nav=p("#nav"),this.$mainContainer=p("#main-container"),this.$alerts=p("#alerts"),this.$crumbs=p("#crumbs"),this.$notificationContainer=p("#notifications"),this.$main=p("#main"),this.$primaryForm=p("#main-form"),this.$header=p("#header"),this.$mainContent=p("#main-content"),this.$details=p("#details"),this.$sidebar=p("#sidebar"),this.$contentContainer=p("#content-container"),this.$collapsibleTables=p("table.collapsible"),this.$edition=p("#edition"),this.updateSidebarMenuLabel(),this.addListener(Garnish.$win,"scroll","updateFixedHeader"),this.updateFixedHeader(),Garnish.$doc.ready(p.proxy(function(){this.addListener(Garnish.$win,"resize","updateResponsiveTables"),this.updateResponsiveTables();var t=this.$notificationContainer.children(".error"),e=this.$notificationContainer.children(":not(.error)");t.delay(2*Craft.CP.notificationDuration).velocity("fadeOut"),e.delay(Craft.CP.notificationDuration).velocity("fadeOut"),Garnish.requestAnimationFrame(p.proxy(this,"initConfirmUnloadForms"))},this)),this.$alerts.length&&this.initAlerts(),this.addListener(p("#nav-toggle"),"click","toggleNav"),this.addListener(p("#sidebar-toggle"),"click","toggleSidebar"),this.$primaryForm.length||(this.$primaryForm=p("form[data-saveshortcut]:first")),this.$primaryForm.length&&Garnish.hasAttr(this.$primaryForm,"data-saveshortcut")&&this.addListener(Garnish.$doc,"keydown",function(t){return Garnish.isCtrlKeyPressed(t)&&t.keyCode===Garnish.S_KEY&&(t.preventDefault(),this.submitPrimaryForm()),!0}),this.initTabs(),this.$edition.hasClass("hot")&&this.addListener(this.$edition,"click",function(){document.location.href=Craft.getUrl("plugin-store/upgrade-craft")}),p.isTouchCapable()&&(this.$mainContainer.on("focus","input, textarea, .focusable-input",p.proxy(this,"_handleInputFocus")),this.$mainContainer.on("blur","input, textarea, .focusable-input",p.proxy(this,"_handleInputBlur"))),p("a").each(function(){this.hostname.length&&this.hostname!==location.hostname&&void 0===p(this).attr("target")&&p(this).attr("rel","noopener").attr("target","_blank")})},initConfirmUnloadForms:function(){if(this.$confirmUnloadForms=p("form[data-confirm-unload]"),this.$confirmUnloadForms.length){Craft.forceConfirmUnload||(this.initialFormValues=[]);for(var t=0;t<this.$confirmUnloadForms.length;t++){var e=p(this.$confirmUnloadForms);Craft.forceConfirmUnload||(this.initialFormValues[t]=e.serialize()),this.addListener(e,"submit",function(){this.removeListener(Garnish.$win,"beforeunload")})}this.addListener(Garnish.$win,"beforeunload",function(t){var e=!1;if(Craft.forceConfirmUnload||void 0!==Craft.livePreview&&Craft.livePreview.inPreviewMode)e=!0;else for(var i=0;i<this.$confirmUnloadForms.length;i++)if(this.initialFormValues[i]!==p(this.$confirmUnloadForms[i]).serialize()){e=!0;break}if(e){var s=Craft.t("app","Any changes will be lost if you leave this page.");return t?t.originalEvent.returnValue=s:window.event.returnValue=s,s}})}},_handleInputFocus:function(){this.updateFixedHeader()},_handleInputBlur:function(){this.updateFixedHeader()},submitPrimaryForm:function(){this.trigger("beforeSaveShortcut"),this.$primaryForm.data("saveshortcut-redirect")&&p('<input type="hidden" name="redirect" value="'+this.$primaryForm.data("saveshortcut-redirect")+'"/>').appendTo(this.$primaryForm),this.$primaryForm.trigger("submit")},updateSidebarMenuLabel:function(){var t=this.$sidebar.find("a.sel:first"),e=t.children(".label");p("#selected-sidebar-item-label").text(e.length?e.text():t.text()),Garnish.$bod.removeClass("showing-sidebar")},toggleNav:function(){Garnish.$bod.toggleClass("showing-nav")},toggleSidebar:function(){Garnish.$bod.toggleClass("showing-sidebar")},initTabs:function(){this.$selectedTab=null;var t,e,i,s=p("#tabs").find("> ul > li"),n=[],a=[],r=0;for(t=0;t<s.length;t++)n[t]=p(s[t]),a[t]=n[t].width(),r+=a[t],(i=(e=n[t].children("a")).attr("href"))&&"#"===i.charAt(0)&&(this.addListener(e,"click",function(t){t.preventDefault(),this.selectTab(t.currentTarget)}),i===document.location.hash&&this.selectTab(e)),!this.$selectedTab&&e.hasClass("sel")&&(this.$selectedTab=e);for(t=0;t<s.length;t++)n[t].css("max-width",100*a[t]/r+"%")},selectTab:function(t){var e=p(t);if(this.$selectedTab){if(this.$selectedTab.get(0)===e.get(0))return;this.deselectTab()}e.addClass("sel");var i=e.attr("href");p(i).removeClass("hidden"),"undefined"!=typeof history&&history.replaceState(void 0,void 0,i),Garnish.$win.trigger("resize"),Garnish.$doc.trigger("scroll"),this.$selectedTab=e},deselectTab:function(){this.$selectedTab&&(this.$selectedTab.removeClass("sel"),"#"===this.$selectedTab.attr("href").charAt(0)&&p(this.$selectedTab.attr("href")).addClass("hidden"),this.$selectedTab=null)},updateResponsiveTables:function(){for(this.updateResponsiveTables._i=0;this.updateResponsiveTables._i<this.$collapsibleTables.length;this.updateResponsiveTables._i++)this.updateResponsiveTables._$table=this.$collapsibleTables.eq(this.updateResponsiveTables._i),this.updateResponsiveTables._containerWidth=this.updateResponsiveTables._$table.parent().width(),this.updateResponsiveTables._check=!1,0<this.updateResponsiveTables._containerWidth&&(void 0===this.updateResponsiveTables._$table.data("lastContainerWidth")?this.updateResponsiveTables._check=!0:(this.updateResponsiveTables._isCollapsed=this.updateResponsiveTables._$table.hasClass("collapsed"),this.updateResponsiveTables._containerWidth>this.updateResponsiveTables._$table.data("lastContainerWidth")?this.updateResponsiveTables._isCollapsed&&(this.updateResponsiveTables._$table.removeClass("collapsed"),this.updateResponsiveTables._check=!0):this.updateResponsiveTables._isCollapsed||(this.updateResponsiveTables._check=!0)),this.updateResponsiveTables._check&&this.updateResponsiveTables._$table.width()>this.updateResponsiveTables._containerWidth&&this.updateResponsiveTables._$table.addClass("collapsed"),this.updateResponsiveTables._$table.data("lastContainerWidth",this.updateResponsiveTables._containerWidth))},updateFixedHeader:function(){if(this.$main.length&&this.$main[0].getBoundingClientRect().top<0){if(!this.fixedHeader){var t=this.$header.outerHeight(),e={top:t+"px","max-height":"calc(100vh - "+t+"px)"};this.$sidebar.css(e),this.$details.css(e),this.$mainContent.css("margin-top",this.$header.outerHeight()),Garnish.$bod.addClass("fixed-header"),this.fixedheader=!0}}else this.fixedheader&&(Garnish.$bod.removeClass("fixed-header"),this.$details.css({top:null,"max-height":null}),this.$header.css("top",0),this.$mainContent.css("margin-top",0),this.fixedheader=!1)},displayNotification:function(t,e){var i=Craft.CP.notificationDuration;"error"===t&&(i*=2);var s=p('<div class="notification '+t+'">'+e+"</div>").appendTo(this.$notificationContainer),n=-s.outerWidth()/2+"px";s.hide().css({opacity:0,"margin-left":n,"margin-right":n}).velocity({opacity:1,"margin-left":"2px","margin-right":"2px"},{display:"inline-block",duration:"fast"}).delay(i).velocity({opacity:0,"margin-left":n,"margin-right":n},{complete:function(){s.remove()}}),this.trigger("displayNotification",{notificationType:t,message:e})},displayNotice:function(t){this.displayNotification("notice",t)},displayError:function(t){t||(t=Craft.t("app","An unknown error occurred.")),this.displayNotification("error",t)},fetchAlerts:function(){var t={path:Craft.path};Craft.queueActionRequest("app/get-cp-alerts",t,p.proxy(this,"displayAlerts"))},displayAlerts:function(t){if(this.$alerts.remove(),Garnish.isArray(t)&&t.length){this.$alerts=p('<ul id="alerts"/>').prependTo(this.$mainContainer);for(var e=0;e<t.length;e++)p("<li>"+t[e]+"</li>").appendTo(this.$alerts);var i=this.$alerts.outerHeight();this.$alerts.css("margin-top",-i).velocity({"margin-top":0},"fast"),this.initAlerts()}},initAlerts:function(){for(var t=this.$alerts.find('a[class^="shun:"]'),e=0;e<t.length;e++)this.addListener(t[e],"click",p.proxy(function(t){t.preventDefault();var i=p(t.currentTarget),e={message:i.prop("className").substr(5)};Craft.queueActionRequest("app/shun-cp-alert",e,p.proxy(function(t,e){"success"===e&&(t.success?i.parent().remove():this.displayError(t.error))},this))},this))},checkForUpdates:function(t,e){if(this.checkingForUpdates&&!0===t&&!this.forcingRefreshOnUpdatesCheck){var i=e;e=function(){Craft.cp.checkForUpdates(!0,i)}}if("function"==typeof e&&(Garnish.isArray(this.checkForUpdatesCallbacks)||(this.checkForUpdatesCallbacks=[]),this.checkForUpdatesCallbacks.push(e)),!this.checkingForUpdates){this.checkingForUpdates=!0,this.forcingRefreshOnUpdatesCheck=!0===t;var s={forceRefresh:!0===t};Craft.queueActionRequest("app/check-for-updates",s,p.proxy(function(t){if(this.updateUtilitiesBadge(),this.checkingForUpdates=!1,Garnish.isArray(this.checkForUpdatesCallbacks)){var e=this.checkForUpdatesCallbacks;this.checkForUpdatesCallbacks=null;for(var i=0;i<e.length;i++)e[i](t)}this.trigger("checkForUpdates",{updateInfo:t})},this))}},updateUtilitiesBadge:function(){var i=p("#nav-utilities").find("> a:not(.sel)");i.length&&Craft.queueActionRequest("app/get-utilities-badge-count",p.proxy(function(t){var e=i.children(".badge");t.badgeCount?(e.length||(e=p('<span class="badge"/>').appendTo(i)),e.text(t.badgeCount)):e.length&&e.remove()},this))},runQueue:function(){this.enableQueue&&(Craft.runQueueAutomatically?Craft.queueActionRequest("queue/run",p.proxy(function(t,e){"success"===e&&this.trackJobProgress(!1,!0)},this)):this.trackJobProgress(!1,!0))},trackJobProgress:function(t,e){if(e&&this.trackJobProgressTimeout&&(clearTimeout(this.trackJobProgressTimeout),this.trackJobProgressTimeout=null),!this.trackJobProgressTimeout&&this.enableQueue)if(!0===t){var i=Math.min(6e4,500*this.displayedJobInfoUnchanged);this.trackJobProgressTimeout=setTimeout(p.proxy(this,"_trackJobProgressInternal"),i)}else this._trackJobProgressInternal()},_trackJobProgressInternal:function(){Craft.queueActionRequest("queue/get-job-info?dontExtendSession=1",p.proxy(function(t,e){"success"===e&&(this.trackJobProgressTimeout=null,this.setJobInfo(t,!0),this.jobInfo.length&&this.trackJobProgress(!0))},this))},setJobInfo:function(t,e){if(this.enableQueue){this.jobInfo=t;var i=this.displayedJobInfo;this.displayedJobInfo=this.getDisplayedJobInfo(),i&&this.displayedJobInfo&&i.id===this.displayedJobInfo.id&&i.progress===this.displayedJobInfo.progress&&i.status===this.displayedJobInfo.status?this.displayedJobInfoUnchanged++:this.displayedJobInfoUnchanged=1,this.updateJobIcon(e),this.trigger("setJobInfo")}},getDisplayedJobInfo:function(){if(!this.enableQueue)return null;for(var t=[Craft.CP.JOB_STATUS_RESERVED,Craft.CP.JOB_STATUS_FAILED,Craft.CP.JOB_STATUS_WAITING],e=0;e<t.length;e++)for(var i=0;i<this.jobInfo.length;i++)if(this.jobInfo[i].status===t[e])return this.jobInfo[i]},updateJobIcon:function(t){this.enableQueue&&this.$nav.length&&(this.displayedJobInfo?(this.jobProgressIcon||(this.jobProgressIcon=new e),this.displayedJobInfo.status===Craft.CP.JOB_STATUS_RESERVED||this.displayedJobInfo.status===Craft.CP.JOB_STATUS_WAITING?(this.jobProgressIcon.hideFailMode(),this.jobProgressIcon.setDescription(this.displayedJobInfo.description),this.jobProgressIcon.setProgress(this.displayedJobInfo.progress,t)):this.displayedJobInfo.status===Craft.CP.JOB_STATUS_FAILED&&this.jobProgressIcon.showFailMode(Craft.t("app","Failed"))):this.jobProgressIcon&&(this.jobProgressIcon.hideFailMode(),this.jobProgressIcon.complete(),delete this.jobProgressIcon))}},{notificationDuration:2e3,JOB_STATUS_WAITING:1,JOB_STATUS_RESERVED:2,JOB_STATUS_DONE:3,JOB_STATUS_FAILED:4}),Garnish.$scrollContainer=p("#content"),Craft.cp=new Craft.CP;var e=Garnish.Base.extend({$li:null,$a:null,$label:null,hud:null,failMode:!1,_canvasSupported:null,_$bgCanvas:null,_$staticCanvas:null,_$hoverCanvas:null,_$failCanvas:null,_staticCtx:null,_hoverCtx:null,_canvasSize:null,_arcPos:null,_arcRadius:null,_lineWidth:null,_arcStartPos:0,_arcEndPos:0,_arcStartStepSize:null,_arcEndStepSize:null,_arcStep:null,_arcStepTimeout:null,_arcAnimateCallback:null,_progressBar:null,init:function(){if(this.$li=p("<li/>").appendTo(Craft.cp.$nav.children("ul")),this.$a=p('<a id="job-icon"/>').appendTo(this.$li),this.$canvasContainer=p('<span class="icon"/>').appendTo(this.$a),this.$label=p('<span class="label"></span>').appendTo(this.$a),this._canvasSupported=!!document.createElement("canvas").getContext,this._canvasSupported){var t=1<window.devicePixelRatio?2:1;this._canvasSize=18*t,this._arcPos=this._canvasSize/2,this._arcRadius=7*t,this._lineWidth=3*t,this._$bgCanvas=this._createCanvas("bg","#61666b"),this._$staticCanvas=this._createCanvas("static","#d7d9db"),this._$hoverCanvas=this._createCanvas("hover","#fff"),this._$failCanvas=this._createCanvas("fail","#da5a47").hide(),this._staticCtx=this._$staticCanvas[0].getContext("2d"),this._hoverCtx=this._$hoverCanvas[0].getContext("2d"),this._drawArc(this._$bgCanvas[0].getContext("2d"),0,1),this._drawArc(this._$failCanvas[0].getContext("2d"),0,1)}else this._progressBar=new Craft.ProgressBar(this.$canvasContainer),this._progressBar.showProgressBar();this.addListener(this.$a,"click","toggleHud")},setDescription:function(t){this.$a.attr("title",t),this.$label.text(t)},setProgress:function(t,e){this._canvasSupported?e?this._animateArc(0,t/100):this._setArc(0,t/100):this._progressBar.setProgressPercentage(t)},complete:function(){this._canvasSupported?this._animateArc(0,1,p.proxy(function(){this._$bgCanvas.velocity("fadeOut"),this._animateArc(1,1,p.proxy(function(){this.$a.remove(),this.destroy()},this))},this)):(this._progressBar.setProgressPercentage(100),this.$a.velocity("fadeOut"))},showFailMode:function(t){this.failMode||(this.failMode=!0,this._canvasSupported?(this._$bgCanvas.hide(),this._$staticCanvas.hide(),this._$hoverCanvas.hide(),this._$failCanvas.show()):(this._progressBar.$progressBar.css("border-color","#da5a47"),this._progressBar.$innerProgressBar.css("background-color","#da5a47"),this._progressBar.setProgressPercentage(50)),this.setDescription(t))},hideFailMode:function(){this.failMode&&(this.failMode=!1,this._canvasSupported?(this._$bgCanvas.show(),this._$staticCanvas.show(),this._$hoverCanvas.show(),this._$failCanvas.hide()):(this._progressBar.$progressBar.css("border-color",""),this._progressBar.$innerProgressBar.css("background-color",""),this._progressBar.setProgressPercentage(50)))},toggleHud:function(){this.hud?this.hud.toggle():this.hud=new o},_createCanvas:function(t,e){var i=p('<canvas id="job-icon-'+t+'" width="'+this._canvasSize+'" height="'+this._canvasSize+'"/>').appendTo(this.$canvasContainer),s=i[0].getContext("2d");return s.strokeStyle=e,s.lineWidth=this._lineWidth,s.lineCap="round",i},_setArc:function(t,e){this._arcStartPos=t,this._arcEndPos=e,this._drawArc(this._staticCtx,t,e),this._drawArc(this._hoverCtx,t,e)},_drawArc:function(t,e,i){t.clearRect(0,0,this._canvasSize,this._canvasSize),t.beginPath(),t.arc(this._arcPos,this._arcPos,this._arcRadius,(1.5+2*e)*Math.PI,(1.5+2*i)*Math.PI),t.stroke(),t.closePath()},_animateArc:function(t,e,i){this._arcStepTimeout&&clearTimeout(this._arcStepTimeout),this._arcStep=0,this._arcStartStepSize=(t-this._arcStartPos)/10,this._arcEndStepSize=(e-this._arcEndPos)/10,this._arcAnimateCallback=i,this._takeNextArcStep()},_takeNextArcStep:function(){this._setArc(this._arcStartPos+this._arcStartStepSize,this._arcEndPos+this._arcEndStepSize),this._arcStep++,this._arcStep<10?this._arcStepTimeout=setTimeout(p.proxy(this,"_takeNextArcStep"),50):this._arcAnimateCallback&&this._arcAnimateCallback()}}),o=Garnish.HUD.extend({jobsById:null,completedJobs:null,updateViewProxy:null,init:function(){this.jobsById={},this.completedJobs=[],this.updateViewProxy=p.proxy(this,"updateView"),this.base(Craft.cp.jobProgressIcon.$a),this.$main.attr("id","queue-hud")},onShow:function(){Craft.cp.on("setJobInfo",this.updateViewProxy),this.updateView(),this.base()},onHide:function(){if(Craft.cp.off("setJobInfo",this.updateViewProxy),this.completedJobs.length){for(var t=0;t<this.completedJobs.length;t++)this.completedJobs[t].destroy();this.completedJobs=[]}this.base()},updateView:function(){var t,e=[];if(Craft.cp.jobInfo)for(t=0;t<Craft.cp.jobInfo.length;t++)e.push(parseInt(Craft.cp.jobInfo[t].id));for(var i in this.jobsById)this.jobsById.hasOwnProperty(i)&&(Craft.inArray(parseInt(i),e)||(this.jobsById[i].complete(),this.completedJobs.push(this.jobsById[i]),delete this.jobsById[i]));if(Craft.cp.jobInfo&&Craft.cp.jobInfo.length)for(t=0;t<Craft.cp.jobInfo.length;t++){var s=Craft.cp.jobInfo[t];if(this.jobsById[s.id])this.jobsById[s.id].updateStatus(s);else{this.jobsById[s.id]=new o.Job(this,s);for(var n=!1,a=t+1;a<Craft.cp.jobInfo.length;a++)if(this.jobsById[Craft.cp.jobInfo[a].id]){this.jobsById[s.id].$container.insertBefore(this.jobsById[Craft.cp.jobInfo[a].id].$container),n=!0;break}if(!n){var r=this.$main.children("object");r.length?this.jobsById[s.id].$container.insertBefore(r):this.jobsById[s.id].$container.appendTo(this.$main)}}}else this.hide()}});o.Job=Garnish.Base.extend({hud:null,id:null,description:null,status:null,progress:null,$container:null,$statusContainer:null,$descriptionContainer:null,_progressBar:null,init:function(t,e){this.hud=t,this.id=e.id,this.description=e.description,this.$container=p('<div class="job"/>'),this.$statusContainer=p('<div class="job-status"/>').appendTo(this.$container),this.$descriptionContainer=p('<div class="job-description"/>').appendTo(this.$container).text(e.description),this.$container.data("job",this),this.updateStatus(e)},updateStatus:function(t){if(this.status!==(this.status=t.status))switch(this.$statusContainer.empty(),this.status){case Craft.CP.JOB_STATUS_WAITING:this.$statusContainer.text(Craft.t("app","Pending"));break;case Craft.CP.JOB_STATUS_RESERVED:this._progressBar=new Craft.ProgressBar(this.$statusContainer),this._progressBar.showProgressBar();break;case Craft.CP.JOB_STATUS_FAILED:p("<span/>",{class:"error",text:Craft.t("app","Failed"),title:t.error}).appendTo(this.$statusContainer);var e=p('<a class="menubtn error" title="'+Craft.t("app","Options")+'"/>').appendTo(this.$statusContainer);p('<div class="menu"><ul><li><a data-action="retry">'+Craft.t("app","Try again")+'</a></li><li><a data-action="release">'+Craft.t("app","Cancel")+"</a></li></ul></div>").appendTo(this.$statusContainer),new Garnish.MenuBtn(e,{onOptionSelect:p.proxy(this,"performErrorAction")})}this.status===Craft.CP.JOB_STATUS_RESERVED&&this._progressBar.setProgressPercentage(t.progress)},performErrorAction:function(t){switch(p(t).data("action")){case"retry":Craft.cp.displayedJobInfo.status=Craft.CP.JOB_STATUS_WAITING,Craft.cp.displayedJobInfo.progress=0,Craft.cp.updateJobIcon(!1),Craft.postActionRequest("queue/retry",{id:this.id},p.proxy(function(t,e){"success"===e&&Craft.cp.trackJobProgress(!1,!0)},this));break;case"release":Craft.postActionRequest("queue/release",{id:this.id},p.proxy(function(t,e){"success"===e&&Craft.cp.trackJobProgress(!1,!0)},this))}},complete:function(){this.$statusContainer.empty(),p('<div data-icon="check"/>').appendTo(this.$statusContainer)},destroy:function(){this.hud.jobsById[this.id]&&delete this.hud.jobsById[this.id],this.$container.remove(),this.base()}}),Craft.CustomizeSourcesModal=Garnish.Modal.extend({elementIndex:null,$elementIndexSourcesContainer:null,$sidebar:null,$sourcesContainer:null,$sourceSettingsContainer:null,$newHeadingBtn:null,$footer:null,$footerBtnContainer:null,$saveBtn:null,$cancelBtn:null,$saveSpinner:null,$loadingSpinner:null,sourceSort:null,sources:null,selectedSource:null,updateSourcesOnSave:!1,availableTableAttributes:null,init:function(t,e){this.base(),this.setSettings(e,{resizable:!0}),this.elementIndex=t,this.$elementIndexSourcesContainer=this.elementIndex.$sidebar.children("nav").children("ul");var i=p('<form class="modal customize-sources-modal"/>').appendTo(Garnish.$bod);this.$sidebar=p('<div class="cs-sidebar block-types"/>').appendTo(i),this.$sourcesContainer=p('<div class="sources">').appendTo(this.$sidebar),this.$sourceSettingsContainer=p('<div class="source-settings">').appendTo(i),this.$footer=p('<div class="footer"/>').appendTo(i),this.$footerBtnContainer=p('<div class="buttons right"/>').appendTo(this.$footer),this.$cancelBtn=p('<div class="btn" role="button"/>').text(Craft.t("app","Cancel")).appendTo(this.$footerBtnContainer),this.$saveBtn=p('<div class="btn submit disabled" role="button"/>').text(Craft.t("app","Save")).appendTo(this.$footerBtnContainer),this.$saveSpinner=p('<div class="spinner hidden"/>').appendTo(this.$footerBtnContainer),this.$newHeadingBtn=p('<div class="btn submit add icon"/>').text(Craft.t("app","New heading")).appendTo(p('<div class="buttons left secondary-buttons"/>').appendTo(this.$footer)),this.$loadingSpinner=p('<div class="spinner"/>').appendTo(i),this.setContainer(i),this.show();var s={elementType:this.elementIndex.elementType};Craft.postActionRequest("element-index-settings/get-customize-sources-modal-data",s,p.proxy(function(t,e){this.$loadingSpinner.remove(),"success"===e&&(this.$saveBtn.removeClass("disabled"),this.buildModal(t))},this)),this.addListener(this.$newHeadingBtn,"click","handleNewHeadingBtnClick"),this.addListener(this.$cancelBtn,"click","hide"),this.addListener(this.$saveBtn,"click","save"),this.addListener(this.$container,"submit","save")},buildModal:function(t){this.availableTableAttributes=t.availableTableAttributes,this.sourceSort=new Garnish.DragSort({handle:".move",axis:"y",onSortChange:p.proxy(function(){this.updateSourcesOnSave=!0},this)}),this.sources=[];for(var e=0;e<t.sources.length;e++){var i=this.addSource(t.sources[e]);this.sources.push(i)}this.selectedSource||void 0===this.sources[0]||this.sources[0].select()},addSource:function(t){var e,i=p('<div class="customize-sources-item"/>').appendTo(this.$sourcesContainer),s=p('<div class="label"/>').appendTo(i),n=p('<input type="hidden"/>').appendTo(i);return p('<a class="move icon" title="'+Craft.t("app","Reorder")+'" role="button"></a>').appendTo(i),void 0!==t.heading?(i.addClass("heading"),n.attr("name","sourceOrder[][heading]"),(e=new Craft.CustomizeSourcesModal.Heading(this,i,s,n,t)).updateItemLabel(t.heading)):(n.attr("name","sourceOrder[][key]").val(t.key),(e=new Craft.CustomizeSourcesModal.Source(this,i,s,n,t)).updateItemLabel(t.label),(this.elementIndex.sourceKey+"/").substr(0,t.key.length+1)===t.key+"/"&&e.select()),this.sourceSort.addItems(i),e},handleNewHeadingBtnClick:function(){var t=this.addSource({heading:""});Garnish.scrollContainerToElement(this.$sidebar,t.$item),t.select(),this.updateSourcesOnSave=!0},save:function(t){if(t&&t.preventDefault(),!this.$saveBtn.hasClass("disabled")&&this.$saveSpinner.hasClass("hidden")){this.$saveSpinner.removeClass("hidden");var e=this.$container.serialize()+"&elementType="+this.elementIndex.elementType;Craft.postActionRequest("element-index-settings/save-customize-sources-modal-settings",e,p.proxy(function(t,e){if(this.$saveSpinner.addClass("hidden"),"success"===e&&t.success){if(this.updateSourcesOnSave&&this.$elementIndexSourcesContainer.length){for(var i,s=null,n=0;n<this.sourceSort.$items.length;n++){var a=this.sourceSort.$items.eq(n).data("source"),r=a.getIndexSource();r&&(a.isHeading()?i=r:(i&&(this.appendSource(i,s),s=i,i=null),this.appendSource(r,s),s=r))}if(s){var o=s.nextAll();this.elementIndex.sourceSelect.removeItems(o),o.remove()}}this.selectedSource&&this.selectedSource.sourceData.key&&(this.elementIndex.selectSourceByKey(this.selectedSource.sourceData.key),this.elementIndex.updateElements()),Craft.cp.displayNotice(Craft.t("app","Source settings saved")),this.hide()}else{var l="success"===e&&t.error?t.error:Craft.t("app","An unknown error occurred.");Craft.cp.displayError(l)}},this))}},appendSource:function(t,e){e?t.insertAfter(e):t.prependTo(this.$elementIndexSourcesContainer)},destroy:function(){for(var t=0;t<this.sources.length;t++)this.sources[t].destroy();delete this.sources,this.base()}}),Craft.CustomizeSourcesModal.BaseSource=Garnish.Base.extend({modal:null,$item:null,$itemLabel:null,$itemInput:null,$settingsContainer:null,sourceData:null,init:function(t,e,i,s,n){this.modal=t,this.$item=e,this.$itemLabel=i,this.$itemInput=s,this.sourceData=n,this.$item.data("source",this),this.addListener(this.$item,"click","select")},isHeading:function(){return!1},isSelected:function(){return this.modal.selectedSource===this},select:function(){this.isSelected()||(this.modal.selectedSource&&this.modal.selectedSource.deselect(),this.$item.addClass("sel"),(this.modal.selectedSource=this).$settingsContainer?this.$settingsContainer.removeClass("hidden"):this.$settingsContainer=p("<div/>").append(this.createSettings()).appendTo(this.modal.$sourceSettingsContainer),this.modal.$sourceSettingsContainer.scrollTop(0))},createSettings:function(){},getIndexSource:function(){},deselect:function(){this.$item.removeClass("sel"),this.modal.selectedSource=null,this.$settingsContainer.addClass("hidden")},updateItemLabel:function(t){this.$itemLabel.text(t)},destroy:function(){this.$item.data("source",null),this.base()}}),Craft.CustomizeSourcesModal.Source=Craft.CustomizeSourcesModal.BaseSource.extend({createSettings:function(){if(this.sourceData.tableAttributes.length){var t,e,i,s,n=this.sourceData.tableAttributes[0],a=n[0],r=n[1],o=this.createTableColumnOption(a,r,!0,!0),l=p("<div/>"),h=[a];for(p('<input type="hidden" name="sources['+this.sourceData.key+'][tableAttributes][]" value=""/>').appendTo(l),t=1;t<this.sourceData.tableAttributes.length;t++)i=(e=this.sourceData.tableAttributes[t])[0],s=e[1],l.append(this.createTableColumnOption(i,s,!1,!0)),h.push(i);for(t=0;t<this.modal.availableTableAttributes.length;t++)i=(e=this.modal.availableTableAttributes[t])[0],s=e[1],Craft.inArray(i,h)||l.append(this.createTableColumnOption(i,s,!1,!1));return new Garnish.DragSort(l.children(),{handle:".move",axis:"y"}),Craft.ui.createField(p([o[0],l[0]]),{label:Craft.t("app","Table Columns"),instructions:Craft.t("app","Choose which table columns should be visible for this source, and in which order.")})}},createTableColumnOption:function(t,e,i,s){var n=p('<div class="customize-sources-table-column"/>').append('<div class="icon move"/>').append(Craft.ui.createCheckbox({label:e,name:"sources["+this.sourceData.key+"][tableAttributes][]",value:t,checked:s,disabled:i}));return i&&n.children(".move").addClass("disabled"),n},getIndexSource:function(){var t=this.modal.elementIndex.getSourceByKey(this.sourceData.key);if(t)return t.closest("li")}}),Craft.CustomizeSourcesModal.Heading=Craft.CustomizeSourcesModal.BaseSource.extend({$labelField:null,$labelInput:null,$deleteBtn:null,isHeading:function(){return!0},select:function(){this.base(),this.$labelInput.trigger("focus")},createSettings:function(){return this.$labelField=Craft.ui.createTextField({label:Craft.t("app","Heading"),instructions:Craft.t("app","This can be left blank if you just want an unlabeled separator."),value:this.sourceData.heading}),this.$labelInput=this.$labelField.find(".text"),this.$deleteBtn=p('<a class="error delete"/>').text(Craft.t("app","Delete heading")),this.addListener(this.$labelInput,"textchange","handleLabelInputChange"),this.addListener(this.$deleteBtn,"click","deleteHeading"),p([this.$labelField[0],p("<hr/>")[0],this.$deleteBtn[0]])},handleLabelInputChange:function(){this.updateItemLabel(this.$labelInput.val()),this.modal.updateSourcesOnSave=!0},updateItemLabel:function(t){this.$itemLabel.html((t?Craft.escapeHtml(t):'<em class="light">'+Craft.t("app","(blank)")+"</em>")+" "),this.$itemInput.val(t)},deleteHeading:function(){this.modal.sourceSort.removeItems(this.$item),this.modal.sources.splice(p.inArray(this,this.modal.sources),1),this.modal.updateSourcesOnSave=!0,this.isSelected()&&(this.deselect(),this.modal.sources.length&&this.modal.sources[0].select()),this.$item.remove(),this.$settingsContainer.remove(),this.destroy()},getIndexSource:function(){var t=this.$labelInput?this.$labelInput.val():this.sourceData.heading;return p('<li class="heading"/>').append(p("<span/>").text(t))}}),Craft.DataTableSorter=Garnish.DragSort.extend({$table:null,init:function(t,e){this.$table=p(t);var i=this.$table.children("tbody").children(":not(.filler)");(e=p.extend({},Craft.DataTableSorter.defaults,e)).container=this.$table.children("tbody"),e.helper=p.proxy(this,"getHelper"),e.caboose="<tr/>",e.axis=Garnish.Y_AXIS,e.magnetStrength=4,e.helperLagBase=1.5,this.base(i,e)},getHelper:function(t){var e=p('<div class="'+this.settings.helperClass+'"/>').appendTo(Garnish.$bod),i=p("<table/>").appendTo(e),s=p("<tbody/>").appendTo(i);t.appendTo(s),i.width(this.$table.width()),i.prop("className",this.$table.prop("className"));for(var n=this.$table.find("tr:first").children(),a=t.children(),r=0;r<a.length;r++)p(a[r]).width(p(n[r]).width());return e}},{defaults:{handle:".move",helperClass:"datatablesorthelper"}}),Craft.DeleteUserModal=Garnish.Modal.extend({id:null,userId:null,$deleteActionRadios:null,$deleteSpinner:null,userSelect:null,_deleting:!1,init:function(t,e){this.id=Math.floor(1e9*Math.random()),this.userId=t,e=p.extend(Craft.DeleteUserModal.defaults,e);var i,s=p('<form class="modal fitted deleteusermodal" method="post" accept-charset="UTF-8">'+Craft.getCsrfInput()+'<input type="hidden" name="action" value="users/delete-user"/>'+(Garnish.isArray(this.userId)?"":'<input type="hidden" name="userId" value="'+this.userId+'"/>')+(e.redirect?'<input type="hidden" name="redirect" value="'+e.redirect+'"/>':"")+"</form>").appendTo(Garnish.$bod),n=p('<div class="body"><div class="content-summary"><p>'+Craft.t("app","What do you want to do with their content?")+'</p><ul class="bullets"></ul></div><div class="options"><label><input type="radio" name="contentAction" value="transfer"/> '+Craft.t("app","Transfer it to:")+'</label><div id="transferselect'+this.id+'" class="elementselect"><div class="elements"></div><div class="btn add icon dashed">'+Craft.t("app","Choose a user")+'</div></div></div><div><label class="error"><input type="radio" name="contentAction" value="delete"/> '+Craft.t("app","Delete it")+"</label></div></div>").appendTo(s),a=p('<div class="buttons right"/>').appendTo(n),r=p('<div class="btn">'+Craft.t("app","Cancel")+"</div>").appendTo(a);if(e.contentSummary.length)for(var o=0;o<e.contentSummary.length;o++)n.find("ul").append(p("<li/>",{text:e.contentSummary[o]}));else n.find("ul").remove();if(this.$deleteActionRadios=n.find("input[type=radio]"),this.$deleteSubmitBtn=p('<input type="submit" class="btn submit disabled" value="'+(Garnish.isArray(this.userId)?Craft.t("app","Delete users"):Craft.t("app","Delete user"))+'" />').appendTo(a),this.$deleteSpinner=p('<div class="spinner hidden"/>').appendTo(a),Garnish.isArray(this.userId)){i=["and"];for(o=0;o<this.userId.length;o++)i.push("not "+this.userId[o])}else i="not "+this.userId;this.userSelect=new Craft.BaseElementSelectInput({id:"transferselect"+this.id,name:"transferContentTo",elementType:"craft\\elements\\User",criteria:{id:i},limit:1,modalSettings:{closeOtherModals:!1},onSelectElements:p.proxy(function(){this.updateSizeAndPosition(),this.$deleteActionRadios.first().prop("checked")?this.validateDeleteInputs():this.$deleteActionRadios.first().trigger("click")},this),onRemoveElements:p.proxy(this,"validateDeleteInputs"),selectable:!1,editable:!1}),this.addListener(r,"click","hide"),this.addListener(this.$deleteActionRadios,"change","validateDeleteInputs"),this.addListener(s,"submit","handleSubmit"),this.base(s,e)},validateDeleteInputs:function(){var t=!1;return this.$deleteActionRadios.eq(0).prop("checked")?t=!!this.userSelect.totalSelected:this.$deleteActionRadios.eq(1).prop("checked")&&(t=!0),t?this.$deleteSubmitBtn.removeClass("disabled"):this.$deleteSubmitBtn.addClass("disabled"),t},handleSubmit:function(t){!this._deleting&&this.validateDeleteInputs()?(this.$deleteSubmitBtn.addClass("active"),this.$deleteSpinner.removeClass("hidden"),this.disable(),this.userSelect.disable(),!(this._deleting=!0)===this.settings.onSubmit()&&t.preventDefault()):t.preventDefault()},onFadeIn:function(){Garnish.isMobileBrowser(!0)||this.$deleteActionRadios.first().trigger("focus"),this.base()}},{defaults:{contentSummary:[],onSubmit:p.noop,redirect:null}}),Craft.DynamicGenerator=Craft.BaseInputGenerator.extend({callback:p.noop,init:function(t,e,i){this.callback=i,this.base(t,e)},generateTargetValue:function(t){return this.callback(t)}}),Craft.EditableTable=Garnish.Base.extend({initialized:!1,id:null,baseName:null,columns:null,sorter:null,biggestId:-1,$table:null,$tbody:null,$addRowBtn:null,rowCount:0,hasMaxRows:!1,hasMinRows:!1,radioCheckboxes:null,init:function(t,e,i,s){if(this.id=t,this.baseName=e,this.columns=i,this.setSettings(s,Craft.EditableTable.defaults),this.radioCheckboxes={},this.$table=p("#"+t),this.$tbody=this.$table.children("tbody"),this.rowCount=this.$tbody.find("tr").length,this.$table.data("editable-table")&&(Garnish.log("Double-instantiating an editable table on an element"),this.$table.data("editable-table").destroy()),this.$table.data("editable-table",this),this.sorter=new Craft.DataTableSorter(this.$table,{helperClass:"editabletablesorthelper",copyDraggeeInputValuesToHelper:!0}),this.isVisible()?this.initialize():setTimeout(p.proxy(this,"initializeIfVisible"),500),this.settings.minRows&&this.rowCount<this.settings.minRows)for(var n=this.rowCount;n<this.settings.minRows;n++)this.addRow()},isVisible:function(){return 0<this.$table.height()},initialize:function(){if(!this.initialized){this.initialized=!0,this.removeListener(Garnish.$win,"resize");for(var t=this.$tbody.children(),e=0;e<t.length;e++)new Craft.EditableTable.Row(this,t[e]);this.$addRowBtn=this.$table.next(".add"),this.updateAddRowButton(),this.addListener(this.$addRowBtn,"activate","addRow")}},initializeIfVisible:function(){this.removeListener(Garnish.$win,"resize"),this.isVisible()?this.initialize():this.addListener(Garnish.$win,"resize","initializeIfVisible")},updateAddRowButton:function(){this.canAddRow()?(this.$addRowBtn.css("opacity","1"),this.$addRowBtn.css("pointer-events","auto")):(this.$addRowBtn.css("opacity","0.2"),this.$addRowBtn.css("pointer-events","none"))},canDeleteRow:function(){return this.rowCount>this.settings.minRows},deleteRow:function(t){this.canDeleteRow()&&(this.sorter.removeItems(t.$tr),t.$tr.remove(),this.rowCount--,this.updateAddRowButton(),this.settings.onDeleteRow(t.$tr))},canAddRow:function(){return!this.settings.maxRows||this.rowCount<this.settings.maxRows},addRow:function(){if(this.canAddRow()){var t=this.settings.rowIdPrefix+(this.biggestId+1),e=this.createRow(t,this.columns,this.baseName,p.extend({},this.settings.defaultValues));e.appendTo(this.$tbody),new Craft.EditableTable.Row(this,e),this.sorter.addItems(e),e.find("input,textarea,select").first().trigger("focus"),this.rowCount++,this.updateAddRowButton(),this.settings.onAddRow(e)}},createRow:function(t,e,i,s){return Craft.EditableTable.createRow(t,e,i,s)}},{textualColTypes:["color","date","multiline","number","singleline","time"],defaults:{rowIdPrefix:"",defaultValues:{},minRows:null,maxRows:null,onAddRow:p.noop,onDeleteRow:p.noop},createRow:function(t,e,i,s){var n=p("<tr/>",{"data-id":t});for(var a in e)if(e.hasOwnProperty(a)){var r,o=e[a],l=void 0!==s[a]?s[a]:"";if("heading"===o.type)r=p("<th/>",{scope:"row",class:o.class,html:l});else{var h=i+"["+t+"]["+a+"]",d=Craft.inArray(o.type,Craft.EditableTable.textualColTypes);switch(r=p("<td/>",{class:o.class,width:o.width}),d&&r.addClass("textual"),o.code&&r.addClass("code"),o.type){case"checkbox":Craft.ui.createCheckbox({name:h,value:o.value||"1",checked:!!l}).appendTo(r);break;case"color":Craft.ui.createColorInput({name:h,value:l,small:!0}).appendTo(r);break;case"date":Craft.ui.createDateInput({name:h,value:l}).appendTo(r);break;case"lightswitch":Craft.ui.createLightswitch({name:h,value:o.value||"1",on:!!l,small:!0}).appendTo(r);break;case"select":Craft.ui.createSelect({name:h,options:o.options,value:l,class:"small"}).appendTo(r);break;case"time":Craft.ui.createTimeInput({name:h,value:l}).appendTo(r);break;default:p("<textarea/>",{name:h,rows:1,val:l,placeholder:o.placeholder}).appendTo(r)}}r.appendTo(n)}return p("<td/>",{class:"thin action"}).append(p("<a/>",{class:"move icon",title:Craft.t("app","Reorder")})).appendTo(n),p("<td/>",{class:"thin action"}).append(p("<a/>",{class:"delete icon",title:Craft.t("app","Delete")})).appendTo(n),n}}),Craft.EditableTable.Row=Garnish.Base.extend({table:null,id:null,niceTexts:null,$tr:null,$tds:null,$textareas:null,$deleteBtn:null,init:function(t,e){this.table=t,this.$tr=p(e),this.$tds=this.$tr.children();var i=parseInt(this.$tr.attr("data-id").substr(this.table.settings.rowIdPrefix.length));i>this.table.biggestId&&(this.table.biggestId=i),this.$textareas=p(),this.niceTexts=[];var s,n,a={},r=0;for(s in this.table.columns)if(this.table.columns.hasOwnProperty(s)){if(n=this.table.columns[s],Craft.inArray(n.type,Craft.EditableTable.textualColTypes)){var o=p("textarea, input.text",this.$tds[r]);this.$textareas=this.$textareas.add(o),this.addListener(o,"focus","onTextareaFocus"),this.addListener(o,"mousedown","ignoreNextTextareaFocus"),this.niceTexts.push(new Garnish.NiceText(o,{onHeightChange:p.proxy(this,"onTextareaHeightChange")})),"singleline"!==n.type&&"number"!==n.type||(this.addListener(o,"keypress",{type:n.type},"validateKeypress"),this.addListener(o,"textchange",{type:n.type},"validateValue"),o.trigger("textchange")),a[s]=o}else if("checkbox"===n.type&&n.radioMode){var l=p('input[type="checkbox"]',this.$tds[r]);void 0===this.table.radioCheckboxes[s]&&(this.table.radioCheckboxes[s]=[]),this.table.radioCheckboxes[s].push(l[0]),this.addListener(l,"change",{colId:s},"onRadioCheckboxChange")}r++}for(s in this.onTextareaHeightChange(),this.table.columns)this.table.columns.hasOwnProperty(s)&&(n=this.table.columns[s]).autopopulate&&void 0!==a[n.autopopulate]&&!a[s].val()&&new Craft.HandleGenerator(a[s],a[n.autopopulate]);var h=this.$tr.children().last().find(".delete");this.addListener(h,"click","deleteRow")},onTextareaFocus:function(t){this.onTextareaHeightChange();var e=p(t.currentTarget);e.data("ignoreNextFocus")?e.data("ignoreNextFocus",!1):setTimeout(function(){Craft.selectFullValue(e)},0)},onRadioCheckboxChange:function(t){if(t.currentTarget.checked)for(var e=0;e<this.table.radioCheckboxes[t.data.colId].length;e++){var i=this.table.radioCheckboxes[t.data.colId][e];i.checked=i===t.currentTarget}},ignoreNextTextareaFocus:function(t){p.data(t.currentTarget,"ignoreNextFocus",!0)},validateKeypress:function(t){var e=t.keyCode?t.keyCode:t.charCode;Garnish.isCtrlKeyPressed(t)||e!==Garnish.RETURN_KEY&&("number"!==t.data.type||Craft.inArray(e,Craft.EditableTable.Row.numericKeyCodes))||t.preventDefault()},validateValue:function(t){var e;if("number"===t.data.type){var i=t.currentTarget.value.match(/^\s*(-?[\d\\.]*)/);e=null!==i?i[1]:""}else e=t.currentTarget.value.replace(/[\r\n]/g,"");e!==t.currentTarget.value&&(t.currentTarget.value=e)},onTextareaHeightChange:function(){for(var t=-1,e=0;e<this.niceTexts.length;e++)this.niceTexts[e].height>t&&(t=this.niceTexts[e].height);this.$textareas.css("min-height",t);var i=this.$textareas.filter(":visible").first().parent().height();t<i&&this.$textareas.css("min-height",i)},deleteRow:function(){this.table.deleteRow(this)}},{numericKeyCodes:[9,8,37,38,39,40,45,91,46,190,48,49,50,51,52,53,54,55,56,57]}),Craft.ElementActionTrigger=Garnish.Base.extend({maxLevels:null,newChildUrl:null,$trigger:null,$selectedItems:null,triggerEnabled:!0,init:function(t){this.setSettings(t,Craft.ElementActionTrigger.defaults),this.$trigger=p("#"+t.type.replace(/[\[\]\\]+/g,"-")+"-actiontrigger"),this.settings.activate&&(this.$trigger.data("custom-handler",!0),"FORM"===this.$trigger.prop("nodeName")?this.addListener(this.$trigger,"submit","handleTriggerActivation"):this.addListener(this.$trigger,"click","handleTriggerActivation")),this.updateTrigger(),Craft.elementIndex.on("selectionChange",p.proxy(this,"updateTrigger"))},updateTrigger:function(){0!==Craft.elementIndex.getSelectedElements().length&&(this.validateSelection()?this.enableTrigger():this.disableTrigger())},validateSelection:function(){var t=!0;return this.$selectedItems=Craft.elementIndex.getSelectedElements(),!this.settings.batch&&1<this.$selectedItems.length?t=!1:"function"==typeof this.settings.validateSelection&&(t=this.settings.validateSelection(this.$selectedItems)),t},enableTrigger:function(){this.triggerEnabled||(this.$trigger.removeClass("disabled"),this.triggerEnabled=!0)},disableTrigger:function(){this.triggerEnabled&&(this.$trigger.addClass("disabled"),this.triggerEnabled=!1)},handleTriggerActivation:function(t){t.preventDefault(),t.stopPropagation(),this.triggerEnabled&&this.settings.activate(this.$selectedItems)}},{defaults:{type:null,batch:!0,validateSelection:null,activate:null}}),Craft.ElementThumbLoader=Garnish.Base.extend({queue:null,workers:[],init:function(){this.queue=[];for(var t=0;t<3;t++)this.workers.push(new Craft.ElementThumbLoader.Worker(this))},load:function(t){if(this.queue=this.queue.concat(t.find(".elementthumb").toArray()),this.queue.length)for(var e=0;e<this.workers.length;e++)this.workers[e].active||this.workers[e].loadNext()},destroy:function(){for(var t=0;t<this.workers.length;t++)this.workers[t].destroy();this.base()}}),Craft.ElementThumbLoader.Worker=Garnish.Base.extend({loader:null,active:!1,init:function(t){this.loader=t},loadNext:function(){var t=this.loader.queue.shift();if(void 0!==t){this.active=!0;var e=p(t);if(e.find("img").length)this.loadNext();else{var i=p("<img/>",{sizes:e.attr("data-sizes"),srcset:e.attr("data-srcset"),alt:""});this.addListener(i,"load","loadNext"),i.appendTo(e),picturefill({elements:[i[0]]})}}else this.active=!1}}),Craft.ElevatedSessionForm=Garnish.Base.extend({$form:null,inputs:null,init:function(t,e){if(this.$form=p(t),void 0!==e){this.inputs=[],e=p.makeArray(e);for(var i=0;i<e.length;i++)for(var s=p(e[i]),n=0;n<s.length;n++){var a=s.eq(n);this.inputs.push({input:a,val:Garnish.getInputPostVal(a)})}}this.addListener(this.$form,"submit","handleFormSubmit")},handleFormSubmit:function(t){if(Craft.elevatedSessionManager.fetchingTimeout)t.preventDefault();else{if(this.inputs){for(var e,i=!1,s=0;s<this.inputs.length;s++)if((e=this.inputs[s].input).data("passwordInput")&&(e=e.data("passwordInput").$currentInput),Garnish.getInputPostVal(e)!==this.inputs[s].val){i=!0;break}if(!i)return}t.preventDefault(),Craft.elevatedSessionManager.requireElevatedSession(p.proxy(this,"submitForm"))}},submitForm:function(){this.disable(),this.$form.trigger("submit"),this.enable()}}),Craft.ElevatedSessionManager=Garnish.Base.extend({fetchingTimeout:!1,passwordModal:null,$passwordInput:null,$passwordSpinner:null,$submitBtn:null,$errorPara:null,callback:null,requireElevatedSession:function(t){this.callback=t,this.fetchingTimeout=!0,Craft.postActionRequest("users/get-elevated-session-timeout",p.proxy(function(t,e){this.fetchingTimeout=!1,"success"===e&&(!1===t.timeout||t.timeout>=Craft.ElevatedSessionManager.minSafeElevatedSessionTimeout?this.callback():this.showPasswordModal())},this))},showPasswordModal:function(){if(this.passwordModal)this.passwordModal.show();else{var t=p('<form id="elevatedsessionmodal" class="modal secure fitted"/>'),e=p('<div class="body"><p>'+Craft.t("app","Enter your password to continue.")+"</p></div>").appendTo(t),i=p('<div class="inputcontainer">').appendTo(e),s=p('<div class="flex"/>').appendTo(i),n=p('<div class="flex-grow"/>').appendTo(s),a=p("<td/>").appendTo(s),r=p('<div class="passwordwrapper"/>').appendTo(n);this.$passwordInput=p('<input type="password" class="text password fullwidth" placeholder="'+Craft.t("app","Password")+'" autocomplete="current-password"/>').appendTo(r),this.$passwordSpinner=p('<div class="spinner hidden"/>').appendTo(i),this.$submitBtn=p('<input type="submit" class="btn submit disabled" value="'+Craft.t("app","Submit")+'" />').appendTo(a),this.$errorPara=p('<p class="error"/>').appendTo(e),this.passwordModal=new Garnish.Modal(t,{closeOtherModals:!1,onFadeIn:p.proxy(function(){setTimeout(p.proxy(this,"focusPasswordInput"),100)},this),onFadeOut:p.proxy(function(){this.$passwordInput.val("")},this)}),new Craft.PasswordInput(this.$passwordInput,{onToggleInput:p.proxy(function(t){this.$passwordInput=t},this)}),this.addListener(this.$passwordInput,"textchange","validatePassword"),this.addListener(t,"submit","submitPassword")}},focusPasswordInput:function(){Garnish.isMobileBrowser(!0)||this.$passwordInput.trigger("focus")},validatePassword:function(){return 6<=this.$passwordInput.val().length?(this.$submitBtn.removeClass("disabled"),!0):(this.$submitBtn.addClass("disabled"),!1)},submitPassword:function(t){if(t&&t.preventDefault(),this.validatePassword()){this.$passwordSpinner.removeClass("hidden"),this.clearLoginError();var e={password:this.$passwordInput.val()};Craft.postActionRequest("users/start-elevated-session",e,p.proxy(function(t,e){this.$passwordSpinner.addClass("hidden"),"success"===e?t.success?(this.passwordModal.hide(),this.callback()):(this.showPasswordError(Craft.t("app","Incorrect password.")),Garnish.shake(this.passwordModal.$container),this.focusPasswordInput()):this.showPasswordError()},this))}},showPasswordError:function(t){null==t&&(t=Craft.t("app","An unknown error occurred.")),this.$errorPara.text(t),this.passwordModal.updateSizeAndPosition()},clearLoginError:function(){this.showPasswordError("")}},{minSafeElevatedSessionTimeout:5}),Craft.elevatedSessionManager=new Craft.ElevatedSessionManager,Craft.EntryIndex=Craft.BaseElementIndex.extend({publishableSections:null,$newEntryBtnGroup:null,$newEntryBtn:null,init:function(t,e,i){this.on("selectSource",p.proxy(this,"updateButton")),this.on("selectSite",p.proxy(this,"updateButton")),this.base(t,e,i)},afterInit:function(){this.publishableSections=[];for(var t=0;t<Craft.publishableSections.length;t++){var e=Craft.publishableSections[t];this.getSourceByKey("section:"+e.id)&&this.publishableSections.push(e)}this.base()},getDefaultSourceKey:function(){if("index"===this.settings.context&&"undefined"!=typeof defaultSectionHandle){if("singles"===defaultSectionHandle)return"singles";for(var t=0;t<this.$sources.length;t++){var e=p(this.$sources[t]);if(e.data("handle")===defaultSectionHandle)return e.data("key")}}return this.base()},updateButton:function(){if(this.$source){var t,e,i,s;if(t="singles"===this.$source.data("key")?"singles":this.$source.data("handle"),this.publishableSections.length){var n,a;if(this.$newEntryBtnGroup&&this.$newEntryBtnGroup.remove(),t)for(e=0;e<this.publishableSections.length;e++)if(this.publishableSections[e].handle===t){n=this.publishableSections[e];break}if(this.$newEntryBtnGroup=p('<div class="btngroup submit"/>'),n?(i=this._getSectionTriggerHref(n),s="index"===this.settings.context?Craft.t("app","New entry"):Craft.t("app","New {section} entry",{section:n.name}),this.$newEntryBtn=p('<a class="btn submit add icon" '+i+">"+Craft.escapeHtml(s)+"</a>").appendTo(this.$newEntryBtnGroup),"index"!==this.settings.context&&this.addListener(this.$newEntryBtn,"click",function(t){this._openCreateEntryModal(t.currentTarget.getAttribute("data-id"))}),1<this.publishableSections.length&&(a=p('<div class="btn submit menubtn"></div>').appendTo(this.$newEntryBtnGroup))):this.$newEntryBtn=a=p('<div class="btn submit add icon menubtn">'+Craft.t("app","New entry")+"</div>").appendTo(this.$newEntryBtnGroup),a){var r='<div class="menu"><ul>';for(e=0;e<this.publishableSections.length;e++){var o=this.publishableSections[e];("index"===this.settings.context&&-1!==p.inArray(this.siteId,o.sites)||"index"!==this.settings.context&&o!==n)&&(i=this._getSectionTriggerHref(o),s="index"===this.settings.context?o.name:Craft.t("app","New {section} entry",{section:o.name}),r+="<li><a "+i+'">'+Craft.escapeHtml(s)+"</a></li>")}p(r+="</ul></div>").appendTo(this.$newEntryBtnGroup);var l=new Garnish.MenuBtn(a);"index"!==this.settings.context&&l.on("optionSelect",p.proxy(function(t){this._openCreateEntryModal(t.option.getAttribute("data-id"))},this))}this.addButton(this.$newEntryBtnGroup)}if("index"===this.settings.context&&"undefined"!=typeof history){var h="entries";t&&(h+="/"+t),history.replaceState({},"",Craft.getUrl(h))}}},_getSectionTriggerHref:function(t){if("index"!==this.settings.context)return'data-id="'+t.id+'"';var e="entries/"+t.handle+"/new";if(this.siteId&&this.siteId!=Craft.siteId)for(var i=0;i<Craft.sites.length;i++)Craft.sites[i].id==this.siteId&&(e+="/"+Craft.sites[i].handle);return'href="'+Craft.getUrl(e)+'"'},_openCreateEntryModal:function(i){if(!this.$newEntryBtn.hasClass("loading")){for(var t,e=0;e<this.publishableSections.length;e++)if(this.publishableSections[e].id==i){t=this.publishableSections[e];break}if(t){this.$newEntryBtn.addClass("inactive");var s=this.$newEntryBtn.text();this.$newEntryBtn.text(Craft.t("app","New {section} entry",{section:t.name})),Craft.createElementEditor(this.elementType,{hudTrigger:this.$newEntryBtnGroup,elementType:"craft\\elements\\Entry",siteId:this.siteId,attributes:{sectionId:i,typeId:t.entryTypes[0].id},onBeginLoading:p.proxy(function(){this.$newEntryBtn.addClass("loading")},this),onEndLoading:p.proxy(function(){this.$newEntryBtn.removeClass("loading")},this),onHideHud:p.proxy(function(){this.$newEntryBtn.removeClass("inactive").text(s)},this),onSaveElement:p.proxy(function(t){var e="section:"+i;this.sourceKey!==e&&this.selectSourceByKey(e),this.selectElementAfterUpdate(t.id),this.updateElements()},this)})}}}}),Craft.registerElementIndexClass("craft\\elements\\Entry",Craft.EntryIndex),Craft.FieldLayoutDesigner=Garnish.Base.extend({$container:null,$tabContainer:null,$unusedFieldContainer:null,$newTabBtn:null,$allFields:null,tabGrid:null,unusedFieldGrid:null,tabDrag:null,fieldDrag:null,init:function(t,e){this.$container=p(t),this.setSettings(e,Craft.FieldLayoutDesigner.defaults),this.$tabContainer=this.$container.children(".fld-tabs"),this.$unusedFieldContainer=this.$container.children(".unusedfields"),this.$newTabBtn=this.$container.find("> .newtabbtn-container > .btn"),this.$allFields=this.$unusedFieldContainer.find(".fld-field"),this.tabGrid=new Craft.Grid(this.$tabContainer,Craft.FieldLayoutDesigner.gridSettings),this.unusedFieldGrid=new Craft.Grid(this.$unusedFieldContainer,Craft.FieldLayoutDesigner.gridSettings);for(var i=this.$tabContainer.children(),s=0;s<i.length;s++)this.initTab(p(i[s]));this.fieldDrag=new Craft.FieldLayoutDesigner.FieldDrag(this),this.settings.customizableTabs&&(this.tabDrag=new Craft.FieldLayoutDesigner.TabDrag(this),this.addListener(this.$newTabBtn,"activate","addTab"))},initTab:function(t){if(this.settings.customizableTabs){var e=t.find(".tabs .settings"),i=p('<div class="menu" data-align="center"/>').insertAfter(e),s=p("<ul/>").appendTo(i);p('<li><a data-action="rename">'+Craft.t("app","Rename")+"</a></li>").appendTo(s),p('<li><a data-action="delete">'+Craft.t("app","Delete")+"</a></li>").appendTo(s),new Garnish.MenuBtn(e,{onOptionSelect:p.proxy(this,"onTabOptionSelect")})}for(var n=t.children(".fld-tabcontent").children(),a=0;a<n.length;a++)this.initField(p(n[a]))},initField:function(t){var e=t.find(".settings"),i=p('<div class="menu" data-align="center"/>').insertAfter(e),s=p("<ul/>").appendTo(i);t.hasClass("fld-required")?p('<li><a data-action="toggle-required">'+Craft.t("app","Make not required")+"</a></li>").appendTo(s):p('<li><a data-action="toggle-required">'+Craft.t("app","Make required")+"</a></li>").appendTo(s),p('<li><a data-action="remove">'+Craft.t("app","Remove")+"</a></li>").appendTo(s),new Garnish.MenuBtn(e,{onOptionSelect:p.proxy(this,"onFieldOptionSelect")})},onTabOptionSelect:function(t){if(this.settings.customizableTabs){var e=p(t),i=e.data("menu").$anchor.parent().parent().parent();switch(e.data("action")){case"rename":this.renameTab(i);break;case"delete":this.deleteTab(i)}}},onFieldOptionSelect:function(t){var e=p(t),i=e.data("menu").$anchor.parent();switch(e.data("action")){case"toggle-required":this.toggleRequiredField(i,e);break;case"remove":this.removeField(i)}},renameTab:function(t){if(this.settings.customizableTabs){var e=t.find(".tabs .tab span"),i=e.text(),s=prompt(Craft.t("app","Give your tab a name."),i);s&&s!==i&&(e.text(s),t.find(".id-input").attr("name",this.getFieldInputName(s)))}},deleteTab:function(t){if(this.settings.customizableTabs){for(var e=t.find(".fld-field"),i=0;i<e.length;i++){var s=p(e[i]).attr("data-id");this.removeFieldById(s)}this.tabGrid.removeItems(t),this.tabDrag.removeItems(t),t.remove()}},toggleRequiredField:function(t,e){t.hasClass("fld-required")?(t.removeClass("fld-required"),t.find(".required-input").remove(),setTimeout(function(){e.text(Craft.t("app","Make required"))},500)):(t.addClass("fld-required"),p('<input class="required-input" type="hidden" name="'+this.settings.requiredFieldInputName+'" value="'+t.data("id")+'">').appendTo(t),setTimeout(function(){e.text(Craft.t("app","Make not required"))},500))},removeField:function(t){var e=t.attr("data-id");t.remove(),this.removeFieldById(e),this.tabGrid.refreshCols(!0)},removeFieldById:function(t){var e=this.$allFields.filter("[data-id="+t+"]:first"),i=e.closest(".fld-tab");e.removeClass("hidden"),i.hasClass("hidden")?(i.removeClass("hidden"),this.unusedFieldGrid.addItems(i),this.settings.customizableTabs&&this.tabDrag.addItems(i)):this.unusedFieldGrid.refreshCols(!0)},addTab:function(){if(this.settings.customizableTabs){var t=p('<div class="fld-tab"><div class="tabs"><div class="tab sel draggable"><span>Tab '+(this.tabGrid.$items.length+1)+'</span><a class="settings icon" title="'+Craft.t("app","Rename")+'"></a></div></div><div class="fld-tabcontent"></div></div>').appendTo(this.$tabContainer);this.tabGrid.addItems(t),this.tabDrag.addItems(t),this.initTab(t)}},getFieldInputName:function(t){return this.settings.fieldInputName.replace(/__TAB_NAME__/g,Craft.encodeUriComponent(t))}},{gridSettings:{itemSelector:".fld-tab:not(.hidden)",minColWidth:240,fillMode:"grid",snapToGrid:30},defaults:{customizableTabs:!0,fieldInputName:"fieldLayout[__TAB_NAME__][]",requiredFieldInputName:"requiredFields[]"}}),Craft.FieldLayoutDesigner.BaseDrag=Garnish.Drag.extend({designer:null,$insertion:null,showingInsertion:!1,$caboose:null,draggingUnusedItem:!1,addToTabGrid:!1,init:function(t,e){this.designer=t;var i=this.designer.$tabContainer.find(this.itemSelector).add(this.designer.$unusedFieldContainer.find(this.itemSelector));this.base(i,e)},onDragStart:function(){this.base(),this.draggingUnusedItem=this.$draggee.hasClass("unused"),this.$insertion=this.getInsertion(),this.addCaboose(),this.$items=p().add(this.$items.add(this.$caboose)),this.addToTabGrid&&this.designer.tabGrid.addItems(this.$caboose),this.draggingUnusedItem?this.showingInsertion=!1:(this.$insertion.insertBefore(this.$draggee),this.$draggee.detach(),this.$items=p().add(this.$items.not(this.$draggee).add(this.$insertion)),this.showingInsertion=!0,this.addToTabGrid&&(this.designer.tabGrid.removeItems(this.$draggee),this.designer.tabGrid.addItems(this.$insertion))),this.setMidpoints()},addCaboose:p.noop,getItemContainer:p.noop,isItemInTabContainer:function(t){return this.getItemContainer(t)[0]===this.designer.$tabContainer[0]},setMidpoints:function(){for(var t=0;t<this.$items.length;t++){var e=p(this.$items[t]);if(this.isItemInTabContainer(e)){var i=e.offset();e.data("midpoint",{left:i.left+e.outerWidth()/2,top:i.top+e.outerHeight()/2})}}},onDrag:function(){this.draggingUnusedItem&&!Garnish.hitTest(this.mouseX,this.mouseY,this.designer.$tabContainer)?this.showingInsertion&&(this.$insertion.remove(),this.$items=p().add(this.$items.not(this.$insertion)),this.showingInsertion=!1,this.addToTabGrid?this.designer.tabGrid.removeItems(this.$insertion):this.designer.tabGrid.refreshCols(!0),this.setMidpoints()):(this.onDrag._closestItem=this.getClosestItem(),this.onDrag._closestItem!==this.$insertion[0]&&(this.showingInsertion&&p.inArray(this.$insertion[0],this.$items)<p.inArray(this.onDrag._closestItem,this.$items)&&-1===p.inArray(this.onDrag._closestItem,this.$caboose)?this.$insertion.insertAfter(this.onDrag._closestItem):this.$insertion.insertBefore(this.onDrag._closestItem),this.$items=p().add(this.$items.add(this.$insertion)),this.showingInsertion=!0,this.addToTabGrid?this.designer.tabGrid.addItems(this.$insertion):this.designer.tabGrid.refreshCols(!0),this.setMidpoints())),this.base()},getClosestItem:function(){for(this.getClosestItem._closestItem=null,this.getClosestItem._closestItemMouseDiff=null,this.getClosestItem._i=0;this.getClosestItem._i<this.$items.length;this.getClosestItem._i++)this.getClosestItem._$item=p(this.$items[this.getClosestItem._i]),this.isItemInTabContainer(this.getClosestItem._$item)&&(this.getClosestItem._midpoint=this.getClosestItem._$item.data("midpoint"),this.getClosestItem._mouseDiff=Garnish.getDist(this.getClosestItem._midpoint.left,this.getClosestItem._midpoint.top,this.mouseX,this.mouseY),(null===this.getClosestItem._closestItem||this.getClosestItem._mouseDiff<this.getClosestItem._closestItemMouseDiff)&&(this.getClosestItem._closestItem=this.getClosestItem._$item[0],this.getClosestItem._closestItemMouseDiff=this.getClosestItem._mouseDiff));return this.getClosestItem._closestItem},onDragStop:function(){this.showingInsertion&&(this.$insertion.replaceWith(this.$draggee),this.$items=p().add(this.$items.not(this.$insertion).add(this.$draggee)),this.addToTabGrid&&(this.designer.tabGrid.removeItems(this.$insertion),this.designer.tabGrid.addItems(this.$draggee))),this.$items=this.$items.not(this.$caboose),this.$caboose.remove(),this.addToTabGrid&&this.designer.tabGrid.removeItems(this.$caboose),this.$draggee.css({display:this.draggeeDisplay,visibility:"hidden"}),this.designer.tabGrid.refreshCols(!0),this.designer.unusedFieldGrid.refreshCols(!0),this.returnHelpersToDraggees(),this.base()}}),Craft.FieldLayoutDesigner.TabDrag=Craft.FieldLayoutDesigner.BaseDrag.extend({itemSelector:"> div.fld-tab",addToTabGrid:!0,init:function(t){this.base(t,{handle:".tab"})},addCaboose:function(){this.$caboose=p('<div class="fld-tab fld-tab-caboose"/>').appendTo(this.designer.$tabContainer)},getInsertion:function(){var t=this.$draggee.find(".tab");return p('<div class="fld-tab fld-insertion" style="height: '+this.$draggee.height()+'px;"><div class="tabs"><div class="tab sel draggable" style="width: '+t.width()+"px; height: "+t.height()+'px;"></div></div><div class="fld-tabcontent" style="height: '+this.$draggee.find(".fld-tabcontent").height()+'px;"></div></div>')},getItemContainer:function(t){return t.parent()},onDragStop:function(){if(this.draggingUnusedItem&&this.showingInsertion){var t=this.$draggee.clone().removeClass("unused"),e=t.find(".tab span").text();t.find(".fld-field").removeClass("unused"),t.find(".tabs .tab").append('<a class="settings icon" title="'+Craft.t("app","Edit")+'"></a>');var i=t.find(".fld-field"),s=i.filter(".hidden").remove();(i=i.not(s)).prepend('<a class="settings icon" title="'+Craft.t("app","Edit")+'"></a>');for(var n=0;n<i.length;n++){var a=p(i[n]),r=this.designer.getFieldInputName(e);a.append('<input class="id-input" type="hidden" name="'+r+'" value="'+a.data("id")+'">')}this.designer.fieldDrag.addItems(i),this.designer.initTab(t),this.$draggee.css({visibility:"inherit",display:"field"}).addClass("hidden"),this.$draggee.find(".fld-field").addClass("hidden"),this.$draggee=t,this.addItems(t),this.designer.tabGrid.addItems(t),this.designer.unusedFieldGrid.removeItems(this.$draggee)}this.base()}}),Craft.FieldLayoutDesigner.FieldDrag=Craft.FieldLayoutDesigner.BaseDrag.extend({itemSelector:"> div.fld-tab .fld-field",addCaboose:function(){this.$caboose=p();for(var t=this.designer.$tabContainer.children().children(".fld-tabcontent"),e=0;e<t.length;e++){var i=p('<div class="fld-tab fld-tab-caboose"/>').appendTo(t[e]);this.$caboose=this.$caboose.add(i)}},getInsertion:function(){return p('<div class="fld-field fld-insertion" style="height: '+this.$draggee.height()+'px;"/>')},getItemContainer:function(t){return t.parent().parent().parent()},onDragStop:function(){if(this.draggingUnusedItem&&this.showingInsertion){var t=this.$draggee.clone().removeClass("unused");if(t.prepend('<a class="settings icon" title="'+Craft.t("app","Edit")+'"></a>'),this.designer.initField(t),this.$draggee.css({visibility:"inherit",display:"field"}).addClass("hidden"),0===this.$draggee.siblings(":not(.hidden)").length){var e=this.$draggee.parent().parent();e.addClass("hidden"),this.designer.unusedFieldGrid.removeItems(e)}this.$draggee=t,this.addItems(t)}if(this.showingInsertion){var i=this.$insertion.parent().parent().find(".tab span").text(),s=this.designer.getFieldInputName(i);this.draggingUnusedItem?this.$draggee.append('<input class="id-input" type="hidden" name="'+s+'" value="'+this.$draggee.data("id")+'">'):this.$draggee.find(".id-input").attr("name",s)}this.base()}}),Craft.FieldToggle=Garnish.Base.extend({$toggle:null,targetPrefix:null,targetSelector:null,reverseTargetSelector:null,_$target:null,_$reverseTarget:null,type:null,init:function(t){this.$toggle=p(t),this.$toggle.data("fieldtoggle")&&(Garnish.log("Double-instantiating a field toggle on an element"),this.$toggle.data("fieldtoggle").destroy()),this.$toggle.data("fieldtoggle",this),this.type=this.getType(),"select"===this.type?this.targetPrefix=this.$toggle.attr("data-target-prefix")||"":(this.targetSelector=this.normalizeTargetSelector(this.$toggle.data("target")),this.reverseTargetSelector=this.normalizeTargetSelector(this.$toggle.data("reverse-target"))),this.findTargets(),"link"===this.type?this.addListener(this.$toggle,"click","onToggleChange"):this.addListener(this.$toggle,"change","onToggleChange")},normalizeTargetSelector:function(t){return t&&!t.match(/^[#\.]/)&&(t="#"+t),t},getType:function(){return"INPUT"===this.$toggle.prop("nodeName")&&"checkbox"===this.$toggle.attr("type").toLowerCase()?"checkbox":"SELECT"===this.$toggle.prop("nodeName")?"select":"A"===this.$toggle.prop("nodeName")?"link":"DIV"===this.$toggle.prop("nodeName")&&this.$toggle.hasClass("lightswitch")?"lightswitch":void 0},findTargets:function(){"select"===this.type?this._$target=p(this.normalizeTargetSelector(this.targetPrefix+this.getToggleVal())):(this.targetSelector&&(this._$target=p(this.targetSelector)),this.reverseTargetSelector&&(this._$reverseTarget=p(this.reverseTargetSelector)))},getToggleVal:function(){if("lightswitch"===this.type)return this.$toggle.children("input").val();var t=Garnish.getInputPostVal(this.$toggle);return null===t?null:t.replace(/[\[\]\\]+/g,"-")},onToggleChange:function(){"select"===this.type?(this.hideTarget(this._$target),this.findTargets(),this.showTarget(this._$target)):("link"===this.type?this.onToggleChange._show=this.$toggle.hasClass("collapsed")||!this.$toggle.hasClass("expanded"):this.onToggleChange._show=!!this.getToggleVal(),this.onToggleChange._show?(this.showTarget(this._$target),this.hideTarget(this._$reverseTarget)):(this.hideTarget(this._$target),this.showTarget(this._$reverseTarget)),delete this.onToggleChange._show)},showTarget:function(t){t&&t.length&&(this.showTarget._currentHeight=t.height(),t.removeClass("hidden"),"select"!==this.type&&("link"===this.type&&(this.$toggle.removeClass("collapsed"),this.$toggle.addClass("expanded")),t.height("auto"),this.showTarget._targetHeight=t.height(),t.css({height:this.showTarget._currentHeight,overflow:"hidden"}),t.velocity("stop"),t.velocity({height:this.showTarget._targetHeight},"fast",function(){t.css({height:"",overflow:""})}),delete this.showTarget._targetHeight),delete this.showTarget._currentHeight,Garnish.$win.trigger("resize"))},hideTarget:function(t){t&&t.length&&("select"===this.type?t.addClass("hidden"):("link"===this.type&&(this.$toggle.removeClass("expanded"),this.$toggle.addClass("collapsed")),t.css("overflow","hidden"),t.velocity("stop"),t.velocity({height:0},"fast",function(){t.addClass("hidden")})))}}),Craft.Grid=Garnish.Base.extend({$container:null,$items:null,items:null,totalCols:null,colGutterDrop:null,colPctWidth:null,possibleItemColspans:null,possibleItemPositionsByColspan:null,itemPositions:null,itemColspansByPosition:null,layouts:null,layout:null,itemHeights:null,leftPadding:null,_refreshingCols:!1,_refreshColsAfterRefresh:!1,_forceRefreshColsAfterRefresh:!1,init:function(t,e){this.$container=p(t),this.$container.data("grid")&&(Garnish.log("Double-instantiating a grid on an element"),this.$container.data("grid").destroy()),this.$container.data("grid",this),this.setSettings(e,Craft.Grid.defaults),this.handleContainerHeightProxy=p.proxy(function(){this.refreshCols(!1,!0)},this),this.$items=this.$container.children(this.settings.itemSelector),this.setItems(),this.refreshCols(!0,!1),Garnish.$doc.ready(p.proxy(function(){this.refreshCols(!1,!1)},this))},addItems:function(t){this.$items=p().add(this.$items.add(t)),this.setItems(),this.refreshCols(!0,!0)},removeItems:function(t){this.$items=p().add(this.$items.not(t)),this.setItems(),this.refreshCols(!0,!0)},resetItemOrder:function(){this.$items=p().add(this.$items),this.setItems(),this.refreshCols(!0,!0)},setItems:function(){for(this.setItems._={},this.items=[],this.setItems._.i=0;this.setItems._.i<this.$items.length;this.setItems._.i++)this.items.push(p(this.$items[this.setItems._.i]));delete this.setItems._},refreshCols:function(t){if(this._refreshingCols)return this._refreshColsAfterRefresh=!0,void(t&&(this._forceRefreshColsAfterRefresh=!0));if(this._refreshingCols=!0,this.items.length)if(this.refreshCols._={},this.refreshCols._.oldHeight=this.$container[0].style.height,this.$container[0].style.height=1,this.refreshCols._.scrollHeight=this.$container[0].scrollHeight,this.$container[0].style.height=this.refreshCols._.oldHeight,0!==this.refreshCols._.scrollHeight)if(this.settings.cols?this.refreshCols._.totalCols=this.settings.cols:(this.refreshCols._.totalCols=Math.floor(this.$container.width()/this.settings.minColWidth),this.settings.maxCols&&this.refreshCols._.totalCols>this.settings.maxCols&&(this.refreshCols._.totalCols=this.settings.maxCols)),0===this.refreshCols._.totalCols&&(this.refreshCols._.totalCols=1),!0===t||this.totalCols!==this.refreshCols._.totalCols){if(this.totalCols=this.refreshCols._.totalCols,this.colGutterDrop=this.settings.gutter*(this.totalCols-1)/this.totalCols,this.removeListener(this.$container,"resize"),"grid"===this.settings.fillMode)for(this.refreshCols._.itemIndex=0;this.refreshCols._.itemIndex<this.items.length;){for(this.refreshCols._.tallestItemHeight=-1,this.refreshCols._.colIndex=0,this.refreshCols._.i=this.refreshCols._.itemIndex;this.refreshCols._.i<this.refreshCols._.itemIndex+this.totalCols&&this.refreshCols._.i<this.items.length;this.refreshCols._.i++)this.refreshCols._.itemHeight=this.items[this.refreshCols._.i].height("auto").height(),this.refreshCols._.itemHeight>this.refreshCols._.tallestItemHeight&&(this.refreshCols._.tallestItemHeight=this.refreshCols._.itemHeight),this.refreshCols._.colIndex++;for(this.settings.snapToGrid&&(this.refreshCols._.remainder=this.refreshCols._.tallestItemHeight%this.settings.snapToGrid,this.refreshCols._.remainder&&(this.refreshCols._.tallestItemHeight+=this.settings.snapToGrid-this.refreshCols._.remainder)),this.refreshCols._.i=this.refreshCols._.itemIndex;this.refreshCols._.i<this.refreshCols._.itemIndex+this.totalCols&&this.refreshCols._.i<this.items.length;this.refreshCols._.i++)this.items[this.refreshCols._.i].height(this.refreshCols._.tallestItemHeight);this.refreshCols._.itemIndex+=this.totalCols}else if(this.removeListener(this.$items,"resize"),1===this.totalCols)this.$container.height("auto"),this.$items.show().css({position:"relative",width:"auto",top:0}).css(Craft.left,0);else{for(this.$items.css("position","absolute"),this.colPctWidth=100/this.totalCols,this.layouts=[],this.itemPositions=[],this.itemColspansByPosition=[],this.possibleItemColspans=[],this.possibleItemPositionsByColspan=[],this.itemHeightsByColspan=[],this.refreshCols._.item=0;this.refreshCols._.item<this.items.length;this.refreshCols._.item++)for(this.possibleItemColspans[this.refreshCols._.item]=[],this.possibleItemPositionsByColspan[this.refreshCols._.item]={},this.itemHeightsByColspan[this.refreshCols._.item]={},this.refreshCols._.$item=this.items[this.refreshCols._.item].show(),this.refreshCols._.positionRight="right"===this.refreshCols._.$item.data("position"),this.refreshCols._.positionLeft="left"===this.refreshCols._.$item.data("position"),this.refreshCols._.minColspan=this.refreshCols._.$item.data("colspan")?this.refreshCols._.$item.data("colspan"):this.refreshCols._.$item.data("min-colspan")?this.refreshCols._.$item.data("min-colspan"):1,this.refreshCols._.maxColspan=this.refreshCols._.$item.data("colspan")?this.refreshCols._.$item.data("colspan"):this.refreshCols._.$item.data("max-colspan")?this.refreshCols._.$item.data("max-colspan"):this.totalCols,this.refreshCols._.minColspan>this.totalCols&&(this.refreshCols._.minColspan=this.totalCols),this.refreshCols._.maxColspan>this.totalCols&&(this.refreshCols._.maxColspan=this.totalCols),this.refreshCols._.colspan=this.refreshCols._.minColspan;this.refreshCols._.colspan<=this.refreshCols._.maxColspan;this.refreshCols._.colspan++)for(this.refreshCols._.$item.css("width",this.getItemWidthCss(this.refreshCols._.colspan)),this.itemHeightsByColspan[this.refreshCols._.item][this.refreshCols._.colspan]=this.refreshCols._.$item.outerHeight(),this.possibleItemColspans[this.refreshCols._.item].push(this.refreshCols._.colspan),this.possibleItemPositionsByColspan[this.refreshCols._.item][this.refreshCols._.colspan]=[],this.refreshCols._.positionLeft?(this.refreshCols._.minPosition=0,this.refreshCols._.maxPosition=0):this.refreshCols._.positionRight?(this.refreshCols._.minPosition=this.totalCols-this.refreshCols._.colspan,this.refreshCols._.maxPosition=this.refreshCols._.minPosition):(this.refreshCols._.minPosition=0,this.refreshCols._.maxPosition=this.totalCols-this.refreshCols._.colspan),this.refreshCols._.position=this.refreshCols._.minPosition;this.refreshCols._.position<=this.refreshCols._.maxPosition;this.refreshCols._.position++)this.possibleItemPositionsByColspan[this.refreshCols._.item][this.refreshCols._.colspan].push(this.refreshCols._.position);for(this.refreshCols._.colHeights=[],this.refreshCols._.i=0;this.refreshCols._.i<this.totalCols;this.refreshCols._.i++)this.refreshCols._.colHeights.push(0);for(this.createLayouts(0,[],[],this.refreshCols._.colHeights,0),this.refreshCols._.layoutTotalCols=[],this.refreshCols._.i=0;this.refreshCols._.i<this.layouts.length;this.refreshCols._.i++)for(this.refreshCols._.layoutTotalCols[this.refreshCols._.i]=0,this.refreshCols._.j=0;this.refreshCols._.j<this.totalCols;this.refreshCols._.j++)this.layouts[this.refreshCols._.i].colHeights[this.refreshCols._.j]&&this.refreshCols._.layoutTotalCols[this.refreshCols._.i]++;for(this.refreshCols._.highestTotalCols=Math.max.apply(null,this.refreshCols._.layoutTotalCols),this.refreshCols._.i=this.layouts.length-1;0<=this.refreshCols._.i;this.refreshCols._.i--)this.refreshCols._.layoutTotalCols[this.refreshCols._.i]!==this.refreshCols._.highestTotalCols&&this.layouts.splice(this.refreshCols._.i,1);for(this.refreshCols._.layoutHeights=[],this.refreshCols._.i=0;this.refreshCols._.i<this.layouts.length;this.refreshCols._.i++)this.refreshCols._.layoutHeights.push(Math.max.apply(null,this.layouts[this.refreshCols._.i].colHeights));for(this.refreshCols._.shortestHeight=Math.min.apply(null,this.refreshCols._.layoutHeights),this.refreshCols._.shortestLayouts=[],this.refreshCols._.emptySpaces=[],this.refreshCols._.i=0;this.refreshCols._.i<this.refreshCols._.layoutHeights.length;this.refreshCols._.i++)if(this.refreshCols._.layoutHeights[this.refreshCols._.i]===this.refreshCols._.shortestHeight){for(this.refreshCols._.shortestLayouts.push(this.layouts[this.refreshCols._.i]),this.refreshCols._.emptySpace=this.layouts[this.refreshCols._.i].emptySpace,this.refreshCols._.j=0;this.refreshCols._.j<this.totalCols;this.refreshCols._.j++)this.refreshCols._.emptySpace+=this.refreshCols._.shortestHeight-this.layouts[this.refreshCols._.i].colHeights[this.refreshCols._.j];this.refreshCols._.emptySpaces.push(this.refreshCols._.emptySpace)}for(this.layout=this.refreshCols._.shortestLayouts[p.inArray(Math.min.apply(null,this.refreshCols._.emptySpaces),this.refreshCols._.emptySpaces)],this.refreshCols._.i=0;this.refreshCols._.i<this.items.length;this.refreshCols._.i++)this.refreshCols._.css={width:this.getItemWidthCss(this.layout.colspans[this.refreshCols._.i])},this.refreshCols._.css[Craft.left]=this.getItemLeftPosCss(this.layout.positions[this.refreshCols._.i]),this.items[this.refreshCols._.i].css(this.refreshCols._.css);this.isSimpleLayout()?(this.$container.height("auto"),this.$items.css({position:"relative",top:0,"margin-bottom":this.settings.gutter+"px"})):(this.$items.css("position","absolute"),this.positionItems(),this.addListener(this.$items,"resize","onItemResize"))}this.completeRefreshCols(),this.addListener(this.$container,"resize",this.handleContainerHeightProxy),this.onRefreshCols()}else this.completeRefreshCols();else this.completeRefreshCols();else this.completeRefreshCols()},completeRefreshCols:function(){if(void 0!==this.refreshCols._&&delete this.refreshCols._,this._refreshingCols=!1,this._refreshColsAfterRefresh){var t=this._forceRefreshColsAfterRefresh;this._refreshColsAfterRefresh=!1,this._forceRefreshColsAfterRefresh=!1,Garnish.requestAnimationFrame(p.proxy(function(){this.refreshCols(t)},this))}},getItemWidth:function(t){return this.colPctWidth*t},getItemWidthCss:function(t){return"calc("+this.getItemWidth(t)+"% - "+this.colGutterDrop+"px)"},getItemWidthInPx:function(t){return this.getItemWidth(t)/100*this.$container.width()-this.colGutterDrop},getItemLeftPosCss:function(t){return"calc(("+this.getItemWidth(1)+"% + "+(this.settings.gutter-this.colGutterDrop)+"px) * "+t+")"},getItemLeftPosInPx:function(t){return(this.getItemWidth(1)/100*this.$container.width()+(this.settings.gutter-this.colGutterDrop))*t},createLayouts:function(t,e,i,s,n){new Craft.Grid.LayoutGenerator(this).createLayouts(t,e,i,s,n)},isSimpleLayout:function(){for(this.isSimpleLayout._={},this.isSimpleLayout._.i=0;this.isSimpleLayout._.i<this.layout.positions.length;this.isSimpleLayout._.i++)if(0!==this.layout.positions[this.isSimpleLayout._.i])return delete this.isSimpleLayout._,!1;return delete this.isSimpleLayout._,!0},positionItems:function(){for(this.positionItems._={},this.positionItems._.colHeights=[],this.positionItems._.i=0;this.positionItems._.i<this.totalCols;this.positionItems._.i++)this.positionItems._.colHeights.push(0);for(this.positionItems._.i=0;this.positionItems._.i<this.items.length;this.positionItems._.i++){for(this.positionItems._.endingCol=this.layout.positions[this.positionItems._.i]+this.layout.colspans[this.positionItems._.i]-1,this.positionItems._.affectedColHeights=[],this.positionItems._.col=this.layout.positions[this.positionItems._.i];this.positionItems._.col<=this.positionItems._.endingCol;this.positionItems._.col++)this.positionItems._.affectedColHeights.push(this.positionItems._.colHeights[this.positionItems._.col]);for(this.positionItems._.top=Math.max.apply(null,this.positionItems._.affectedColHeights),0<this.positionItems._.top&&(this.positionItems._.top+=this.settings.gutter),this.items[this.positionItems._.i].css("top",this.positionItems._.top),this.positionItems._.col=this.layout.positions[this.positionItems._.i];this.positionItems._.col<=this.positionItems._.endingCol;this.positionItems._.col++)this.positionItems._.colHeights[this.positionItems._.col]=this.positionItems._.top+this.itemHeightsByColspan[this.positionItems._.i][this.layout.colspans[this.positionItems._.i]]}this.$container.height(Math.max.apply(null,this.positionItems._.colHeights)),delete this.positionItems._},onItemResize:function(t){this.onItemResize._={},t.stopPropagation(),this.onItemResize._.item=p.inArray(t.currentTarget,this.$items),-1!==this.onItemResize._.item&&(this.onItemResize._.newHeight=this.items[this.onItemResize._.item].outerHeight(),this.onItemResize._.newHeight!==this.itemHeightsByColspan[this.onItemResize._.item][this.layout.colspans[this.onItemResize._.item]]&&(this.itemHeightsByColspan[this.onItemResize._.item][this.layout.colspans[this.onItemResize._.item]]=this.onItemResize._.newHeight,this.positionItems(!1))),delete this.onItemResize._},onRefreshCols:function(){this.trigger("refreshCols"),this.settings.onRefreshCols()}},{defaults:{itemSelector:".item",cols:null,maxCols:null,minColWidth:320,gutter:14,fillMode:"top",colClass:"col",snapToGrid:null,onRefreshCols:p.noop}}),Craft.Grid.LayoutGenerator=Garnish.Base.extend({grid:null,_:null,init:function(t){this.grid=t},createLayouts:function(t,e,i,s,n){for(this._={},this._.c=0;this._.c<this.grid.possibleItemColspans[t].length;this._.c++){for(this._.colspan=this.grid.possibleItemColspans[t][this._.c],this._.tallestColHeightsByPosition=[],this._.p=0;this._.p<this.grid.possibleItemPositionsByColspan[t][this._.colspan].length;this._.p++){for(this._.position=this.grid.possibleItemPositionsByColspan[t][this._.colspan][this._.p],this._.colHeightsForPosition=[],this._.endingCol=this._.position+this._.colspan-1,this._.col=this._.position;this._.col<=this._.endingCol;this._.col++)this._.colHeightsForPosition.push(s[this._.col]);this._.tallestColHeightsByPosition[this._.p]=Math.max.apply(null,this._.colHeightsForPosition)}for(this._.p=p.inArray(Math.min.apply(null,this._.tallestColHeightsByPosition),this._.tallestColHeightsByPosition),this._.position=this.grid.possibleItemPositionsByColspan[t][this._.colspan][this._.p],this._.positions=e.slice(0),this._.colspans=i.slice(0),this._.colHeights=s.slice(0),this._.emptySpace=n,this._.positions.push(this._.position),this._.colspans.push(this._.colspan),this._.tallestColHeight=this._.tallestColHeightsByPosition[this._.p],this._.endingCol=this._.position+this._.colspan-1,this._.col=this._.position;this._.col<=this._.endingCol;this._.col++)this._.emptySpace+=this._.tallestColHeight-this._.colHeights[this._.col],this._.colHeights[this._.col]=this._.tallestColHeight+this.grid.itemHeightsByColspan[t][this._.colspan];t===this.grid.items.length-1?this.grid.layouts.push({positions:this._.positions,colspans:this._.colspans,colHeights:this._.colHeights,emptySpace:this._.emptySpace}):this.grid.createLayouts(t+1,this._.positions,this._.colspans,this._.colHeights,this._.emptySpace)}delete this._}}),Craft.HandleGenerator=Craft.BaseInputGenerator.extend({generateTargetValue:function(t){var e=t.replace("/<(.*?)>/g","");e=(e=e.replace(/['"‘’“”\[\]\(\)\{\}:]/g,"")).toLowerCase(),e=(e=Craft.asciiString(e)).replace(/^[^a-z]+/,"");var i=Craft.filterArray(e.split(/[^a-z0-9]+/));e="";for(var s=0;s<i.length;s++)e+=0===s?i[s]:i[s].charAt(0).toUpperCase()+i[s].substr(1);return e}}),Craft.ImageUpload=Garnish.Base.extend({$container:null,progressBar:null,uploader:null,init:function(t){this.setSettings(t,Craft.ImageUpload.defaults),this.initImageUpload()},initImageUpload:function(){this.$container=p(this.settings.containerSelector),this.progressBar=new Craft.ProgressBar(p('<div class="progress-shade"></div>').appendTo(this.$container));var t={url:Craft.getActionUrl(this.settings.uploadAction),formData:this.settings.postParameters,fileInput:this.$container.find(this.settings.fileInputSelector),paramName:this.settings.uploadParamName};void 0!==Craft.csrfTokenName&&void 0!==Craft.csrfTokenValue&&(t.formData[Craft.csrfTokenName]=Craft.csrfTokenValue),t.events={},t.events.fileuploadstart=p.proxy(this,"_onUploadStart"),t.events.fileuploadprogressall=p.proxy(this,"_onUploadProgress"),t.events.fileuploaddone=p.proxy(this,"_onUploadComplete"),t.events.fileuploadfail=p.proxy(this,"_onUploadError"),this.uploader=new Craft.Uploader(this.$container,t),this.initButtons()},initButtons:function(){this.$container.find(this.settings.uploadButtonSelector).on("click",p.proxy(function(t){this.$container.find(this.settings.fileInputSelector).trigger("click")},this)),this.$container.find(this.settings.deleteButtonSelector).on("click",p.proxy(function(t){confirm(Craft.t("app","Are you sure you want to delete this image?"))&&(p(t.currentTarget).parent().append('<div class="blocking-modal"></div>'),Craft.postActionRequest(this.settings.deleteAction,this.settings.postParameters,p.proxy(function(t,e){"success"===e&&this.refreshImage(t)},this)))},this))},refreshImage:function(t){p(this.settings.containerSelector).replaceWith(t.html),this.settings.onAfterRefreshImage(t),this.initImageUpload()},_onUploadStart:function(t){this.progressBar.$progressBar.css({top:Math.round(this.$container.outerHeight()/2)-6}),this.$container.addClass("uploading"),this.progressBar.resetProgressBar(),this.progressBar.showProgressBar()},_onUploadProgress:function(t,e){var i=parseInt(e.loaded/e.total*100,10);this.progressBar.setProgressPercentage(i)},_onUploadComplete:function(t,e){if(e.result.error)alert(e.result.error);else{p(e.result.html);this.refreshImage(e.result)}this.uploader.isLastUpload()&&(this.progressBar.hideProgressBar(),this.$container.removeClass("uploading"))},_onUploadError:function(t,e){e.jqXHR.responseJSON.error&&(alert(e.jqXHR.responseJSON.error),this.$container.removeClass("uploading"),this.progressBar.hideProgressBar(),this.progressBar.resetProgressBar())}},{defaults:{postParameters:{},uploadAction:"",deleteAction:"",fileInputSelector:"",onAfterRefreshImage:p.noop,containerSelector:null,uploadButtonSelector:null,deleteButtonSelector:null,uploadParamName:"files"}}),Craft.InfoIcon=Garnish.Base.extend({$icon:null,hud:null,init:function(t){this.$icon=p(t),this.addListener(this.$icon,"click","showHud")},showHud:function(){this.hud?this.hud.show():this.hud=new Garnish.HUD(this.$icon,this.$icon.html(),{hudClass:"hud info-hud",closeOtherHUDs:!1})}}),Craft.LightSwitch=Garnish.Base.extend({settings:null,$outerContainer:null,$innerContainer:null,$input:null,small:!1,on:null,dragger:null,dragStartMargin:null,init:function(t,e){this.$outerContainer=p(t),this.$outerContainer.data("lightswitch")&&(Garnish.log("Double-instantiating a lightswitch on an element"),this.$outerContainer.data("lightswitch").destroy()),this.$outerContainer.data("lightswitch",this),this.small=this.$outerContainer.hasClass("small"),this.setSettings(e,Craft.LightSwitch.defaults),this.$innerContainer=this.$outerContainer.find(".lightswitch-container:first"),this.$input=this.$outerContainer.find("input:first"),this.$input.prop("disabled")||(this.on=this.$outerContainer.hasClass("on"),this.$outerContainer.attr({role:"checkbox","aria-checked":this.on?"true":"false"}),this.addListener(this.$outerContainer,"mousedown","_onMouseDown"),this.addListener(this.$outerContainer,"keydown","_onKeyDown"),this.dragger=new Garnish.BaseDrag(this.$outerContainer,{axis:Garnish.X_AXIS,ignoreHandleSelector:null,onDragStart:p.proxy(this,"_onDragStart"),onDrag:p.proxy(this,"_onDrag"),onDragStop:p.proxy(this,"_onDragStop")}))},turnOn:function(){this.$outerContainer.addClass("dragging");var t={};t["margin-"+Craft.left]=0,this.$innerContainer.velocity("stop").velocity(t,Craft.LightSwitch.animationDuration,p.proxy(this,"_onSettle")),this.$input.val(this.settings.value),this.$outerContainer.addClass("on"),this.$outerContainer.attr("aria-checked","true"),this.on!==(this.on=!0)&&this.onChange()},turnOff:function(){this.$outerContainer.addClass("dragging");var t={};t["margin-"+Craft.left]=this._getOffMargin(),this.$innerContainer.velocity("stop").velocity(t,Craft.LightSwitch.animationDuration,p.proxy(this,"_onSettle")),this.$input.val(""),this.$outerContainer.removeClass("on"),this.$outerContainer.attr("aria-checked","false"),this.on!==(this.on=!1)&&this.onChange()},toggle:function(t){this.on?this.turnOff():this.turnOn()},onChange:function(){this.trigger("change"),this.settings.onChange(),this.$outerContainer.trigger("change")},_onMouseDown:function(){this.addListener(Garnish.$doc,"mouseup","_onMouseUp")},_onMouseUp:function(){this.removeListener(Garnish.$doc,"mouseup"),this.dragger.dragging||this.toggle()},_onKeyDown:function(t){switch(t.keyCode){case Garnish.SPACE_KEY:this.toggle(),t.preventDefault();break;case Garnish.RIGHT_KEY:"ltr"===Craft.orientation?this.turnOn():this.turnOff(),t.preventDefault();break;case Garnish.LEFT_KEY:"ltr"===Craft.orientation?this.turnOff():this.turnOn(),t.preventDefault()}},_getMargin:function(){return parseInt(this.$innerContainer.css("margin-"+Craft.left))},_onDragStart:function(){this.$outerContainer.addClass("dragging"),this.dragStartMargin=this._getMargin()},_onDrag:function(){var t;(t="ltr"===Craft.orientation?this.dragStartMargin+this.dragger.mouseDistX:this.dragStartMargin-this.dragger.mouseDistX)<this._getOffMargin()?t=this._getOffMargin():0<t&&(t=0),this.$innerContainer.css("margin-"+Craft.left,t)},_onDragStop:function(){this._getMargin()>this._getOffMargin()/2?this.turnOn():this.turnOff()},_onSettle:function(){this.$outerContainer.removeClass("dragging")},destroy:function(){this.base(),this.dragger.destroy()},_getOffMargin:function(){return this.small?-9:-11}},{animationDuration:100,defaults:{value:"1",onChange:p.noop}}),Craft.LivePreview=Garnish.Base.extend({$extraFields:null,$trigger:null,$shade:null,$editorContainer:null,$editor:null,$dragHandle:null,$iframeContainer:null,$iframe:null,$fieldPlaceholder:null,previewUrl:null,basePostData:null,inPreviewMode:!1,fields:null,lastPostData:null,updateIframeInterval:null,loading:!1,checkAgain:!1,dragger:null,dragStartEditorWidth:null,_handleSuccessProxy:null,_handleErrorProxy:null,_forceUpdateIframeProxy:null,_scrollX:null,_scrollY:null,_editorWidth:null,_editorWidthInPx:null,init:function(t){this.setSettings(t,Craft.LivePreview.defaults),this.settings.previewUrl?this.previewUrl=this.settings.previewUrl:this.previewUrl=Craft.baseSiteUrl.replace(/\/+$/,"")+"/","https:"===document.location.protocol&&(this.previewUrl=this.previewUrl.replace(/^http:/,"https:")),this.basePostData=p.extend({action:this.settings.previewAction,livePreview:!0},this.settings.previewParams),Craft.csrfTokenName&&(this.basePostData[Craft.csrfTokenName]=Craft.csrfTokenValue),this._handleSuccessProxy=p.proxy(this,"handleSuccess"),this._handleErrorProxy=p.proxy(this,"handleError"),this._forceUpdateIframeProxy=p.proxy(this,"forceUpdateIframe"),this.$extraFields=p(this.settings.extraFields),this.$trigger=p(this.settings.trigger),this.$fieldPlaceholder=p("<div/>"),this.editorWidth=Craft.getLocalStorage("LivePreview.editorWidth",Craft.LivePreview.defaultEditorWidth),this.addListener(this.$trigger,"activate","toggle"),Craft.cp.on("beforeSaveShortcut",p.proxy(function(){this.inPreviewMode&&this.moveFieldsBack()},this))},get editorWidth(){return this._editorWidth},get editorWidthInPx(){return this._editorWidthInPx},set editorWidth(t){var e;1<=t?(e=t,t/=Garnish.$win.width()):e=Math.round(t*Garnish.$win.width()),e<Craft.LivePreview.minEditorWidthInPx&&(t=(e=Craft.LivePreview.minEditorWidthInPx)/Garnish.$win.width()),this._editorWidth=t,this._editorWidthInPx=e},toggle:function(){this.inPreviewMode?this.exit():this.enter()},enter:function(){if(!this.inPreviewMode){if(this.trigger("beforeEnter"),p(document.activeElement).trigger("blur"),!this.$editor){this.$shade=p('<div class="modal-shade dark"/>').appendTo(Garnish.$bod),this.$editorContainer=p('<div class="lp-editor-container"/>').appendTo(Garnish.$bod),this.$editor=p('<div class="lp-editor"/>').appendTo(this.$editorContainer),this.$iframeContainer=p('<div class="lp-iframe-container"/>').appendTo(Garnish.$bod),this.$iframe=p('<iframe class="lp-iframe" frameborder="0"/>').appendTo(this.$iframeContainer),this.$dragHandle=p('<div class="lp-draghandle"/>').appendTo(this.$editorContainer);var t=p('<header class="header"></header>').appendTo(this.$editor),e=p('<div class="btn">'+Craft.t("app","Close Live Preview")+"</div>").appendTo(t),i=p('<div class="btn submit">'+Craft.t("app","Save")+"</div>").appendTo(t);this.dragger=new Garnish.BaseDrag(this.$dragHandle,{axis:Garnish.X_AXIS,onDragStart:p.proxy(this,"_onDragStart"),onDrag:p.proxy(this,"_onDrag"),onDragStop:p.proxy(this,"_onDragStop")}),this.addListener(e,"click","exit"),this.addListener(i,"click","save")}this.handleWindowResize(),this.addListener(Garnish.$win,"resize","handleWindowResize"),this.$editorContainer.css(Craft.left,-(this.editorWidthInPx+Craft.LivePreview.dragHandleWidth)+"px"),this.$iframeContainer.css(Craft.right,-this.getIframeWidth()),this.fields=[];for(var s=p(this.settings.fields),n=0;n<s.length;n++){var a=p(s[n]),r=this._getClone(a);this.$fieldPlaceholder.insertAfter(a),a.detach(),this.$fieldPlaceholder.replaceWith(r),a.appendTo(this.$editor),this.fields.push({$field:a,$clone:r})}this.updateIframe()?this.addListener(this.$iframe,"load",function(){this.slideIn(),this.removeListener(this.$iframe,"load")}):this.slideIn(),Garnish.on(Craft.BaseElementEditor,"saveElement",this._forceUpdateIframeProxy),Garnish.on(Craft.AssetImageEditor,"save",this._forceUpdateIframeProxy),this.inPreviewMode=!0,this.trigger("enter")}},save:function(){Craft.cp.submitPrimaryForm()},handleWindowResize:function(){this.editorWidth=this.editorWidth,this.updateWidths()},slideIn:function(){p("html").addClass("noscroll"),this.$shade.velocity("fadeIn"),this.$editorContainer.show().velocity("stop").animateLeft(0,"slow",p.proxy(function(){this.trigger("slideIn"),Garnish.$win.trigger("resize")},this)),this.$iframeContainer.show().velocity("stop").animateRight(0,"slow",p.proxy(function(){this.updateIframeInterval=setInterval(p.proxy(this,"updateIframe"),1e3),this.addListener(Garnish.$bod,"keyup",function(t){t.keyCode===Garnish.ESC_KEY&&this.exit()})},this))},exit:function(){this.inPreviewMode&&(this.trigger("beforeExit"),p("html").removeClass("noscroll"),this.removeListener(Garnish.$win,"resize"),this.removeListener(Garnish.$bod,"keyup"),this.updateIframeInterval&&clearInterval(this.updateIframeInterval),this.moveFieldsBack(),this.$shade.delay(200).velocity("fadeOut"),this.$editorContainer.velocity("stop").animateLeft(-(this.editorWidthInPx+Craft.LivePreview.dragHandleWidth),"slow",p.proxy(function(){for(var t=0;t<this.fields.length;t++)this.fields[t].$newClone.remove();this.$editorContainer.hide(),this.trigger("slideOut")},this)),this.$iframeContainer.velocity("stop").animateRight(-this.getIframeWidth(),"slow",p.proxy(function(){this.$iframeContainer.hide()},this)),Garnish.off(Craft.BaseElementEditor,"saveElement",this._forceUpdateIframeProxy),this.inPreviewMode=!1,this.trigger("exit"))},moveFieldsBack:function(){for(var t=0;t<this.fields.length;t++){var e=this.fields[t];e.$newClone=this._getClone(e.$field),this.$fieldPlaceholder.insertAfter(e.$field),e.$field.detach(),this.$fieldPlaceholder.replaceWith(e.$newClone),e.$clone.replaceWith(e.$field)}Garnish.$win.trigger("resize")},getIframeWidth:function(){return Garnish.$win.width()-(this.editorWidthInPx+Craft.LivePreview.dragHandleWidth)},updateWidths:function(){this.$editorContainer.css("width",this.editorWidthInPx+"px"),this.$iframeContainer.width(this.getIframeWidth())},updateIframe:function(t){if(t&&(this.lastPostData=null),!this.inPreviewMode)return!1;if(this.loading)return!(this.checkAgain=!0);var e=p.extend(Garnish.getPostData(this.$editor),Garnish.getPostData(this.$extraFields));if(this.lastPostData&&Craft.compare(e,this.lastPostData,!1))return!1;this.lastPostData=e,this.loading=!0;var i=p(this.$iframe[0].contentWindow.document);return this._scrollX=i.scrollLeft(),this._scrollY=i.scrollTop(),p.ajax({url:this.previewUrl,method:"POST",data:p.extend({},e,this.basePostData),xhrFields:{withCredentials:!0},crossDomain:!0,success:this._handleSuccessProxy,error:this._handleErrorProxy}),!0},forceUpdateIframe:function(){return this.updateIframe(!0)},handleSuccess:function(t){var e=t+'<script type="text/javascript">window.scrollTo('+this._scrollX+", "+this._scrollY+");<\/script>";this.$iframe.css("background",p(this.$iframe[0].contentWindow.document.body).css("background")),this.$iframe[0].contentWindow.document.open(),this.$iframe[0].contentWindow.document.write(e),this.$iframe[0].contentWindow.document.close(),this.onResponse()},handleError:function(){this.onResponse()},onResponse:function(){this.loading=!1,this.checkAgain&&(this.checkAgain=!1,this.updateIframe())},_getClone:function(t){var e=t.clone();return Garnish.copyInputValues(t,e),e.attr("id",""),e.find("[id]").attr("id",""),e},_onDragStart:function(){this.dragStartEditorWidth=this.editorWidthInPx,this.$iframeContainer.addClass("dragging")},_onDrag:function(){"ltr"===Craft.orientation?this.editorWidth=this.dragStartEditorWidth+this.dragger.mouseDistX:this.editorWidth=this.dragStartEditorWidth-this.dragger.mouseDistX,this.updateWidths()},_onDragStop:function(){this.$iframeContainer.removeClass("dragging"),Craft.setLocalStorage("LivePreview.editorWidth",this.editorWidth)}},{defaultEditorWidth:.33,minEditorWidthInPx:320,dragHandleWidth:4,defaults:{trigger:".livepreviewbtn",fields:null,extraFields:null,previewUrl:null,previewAction:null,previewParams:{}}}),Craft.LivePreview.init=function(t){Craft.livePreview=new Craft.LivePreview(t)},Craft.PasswordInput=Garnish.Base.extend({$passwordInput:null,$textInput:null,$currentInput:null,$showPasswordToggle:null,showingPassword:null,init:function(t,e){this.$passwordInput=p(t),this.settings=p.extend({},Craft.PasswordInput.defaults,e),this.$passwordInput.data("passwordInput")&&(Garnish.log("Double-instantiating a password input on an element"),this.$passwordInput.data("passwordInput").destroy()),this.$passwordInput.data("passwordInput",this),this.$showPasswordToggle=p("<a/>").hide(),this.$showPasswordToggle.addClass("password-toggle"),this.$showPasswordToggle.insertAfter(this.$passwordInput),this.addListener(this.$showPasswordToggle,"mousedown","onToggleMouseDown"),this.hidePassword()},setCurrentInput:function(t){this.$currentInput&&(t.addClass("focus"),t.insertAfter(this.$currentInput),this.$currentInput.detach(),t.trigger("focus"),t.removeClass("focus"),t.val(this.$currentInput.val())),this.$currentInput=t,this.addListener(this.$currentInput,"keypress,keyup,change,blur","onInputChange")},updateToggleLabel:function(t){this.$showPasswordToggle.text(t)},showPassword:function(){this.showingPassword||(this.$textInput||(this.$textInput=this.$passwordInput.clone(!0),this.$textInput.attr("type","text")),this.setCurrentInput(this.$textInput),this.updateToggleLabel(Craft.t("app","Hide")),this.showingPassword=!0)},hidePassword:function(){!1!==this.showingPassword&&(this.setCurrentInput(this.$passwordInput),this.updateToggleLabel(Craft.t("app","Show")),this.showingPassword=!1,this.addListener(this.$passwordInput,"keydown","onKeyDown"))},togglePassword:function(){this.showingPassword?this.hidePassword():this.showPassword(),this.settings.onToggleInput(this.$currentInput)},onKeyDown:function(t){t.keyCode===Garnish.ALT_KEY&&this.$currentInput.val()&&(this.showPassword(),this.$showPasswordToggle.hide(),this.addListener(this.$textInput,"keyup","onKeyUp"))},onKeyUp:function(t){t.preventDefault(),t.keyCode===Garnish.ALT_KEY&&(this.hidePassword(),this.$showPasswordToggle.show())},onInputChange:function(){this.$currentInput.val()?this.$showPasswordToggle.show():this.$showPasswordToggle.hide()},onToggleMouseDown:function(t){if(t.preventDefault(),this.$currentInput[0].setSelectionRange){var e=this.$currentInput[0].selectionStart,i=this.$currentInput[0].selectionEnd;this.togglePassword(),this.$currentInput[0].setSelectionRange(e,i)}else this.togglePassword()}},{defaults:{onToggleInput:p.noop}}),Craft.PreviewFileModal=Garnish.Modal.extend({assetId:null,$spinner:null,elementSelect:null,type:null,loaded:null,requestId:0,init:function(t,e,i){if((i=p.extend(this.defaultSettings,i)).onHide=this._onHide.bind(this),Craft.PreviewFileModal.openInstance){var s=Craft.PreviewFileModal.openInstance;return s.assetId!==t&&(s.loadAsset(t,i.startingWidth,i.startingHeight),s.elementSelect=e),this.destroy()}(Craft.PreviewFileModal.openInstance=this).elementSelect=e,this.$container=p('<div id="previewmodal" class="modal loading"/>').appendTo(Garnish.$bod),this.base(this.$container,p.extend({resizable:!0},i)),this.$container&&(this.$container.velocity("stop"),this.$container.show().css("opacity",1),this.$shade.velocity("stop"),this.$shade.show().css("opacity",1)),this.loadAsset(t,i.startingWidth,i.startingHeight)},_onHide:function(){return Craft.PreviewFileModal.openInstance=null,this.elementSelect.focusItem(this.elementSelect.$focusedItem),this.$shade.remove(),this.destroy()},selfDestruct:function(){var t=Craft.PreviewFileModal.openInstance;return t.hide(),t.$shade.remove(),t.destroy(),!(Craft.PreviewFileModal.openInstance=null)},loadAsset:function(t,e,i){this.assetId=t,this.$container.empty(),this.loaded=!1,this.desiredHeight=null,this.desiredWidth=null;var n=.66*Garnish.$win.height(),a=Math.min(n/3*4,Garnish.$win.width()-2*this.settings.minGutter);if(n=a/4*3,e&&i){var s=e/i;a=Math.min(e,Garnish.$win.width()-2*this.settings.minGutter),n=Math.min(a/s,Garnish.$win.height()-2*this.settings.minGutter),(a=n*s)>Math.min(e,Garnish.$win.width()-2*this.settings.minGutter)&&(a=Math.min(e,Garnish.$win.width()-2*this.settings.minGutter),n=a/s)}this._resizeContainer(a,n),this.$spinner=p('<div class="spinner centeralign"></div>').appendTo(this.$container);var r=this.$container.height()/2-this.$spinner.height()/2+"px",o=this.$container.width()/2-this.$spinner.width()/2+"px";this.$spinner.css({left:o,top:r,position:"absolute"}),this.requestId++,Craft.postActionRequest("assets/preview-file",{assetId:t,requestId:this.requestId},function(t,e){if("success"===e)if(t.success){if(t.requestId!=this.requestId)return;this.$container.removeClass("loading"),this.$spinner.remove(),this.loaded=!0,this.$container.append(t.modalHtml);var i=this.$container.find(".highlight");if(i.length&&i.hasClass("json")){var s=i.find("code");s.html(JSON.stringify(JSON.parse(s.html()),void 0,4))}i.length?Prism.highlightElement(i.find("code").get(0)):this.$container.find("img").css({width:a,height:n}),this.updateSizeAndPosition()}else alert(t.error),this.hide()}.bind(this))},updateSizeAndPosition:function(){if(this.loaded){var t=this.$container.find("img");if(this.loaded&&t.length){var e=t.data("maxwidth"),i=t.data("maxheight"),s=e/i,n=this.desiredWidth?this.desiredWidth:this.$container.width(),a=(this.desiredHeight?this.desiredHeight:this.$container.height(),Math.min(n,e)),r=Math.round(Math.min(i,a/s));a=Math.round(r*s),t.css({width:a,height:r}),this._resizeContainer(a,r),this.desiredWidth=a,this.desiredHeight=r}if(this.base(),this.loaded&&t.length){var o=Math.round(Math.min(Math.max(t.height()*s),Garnish.$win.width()-2*this.settings.minGutter)),l=Math.round(Math.min(Math.max(o/s),Garnish.$win.height()-2*this.settings.minGutter));(o=Math.round(l*s))>Math.min(o,Garnish.$win.width()-2*this.settings.minGutter)&&(l=(o=Math.min(o,Garnish.$win.width()-2*this.settings.minGutter))/s),this._resizeContainer(o,l),t.css({width:o,height:l})}else this.loaded&&this.$container.find(".highlight").height(this.$container.height()).width(this.$container.width()).css({overflow:"auto"})}},_resizeContainer:function(t,e){this.$container.css({width:t,"min-width":t,"max-width":t,height:e,"min-height":e,"max-height":e,top:(Garnish.$win.height()-e)/2,left:(Garnish.$win.width()-t)/2})}},{defaultSettings:{startingWidth:null,startingHeight:null}}),Craft.ProgressBar=Garnish.Base.extend({$progressBar:null,$innerProgressBar:null,$progressBarStatus:null,_itemCount:0,_processedItemCount:0,_displaySteps:!1,init:function(t,e){e&&(this._displaySteps=!0),this.$progressBar=p('<div class="progressbar pending hidden"/>').appendTo(t),this.$innerProgressBar=p('<div class="progressbar-inner"/>').appendTo(this.$progressBar),this.$progressBarStatus=p('<div class="progressbar-status hidden" />').insertAfter(this.$progressBar),this.resetProgressBar()},resetProgressBar:function(){this.setProgressPercentage(100),this.$progressBar.addClass("pending"),this.setItemCount(1),this.setProcessedItemCount(0),this.$progressBarStatus.html(""),this._displaySteps&&this.$progressBar.addClass("has-status")},hideProgressBar:function(){this.$progressBar.fadeTo("fast",.01,p.proxy(function(){this.$progressBar.addClass("hidden").fadeTo(1,1,p.noop)},this))},showProgressBar:function(){this.$progressBar.removeClass("hidden"),this.$progressBarStatus.removeClass("hidden")},setItemCount:function(t){this._itemCount=t},incrementItemCount:function(t){this._itemCount+=t},setProcessedItemCount:function(t){this._processedItemCount=t},incrementProcessedItemCount:function(t){this._processedItemCount+=t},updateProgressBar:function(){this._itemCount=Math.max(this._itemCount,1);var t=Math.min(100,Math.round(100*this._processedItemCount/this._itemCount));this.setProgressPercentage(t),this._displaySteps&&this.$progressBarStatus.html(this._processedItemCount+" / "+this._itemCount)},setProgressPercentage:function(t,e){0===t?this.$progressBar.addClass("pending"):(this.$progressBar.removeClass("pending"),e?this.$innerProgressBar.velocity("stop").velocity({width:t+"%"},"fast"):this.$innerProgressBar.velocity("stop").width(t+"%"))}}),Craft.PromptHandler=Garnish.Base.extend({modal:null,$modalContainerDiv:null,$prompt:null,$promptApplyToRemainingContainer:null,$promptApplyToRemainingCheckbox:null,$promptApplyToRemainingLabel:null,$pomptChoices:null,_prompts:[],_promptBatchCallback:p.noop,_promptBatchReturnData:[],_promptBatchNum:0,resetPrompts:function(){this._prompts=[],this._promptBatchCallback=p.noop,this._promptBatchReturnData=[],this._promptBatchNum=0},addPrompt:function(t){this._prompts.push(t)},getPromptCount:function(){return this._prompts.length},showBatchPrompts:function(t){this._promptBatchCallback=t,this._promptBatchReturnData=[],this._promptBatchNum=0,this._showNextPromptInBatch()},_showNextPromptInBatch:function(){var t=this._prompts[this._promptBatchNum].prompt,e=this._prompts.length-(this._promptBatchNum+1);this._showPrompt(t.message,t.choices,p.proxy(this,"_handleBatchPromptSelection"),e)},_handleBatchPromptSelection:function(t,e){var i=this._prompts[this._promptBatchNum],s=this._prompts.length-(this._promptBatchNum+1),n=p.extend(i,{choice:t});this._promptBatchReturnData.push(n),s?(this._promptBatchNum++,e?this._handleBatchPromptSelection(t,!0):this._showNextPromptInBatch()):"function"==typeof this._promptBatchCallback&&this._promptBatchCallback(this._promptBatchReturnData)},_showPrompt:function(t,e,i,s){this._promptCallback=i,null===this.modal&&(this.modal=new Garnish.Modal({closeOtherModals:!1})),null===this.$modalContainerDiv&&(this.$modalContainerDiv=p('<div class="modal fitted prompt-modal"></div>').addClass().appendTo(Garnish.$bod)),this.$prompt=p('<div class="body"></div>').appendTo(this.$modalContainerDiv.empty()),this.$promptMessage=p('<p class="prompt-msg"/>').appendTo(this.$prompt),this.$promptChoices=p('<div class="options"></div>').appendTo(this.$prompt),this.$promptApplyToRemainingContainer=p('<label class="assets-applytoremaining"/>').appendTo(this.$prompt).hide(),this.$promptApplyToRemainingCheckbox=p('<input type="checkbox"/>').appendTo(this.$promptApplyToRemainingContainer),this.$promptApplyToRemainingLabel=p("<span/>").appendTo(this.$promptApplyToRemainingContainer),this.$promptButtons=p('<div class="buttons right"/>').appendTo(this.$prompt),this.modal.setContainer(this.$modalContainerDiv),this.$promptMessage.html(t);for(var n=p('<div class="btn">'+Craft.t("app","Cancel")+"</div>").appendTo(this.$promptButtons),a=p('<input type="submit" class="btn submit disabled" value="'+Craft.t("app","OK")+'" />').appendTo(this.$promptButtons),r=0;r<e.length;r++){var o=p('<div><label><input type="radio" name="promptAction" value="'+e[r].value+'"/> '+e[r].title+"</label></div>").appendTo(this.$promptChoices).find("input");this.addListener(o,"click",function(){a.removeClass("disabled")})}this.addListener(a,"activate",function(t){var e=p(t.currentTarget).parents(".modal").find("input[name=promptAction]:checked").val(),i=this.$promptApplyToRemainingCheckbox.prop("checked");this._selectPromptChoice(e,i)}),this.addListener(n,"activate",function(){var t=this.$promptApplyToRemainingCheckbox.prop("checked");this._selectPromptChoice("cancel",t)}),s&&(this.$promptApplyToRemainingContainer.show(),this.$promptApplyToRemainingLabel.html(" "+Craft.t("app","Apply this to the {number} remaining conflicts?",{number:s}))),this.modal.show(),this.modal.removeListener(Garnish.Modal.$shade,"click"),this.addListener(Garnish.Modal.$shade,"click","_cancelPrompt")},_selectPromptChoice:function(t,e){this.$prompt.fadeOut("fast",p.proxy(function(){this.modal.hide(),this._promptCallback(t,e)},this))},_cancelPrompt:function(){this._selectPromptChoice("cancel",!0)}}),Craft.SlideRuleInput=Garnish.Base.extend({$container:null,$options:null,$selectedOption:null,$input:null,value:null,startPositionX:null,init:function(t,e){this.setSettings(e,Craft.SlideRuleInput.defaultSettings),this.value=0,this.graduationsMin=-70,this.graduationsMax=70,this.slideMin=-45,this.slideMax=45,this.$container=p("#"+t),this.$overlay=p('<div class="overlay"></div>').appendTo(this.$container),this.$cursor=p('<div class="cursor"></div>').appendTo(this.$container),this.$graduations=p('<div class="graduations"></div>').appendTo(this.$container),this.$graduationsUl=p("<ul></ul>").appendTo(this.$graduations);for(var i=this.graduationsMin;i<=this.graduationsMax;i++){var s=p('<li class="graduation" data-graduation="'+i+'"><div class="label">'+i+"</div></li>").appendTo(this.$graduationsUl);i%5==0&&s.addClass("main-graduation"),0===i&&s.addClass("selected")}this.$options=this.$container.find(".graduation"),this.addListener(this.$container,"resize",p.proxy(this,"_handleResize")),this.addListener(this.$container,"tapstart",p.proxy(this,"_handleTapStart")),this.addListener(Garnish.$bod,"tapmove",p.proxy(this,"_handleTapMove")),this.addListener(Garnish.$bod,"tapend",p.proxy(this,"_handleTapEnd")),setTimeout(p.proxy(function(){this.graduationsCalculatedWidth=10*(this.$options.length-1),this.$graduationsUl.css("left",-this.graduationsCalculatedWidth/2+this.$container.width()/2)},this),50)},_handleResize:function(){var t=this.valueToPosition(this.value);this.$graduationsUl.css("left",t)},_handleTapStart:function(t,e){t.preventDefault(),this.startPositionX=e.position.x,this.startLeft=this.$graduationsUl.position().left,this.dragging=!0,this.onStart()},_handleTapMove:function(t,e){if(this.dragging){t.preventDefault();var i=this.startPositionX-e.position.x,s=this.startLeft-i,n=this.positionToValue(s);this.setValue(n),this.onChange()}},setValue:function(i){var t=this.valueToPosition(i);i<this.slideMin?(i=this.slideMin,t=this.valueToPosition(i)):i>this.slideMax&&(i=this.slideMax,t=this.valueToPosition(i)),this.$graduationsUl.css("left",t),i>=this.slideMin&&i<=this.slideMax&&(this.$options.removeClass("selected"),p.each(this.$options,function(t,e){0<p(e).data("graduation")&&p(e).data("graduation")<=i&&p(e).addClass("selected"),p(e).data("graduation")<0&&p(e).data("graduation")>=i&&p(e).addClass("selected"),0==p(e).data("graduation")&&p(e).addClass("selected")})),this.value=i},_handleTapEnd:function(t){this.dragging&&(t.preventDefault(),this.dragging=!1,this.onEnd())},positionToValue:function(t){var e=-1*this.graduationsMin,i=-1*(this.graduationsMin-this.graduationsMax);return(this.$graduations.width()/2+-1*t)/this.graduationsCalculatedWidth*i-e},valueToPosition:function(t){var e=-1*this.graduationsMin,i=-1*(this.graduationsMin-this.graduationsMax);return-((t+e)*this.graduationsCalculatedWidth/i-this.$graduations.width()/2)},onStart:function(){"function"==typeof this.settings.onChange&&this.settings.onStart(this)},onChange:function(){"function"==typeof this.settings.onChange&&this.settings.onChange(this)},onEnd:function(){"function"==typeof this.settings.onChange&&this.settings.onEnd(this)},defaultSettings:{onStart:p.noop,onChange:p.noop,onEnd:p.noop}}),Craft.SlugGenerator=Craft.BaseInputGenerator.extend({generateTargetValue:function(t){t=(t=(t=t.replace(/<(.*?)>/g,"")).replace(/['"‘’“”\[\]\(\)\{\}:]/g,"")).toLowerCase(),Craft.limitAutoSlugsToAscii&&(t=Craft.asciiString(t));var e=Craft.filterArray(XRegExp.matchChain(t,[XRegExp("[\\p{L}\\p{N}\\p{M}]+")]));return e.length?e.join(Craft.slugWordSeparator):""}}),Craft.Structure=Garnish.Base.extend({id:null,$container:null,state:null,structureDrag:null,init:function(t,e,i){this.id=t,this.$container=p(e),this.setSettings(i,Craft.Structure.defaults),this.$container.data("structure")&&(Garnish.log("Double-instantiating a structure on an element"),this.$container.data("structure").destroy()),this.$container.data("structure",this),this.state={},this.settings.storageKey&&p.extend(this.state,Craft.getLocalStorage(this.settings.storageKey,{})),void 0===this.state.collapsedElementIds&&(this.state.collapsedElementIds=[]);for(var s=this.$container.find("ul").prev(".row"),n=0;n<s.length;n++){var a=p(s[n]),r=a.parent(),o=p('<div class="toggle" title="'+Craft.t("app","Show/hide children")+'"/>').prependTo(a);-1!==p.inArray(a.children(".element").data("id"),this.state.collapsedElementIds)&&r.addClass("collapsed"),this.initToggle(o)}this.settings.sortable&&(this.structureDrag=new Craft.StructureDrag(this,this.settings.maxLevels)),this.settings.newChildUrl&&this.initNewChildMenus(this.$container.find(".add"))},initToggle:function(t){t.on("click",p.proxy(function(t){var e=p(t.currentTarget).closest("li"),i=e.children(".row").find(".element:first").data("id"),s=p.inArray(i,this.state.collapsedElementIds);e.hasClass("collapsed")?(e.removeClass("collapsed"),-1!==s&&this.state.collapsedElementIds.splice(s,1)):(e.addClass("collapsed"),-1===s&&this.state.collapsedElementIds.push(i)),this.settings.storageKey&&Craft.setLocalStorage(this.settings.storageKey,this.state)},this))},initNewChildMenus:function(t){this.addListener(t,"click","onNewChildMenuClick")},onNewChildMenuClick:function(t){var e=p(t.currentTarget);if(!e.data("menubtn")){var i=e.parent().children(".element").data("id"),s=Craft.getUrl(this.settings.newChildUrl,"parentId="+i);p('<div class="menu"><ul><li><a href="'+s+'">'+Craft.t("app","New child")+"</a></li></ul></div>").insertAfter(e),new Garnish.MenuBtn(e).showMenu()}},getIndent:function(t){return Craft.Structure.baseIndent+(t-1)*Craft.Structure.nestedIndent},addElement:function(t){var e=p('<li data-level="1"/>').appendTo(this.$container),i=p('<div class="row" style="margin-'+Craft.left+": -"+Craft.Structure.baseIndent+"px; padding-"+Craft.left+": "+Craft.Structure.baseIndent+'px;">').appendTo(e);if(i.append(t),this.settings.sortable&&(i.append('<a class="move icon" title="'+Craft.t("app","Move")+'"></a>'),this.structureDrag.addItems(e)),this.settings.newChildUrl){var s=p('<a class="add icon" title="'+Craft.t("app","New child")+'"></a>').appendTo(i);this.initNewChildMenus(s)}i.css("margin-bottom",-30),i.velocity({"margin-bottom":0},"fast")},removeElement:function(t){var e,i=t.parent().parent();this.settings.sortable&&this.structureDrag.removeItems(i),i.siblings().length||(e=i.parent()),i.css("visibility","hidden").velocity({marginBottom:-i.height()},"fast",p.proxy(function(){i.remove(),void 0!==e&&this._removeUl(e)},this))},_removeUl:function(t){t.siblings(".row").children(".toggle").remove(),t.remove()}},{baseIndent:8,nestedIndent:35,defaults:{storageKey:null,sortable:!1,newChildUrl:null,maxLevels:null}}),Craft.StructureDrag=Garnish.Drag.extend({structure:null,maxLevels:null,draggeeLevel:null,$helperLi:null,$targets:null,draggeeHeight:null,init:function(t,e){this.structure=t,this.maxLevels=e,this.$insertion=p('<li class="draginsertion"/>');var i=this.structure.$container.find("li");this.base(i,{handle:".element:first, .move:first",helper:p.proxy(this,"getHelper")})},getHelper:function(t){this.$helperLi=t;var e=p('<ul class="structure draghelper"/>').append(t);return t.css("padding-"+Craft.left,this.$draggee.css("padding-"+Craft.left)),t.find(".move").removeAttr("title"),e},onDragStart:function(){this.$targets=p(),this.findTargets(this.structure.$container),this.draggeeLevel=0;for(var t=this.$draggee;this.draggeeLevel++,(t=t.find("> ul > li")).length;);this.draggeeHeight=this.$draggee.height(),this.$draggee.velocity({height:0},"fast",p.proxy(function(){this.$draggee.addClass("hidden")},this)),this.base(),this.addListener(Garnish.$doc,"keydown",function(t){t.keyCode===Garnish.ESC_KEY&&this.cancelDrag()})},findTargets:function(t){for(var e=t.children().not(this.$draggee),i=0;i<e.length;i++){var s=p(e[i]);this.$targets=this.$targets.add(s.children(".row")),s.hasClass("collapsed")||this.findTargets(s.children("ul"))}},onDrag:function(){for(this._.$closestTarget&&(this._.$closestTarget.removeClass("draghover"),this.$insertion.remove()),this._.$closestTarget=null,this._.closestTargetPos=null,this._.closestTargetYDiff=null,this._.closestTargetOffset=null,this._.closestTargetHeight=null,this._.i=0;this._.i<this.$targets.length&&(this._.$target=p(this.$targets[this._.i]),this._.targetOffset=this._.$target.offset(),this._.targetHeight=this._.$target.outerHeight(),this._.targetYMidpoint=this._.targetOffset.top+this._.targetHeight/2,this._.targetYDiff=Math.abs(this.mouseY-this._.targetYMidpoint),0===this._.i||this.mouseY>=this._.targetOffset.top+5&&this._.targetYDiff<this._.closestTargetYDiff);this._.i++)this._.$closestTarget=this._.$target,this._.closestTargetPos=this._.i,this._.closestTargetYDiff=this._.targetYDiff,this._.closestTargetOffset=this._.targetOffset,this._.closestTargetHeight=this._.targetHeight;if(this._.$closestTarget)if(0===this._.closestTargetPos&&this.mouseY<this._.closestTargetOffset.top+5)this.$insertion.prependTo(this.structure.$container);else if(this._.$closestTargetLi=this._.$closestTarget.parent(),this._.closestTargetLevel=this._.$closestTargetLi.data("level"),this._.closestTargetPos<this.$targets.length-1?(this._.$nextTargetLi=p(this.$targets[this._.closestTargetPos+1]).parent(),this._.nextTargetLevel=this._.$nextTargetLi.data("level")):(this._.$nextTargetLi=null,this._.nextTargetLevel=null),this._.hoveringBetweenRows=this.mouseY>=this._.closestTargetOffset.top+this._.closestTargetHeight-5,this._.$nextTargetLi&&this._.nextTargetLevel==this._.closestTargetLevel)this._.hoveringBetweenRows?(!this.maxLevels||this.maxLevels>=this._.closestTargetLevel+this.draggeeLevel-1)&&this.$insertion.insertAfter(this._.$closestTargetLi):(!this.maxLevels||this.maxLevels>=this._.closestTargetLevel+this.draggeeLevel)&&this._.$closestTarget.addClass("draghover");else if(this._.$nextTargetLi&&this._.nextTargetLevel>this._.closestTargetLevel)(!this.maxLevels||this.maxLevels>=this._.nextTargetLevel+this.draggeeLevel-1)&&(this._.hoveringBetweenRows?this.$insertion.insertBefore(this._.$nextTargetLi):(this._.$closestTarget.addClass("draghover"),this.$insertion.appendTo(this._.$closestTargetLi.children("ul"))));else if(this._.hoveringBetweenRows){for(this._.draggeeX=this.mouseX-this.targetItemMouseDiffX,"rtl"===Craft.orientation&&(this._.draggeeX+=this.$helperLi.width()),this._.$parentLis=this._.$closestTarget.parentsUntil(this.structure.$container,"li"),this._.$closestParentLi=null,this._.closestParentLiXDiff=null,this._.closestParentLevel=null,this._.i=0;this._.i<this._.$parentLis.length;this._.i++)this._.$parentLi=p(this._.$parentLis[this._.i]),this._.parentLiX=this._.$parentLi.offset().left,"rtl"===Craft.orientation&&(this._.parentLiX+=this._.$parentLi.width()),this._.parentLiXDiff=Math.abs(this._.parentLiX-this._.draggeeX),this._.parentLevel=this._.$parentLi.data("level"),(!this.maxLevels||this.maxLevels>=this._.parentLevel+this.draggeeLevel-1)&&(!this._.$closestParentLi||this._.parentLiXDiff<this._.closestParentLiXDiff&&(!this._.$nextTargetLi||this._.parentLevel>=this._.nextTargetLevel))&&(this._.$closestParentLi=this._.$parentLi,this._.closestParentLiXDiff=this._.parentLiXDiff,this._.closestParentLevel=this._.parentLevel);this._.$closestParentLi&&this.$insertion.insertAfter(this._.$closestParentLi)}else(!this.maxLevels||this.maxLevels>=this._.closestTargetLevel+this.draggeeLevel)&&this._.$closestTarget.addClass("draghover")},cancelDrag:function(){this.$insertion.remove(),this._.$closestTarget&&this._.$closestTarget.removeClass("draghover"),this.onMouseUp()},onDragStop:function(){if(this._.$closestTarget&&(this.$insertion.parent().length||this._.$closestTarget.hasClass("draghover"))){var t,e;if(this.$draggee.siblings().length||(t=this.$draggee.parent()),this.$insertion.parent().length){var i=this.$insertion.next().add(this.$insertion.prev());e=-1===p.inArray(this.$draggee[0],i)?(this.$insertion.replaceWith(this.$draggee),!0):(this.$insertion.remove(),!1)}else{var s=this._.$closestTargetLi.children("ul");if(t&&s.length&&s[0]===t[0])e=!1;else{if(s.length)this._.$closestTargetLi.hasClass("collapsed")&&this._.$closestTarget.children(".toggle").trigger("click");else{var n=p('<div class="toggle" title="'+Craft.t("app","Show/hide children")+'"/>').prependTo(this._.$closestTarget);this.structure.initToggle(n),s=p("<ul>").appendTo(this._.$closestTargetLi)}this.$draggee.appendTo(s),e=!0}}if(this._.$closestTarget.removeClass("draghover"),e){t&&this.structure._removeUl(t);var a,r=this.$draggee.parentsUntil(this.structure.$container,"li").length+1;r!=this.$draggee.data("level")&&(1==this.$draggee.data("level")?((a={})["padding-"+Craft.left]=38,this.$helperLi.velocity(a,"fast")):1==r&&((a={})["padding-"+Craft.left]=Craft.Structure.baseIndent,this.$helperLi.velocity(a,"fast")),this.setLevel(this.$draggee,r));var o=this.$draggee.children(".row").children(".element"),l={structureId:this.structure.id,elementId:o.data("id"),siteId:o.data("site-id"),prevId:this.$draggee.prev().children(".row").children(".element").data("id"),parentId:this.$draggee.parent("ul").parent("li").children(".row").children(".element").data("id")};Craft.postActionRequest("structures/move-element",l,function(t,e){"success"===e&&Craft.cp.displayNotice(Craft.t("app","New order saved."))})}}this.$draggee.velocity("stop").removeClass("hidden").velocity({height:this.draggeeHeight},"fast",p.proxy(function(){this.$draggee.css("height","auto")},this)),this.returnHelpersToDraggees(),this.base()},setLevel:function(t,e){t.data("level",e);var i=this.structure.getIndent(e),s={};s["margin-"+Craft.left]="-"+i+"px",s["padding-"+Craft.left]=i+"px",this.$draggee.children(".row").css(s);for(var n=t.children("ul").children(),a=0;a<n.length;a++)this.setLevel(p(n[a]),e+1)}}),Craft.StructureTableSorter=Garnish.DragSort.extend({tableView:null,structureId:null,maxLevels:null,_helperMargin:null,_$firstRowCells:null,_$titleHelperCell:null,_titleHelperCellOuterWidth:null,_ancestors:null,_updateAncestorsFrame:null,_updateAncestorsProxy:null,_draggeeLevel:null,_draggeeLevelDelta:null,draggingLastElements:null,_loadingDraggeeLevelDelta:!1,_targetLevel:null,_targetLevelBounds:null,_positionChanged:null,init:function(t,e,i){this.tableView=t,this.structureId=this.tableView.$table.data("structure-id"),this.maxLevels=parseInt(this.tableView.$table.attr("data-max-levels")),i=p.extend({},Craft.StructureTableSorter.defaults,i,{handle:".move",collapseDraggees:!0,singleHelper:!0,helperSpacingY:2,magnetStrength:4,helper:p.proxy(this,"getHelper"),helperLagBase:1.5,axis:Garnish.Y_AXIS}),this.base(e,i)},startDragging:function(){this._helperMargin=Craft.StructureTableSorter.HELPER_MARGIN+(this.tableView.elementIndex.actions?24:0),this.base()},findDraggee:function(){this._draggeeLevel=this._targetLevel=this.$targetItem.data("level"),this._draggeeLevelDelta=0;for(var t=p(this.$targetItem),e=this.$targetItem.next();e.length;){var i=e.data("level");if(i<=this._draggeeLevel)break;var s=i-this._draggeeLevel;s>this._draggeeLevelDelta&&(this._draggeeLevelDelta=s),t=t.add(e),e=e.next()}if(this.draggingLastElements=!e.length,this.maxLevels&&this.draggingLastElements&&this.tableView.getMorePending()){this._loadingDraggeeLevelDelta=!0;var n=this._getAjaxBaseData(this.$targetItem);Craft.postActionRequest("structures/get-element-level-delta",n,p.proxy(function(t,e){"success"===e&&(this._loadingDraggeeLevelDelta=!1,this.dragging&&(this._draggeeLevelDelta=t.delta,this.drag(!1)))},this))}return t},getHelper:function(t){var e=p('<div class="elements datatablesorthelper"/>').appendTo(Garnish.$bod),i=p('<div class="tableview"/>').appendTo(e),s=p('<table class="data"/>').appendTo(i),n=p("<tbody/>").appendTo(s);t.appendTo(n),this._$firstRowCells=this.tableView.$elementContainer.children("tr:first").children();for(var a=t.children(),r=0;r<a.length;r++){var o=p(a[r]);if(o.hasClass("checkbox-cell"))o.remove();else{var l=p(this._$firstRowCells[r]),h=l.width();if(l.width(h),o.width(h),Garnish.hasAttr(l,"data-titlecell")){this._$titleHelperCell=o;var d=parseInt(l.css("padding-"+Craft.left));this._titleHelperCellOuterWidth=h+d-(this.tableView.elementIndex.actions?12:0),o.css("padding-"+Craft.left,Craft.StructureTableSorter.BASE_PADDING)}}}return e},canInsertBefore:function(t){return!this._loadingDraggeeLevelDelta&&!1!==this._getLevelBounds(t.prev(),t)},canInsertAfter:function(t){return!this._loadingDraggeeLevelDelta&&!1!==this._getLevelBounds(t,t.next())},onDragStart:function(){this._ancestors=this._getAncestors(this.$targetItem,this.$targetItem.data("level")),this._setTargetLevelBounds(),this.tableView.maybeLoadMore(),this.base()},onDrag:function(){this.base(),this._updateIndent()},onInsertionPointChange:function(){this._setTargetLevelBounds(),this._updateAncestorsBeforeRepaint(),this.base()},onDragStop:function(){if(this._positionChanged=!1,this.base(),this._targetLevel!=this._draggeeLevel){for(var t=this._targetLevel-this._draggeeLevel,e=0;e<this.$draggee.length;e++){var i=p(this.$draggee[e]),s=i.data("level")+t,n=Craft.StructureTableSorter.BASE_PADDING+(this.tableView.elementIndex.actions?7:0)+this._getLevelIndent(s);i.data("level",s),i.find(".element").data("level",s),i.children("[data-titlecell]:first").css("padding-"+Craft.left,n)}this._positionChanged=!0}if(this._positionChanged){for(var a=this._getAjaxBaseData(this.$draggee),r=this.$draggee.first().prev();r.length;){var o=r.data("level");if(o==this._targetLevel){a.prevId=r.data("id");break}if(o<this._targetLevel){a.parentId=r.data("id");var l=r.find("> td > .toggle");if(!l.hasClass("expanded")){l.addClass("expanded");var h=this.tableView._createSpinnerRowAfter(r);this.tableView.elementSelect&&this.tableView.elementSelect.removeItems(this.$targetItem),this.removeItems(this.$targetItem),this.$targetItem.remove(),this.tableView._totalVisible--}break}r=r.prev()}Craft.postActionRequest("structures/move-element",a,p.proxy(function(t,e){if("success"===e){if(!t.success)return Craft.cp.displayError(Craft.t("app","An unknown error occurred.")),void this.tableView.elementIndex.updateElements();Craft.cp.displayNotice(Craft.t("app","New position saved.")),this.onPositionChange(),h&&h.parent().length&&(h.remove(),this.tableView._expandElement(l,!0)),Craft.cp.runQueue()}},this))}},onSortChange:function(){this.tableView.elementSelect&&this.tableView.elementSelect.resetItemOrder(),this._positionChanged=!0,this.base()},onPositionChange:function(){Garnish.requestAnimationFrame(p.proxy(function(){this.trigger("positionChange"),this.settings.onPositionChange()},this))},onReturnHelpersToDraggees:function(){if(this._$firstRowCells.css("width",""),this.draggingLastElements&&this.tableView.getMorePending()){this.tableView._totalVisible+=this.newDraggeeIndexes[0]-this.oldDraggeeIndexes[0];var t=this.$draggee.last().nextAll();t.length&&(this.removeItems(t),t.remove(),this.tableView.maybeLoadMore())}this.base()},_getLevelBounds:function(t,e){if(e&&e.length?this._getLevelBounds._minLevel=e.data("level"):this._getLevelBounds._minLevel=1,t&&t.length?this._getLevelBounds._maxLevel=t.data("level")+1:this._getLevelBounds._maxLevel=1,this.maxLevels){if(1!=this._getLevelBounds._minLevel&&this._getLevelBounds._minLevel+this._draggeeLevelDelta>this.maxLevels)return!1;this._getLevelBounds._maxLevel+this._draggeeLevelDelta>this.maxLevels&&(this._getLevelBounds._maxLevel=this.maxLevels-this._draggeeLevelDelta,this._getLevelBounds._maxLevel<this._getLevelBounds._minLevel&&(this._getLevelBounds._maxLevel=this._getLevelBounds._minLevel))}return{min:this._getLevelBounds._minLevel,max:this._getLevelBounds._maxLevel}},_setTargetLevelBounds:function(){this._targetLevelBounds=this._getLevelBounds(this.$draggee.first().prev(),this.$draggee.last().next())},_updateIndent:function(t){this._updateIndent._mouseDist=this.realMouseX-this.mousedownX,"rtl"===Craft.orientation&&(this._updateIndent._mouseDist*=-1),this._updateIndent._indentationDist=Math.round(this._updateIndent._mouseDist/Craft.StructureTableSorter.LEVEL_INDENT),this._updateIndent._targetLevel=this._draggeeLevel+this._updateIndent._indentationDist,this._updateIndent._targetLevel<this._targetLevelBounds.min?(this._updateIndent._indentationDist+=this._targetLevelBounds.min-this._updateIndent._targetLevel,this._updateIndent._targetLevel=this._targetLevelBounds.min):this._updateIndent._targetLevel>this._targetLevelBounds.max&&(this._updateIndent._indentationDist-=this._updateIndent._targetLevel-this._targetLevelBounds.max,this._updateIndent._targetLevel=this._targetLevelBounds.max),this._targetLevel!==(this._targetLevel=this._updateIndent._targetLevel)&&this._updateAncestorsBeforeRepaint(),this._updateIndent._targetLevelMouseDiff=this._updateIndent._mouseDist-this._updateIndent._indentationDist*Craft.StructureTableSorter.LEVEL_INDENT,this._updateIndent._magnetImpact=Math.round(this._updateIndent._targetLevelMouseDiff/15),Math.abs(this._updateIndent._magnetImpact)>Craft.StructureTableSorter.MAX_GIVE&&(this._updateIndent._magnetImpact=(0<this._updateIndent._magnetImpact?1:-1)*Craft.StructureTableSorter.MAX_GIVE),this._updateIndent._closestLevelMagnetIndent=this._getLevelIndent(this._targetLevel)+this._updateIndent._magnetImpact,this.helpers[0].css("margin-"+Craft.left,this._updateIndent._closestLevelMagnetIndent+this._helperMargin),this._$titleHelperCell.width(this._titleHelperCellOuterWidth-(this._updateIndent._closestLevelMagnetIndent+Craft.StructureTableSorter.BASE_PADDING))},_getLevelIndent:function(t){return(t-1)*Craft.StructureTableSorter.LEVEL_INDENT},_getAjaxBaseData:function(t){return{structureId:this.structureId,elementId:t.data("id"),siteId:t.find(".element:first").data("site-id")}},_getAncestors:function(t,e){if(this._getAncestors._ancestors=[],0!=e)for(this._getAncestors._level=e,this._getAncestors._$prevRow=t.prev();this._getAncestors._$prevRow.length&&!(this._getAncestors._$prevRow.data("level")<this._getAncestors._level&&(this._getAncestors._ancestors.unshift(this._getAncestors._$prevRow),this._getAncestors._level=this._getAncestors._$prevRow.data("level"),0==this._getAncestors._level));)this._getAncestors._$prevRow=this._getAncestors._$prevRow.prev();return this._getAncestors._ancestors},_updateAncestorsBeforeRepaint:function(){this._updateAncestorsFrame&&Garnish.cancelAnimationFrame(this._updateAncestorsFrame),this._updateAncestorsProxy||(this._updateAncestorsProxy=p.proxy(this,"_updateAncestors")),this._updateAncestorsFrame=Garnish.requestAnimationFrame(this._updateAncestorsProxy)},_updateAncestors:function(){for(this._updateAncestorsFrame=null,this._updateAncestors._i=0;this._updateAncestors._i<this._ancestors.length;this._updateAncestors._i++)this._updateAncestors._$ancestor=this._ancestors[this._updateAncestors._i],this._updateAncestors._$ancestor.data("descendants",this._updateAncestors._$ancestor.data("descendants")-1),0==this._updateAncestors._$ancestor.data("descendants")&&this._updateAncestors._$ancestor.find("> td > .toggle:first").remove();for(this._updateAncestors._newAncestors=this._getAncestors(this.$targetItem,this._targetLevel),this._updateAncestors._i=0;this._updateAncestors._i<this._updateAncestors._newAncestors.length;this._updateAncestors._i++)this._updateAncestors._$ancestor=this._updateAncestors._newAncestors[this._updateAncestors._i],this._updateAncestors._$ancestor.data("descendants",this._updateAncestors._$ancestor.data("descendants")+1),1==this._updateAncestors._$ancestor.data("descendants")&&p('<span class="toggle expanded" title="'+Craft.t("app","Show/hide children")+'"></span>').insertAfter(this._updateAncestors._$ancestor.find("> td .move:first"));this._ancestors=this._updateAncestors._newAncestors,delete this._updateAncestors._i,delete this._updateAncestors._$ancestor,delete this._updateAncestors._newAncestors}},{BASE_PADDING:36,HELPER_MARGIN:-7,LEVEL_INDENT:44,MAX_GIVE:22,defaults:{onPositionChange:p.noop}}),Craft.TableElementIndexView=Craft.BaseElementIndexView.extend({$table:null,$selectedSortHeader:null,structureTableSort:null,_totalVisiblePostStructureTableDraggee:null,_morePendingPostStructureTableDraggee:!1,getElementContainer:function(){return this.$table=this.$container.find("table:first"),this.$table.children("tbody:first")},afterInit:function(){Craft.cp.$collapsibleTables=Craft.cp.$collapsibleTables.add(this.$table),Craft.cp.updateResponsiveTables(),this.initTableHeaders(),"index"===this.elementIndex.settings.context&&"structure"===this.elementIndex.getSelectedSortAttribute()&&Garnish.hasAttr(this.$table,"data-structure-id")?this.structureTableSort=new Craft.StructureTableSorter(this,this.getAllElements(),{onSortChange:p.proxy(this,"_onStructureTableSortChange")}):this.structureTableSort=null,"structure"===this.elementIndex.getSelectedSortAttribute()&&this.addListener(this.$elementContainer,"click",function(t){var e=p(t.target);e.hasClass("toggle")&&!1===this._collapseElement(e)&&this._expandElement(e)})},initTableHeaders:function(){for(var t=this.elementIndex.getSelectedSortAttribute(),e=this.$table.children("thead").children().children("[data-attribute]"),i=0;i<e.length;i++){var s=e.eq(i),n=s.attr("data-attribute");if(n===t){this.$selectedSortHeader=s;var a=this.elementIndex.getSelectedSortDirection();s.addClass("ordered "+a).on("click",p.proxy(this,"_handleSelectedSortHeaderClick"))}else{this.elementIndex.getSortAttributeOption(n).length&&s.addClass("orderable").on("click",p.proxy(this,"_handleUnselectedSortHeaderClick"))}}},isVerticalList:function(){return!0},getTotalVisible:function(){return this._isStructureTableDraggingLastElements()?this._totalVisiblePostStructureTableDraggee:this._totalVisible},setTotalVisible:function(t){this._isStructureTableDraggingLastElements()?this._totalVisiblePostStructureTableDraggee=t:this._totalVisible=t},getMorePending:function(){return this._isStructureTableDraggingLastElements()?this._morePendingPostStructureTableDraggee:this._morePending},setMorePending:function(t){this._isStructureTableDraggingLastElements()?this._morePendingPostStructureTableDraggee=t:this._morePending=this._morePendingPostStructureTableDraggee=t},getLoadMoreParams:function(){var t=this.base();return this._isStructureTableDraggingLastElements()&&(t.criteria.positionedAfter=this.structureTableSort.$targetItem.data("id")),t},appendElements:function(t){this.base(t),this.structureTableSort&&this.structureTableSort.addItems(t),Craft.cp.updateResponsiveTables()},destroy:function(){this.$table&&(Craft.cp.$collapsibleTables=Craft.cp.$collapsibleTables.not(this.$table)),this.base()},createElementEditor:function(e){Craft.createElementEditor(this.elementIndex.elementType,e,{params:{includeTableAttributesForSource:this.elementIndex.sourceKey},onSaveElement:p.proxy(function(t){t.tableAttributes&&this._updateTableAttributes(e,t.tableAttributes)},this),elementIndex:this.elementIndex})},_collapseElement:function(t,e){if(!e&&!t.hasClass("expanded"))return!1;t.removeClass("expanded");for(var i=t.parent().parent(),s=i.data("id"),n=i.data("level"),a=i.next();a.length;){if(!Garnish.hasAttr(a,"data-spinnerrow")){if(a.data("level")<=n)break;this.elementSelect&&this.elementSelect.removeItems(a),this.structureTableSort&&this.structureTableSort.removeItems(a),this._totalVisible--}var r=a.next();a.remove(),a=r}this.elementIndex.instanceState.collapsedElementIds||(this.elementIndex.instanceState.collapsedElementIds=[]),this.elementIndex.instanceState.collapsedElementIds.push(s),this.elementIndex.setInstanceState("collapsedElementIds",this.elementIndex.instanceState.collapsedElementIds),this.maybeLoadMore()},_expandElement:function(t,e){if(!e&&t.hasClass("expanded"))return!1;if(t.addClass("expanded"),this.elementIndex.instanceState.collapsedElementIds){var i=t.parent().parent(),s=i.data("id"),n=p.inArray(s,this.elementIndex.instanceState.collapsedElementIds);if(-1!==n){this.elementIndex.instanceState.collapsedElementIds.splice(n,1),this.elementIndex.setInstanceState("collapsedElementIds",this.elementIndex.instanceState.collapsedElementIds);var r=this._createSpinnerRowAfter(i),a=p.extend(!0,{},this.settings.params);a.criteria.descendantOf=s,Craft.postActionRequest("element-indexes/get-more-elements",a,p.proxy(function(t,e){if(r.parent().length&&"success"===e){var i=p(t.html),s=this._totalVisible+i.length,n=this.settings.batchSize&&i.length===this.settings.batchSize;if(n){var a=r.nextAll();this.elementSelect&&this.elementSelect.removeItems(a),this.structureTableSort&&this.structureTableSort.removeItems(a),a.remove(),s-=a.length}else n=this._morePending;r.replaceWith(i),this.thumbLoader.load(i),(this.elementIndex.actions||this.settings.selectable)&&(this.elementSelect.addItems(i.filter(":not(.disabled)")),this.elementIndex.updateActionTriggers()),this.structureTableSort&&this.structureTableSort.addItems(i),Craft.appendHeadHtml(t.headHtml),Craft.appendFootHtml(t.footHtml),Craft.cp.updateResponsiveTables(),this.setTotalVisible(s),this.setMorePending(n),this.maybeLoadMore()}},this))}}},_createSpinnerRowAfter:function(t){return p('<tr data-spinnerrow><td class="centeralign" colspan="'+t.children().length+'"><div class="spinner"/></td></tr>').insertAfter(t)},_isStructureTableDraggingLastElements:function(){return this.structureTableSort&&this.structureTableSort.dragging&&this.structureTableSort.draggingLastElements},_handleSelectedSortHeaderClick:function(t){var e=p(t.currentTarget);if(!e.hasClass("loading")){var i="asc"===this.elementIndex.getSelectedSortDirection()?"desc":"asc";this.elementIndex.setSortDirection(i),this._handleSortHeaderClick(t,e)}},_handleUnselectedSortHeaderClick:function(t){var e=p(t.currentTarget);if(!e.hasClass("loading")){var i=e.attr("data-attribute");this.elementIndex.setSortAttribute(i),this._handleSortHeaderClick(t,e)}},_handleSortHeaderClick:function(t,e){this.$selectedSortHeader&&this.$selectedSortHeader.removeClass("ordered asc desc"),e.removeClass("orderable").addClass("ordered loading"),this.elementIndex.storeSortAttributeAndDirection(),this.elementIndex.updateElements(),this.elementIndex.setIndexAvailable()},_updateTableAttributes:function(t,e){var i=t.closest("tr");for(var s in e)e.hasOwnProperty(s)&&i.children('td[data-attr="'+s+'"]:first').html(e[s])}}),Craft.TagSelectInput=Craft.BaseElementSelectInput.extend({searchTimeout:null,searchMenu:null,$container:null,$elementsContainer:null,$elements:null,$addTagInput:null,$spinner:null,_ignoreBlur:!1,init:function(t){if(!p.isPlainObject(t)){for(var e={},i=["id","name","tagGroupId","sourceElementId"],s=0;s<i.length&&void 0!==arguments[s];s++)e[i[s]]=arguments[s];t=e}this.base(p.extend({},Craft.TagSelectInput.defaults,t)),this.$addTagInput=this.$container.children(".add").children(".text"),this.$spinner=this.$addTagInput.next(),this.addListener(this.$addTagInput,"textchange",p.proxy(function(){this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout(p.proxy(this,"searchForTags"),500)},this)),this.addListener(this.$addTagInput,"keypress",function(t){t.keyCode===Garnish.RETURN_KEY&&(t.preventDefault(),this.searchMenu&&this.selectTag(this.searchMenu.$options[0]))}),this.addListener(this.$addTagInput,"focus",function(){this.searchMenu&&this.searchMenu.show()}),this.addListener(this.$addTagInput,"blur",function(){this._ignoreBlur?this._ignoreBlur=!1:setTimeout(p.proxy(function(){this.searchMenu&&this.searchMenu.hide()},this),1)})},getAddElementsBtn:p.noop,getElementSortAxis:function(){return null},searchForTags:function(){if(this.searchMenu&&this.killSearchMenu(),this.$addTagInput.val()){this.$spinner.removeClass("hidden");for(var t=[],e=0;e<this.$elements.length;e++){var i=p(this.$elements[e]).data("id");i&&t.push(i)}this.settings.sourceElementId&&t.push(this.settings.sourceElementId);var r={search:this.$addTagInput.val(),tagGroupId:this.settings.tagGroupId,excludeIds:t};Craft.postActionRequest("tags/search-for-tags",r,p.proxy(function(t,e){if(this.searchMenu&&this.killSearchMenu(),this.$spinner.addClass("hidden"),"success"===e){for(var i,s=p('<div class="menu tagmenu"/>').appendTo(Garnish.$bod),n=p("<ul/>").appendTo(s),a=0;a<t.tags.length;a++)i=p("<li/>").appendTo(n),p('<a data-icon="tag"/>').appendTo(i).text(t.tags[a].title).data("id",t.tags[a].id);t.exactMatch||(i=p("<li/>").appendTo(n),p('<a data-icon="plus"/>').appendTo(i).text(r.search)),n.find("> li:first-child > a").addClass("hover"),this.searchMenu=new Garnish.Menu(s,{attachToElement:this.$addTagInput,onOptionSelect:p.proxy(this,"selectTag")}),this.addListener(s,"mousedown",p.proxy(function(){this._ignoreBlur=!0},this)),this.searchMenu.show()}},this))}else this.$spinner.addClass("hidden")},selectTag:function(t){var e=p(t),i=e.data("id"),s=e.text(),n=p("<div/>",{class:"element small removable","data-id":i,"data-site-id":this.settings.targetSiteId,"data-label":s,"data-editable":"1"}).appendTo(this.$elementsContainer),a=p("<input/>",{type:"hidden",name:this.settings.name+"[]",value:i}).appendTo(n);p("<a/>",{class:"delete icon",title:Craft.t("app","Remove")}).appendTo(n);var r=p("<div/>",{class:"label"}).appendTo(n);p("<span/>",{class:"title",text:s}).appendTo(r);var o=-(n.outerWidth()+10);this.$addTagInput.css("margin-"+Craft.left,o+"px");var l={};if(l["margin-"+Craft.left]=0,this.$addTagInput.velocity(l,"fast"),this.$elements=this.$elements.add(n),this.addElements(n),this.killSearchMenu(),this.$addTagInput.val(""),this.$addTagInput.trigger("focus"),!i){n.addClass("loading disabled");var h={groupId:this.settings.tagGroupId,title:s};Craft.postActionRequest("tags/create-tag",h,p.proxy(function(t,e){"success"===e&&t.success?(n.attr("data-id",t.id),a.val(t.id),n.removeClass("loading disabled")):(this.removeElement(n),"success"===e&&Craft.cp.displayError(Craft.t("app","An unknown error occurred.")))},this))}},killSearchMenu:function(){this.searchMenu.hide(),this.searchMenu.destroy(),this.searchMenu=null}},{defaults:{tagGroupId:null}}),Craft.ThumbsElementIndexView=Craft.BaseElementIndexView.extend({getElementContainer:function(){return this.$container.children("ul")}}),Craft.ui={createTextInput:function(t){var e=p("<input/>",{attr:{class:"text",type:t.type||"text",id:t.id,size:t.size,name:t.name,value:t.value,maxlength:t.maxlength,autofocus:this.getAutofocusValue(t.autofocus),autocomplete:void 0!==t.autocomplete&&t.autocomplete?null:"off",disabled:this.getDisabledValue(t.disabled),readonly:t.readonly,title:t.title,placeholder:t.placeholder}});return t.class&&e.addClass(t.class),t.placeholder&&e.addClass("nicetext"),"password"===t.type&&e.addClass("password"),t.disabled&&e.addClass("disabled"),t.size||e.addClass("fullwidth"),t.showCharsLeft&&t.maxlength&&e.attr("data-show-chars-left").css("padding-"+("ltr"===Craft.orientation?"right":"left"),7.2*t.maxlength.toString().length+14+"px"),(t.placeholder||t.showCharsLeft)&&new Garnish.NiceText(e),"password"===t.type?p('<div class="passwordwrapper"/>').append(e):e},createTextField:function(t){return this.createField(this.createTextInput(t),t)},createTextarea:function(t){var e=p("<textarea/>",{class:"text",rows:t.rows||2,cols:t.cols||50,id:t.id,name:t.name,maxlength:t.maxlength,autofocus:t.autofocus&&!Garnish.isMobileBrowser(!0),disabled:!!t.disabled,placeholder:t.placeholder,html:t.value});return t.showCharsLeft&&e.attr("data-show-chars-left",""),t.class&&e.addClass(t.class),t.size||e.addClass("fullwidth"),e},createTextareaField:function(t){return this.createField(this.createTextarea(t),t)},createSelect:function(t){var e=p("<div/>",{class:"select"});t.class&&e.addClass(t.class);var i=p("<select/>",{id:t.id,name:t.name,autofocus:t.autofocus&&Garnish.isMobileBrowser(!0),disabled:t.disabled,"data-target-prefix":t.targetPrefix}).appendTo(e),s=null;for(var n in t.options)if(t.options.hasOwnProperty(n)){var a=t.options[n];if(void 0!==a.optgroup)s=p("<optgroup/>",{label:a.label}).appendTo(i);else{var r=void 0!==a.label?a.label:a,o=void 0!==a.value?a.value:n,l=void 0!==a.disabled&&a.disabled;p("<option/>",{value:o,selected:o==t.value,disabled:l,html:r}).appendTo(s||i)}}return t.toggle&&(i.addClass("fieldtoggle"),new Craft.FieldToggle(i)),e},createSelectField:function(t){return this.createField(this.createSelect(t),t)},createCheckbox:function(t){var e=t.id||"checkbox"+Math.floor(1e9*Math.random()),i=p("<input/>",{type:"checkbox",value:void 0!==t.value?t.value:"1",id:e,class:"checkbox",name:t.name,checked:t.checked?"checked":null,autofocus:this.getAutofocusValue(t.autofocus),disabled:this.getDisabledValue(t.disabled),"data-target":t.toggle,"data-reverse-target":t.reverseToggle});t.class&&i.addClass(t.class),(t.toggle||t.reverseToggle)&&(i.addClass("fieldtoggle"),new Craft.FieldToggle(i));var s=p("<label/>",{for:e,html:t.label});return t.name&&(t.name.length<3||"[]"!==t.name.substr(-2))?p([p("<input/>",{type:"hidden",name:t.name,value:""})[0],i[0],s[0]]):p([i[0],s[0]])},createCheckboxField:function(t){var e=p('<div class="field checkboxfield"/>',{id:t.id?t.id+"-field":null});return t.first&&e.addClass("first"),t.instructions&&e.addClass("has-instructions"),this.createCheckbox(t).appendTo(e),t.instructions&&p('<div class="instructions"/>').text(t.instructions).appendTo(e),e},createCheckboxSelect:function(t){var e,i,s=p('<div class="checkbox-select"/>');t.class&&s.addClass(t.class),t.showAllOption?(e=t.allValue||"*",i=t.values==e,p("<div/>").appendTo(s).append(this.createCheckbox({id:t.id,class:"all",label:"<b>"+(t.allLabel||Craft.t("app","All"))+"</b>",name:t.name,value:e,checked:i,autofocus:t.autofocus}))):i=!1;for(var n=0;n<t.options.length;n++){var a=t.options[n];a.value!=e&&p("<div/>").appendTo(s).append(this.createCheckbox({label:a.label,name:t.name?t.name+"[]":null,value:a.value,checked:i||Craft.inArray(a.value,t.values),disabled:i}))}return new Garnish.CheckboxSelect(s),s},createCheckboxSelectField:function(t){return this.createField(this.createCheckboxSelect(t),t)},createLightswitch:function(t){var e=t.value||"1",i=p("<div/>",{class:"lightswitch",tabindex:"0","data-value":e,id:t.id,"aria-labelledby":t.labelId,"data-target":t.toggle,"data-reverse-target":t.reverseToggle});return t.on&&i.addClass("on"),t.small&&i.addClass("small"),t.disabled&&i.addClass("disabled"),p('<div class="lightswitch-container"><div class="label on"></div><div class="handle"></div><div class="label off"></div></div>').appendTo(i),t.name&&p("<input/>",{type:"hidden",name:t.name,value:t.on?e:"",disabled:t.disabled}).appendTo(i),(t.toggle||t.reverseToggle)&&(i.addClass("fieldtoggle"),new Craft.FieldToggle(i)),i.lightswitch()},createLightswitchField:function(t){return this.createField(this.createLightswitch(t),t)},createColorInput:function(t){var e=t.id||"color"+Math.floor(1e9*Math.random()),i=t.containerId||e+"-container",s=t.name||null,n=t.value||null,a=t.small||!1,r=t.autofocus&&Garnish.isMobileBrowser(!0),o=t.disabled||!1,l=p("<div/>",{id:i,class:"flex color-container"}),h=p("<div/>",{class:"color static"+(a?" small":"")}).appendTo(l);p("<div/>",{class:"color-preview",style:t.value?{backgroundColor:t.value}:null}).appendTo(h),this.createTextInput({id:e,name:s,value:n,size:10,class:"color-input",autofocus:r,disabled:o}).appendTo(l);return new Craft.ColorInput(l),l},createColorField:function(t){return this.createField(this.createColorInput(t),t)},createDateInput:function(t){var e=(t.id||"date"+Math.floor(1e9*Math.random()))+"-date",i=t.name||null,s=i?i+"[date]":null,n=t.value&&"function"==typeof t.value.getMonth?t.value:null,a=n?Craft.formatDate(n):null,r=t.autofocus&&Garnish.isMobileBrowser(!0),o=t.disabled||!1,l=p("<div/>",{class:"datewrapper"}),h=this.createTextInput({id:e,name:s,value:a,placeholder:" ",autocomplete:!1,autofocus:r,disabled:o}).appendTo(l);return p('<div data-icon="date"></div>').appendTo(l),i&&p("<input/>",{type:"hidden",name:i+"[timezone]",val:Craft.timezone}).appendTo(l),h.datepicker(p.extend({defaultDate:n||new Date},Craft.datepickerOptions)),l},createDateField:function(t){return this.createField(this.createDateInput(t),t)},createTimeInput:function(t){var e=(t.id||"time"+Math.floor(1e9*Math.random()))+"-time",i=t.name||null,s=i?i+"[time]":null,n=t.value&&"function"==typeof t.value.getMonth?t.value:null,a=t.autofocus&&Garnish.isMobileBrowser(!0),r=t.disabled||!1,o=p("<div/>",{class:"timewrapper"}),l=this.createTextInput({id:e,name:s,placeholder:" ",autocomplete:!1,autofocus:a,disabled:r}).appendTo(o);return p('<div data-icon="time"></div>').appendTo(o),i&&p("<input/>",{type:"hidden",name:i+"[timezone]",val:Craft.timezone}).appendTo(o),l.timepicker(Craft.timepickerOptions),n&&l.timepicker("setTime",3600*n.getHours()+60*n.getMinutes()+n.getSeconds()),o},createTimeField:function(t){return this.createField(this.createTimeInput(t),t)},createField:function(t,e){var i=e.label&&"__blank__"!==e.label?e.label:null,s=Craft.isMultiSite&&e.siteId?e.siteId:null,n=p("<div/>",{class:"field",id:e.fieldId||(e.id?e.id+"-field":null)});if(e.first&&n.addClass("first"),i||e.instructions){var a=p('<div class="heading"/>').appendTo(n);if(i){var r=p("<label/>",{id:e.labelId||(e.id?e.id+"-label":null),class:e.required?"required":null,for:e.id,text:i}).appendTo(a);if(s)for(var o=0;o<Craft.sites.length;o++)if(Craft.sites[o].id==s){p('<span class="site"/>').text(Craft.sites[o].name).appendTo(r);break}}e.instructions&&p('<div class="instructions"/>').text(e.instructions).appendTo(a)}return p('<div class="input"/>').append(t).appendTo(n),e.warning&&p('<p class="warning"/>').text(e.warning).appendTo(n),e.errors&&this.addErrorsToField(n,e.errors),n},createErrorList:function(t){var e=p('<ul class="errors"/>');return t&&this.addErrorsToList(e,t),e},addErrorsToList:function(t,e){for(var i=0;i<e.length;i++)p("<li/>").text(e[i]).appendTo(t)},addErrorsToField:function(t,e){if(e){t.addClass("has-errors"),t.children(".input").addClass("errors");var i=t.children("ul.errors");i.length||(i=this.createErrorList().appendTo(t)),this.addErrorsToList(i,e)}},clearErrorsFromField:function(t){t.removeClass("has-errors"),t.children(".input").removeClass("errors"),t.children("ul.errors").remove()},getAutofocusValue:function(t){return t&&!Garnish.isMobileBrowser(!0)?"autofocus":null},getDisabledValue:function(t){return t?"disabled":null}},Craft.Uploader=Garnish.Base.extend({uploader:null,allowedKinds:null,$element:null,settings:null,_rejectedFiles:{},_extensionList:null,_totalFileCounter:0,_validFileCounter:0,init:function(t,e){this._rejectedFiles={size:[],type:[],limit:[]},this.$element=t,this.allowedKinds=null,this._extensionList=null,this._totalFileCounter=0,this._validFileCounter=0;var i=(e=p.extend({},Craft.Uploader.defaults,e)).events;for(var s in delete e.events,e.allowedKinds&&e.allowedKinds.length&&("string"==typeof e.allowedKinds&&(e.allowedKinds=[e.allowedKinds]),this.allowedKinds=e.allowedKinds,delete e.allowedKinds),e.autoUpload=!1,this.uploader=this.$element.fileupload(e),i)i.hasOwnProperty(s)&&this.uploader.on(s,i[s]);this.settings=e,this.uploader.on("fileuploadadd",p.proxy(this,"onFileAdd"))},setParams:function(t){void 0!==Craft.csrfTokenName&&void 0!==Craft.csrfTokenValue&&(t[Craft.csrfTokenName]=Craft.csrfTokenValue),this.uploader.fileupload("option",{formData:t})},getInProgress:function(){return this.uploader.fileupload("active")},isLastUpload:function(){return this.getInProgress()<2},onFileAdd:function(t,s){t.stopPropagation();var n=!1;return this.allowedKinds&&(this._extensionList||this._createExtensionList(),n=!0),s.process().done(p.proxy(function(){var t=s.files[0],e=!0;if(n){var i=t.name.match(/\.([a-z0-4_]+)$/i)[1];-1===p.inArray(i.toLowerCase(),this._extensionList)&&(e=!1,this._rejectedFiles.type.push("“"+t.name+"”"))}t.size>this.settings.maxFileSize&&(this._rejectedFiles.size.push("“"+t.name+"”"),e=!1),e&&"function"==typeof this.settings.canAddMoreFiles&&!this.settings.canAddMoreFiles(this._validFileCounter)&&(this._rejectedFiles.limit.push("“"+t.name+"”"),e=!1),e&&(this._validFileCounter++,s.submit()),++this._totalFileCounter===s.originalFiles.length&&(this._totalFileCounter=0,this._validFileCounter=0,this.processErrorMessages())},this)),!0},processErrorMessages:function(){var t;this._rejectedFiles.type.length&&(t=1===this._rejectedFiles.type.length?"The file {files} could not be uploaded. The allowed file kinds are: {kinds}.":"The files {files} could not be uploaded. The allowed file kinds are: {kinds}.",t=Craft.t("app",t,{files:this._rejectedFiles.type.join(", "),kinds:this.allowedKinds.join(", ")}),this._rejectedFiles.type=[],alert(t)),this._rejectedFiles.size.length&&(t=1===this._rejectedFiles.size.length?"The file {files} could not be uploaded, because it exceeds the maximum upload size of {size}.":"The files {files} could not be uploaded, because they exceeded the maximum upload size of {size}.",t=Craft.t("app",t,{files:this._rejectedFiles.size.join(", "),size:this.humanFileSize(Craft.maxUploadSize)}),this._rejectedFiles.size=[],alert(t)),this._rejectedFiles.limit.length&&(t=1===this._rejectedFiles.limit.length?"The file {files} could not be uploaded, because the field limit has been reached.":"The files {files} could not be uploaded, because the field limit has been reached.",t=Craft.t("app",t,{files:this._rejectedFiles.limit.join(", ")}),this._rejectedFiles.limit=[],alert(t))},humanFileSize:function(t){if(t<1024)return t+" B";for(var e=-1;++e,1024<=(t/=1024););return t.toFixed(1)+" "+["kB","MB","GB","TB","PB","EB","ZB","YB"][e]},_createExtensionList:function(){this._extensionList=[];for(var t=0;t<this.allowedKinds.length;t++){var e=this.allowedKinds[t];if(void 0!==Craft.fileKinds[e])for(var i=0;i<Craft.fileKinds[e].extensions.length;i++){var s=Craft.fileKinds[e].extensions[i];this._extensionList.push(s)}}},destroy:function(){this.$element.fileupload("destroy"),this.base()}},{defaults:{dropZone:null,pasteZone:null,fileInput:null,sequentialUploads:!0,maxFileSize:Craft.maxUploadSize,allowedKinds:null,events:{},canAddMoreFiles:null,headers:{Accept:"application/json;q=0.9,*/*;q=0.8"},paramName:"assets-upload"}}),Craft.UriFormatGenerator=Craft.BaseInputGenerator.extend({generateTargetValue:function(t){t=(t=t.replace("/<(.*?)>/g","")).toLowerCase(),t=(t=(t=Craft.asciiString(t)).replace(/^[^a-z]+/,"")).replace(/[^a-z0-9]+$/,"");var e=Craft.filterArray(t.split(/[^a-z0-9]+/)).join("-");return e&&this.settings.suffix&&(e+=this.settings.suffix),e}})}(jQuery);
//# sourceMappingURL=Craft.min.js.map