Seditio Source
Root |
./othercms/xenForo 2.2.8/js/xf/core/form.min.js
'use strict';!function(e,p,q){XF.SubmitClick=XF.Event.newHandler({eventNameSpace:"XFSubmitClick",options:{target:null,container:null,timeout:500,uncheckedValue:"0",disable:null},$input:null,$form:null,init:function(){var a=this.$target;if(a.is("label")&&(a=a.find("input:radio, input:checkbox"),!a.length))return;this.$input=a;a=a.closest("form");this.$form=a.length?a:null},click:function(a){var b=this.$input,c=this.$form,d=this.options.target,g=this.options.container;if(b)if(d){var f=this.options.uncheckedValue;
setTimeout(function(){var h={};g?h=b.closest(g).find("input, select, textarea").serializeArray():h[b.attr("name")]=b.prop("checked")?b.attr("value"):f;XF.ajax("POST",d,h)},0)}else c?((a=c.data("submit-click-timer"))&&clearTimeout(a),c.one("ajax-submit:complete",function(h,k,m){if(k.errors)b.prop("checked",b.prop("checked")?"":"checked");else if("checkbox"==b.attr("type")&&null!==b.closest("tr.dataList-row"))b.closest("tr.dataList-row")[b.prop("checked")?"removeClass":"addClass"]("dataList-row--disabled")}),
a=setTimeout(function(){c.submit()},this.options.timeout),c.data("submit-click-timer",a)):console.error("No target or form to submit on click")}});XF.AjaxSubmit=XF.Element.newHandler({options:{redirect:!0,skipOverlayRedirect:!1,forceFlashMessage:!1,resetComplete:!1,hideOverlay:!0,disableSubmit:".button, :submit, :reset, [data-disable-submit]",jsonName:null,jsonOptIn:null,replace:null,showReplacement:!0},submitPending:!1,$submitButton:null,init:function(){var a=this.$target;a.is("form")?(a.on({submit:XF.proxy(this,
"submit"),keyup:XF.proxy(this,"cmdEnterKey"),"draft:beforesave":XF.proxy(this,"draftCheck")}),a.on("click","input[type=submit], button:not([type]), button[type=submit]",XF.proxy(this,"submitButtonClicked"))):console.error("%o is not a form",a[0])},submit:function(a){var b=this.$submitButton,c=this.$target,d="multipart/form-data"==c.attr("enctype");if(d){if(this.options.jsonName){a.preventDefault();console.error("JSON serialized forms do not support the file upload-style enctype.");XF.alert(XF.phrase("oops_we_ran_into_some_problems_more_details_console"));
return}if(!p.FormData)return}if(!(this.$submitButton&&this.$submitButton.data("prevent-ajax")||XF.debug.disableAjaxSubmit))if(this.submitPending)a&&a.preventDefault();else{var g={skipDefault:!0};d&&(g.timeout=0);var f=e.Event("ajax-submit:before"),h={form:c,handler:this,method:c.attr("method")||"get",action:c.attr("action"),submitButton:b,preventSubmit:!1,successCallback:XF.proxy(this,"submitResponse"),ajaxOptions:g};c.trigger(f,h);if(h.preventSubmit)return!1;if(f.isDefaultPrevented())return!0;a&&
a.preventDefault();var k=this;setTimeout(function(){k.submitPending=!0;var m=XF.getDefaultFormData(c,b,k.options.jsonName,k.options.jsonOptIn);k.disableButtons();XF.ajax(h.method,h.action,m,h.successCallback,h.ajaxOptions).always(function(){k.$submitButton=null;setTimeout(function(){k.submitPending=!1;k.enableButtons()},300);f=e.Event("ajax-submit:always");c.trigger(f,c,k)})},0)}},disableButtons:function(){this.$target.find(this.options.disableSubmit).prop("disabled",!0)},enableButtons:function(){this.$target.find(this.options.disableSubmit).prop("disabled",
!1)},submitResponse:function(a,b,c){if("object"!=typeof a)XF.alert("Response was not JSON.");else{b=this.$target;c=this.$submitButton;var d=e.Event("ajax-submit:response");b.trigger(d,a,this);if(!d.isDefaultPrevented()){d=e.Event("ajax-submit:error");var g=!1,f=!1,h=a.redirect&&this.options.redirect,k=b.closest(".overlay");k.length&&this.options.hideOverlay||(k=null);h&&this.options.skipOverlayRedirect&&k&&(h=!1);c&&c.attr("data-ajax-redirect")&&(h=c.data("ajax-redirect"));if(a.errorHtml)b.trigger(d,
a,this),d.isDefaultPrevented()||XF.setupHtmlInsert(a.errorHtml,function(l,n){n=n.h1||n.title||XF.phrase("oops_we_ran_into_some_problems");XF.overlayMessage(n,l)}),g=!0;else if(a.errors)b.trigger(d,a,this),d.isDefaultPrevented()||XF.alert(a.errors),g=!0;else if(a.exception)XF.alert(a.exception);else if("ok"==a.status&&a.message)h?this.options.forceFlashMessage?(XF.flashMessage(a.message,1E3,function(){XF.redirect(a.redirect)}),f=!0):XF.redirect(a.redirect):(XF.flashMessage(a.message,3E3),f=!0),k&&
k.trigger("overlay:hide");else if(a.html){var m=this;XF.setupHtmlInsert(a.html,function(l,n,r){if(m.options.replace&&m.doSubmitReplace(l,r))return!1;k&&k.trigger("overlay:hide");l=XF.getOverlayHtml({html:l,title:n.h1||n.title});XF.showOverlay(l)})}else"ok"==a.status&&(h&&XF.redirect(a.redirect),k&&k.trigger("overlay:hide"));!f&&a.flashMessage&&XF.flashMessage(a.flashMessage,3E3);a.errors&&d.isDefaultPrevented();d=e.Event("ajax-submit:complete");b.trigger(d,a,this);d.isDefaultPrevented()||this.options.resetComplete&&
!g&&b[0].reset()}}},doSubmitReplace:function(a,b){var c=this.options.replace;if(!c)return!1;var d=c.split(" with ");c=e.trim(d[0]);d=d[1]?e.trim(d[1]):c;if("self"==c||this.$target.is(c))var g=this.$target;else g=this.$target.find(c).first(),g.length||(g=e(c).first());if(!g.length)return console.error("Could not find old selector '"+c+"'"),!1;var f=a.is(d)?a:a.find(d).first();if(!f.length)return console.error("Could not find new selector '"+d+"'"),!1;this.options.showReplacement?(f.hide().insertAfter(g),
g.xfFadeUp(null,function(){g.remove();f.length&&(XF.activate(f),b(!1));f.xfFadeDown(null,XF.layoutChange)})):(f.insertAfter(g),g.remove(),f.length&&(XF.activate(f),b(!1)),XF.layoutChange());return!0},submitButtonClicked:function(a){this.$submitButton=e(a.currentTarget)},draftCheck:function(a){this.submitPending&&a.preventDefault()}});XF.ChangeSubmit=XF.Element.newHandler({options:{watch:":input:not(button)",submitDelay:0},formInitialized:!1,hasChanges:!1,hasPendingChanges:!1,hasUnsavedChanges:!1,
$clickOnSuccessfulSave:null,delayTimeout:null,init:function(){var a=this;this.$target.on("change",this.options.watch,XF.proxy(this,"change")).on("focus",this.options.watch,function(){a.clearSubmitTimeout()}).on("blur",this.options.watch,function(b){a.hasPendingChanges&&a.scheduleSubmit()}).on("click","[type=reset]",XF.proxy(this,"revert")).on("submit",function(){a.hasPendingChanges=!1}).on("ajax-submit:complete",function(b,c){if("ok"===c.status){a.hasUnsavedChanges=!1;var d=a.$clickOnSuccessfulSave;
d&&(a.$clickOnSuccessfulSave=null,setTimeout(function(){d.click()},100))}});this.$target.find("[data-force-change-submit]").click(function(b){a.hasUnsavedChanges&&(b.stopPropagation(),b.stopImmediatePropagation(),a.$clickOnSuccessfulSave=e(b.target),a.triggerSubmit())})},initForm:function(){this.formInitialized||(this.formInitialized=!0,XF.Element.applyHandler(this.$target,"ajax-submit",{redirect:!1,forceFlashMessage:!1}),XF.Element.getHandler(this.$target,"ajax-submit").options.redirect=!1)},change:function(a){this.initForm();
this.hasUnsavedChanges=this.hasChanges=!0;this.$clickOnSuccessfulSave=null;this.validateGroup(e(a.target).data("group"))&&(this.hasPendingChanges=!0,this.scheduleSubmit())},clearSubmitTimeout:function(){this.delayTimeout&&clearTimeout(this.delayTimeout);this.delayTimeout=null},scheduleSubmit:function(){var a=this.options.submitDelay;0<a?(this.clearSubmitTimeout(),this.delayTimeout=setTimeout(XF.proxy(this,"triggerSubmit"),a)):this.triggerSubmit()},triggerSubmit:function(){this.clearSubmitTimeout();
this.$target.trigger("submit")},validateGroup:function(a){if(!a)return!0;var b=!0;this.$target.find("[data-group='"+a+"']").each(function(){if(e(this).data("required")&&""===e(this).val())return b=!1});return b},revert:function(a){a.preventDefault();this.hasChanges&&(this.hasChanges=!1,this.$target.trigger("reset"),this.triggerSubmit())}});XF.AutoComplete=XF.Element.newHandler({loadTimer:null,loadVal:"",results:null,options:{single:!1,multiple:",",acurl:"",minLength:2,queryKey:"q",extraFields:"",
extraParams:{},jsonContainer:"results",autosubmit:!1},init:function(){var a=this.$target;this.options.autosubmit&&(this.options.single=!0);this.options.acurl||(this.options.acurl=XF.getAutoCompleteUrl());this.results=new XF.AutoCompleteResults({onInsert:XF.proxy(this,"addValue")});a.attr("autocomplete","off").on({keydown:XF.proxy(this,"keydown"),keyup:XF.proxy(this,"keyup"),"blur click":XF.proxy(this,"blur"),paste:function(){setTimeout(function(){a.trigger("keydown")},0)}});a.closest("form").submit(XF.proxy(this,
"hideResults"))},keydown:function(a){if(this.results.isVisible()){var b=this.results,c=function(){a.preventDefault();return!1};switch(a.key){case "ArrowDown":return b.selectResult(1),c();case "ArrowUp":return b.selectResult(-1),c();case "Escape":return b.hideResults(),c();case "Enter":return b.insertSelectedResult(a),c()}}},keyup:function(a){if(this.results.isVisible())switch(a.key){case "ArrowDown":case "ArrowUp":case "Enter":return}this.loadTimer&&clearTimeout(this.loadTimer);this.loadTimer=setTimeout(XF.proxy(this,
"load"),200)},blur:function(a){clearTimeout(this.loadTimer);setTimeout(XF.proxy(this,"hideResults"),250);this.xhr&&(this.xhr.abort(),this.xhr=!1)},load:function(){var a=this.loadVal,b=this.options.extraParams;this.loadTimer&&clearTimeout(this.loadTimer);this.loadVal=this.getPartialValue();""==this.loadVal?this.hideResults():this.loadVal==a||this.loadVal.length<this.options.minLength||(b[this.options.queryKey]=this.loadVal,""!=this.options.extraFields&&e(this.options.extraFields).each(function(){b[this.name]=
e(this).val()}),this.xhr&&this.xhr.abort(),this.xhr=XF.ajax("get",this.options.acurl,b,XF.proxy(this,"showResults"),{error:!1}))},hideResults:function(){this.results.hideResults()},showResults:function(a){this.xhr&&(this.xhr=!1);this.options.jsonContainer&&a&&(a=a[this.options.jsonContainer]);this.results.showResults(this.getPartialValue(),a,this.$target)},addValue:function(a){if(this.options.single)this.$target.val(a);else{var b=this.getFullValues();""!=a&&(b.length&&(a=" "+a),b.push(a+this.options.multiple+
" "));this.$target.val(b.join(this.options.multiple))}this.$target.trigger("change").trigger("auto-complete:insert",{inserted:e.trim(a),current:this.$target.val()});this.options.autosubmit?this.$target.closest("form").submit():this.$target.autofocus()},getFullValues:function(){var a=this.$target.val();if(""==a)return[];if(this.options.single)return[a];var b=a.lastIndexOf(this.options.multiple);if(-1==b)return[];a=a.substr(0,b);return a.split(this.options.multiple)},getPartialValue:function(){var a=
this.$target.val();if(this.options.single)return e.trim(a);var b=a.lastIndexOf(this.options.multiple);return-1==b?e.trim(a):e.trim(a.substr(b+this.options.multiple.length))}});XF.UserMentioner=XF.Element.newHandler({options:{},handler:null,init:function(){this.handler=new XF.AutoCompleter(this.$target,{url:XF.getAutoCompleteUrl()})}});XF.EmojiCompleter=XF.Element.newHandler({options:{insertTemplate:"${text}"},handler:null,init:function(){if(XF.config.shortcodeToEmoji){var a={url:XF.canonicalizeUrl("index.php?misc/find-emoji"),
at:":",keepAt:!1,insertMode:"text",displayTemplate:'<div class="contentRow"><div class="contentRow-figure contentRow-figure--emoji">{{{icon}}}</div><div class="contentRow-main contentRow-main--close">{{{text}}}<div class="contentRow-minor contentRow-minor--smaller">{{{desc}}}</div></div></div>',beforeInsert:function(b){XF.logRecentEmojiUsage(b);return b}};this.handler=new XF.AutoCompleter(this.$target,a)}}});XF.AutoSubmit=XF.Element.newHandler({options:{hide:!0,progress:!0},init:function(){this.$target.submit();
this.options.hide&&this.$target.find(":submit").hide();this.options.progress&&e(q).trigger("xf:action-start")}});XF.ChangedFieldNotifier=XF.Element.newHandler({options:{hide:!0,progress:!0},init:function(){this.$target.find("input, select, textarea").each(function(){var a=e(this);a.data("orig-val",a.val());a.change(function(){a.toggleClass("is-changed",a.val()!=a.data("orig-val"))})})}});XF.CheckAll=XF.Element.newHandler({options:{container:"< form",match:"input:checkbox"},$container:null,updating:!1,
init:function(){this.$container=XF.findRelativeIf(this.options.container,this.$target);var a=this;this.$container.on("click",this.options.match,function(b){a.updating||e(b.target).is(a.$target)||a.updateState()});this.$target.closest("form").on("selectplus:redrawSelected",XF.proxy(this,"updateState"));this.updateState();this.$target.click(XF.proxy(this,"click"))},click:function(a){this.updating=!0;this.getCheckBoxes().prop("checked",a.target.checked).triggerHandler("click");this.updating=!1},updateState:function(){var a=
this.getCheckBoxes(),b=0<a.length;a.each(function(){if(!e(this).prop("checked"))return b=!1});this.$target.prop("checked",b)},getCheckBoxes:function(){return this.$container.find(this.options.match).not(this.$target).filter(":enabled")}});XF.SelectPlus=XF.Element.newHandler({options:{spCheckbox:null,spContainer:".js-spContainer",activeClass:"is-spActive",checkedClass:"is-spChecked",hoverClass:"is-spHovered",spMultiBarUrl:null,spDebug:!0},$containers:null,$checkboxes:null,$multiBar:null,isActive:!1,
isShifted:!1,lastSelected:null,lastEntered:null,init:function(){this.$checkboxes=this.$target.find(this.options.spCheckbox?this.options.spCheckbox:"input:checkbox");this.$containers=this.$checkboxes.closest(this.options.spContainer);this.debug("init; containers: %o, checkboxes: %o",this.$containers.length,this.$checkboxes.length);if(this.$containers.length!=this.$checkboxes.length)console.error("There must be an equal number of checkboxes and containers");else{this.$checkboxes.on("click",XF.proxy(this,
"checkboxClick")).closest("label").hover(XF.proxy(this,"checkboxEnter"),XF.proxy(this,"checkboxExit"));e(q).onPassive({keydown:XF.proxy(this,"keydown"),keyup:XF.proxy(this,"keyup")});var a=this;this.$containers.on("mousedown",function(b){if(a.isActive&&(b.ctrlKey||b.shiftKey)&&(b.preventDefault(),-1!==navigator.userAgent.indexOf("MSIE"))){this.onselectstart=function(){return!1};var c=this;p.setTimeout(function(){c.onselectstart=null},0)}});this.setActive();this.redrawSelected()}},checkboxClick:function(a){if(!this.ignoreClick){this.debug("checkboxClick; delegateTarget: %o",
a.delegateTarget);var b=this.$checkboxes.index(a.delegateTarget);a.delegateTarget.checked&&this.isShifted&&null!==this.lastSelected?(this.ignoreClick=!0,this.getShiftItems(this.$checkboxes,b).not(":checked").trigger("click"),this.ignoreClick=!1):this.lastSelected=a.delegateTarget.checked?b:null;this.setActive(a.delegateTarget.checked);this.redrawSelected()}},checkboxExit:function(a){this.lastEntered=null},checkboxEnter:function(a){this.isActive&&(this.lastEntered=this.$checkboxes.index(e(a.delegateTarget).find("input:checkbox").eq(0)),
this.isShifted&&this.redrawHover())},keydown:function(a){"Shift"==a.key&&XF.Keyboard.isShortcutAllowed(q.activeElement)&&(this.isShifted=!0,this.redrawHover())},keyup:function(a){"Shift"==a.key&&this.isShifted&&(this.isShifted=!1,this.redrawHover())},getShiftItems:function(a,b){return null!==b&&null!==this.lastSelected?(a=a.slice(Math.min(b,this.lastSelected),Math.max(b,this.lastSelected)+1),this.debug("shiftItems: %o",a),a):e()},setActive:function(a){var b=this.isActive;this.isActive=a?!0:0<this.$checkboxes.filter(":checked").length;
this.deployMultiBar();this.isActive!=b&&(this.debug("setActive: %s",this.isActive),this.$target.trigger(this.isActive?"selectplus:activate":"selectplus:deactivate",[this]).toggleClassTransitioned(this.options.activeClass,this.isActive),e(q.body).toggleClassTransitioned("is-spDocTriggered",this.isActive))},redrawSelected:function(){this.$target.trigger("selectplus:redraw-selected",[this]);var a=this;this.$checkboxes.each(function(b){var c=e(this),d=c.is(":checked");b=a.$containers.eq(b);b.toggleClassTransitioned(a.options.checkedClass,
d);c.data("check-state")!=d&&b.trigger("selectplus:toggle-item",[this,d]);c.data("check-state",d)})},redrawHover:function(){this.$target.trigger("selectplus:redraw-hover",[this]);if(null!==this.lastSelected&&null!==this.lastEntered&&this.isShifted){var a=this.getShiftItems(this.$containers,this.lastEntered);this.debug("redrawHover: lastSelected: %s, lastEntered: %s",this.lastSelected,this.lastEntered);this.$containers.not(a).toggleClass(this.options.hoverClass,!1);a.toggleClassTransitioned(this.options.hoverClass,
!0)}else this.$containers.toggleClassTransitioned(this.options.hoverClass,!1)},deployMultiBar:function(){if(this.isActive&&this.options.spMultiBarUrl){var a=this;XF.loadMultiBar(this.options.spMultiBarUrl,this.$checkboxes.serializeArray(),{cache:!1,init:function(b){a.MultiBar&&a.MultiBar.destroy();a.MultiBar=b}},{fastReplace:a.MultiBar?!0:!1})}else!this.active&&this.MultiBar&&this.MultiBar.hide()},debug:function(){this.options.spDebug&&(arguments[0]="SelectPlus:"+arguments[0],console.log.apply(null,
arguments))}});XF.DescLoader=XF.Element.newHandler({options:{descUrl:null},$container:null,changeTimer:null,xhr:null,init:function(){if(this.options.descUrl){var a=this.$target.parent().find(".js-descTarget");a.length?(this.$container=a,this.$target.on("change",XF.proxy(this,"change"))):console.error("Target element must have a .js-descTarget sibling")}else console.error("Element must have a data-desc-url value")},change:function(){this.changeTimer&&clearTimeout(this.changeTimer);this.xhr&&(this.xhr.abort(),
this.xhr=null);this.changeTimer=setTimeout(XF.proxy(this,"onTimer"),200)},onTimer:function(){var a=this.$target.val();a?this.xhr=XF.ajax("post",this.options.descUrl,{id:a},XF.proxy(this,"onLoad")):this.$container.xfFadeUp(XF.config.speed.fast)},onLoad:function(a){var b=this.$container;a.description?XF.setupHtmlInsert(a.description,function(c,d,g){b.xfFadeUp(XF.config.speed.fast,function(){b.html(c);b.xfFadeDown(XF.config.speed.normal)})}):b.xfFadeUp(XF.config.speed.fast);this.xhr=null}});XF.Disabler=
XF.Element.newHandler({options:{container:"< li | ul, ol, dl",controls:"input, select, textarea, button, .js-attachmentUpload",hide:!1,optional:!1,invert:!1,autofocus:!0},$container:null,init:function(){this.$container=XF.findRelativeIf(this.options.container,this.$target);this.$container.length||this.options.optional||console.error("Could not find the disabler control container");var a=this.$target,b=a.closest("form");if(b.length)b.on("reset",XF.proxy(this,"formReset"));if(a.is(":radio")){var c=
b,d=a.attr("name");b.length||(c=e(q.body));c.on("click",'input:radio[name="'+d+'"]',XF.proxy(this,"click"))}else if(a.is("option")){var g=this;a.closest("select").on("change",function(f){f=e(this);var h=XF.Element.getHandler(f.find("option:selected").first(),"disabler");!f.find("option:selected").first().is(g.$target)&&h&&h.getOption("container")===g.options.container||g.recalculate(!1)})}else a.click(XF.proxy(this,"click"));a.on("control:enabled control:disabled",XF.proxy(this,"recalculateAfter"));
this.$container.one("editor:init",XF.proxy(this,"recalculateAfter"));this.recalculate(!0)},click:function(a,b){this.recalculateAfter(!1,b&&b.triggered)},formReset:function(a){this.recalculateAfter(!1,!0)},recalculateAfter:function(a,b){var c=this;setTimeout(function(){c.recalculate(a,b)},0)},recalculate:function(a,b){var c=this.$container,d=this.$target,g=c.find(this.options.controls).not(d),f=a?0:XF.config.speed.fast,h=this,k=function(){!b&&h.options.autofocus&&c.find("input:not([type=hidden], [type=file]), textarea, select, button").not(d).first().autofocus()};
d.is(":enabled")&&(d.is(":checked")&&!this.options.invert||this.options.invert&&!d.is(":checked"))?(c.prop("disabled",!1).removeClass("is-disabled"),g.prop("disabled",!1).removeClass("is-disabled").each(function(m,l){m=e(l);m.is("select.is-readonly")&&m.prop("disabled",!0)}).trigger("control:enabled"),this.options.hide?(a?c.show():c.slideDown(f,function(){XF.layoutChange();k()}),c.trigger("toggle:shown"),XF.layoutChange()):a||k()):(this.options.hide&&(a?c.hide():c.slideUp(f,XF.layoutChange),c.trigger("toggle:hidden"),
XF.layoutChange()),c.prop("disabled",!0).addClass("is-disabled"),g.prop("disabled",!0).addClass("is-disabled").trigger("control:disabled").each(function(m,l){m=e(l);l=m.data("disabled");null!==l&&"undefined"!=typeof l&&m.val(l)}))}});XF.FieldAdder=XF.Element.newHandler({options:{incrementFormat:null,formatCaret:!0,removeClass:null,cloneInit:!1,remaining:-1},$clone:null,cloned:!1,created:!1,init:function(){this.$target.find("input:not(:checkbox), select, textarea").each(function(){var b=e(this);b.is("select")?
b.find("option").each(function(){e(this).prop("selected",this.defaultSelected)}):b.val(b.data("default-value")||this.defaultValue||"")});this.options.cloneInit&&(this.$clone=this.$target.clone());var a=this;this.$target.on("keypress change paste input",function(b){e(b.target).prop("readonly")||a.cloned||(a.cloned=!0,a.$clone||(a.$clone=a.$target.clone()),a.$target.off(b),a.create())})},create:function(){if(!this.created&&(this.created=!0,0!=this.options.remaining)){var a=this.options.incrementFormat,
b=this.options.formatCaret?"^":"";if(this.options.incrementFormat){var c=new RegExp(b+XF.regexQuote(a).replace("\\{counter\\}","(\\d+)"));this.$clone.find("input, select, textarea").each(function(){var d=e(this),g=d.attr("name");g=g.replace(c,function(f,h){return a.replace("{counter}",parseInt(h,10)+1)});d.attr("name",g)})}0<this.options.remaining&&this.$clone.attr("data-remaining",this.options.remaining-1);this.$clone.find("input, select, textarea").each(function(){var d=e(this);d.is("select")?d.find("option").each(function(){e(this).prop("selected",
this.defaultSelected)}):"string"===typeof this.defaultValue&&d.val(this.defaultValue)});this.$clone.insertAfter(this.$target);this.options.removeClass&&this.$target.removeClass(this.options.removeClass);XF.activate(this.$clone);XF.layoutChange()}}});XF.FormSubmitRow=XF.Element.newHandler({options:{container:".block-container",fixedChild:".formSubmitRow-main",stickyClass:"is-sticky",topOffset:100,minWindowHeight:281},$container:null,$fixedParent:null,$fixEl:null,fixElHeight:0,winHeight:0,containerTop:0,
containerBorderLeftWidth:0,topOffset:0,elBottom:0,state:"normal",windowTooSmall:!1,init:function(){if(XF.config.enableFormSubmitSticky){var a=this.$target,b=a.closest(this.options.container);b.length?(this.$container=b,this.topOffset=this.options.topOffset,this.$fixEl=a.find(this.options.fixedChild),e(p).on("scroll",XF.proxy(this,"onScroll")).on("resize",XF.proxy(this,"recalcAndUpdate")),b=XF.getFixedOffsetParent(a),b.is("html")||(this.$fixedParent=b,b.on("scroll",XF.proxy(this,"onScroll"))),e(q.body).on("xf:layout",
XF.proxy(this,"recalcAndUpdate")),a.height()||setTimeout(XF.proxy(this,"recalcAndUpdate"),250),this.recalcAndUpdate()):console.error("Cannot float submit row, no container")}},recalc:function(){var a=this.$target;this.winHeight=e(p).height();this.elBottom=this.getTargetTop()+a.height();this.fixElHeight=this.$fixEl.height();this.containerTop=XF.getFixedOffset(this.$container).top;this.containerBorderLeftWidth=parseInt(this.$container.css("border-left-width"),10)},recalcAndUpdate:function(){this.state=
"normal";this.resetTarget();this.recalc();this.update()},getTargetTop:function(){var a=this.$target.offset().top;return this.$fixedParent?a-this.$fixedParent.offset().top:a},getScrollTop:function(){return this.$fixedParent?this.$fixedParent.scrollTop():e(p).scrollTop()},update:function(){var a=XF.browser.ios||XF.browser.android?p.innerHeight:this.winHeight;if(a<this.options.minWindowHeight)"normal"!=this.state&&(this.resetTarget(),this.state="normal");else{var b=XF.NoticeWatcher.getBottomFixerNoticeHeight()||
0;0<this.$container.closest(".overlay").length&&(b=0);a=this.getScrollTop()+a-b;if(a>=this.elBottom)"normal"!=this.state&&(this.resetTarget(),this.state="normal");else{var c=this.containerTop+this.topOffset+this.fixElHeight;a<=c?c>=this.elBottom||"absolute"==this.state||(a=this.$container.offset(),"stuck"==this.state?(b=this.$fixEl.parent(),"static"==b.css("position")&&(b=b.offsetParent())):b=this.$fixEl.offsetParent(),b=b.offset(),this.$fixEl.css({position:"absolute",top:a.top-b.top+this.topOffset,
right:"auto",bottom:"auto",left:a.left-b.left+this.containerBorderLeftWidth,width:this.$container.width()}),this.setTargetSticky(!0),this.state="absolute"):"stuck"!=this.state&&(a=this.$container.offset(),this.$fixEl.css({position:"",top:"",right:"",bottom:b,left:a.left+this.containerBorderLeftWidth,width:this.$container.width()}),this.setTargetSticky(!0),this.state="stuck")}}},resetTarget:function(){this.$fixEl.css({position:"",top:"",right:"",bottom:"",left:"",width:""});this.setTargetSticky(!1)},
setTargetSticky:function(a){this.$target.toggleClass(this.options.stickyClass,a).css("height",this.$fixEl.height())},onScroll:function(){this.update()}});XF.GuestUsername=XF.Element.newHandler({init:function(){var a=this.$target;a.val(XF.LocalStorage.get("guestUsername"));a.on("keyup",XF.proxy(this,"change"))},change:function(){var a=this.$target;a.val().length?XF.LocalStorage.set("guestUsername",a.val(),!0):XF.LocalStorage.remove("guestUsername")}});XF.MinLength=XF.Element.newHandler({options:{minLength:0,
allowEmpty:!1,disableSubmit:!0,toggleTarget:null},met:null,$form:null,$toggleTarget:null,init:function(){var a=this;this.$form=this.$target.closest("form");this.$toggleTarget=this.options.toggleTarget?XF.findRelativeIf(this.options.toggleTarget,this.$target):e([]);this.$target.on("change keypress keydown paste",function(){setTimeout(XF.proxy(a,"checkLimits"),0)});this.options.allowEmpty||0!=this.options.minLength||(this.options.minLength=1);this.checkLimits()},checkLimits:function(){var a=e.trim(this.$target.val()).length,
b=this.options;a=a>=b.minLength||0==a&&b.allowEmpty;a!==this.met&&((this.met=a)?(b.disableSubmit&&this.$form.find(":submit").prop("disabled",!1).removeClass("is-disabled"),this.$toggleTarget.hide()):(b.disableSubmit&&this.$form.find(":submit").prop("disabled",!0).addClass("is-disabled"),this.$toggleTarget.show()))}});XF.TextAreaHandler=XF.Element.newHandler({options:{autoSize:!0,keySubmit:!0,singleLine:null},initialized:!1,init:function(){this.options.autoSize&&(this.$target[0].scrollHeight?this.setupAutoSize():
(this.$target.one("focus control:enabled control:disabled",XF.proxy(this,"setupDelayed")),this.$target.onWithin("toggle:shown overlay:shown tab:shown quick-edit:shown",XF.proxy(this,"setupDelayed"))),this.$target.on("autosize",XF.proxy(this,"update")));if(this.options.keySubmit||this.options.singleLine)this.$target.on("keydown",XF.proxy(this,"keySubmit"))},setupAutoSize:function(){this.initialized||(this.initialized=!0,autosize(this.$target),this.$target.on("autosize:resized",function(){XF.layoutChange()}))},
setupDelayed:function(){if(this.initialized)this.update();else{var a=this,b=function(){a.setupAutoSize();XF.layoutChange()};this.$target[0].scrollHeight?b():setTimeout(b,100)}},update:function(){this.initialized?autosize.update(this.$target[0]):this.setupDelayed()},keySubmit:function(a){if("Enter"==a.key&&(this.options.singleLine||this.options.keySubmit&&(XF.isMac()?a.metaKey:a.ctrlKey))){switch(String(this.options.singleLine).toLowerCase()){case "next":this.$target.focusNext();break;case "blur":this.$target.blur();
break;default:this.$target.closest("form").submit()}a.preventDefault();return!1}}});XF.TextEdit=XF.Event.newHandler({eventType:"focus",eventNameSpace:"XFTextEdit",options:{editUrl:null,escapeRevert:!0},processing:!1,init:function(){null===this.options.editUrl?console.warn("TextEdit must specify data-edit-url"):(this.options.escapeRevert&&(this.$target.data("original-text",this.$target.val()),this.$target.onPassive("keyup",XF.proxy(this,"keyEscape"))),this.$target.on("change",XF.proxy(this,"save")))},
focus:function(a){},save:function(a){if(!this.processing){this.processing=!0;var b=this;a={};a[this.$target.attr("name")]=this.$target.val();XF.ajax("POST",this.options.editUrl,a,XF.proxy(this,"success")).always(function(){setTimeout(function(){b.processing=!1},250)})}},success:function(a){a=a[this.$target.attr("name")];this.$target.val(a).data("original-text",a)},keyEscape:function(a){"Escape"==a.key&&this.$target.val(this.$target.data("original-text"))}});XF.PermissionMatrix=XF.Element.newHandler({options:{inputSelector:'input[type="radio"]',
parentSelector:"dl.formRow",classPrefix:"formRow--permissionType-",permissionType:"user"},values:["allow","unset","deny","content_allow","reset"],currentClass:null,init:function(){this.$parentRow=this.$target.closest(this.options.parentSelector);this.$target.find(this.options.inputSelector).on("click",XF.proxy(this,"update"));this.update()},update:function(){this.currentClass&&this.$parentRow.removeClass(this.currentClass);var a=this.$target.find(this.options.inputSelector+":checked").val();-1<e.inArray(a,
this.values)&&(this.currentClass=this.options.classPrefix+this.options.permissionType+"-"+a,this.$parentRow.addClass(this.currentClass))}});XF.MultiCheck=XF.Event.newHandler({eventNameSpace:"XFMultiCheck",options:{target:null,values:"allow,unset,deny"},$target:null,values:null,currentValue:null,init:function(){this.$target=e(this.options.target);this.values=this.options.values.split(",");var a=this.$target.filter(":checked").first().val();this.currentValue=0<e.inArray(a,this.values)?this.values[-1]:
this.values[0]},click:function(a){var b=this.values[e.inArray(this.currentValue,this.values)+1];void 0===b&&(b=this.values[0]);this.$target.each(function(){e(this).val()==b&&e(this).prop("checked",!0).trigger("click")});this.currentValue=b}});XF.NumberBox=XF.Element.newHandler({options:{textInput:".js-numberBoxTextInput",buttonSmaller:!1,step:null},$textInput:null,holdTimeout:null,holdInterval:null,init:function(){var a=this.$target,b=a.find(this.options.textInput);if(b.length){this.$textInput=b;
a.addClass("inputGroup--joined");var c=a.find(".js-up");a=a.find(".js-down");c.length||(c=this.createButton("up"));a.length||(a=this.createButton("down"));this.setupButton(c,b);this.setupButton(a,c);if(!this.supportsStepFunctions())b.on("keydown",XF.proxy(this,"stepFallback"))}else console.error("Cannot initialize, no text input.")},createButton:function(a){a=e("<button />").attr("type","button").attr("tabindex","-1").addClass("inputGroup-text").addClass("inputNumber-button").addClass("inputNumber-button--"+
a).addClass("js-"+a).attr("data-dir",a).attr("title",XF.phrases["number_button_"+a]||a).attr("aria-label",XF.phrases["number_button_"+a]||a);this.$textInput.prop("disabled")&&a.addClass("is-disabled").prop("disabled",!0);this.options.buttonSmaller&&a.addClass("inputNumber-button--smaller");return a},setupButton:function(a,b){a.on("focus",XF.proxy(this,"buttonFocus")).on("click",XF.proxy(this,"buttonClick")).on("mousedown touchstart",XF.proxy(this,"buttonMouseDown")).on("mouseleave mouseup touchend",
XF.proxy(this,"buttonMouseUp")).on("touchend",function(c){c.preventDefault();e(this).click()}).insertAfter(b)},buttonFocus:function(a){return!1},buttonClick:function(a){this.step(e(a.target).data("dir"))},step:function(a){var b=this.$textInput,c="step"+a.charAt(0).toUpperCase()+a.slice(1);if(!b.prop("readonly"))if(this.supportsStepFunctions())try{""===b.val()&&b.val(b.attr("min")||0),b[0][c](),b.trigger("change").trigger("input")}catch(d){}else this.stepFallback(a)},stepFallback:function(a){if(!this.$textInput.prop("readonly")){if("object"===
typeof a&&a.keyCode){var b=a;switch(b.keyCode){case 38:a="up";b.preventDefault();break;case 40:a="down";b.preventDefault();break;default:return}}b=this.$textInput;var c=b.val(),d="down"===a?-1:1;a=b.attr("min")||null;var g=b.attr("max")||null,f=this.options.step||b.attr("step")||1,h="any"==f;h&&(f=1);f=parseFloat(f);d=parseFloat(c)+f*d;if(Math.round(d)!==d){var k=0;c=c.split(".");h?k=c[1]?c[1].length:0:Math.floor(f)!==f&&(k=f.toString().split(".")[1].length||0);d=d.toFixed(k)}null!==a&&d<a&&(d=a);
null!==g&&d>g&&(d=g);isNaN(d)&&(d=0);b.val(d);b.trigger("change").trigger("input")}},buttonMouseDown:function(a){this.buttonMouseUp(a);this.holdTimeout=setTimeout(XF.proxy(function(){this.holdInterval=setInterval(XF.proxy(function(){this.step(e(a.target).data("dir"))},this),75)},this),500)},buttonMouseUp:function(a){clearTimeout(this.holdTimeout);clearInterval(this.holdInterval)},supportsStepFunctions:function(){var a=this.$textInput;return XF.browser.msie||XF.browser.edge||a.prop("disabled")||a.prop("readonly")||
this.$target.data("step")||"any"===a.attr("step")?!1:"function"===typeof a[0].stepUp&&"function"===typeof a[0].stepDown}});XF.PasswordHideShow=XF.Element.newHandler({options:{showText:null,hideText:null},$password:null,$checkbox:null,$label:null,init:function(){this.$password=this.$target.find(".js-password");var a=this.$target.find(".js-hideShowContainer");this.$checkbox=a.find('input[type="checkbox"]');this.$label=a.find(".iconic-label");this.$checkbox.on("change",XF.proxy(this,"toggle"))},toggle:function(a){a=
this.$password;var b=this.$label;this.$checkbox.is(":checked")?(a.attr("type","text"),b.html(this.options.hideText)):(a.attr("type","password"),b.html(this.options.showText))}});XF.InputValidator=XF.Element.newHandler({options:{delay:500,onBlur:!0,trim:!0,validateEmpty:!1,validationUrl:null,errorTarget:null},timeout:null,$errorElement:null,validatedValue:null,init:function(){if(this.options.validationUrl){var a=this.options.errorTarget?XF.findRelativeIf(this.options.errorTarget,this.$target):this.$target.parent().find(".js-validationError");
if(a.length){this.$errorElement=a;if(this.options.delay)this.$target.on("input",XF.proxy(this,"onInput"));if(this.options.onBlur)this.$target.on("blur",XF.proxy(this,"performValidation"))}else console.error("Unable to locate error element.")}else console.error("Element must have a data-validation-url value")},onInput:function(a){this.timeout&&clearTimeout(this.timeout);this.timeout=setTimeout(XF.proxy(this,"performValidation"),this.options.delay)},performValidation:function(a){this.timeout&&(clearTimeout(this.timeout),
this.timeout=null);a=this.getEffectiveInputValue();if(a!==this.validatedValue)if(""!==a||this.options.validateEmpty)this.validatedValue=a,XF.ajax("POST",XF.canonicalizeUrl(this.options.validationUrl),{field:this.$target.attr("name"),content:a},XF.proxy(this,"handleResponse"));else{var b=this.$errorElement;b.removeClassTransitioned("is-active",function(){b.empty()})}},getEffectiveInputValue:function(){var a=this.$target.val();this.options.trim&&(a=e.trim(a));return a},handleResponse:function(a){if(!a.validatedValue||
a.validatedValue===this.getEffectiveInputValue()){var b=a.inputErrors;if(!a.inputValid&&b){if("object"==typeof b)if(1===b.length)var c=b[0];else c="<ul>",e.each(b,function(g,f){c+="<li>"+f+"</li>"}),c+="</ul>";else c=b;this.$errorElement.html(c).addClassTransitioned("is-active")}else{a.inputValid||console.error("Data is not valid, but no errors");var d=this.$errorElement;d.removeClassTransitioned("is-active",function(){d.empty()})}}}});XF.CheckboxSelectDisabler=XF.Element.newHandler({options:{select:null},
$selects:null,$checkboxes:null,init:function(){(this.$selects=XF.findRelativeIf(this.options.select,this.$target))&&this.$selects.length?(this.$checkboxes=this.$target.find(":checkbox").on("click",XF.proxy(this,"update")),this.update()):console.warn("No select element(s) found using %s",this.options.select)},update:function(){var a=this.$selects,b=[];this.$checkboxes.each(function(){var c=this.checked;a.find('option[value="'+this.value+'"]').each(function(){var d=e(this),g=d.is(":selected"),f=d.prop("disabled"),
h=d.closest("select"),k=!1;f===c&&(d.prop("disabled",!c),k=!0);!c&&g&&(d.prop("selected",!1),h.attr("multiple")||h.find("option:enabled").first().prop("selected",!0),k=!0);k&&b.push(h[0])})});b.length&&e(e.uniqueSort(b)).trigger("select:refresh")}});XF.focusNext=function(a){!a instanceof e&&(a=e(a));var b=e("a, button, :input, [tabindex]");a=b.index(a)+1;b.eq(a>=b.length?0:a).focus()};XF.AssetUpload=XF.Element.newHandler({options:{asset:""},$path:null,$upload:null,init:function(){this.$path=this.$target.find(".js-assetPath");
this.$upload=this.$target.find(".js-uploadAsset");this.$upload.on("change",XF.proxy(this,"changeFile"))},changeFile:function(a){if(""!=e(a.target).val()){var b=new FormData;b.append("upload",a.target.files[0]);b.append("type",this.options.asset);XF.ajax("post",XF.canonicalizeUrl("admin.php?assets/upload"),b,XF.proxy(this,"ajaxResponse"))}},ajaxResponse:function(a){a.errors||a.exception||(a.path&&this.$path.val(a.path),this.$upload.val(""))}});XF.Event.register("click","submit","XF.SubmitClick");XF.Event.register("click",
"multi-check","XF.MultiCheck");XF.Event.register("focus","text-edit","XF.TextEdit");XF.Element.register("ajax-submit","XF.AjaxSubmit");XF.Element.register("auto-complete","XF.AutoComplete");XF.Element.register("user-mentioner","XF.UserMentioner");XF.Element.register("emoji-completer","XF.EmojiCompleter");XF.Element.register("auto-submit","XF.AutoSubmit");XF.Element.register("changed-field-notifier","XF.ChangedFieldNotifier");XF.Element.register("check-all","XF.CheckAll");XF.Element.register("select-plus",
"XF.SelectPlus");XF.Element.register("desc-loader","XF.DescLoader");XF.Element.register("disabler","XF.Disabler");XF.Element.register("field-adder","XF.FieldAdder");XF.Element.register("form-submit-row","XF.FormSubmitRow");XF.Element.register("guest-username","XF.GuestUsername");XF.Element.register("min-length","XF.MinLength");XF.Element.register("textarea-handler","XF.TextAreaHandler");XF.Element.register("permission-matrix","XF.PermissionMatrix");XF.Element.register("number-box","XF.NumberBox");
XF.Element.register("checkbox-select-disabler","XF.CheckboxSelectDisabler");XF.Element.register("password-hide-show","XF.PasswordHideShow");XF.Element.register("change-submit","XF.ChangeSubmit");XF.Element.register("input-validator","XF.InputValidator");XF.Element.register("asset-upload","XF.AssetUpload")}(jQuery,window,document);