ips.templates.set('core.general.loading',"      {{text}}");ips.templates.set('core.general.ajax',"
{{#lang}}loading{{/lang}}...
");ips.templates.set('core.general.flashMsg',"
×
");ips.templates.set('core.hovercard.loading'," ");ips.templates.set('core.posts.spoiler'," {{#lang}}spoilerClickToReveal{{/lang}}");ips.templates.set('core.posts.spoilerOpen'," {{#lang}}spoilerClickToHide{{/lang}}");ips.templates.set('core.posts.multiQuoteOff'," ");ips.templates.set('core.posts.multiQuoteOn'," ");ips.templates.set('core.posts.multiQuoter',"
  
");ips.templates.set('core.menus.menuItem',"
  • {{title}}
  • ");ips.templates.set('core.menus.menuSep',"

  • ");ips.templates.set('core.posts.quotedSpoiler',"

    {{#lang}}quotedSpoiler{{/lang}}

    ");ips.templates.set('core.postNotify.single'," ");ips.templates.set('core.postNotify.multiple'," ");ips.templates.set('core.postNotify.multipleSpillOver'," ");ips.templates.set('core.notification.flashSingle'," ");ips.templates.set('core.notification.flashMultiple'," ");ips.templates.set('core.alert.box'," ");ips.templates.set('core.alert.subText',"
    {{text}}
    ");ips.templates.set('core.alert.subTextHtml',"
    {{{text}}}
    ");ips.templates.set('core.alert.icon'," ");ips.templates.set('core.alert.button',"
  • ");ips.templates.set('core.alert.prompt',"



    ");ips.templates.set('core.lightbox.meta',"{{title}}");ips.templates.set('core.lightbox.toolsMenu'," ");ips.templates.set('core.dialog.main'," ") ips.templates.set('core.tooltip'," ");ips.templates.set('core.search.loadingPanel',"
     
    ");ips.templates.set('core.editor.panelWrapper',"
    {{content}}
    ");ips.templates.set('core.editor.pixabayThumb',`
    `);ips.templates.set('core.editor.emoticonSection',"
    {{{content}}}
    ");ips.templates.set('core.editor.emoticonCategory',"
    {{title}}
    {{{emoticons}}}
    ");ips.templates.set('core.editor.emoticonSearch',"
    {{{emoticons}}}
    ");ips.templates.set('core.editor.emoticonRow',"
    {{{emoticons}}}
    ");ips.templates.set('core.editor.emoticonItem',"
    {{{img}}}
    ");ips.templates.set('core.editor.emoji',"
    {{{display}}}
    ");ips.templates.set('core.editor.emojiNotNative',"
    {{{img}}}
    ");ips.templates.set('core.editor.emoticonBlank',"
     
    ");ips.templates.set('core.editor.emoticonNoResults',"
    {{#lang}}no_results{{/lang}}
    ");ips.templates.set('core.editor.emojiResult',"
  • {{{emoji}}} {{short_code}}
  • ");ips.templates.set('core.editor.quote',"
    {{{citation}}}
    {{{contents}}}
    ");ips.templates.set('core.editor.legacyQuoteUpcast',"
    {{citation}}
    {{{contents}}}
    ");ips.templates.set('core.editor.citation',"
      {{#contenturl}} {{/contenturl}} {{{citation}}}
    ");ips.templates.set('core.editor.citationLink'," {{username}}");ips.templates.set('core.editor.spoiler',"
    {{#lang}}editorSpoiler{{/lang}}
    ");ips.templates.set('core.editor.legacySpoilerUpcast',"
    {{#lang}}editorSpoiler{{/lang}}
    {{{contents}}}
    ");ips.templates.set('core.editor.spoilerHeader'," {{#lang}}spoilerClickToReveal{{/lang}} ");ips.templates.set('core.editor.initLoading',"
     
    ");ips.templates.set('core.editor.previewLoading',"
     
    ");ips.templates.set('core.attachments.metaInfo'," {{size}} · {{downloads}}");ips.templates.set('core.attachments.attachmentPreview'," {{title}}{{#lang}}attachmentPending{{/lang}}");ips.templates.set('core.attachments.fileItemWrapper',"
    {{{content}}}
    ");ips.templates.set('core.attachments.fileItem',"
    {{#thumb}} {{{thumb}}} {{/thumb}}

    {{title}}

    {{size}} {{#statusText}}· {{statusText}}{{/statusText}}

    {{#status}}{{/status}}
    {{#supportsDelete}}
    ×
    {{/supportsDelete}} {{^supportsDelete}}
    ×
    {{/supportsDelete}}
    ");ips.templates.set('core.attachments.imageItem',"
    {{#thumb}} {{{thumb}}} {{/thumb}}

    {{title}}

    {{size}} {{#statusText}}· {{statusText}}{{/statusText}}

    {{#status}}{{/status}}
    {{#supportsDelete}}
    ×
    {{/supportsDelete}} {{^supportsDelete}}
    ×
    {{/supportsDelete}}
    ");ips.templates.set('core.attachments.videoItem',"
    {{#thumb}} {{/thumb}}

    {{title}}

    {{size}} {{#statusText}}· {{statusText}}{{/statusText}}

    {{#status}}{{/status}}
    {{#supportsDelete}}
    ×
    {{/supportsDelete}} {{^supportsDelete}}
    ×
    {{/supportsDelete}}
    ");ips.templates.set('core.attachments.audioItem',"
    {{#thumb}} {{/thumb}}

    {{title}}

    {{size}} {{#statusText}}· {{statusText}}{{/statusText}}

    {{#status}}{{/status}}
    {{#supportsDelete}}
    ×
    {{/supportsDelete}} {{^supportsDelete}}
    ×
    {{/supportsDelete}}
    ");ips.templates.set('core.attachments.imageItemWrapper',"
    {{{content}}}
    ");ips.templates.set('core.forms.validationWrapper'," ");ips.templates.set('core.forms.validationItem',"
  • {{message}}
  • ");ips.templates.set('core.forms.advicePopup',"

    {{#lang}}password_advice_title{{/lang}}

    {{#min}} {{min}} {{/min}} {{{text}}}

    ");ips.templates.set('core.forms.validateOk'," ");ips.templates.set('core.forms.validateFail'," ");ips.templates.set('core.forms.validateFailText',"

    {{message}}

    ");ips.templates.set('core.truncate.expand'," ");ips.templates.set('core.selectTree.token',"
  • {{title}}
  • ");ips.templates.set('core.accessibility.border',"
    ");ips.templates.set('core.accessibility.arrow',"
    ");ips.templates.set('core.infScroll.loading',"
  • {{#lang}}loading{{/lang}}...
  • ");ips.templates.set('core.infScroll.pageBreak',"
  • {{#lang}}page{{/lang}} {{page}}
  • ");ips.templates.set('core.pageAction.actionMenuItem',"
    • {{{menucontent}}}
  • ");ips.templates.set('core.pageAction.actionItem',"
  • ");ips.templates.set('core.pageAction.wrapper',"
    ");ips.templates.set('core.carousel.bulletWrapper'," ");ips.templates.set('core.carousel.bulletItem',"
  • ");ips.templates.set('core.rating.wrapper',"
    {{status}}
    ") ips.templates.set('core.rating.star',"
  • ");ips.templates.set('core.rating.halfStar',"
  • ");ips.templates.set('core.rating.loading'," ");ips.templates.set('core.sidebar.managerWrapper',`\ `);ips.templates.set('core.sidebar.blockManage',"

    {{title}}

    ");ips.templates.set('core.sidebar.blockManageNoConfig',"

    {{title}}

    ");ips.templates.set('core.sidebar.blockIsEmpty',"
    {{text}}
    ");ips.templates.set('core.follow.loading',"
    ");ips.templates.set('core.statuses.loadingComments',"    {{#lang}}loadingComments{{/lang}}");ips.templates.set('core.forms.stack',"
  • ×
    {{{field}}}
  • ");ips.templates.set('core.pollEditor.question',"
    • {{#lang}}choicesTitle{{/lang}}
      {{#showCounts}} {{#lang}}votesTitle{{/lang}} {{/showCounts}}
    • {{{choices}}}
    {{#lang}}addChoice{{/lang}}
    {{#removeQuestion}}{{/removeQuestion}}
    ");ips.templates.set('core.pollEditor.choice',"
  • {{choiceID}}
  • ");ips.templates.set('core.coverPhoto.controls'," ");ips.templates.set('core.editor.preferences',"
    {{#lang}}papt_warning{{/lang}}

    ");ips.templates.set('core.pagination'," ");ips.templates.set('core.selection.quote',"
    {{#lang}}quote_selected_text{{/lang}}
    ");ips.templates.set('core.contentItem.resultItem',"
  • {{{html}}}
  • ");ips.templates.set('core.contentItem.field',"
    ");ips.templates.set('core.contentItem.resultWrapper'," ");ips.templates.set('core.contentItem.item',"
  • × {{{html}}}
  • ");ips.templates.set('promote.imageUpload',"
    {{#thumbnail}}{{/thumbnail}}
    ");ips.templates.set('table.row.loading',`
  • `);ips.templates.set('licenseRenewal.wrapper',"

    {{#lang}}licenseRenewalTitle{{/lang}}

    {{#lang}}licenseRenewalText{{/lang}}

    ");ips.templates.set('core.browserNotification.prompt',"
    ×

    {{#lang}}notificationsCallout{{/lang}}

    {{#lang}}notificationsDefaultBlurb{{/lang}}

    {{#lang}}notificationsAllowPrompt{{/lang}}

    ");ips.templates.set('core.browserNotification.missingSubscription',"
    ×

    {{#lang}}notificationsCalloutPush{{/lang}}

    {{#lang}}notificationsDefaultBlurb{{/lang}}

    {{#lang}}notificationsNoThanks{{/lang}}

    {{#lang}}notificationsAllowPrompt{{/lang}}

    ");ips.templates.set('core.notifications.pending'," {{#lang}}notificationsEnabling{{/lang}}");ips.templates.set('core.notifications.success'," {{#lang}}notificationsEnabled{{/lang}}");ips.templates.set('core.notifications.fail'," {{#lang}}notificationsFailed{{/lang}}");ips.templates.set('core.notifications.notSupported'," {{#lang}}notificationsNotSupported{{/lang}}");ips.templates.set('core.notifications.checking'," {{#lang}}notificationsChecking{{/lang}}");ips.templates.set('system.warningpenalty.nomodify'," ");ips.templates.set('core.edittags.default',"
     {{#lang}}loading{{/lang}}
    ");ips.templates.set('core.onlineUser.linked',"
  • {{{formattedName}}}
  • ");ips.templates.set('core.iconpicker.wrap',`
    {{#allowedTypes}} {{/allowedTypes}}
    {{#allowedTypes}} {{/allowedTypes}}
    `) ips.templates.set('core.iconpicker.category',`\

    {{name}} ({{icons.length}})

    {{#icons}} {{/icons}}
    \ `) ips.templates.set('core.iconpicker.selectedicon',`\
  • {{{raw}}}
    {{title}}
  • \ `) ips.templates.set('tableOfContents.linkOptions',`\ {{#canEdit}} {{/canEdit}} `);ips.templates.set('ips.ui.controls.cannot_load',`
    {{message}}
    `,{classList:'ipsMessage ipsMessage--info',get message(){return ips.getString('ips.ui.controls.cannot_load')}}); ips.templates.set('core.autocomplete.field',"
    ");ips.templates.set('core.autocomplete.addToken'," {{text}} ");ips.templates.set('core.autocomplete.resultWrapper'," ");ips.templates.set('core.autocomplete.searchTypeAhead'," ");ips.templates.set('core.autocomplete.resultItem',"
  • {{{html}}}
  • ");ips.templates.set('core.autocomplete.tagsResultItem',"
  • {{{html}}}
    {{#recommended}} {{#lang}}tag_recommended{{/lang}} {{/recommended}}
  • ");ips.templates.set('core.autocomplete.token',"
  • {{{title}}} ×
  • ");ips.templates.set('core.autocomplete.assignmentAddToken'," {{text}} ");ips.templates.set('core.autocomplete.assignmentResultItem',"
  • {{#team}}
    {{{name}}}
    {{#lang}}assignment_team{{/lang}}
    {{/team}} {{^team}}
    {{{name}}}
    {{{extra}}}
    {{/team}}
  • ");ips.templates.set('core.autocomplete.memberItem',"
  • {{{name}}}
    {{{extra}}}
  • ");ips.templates.set('core.autocomplete.optional'," {{langString}}...");; ;(function($,_,undefined){"use strict";ips.createModule('ips.model',function(){var _models={};var register=function(id,definition){var Base=getBaseModel();$.extend(Base.prototype,definition);var obj=new Base(id);if(_.isFunction(obj.initialize)){obj.initialize.call(obj);}},getBaseModel=function(){var baseModel=function(id){this.modelID=id;};baseModel.method('trigger',function(elem,ev,data){var args=ips.utils.argsToArray(arguments);elem=(!_.isElement(elem))?$(document):$(args.shift());ev=args[0];data=args[1]||{};if(!data.stack){data.stack=[];} data.stack.push('models.'+this.modelID);elem.trigger(ev,data);});baseModel.method('on',function(elem,ev,delegate,fn){var args=ips.utils.argsToArray(arguments);elem=(!_.isElement(elem)&&elem!=document)?$(document):$(args.shift());ev=args[0];fn=(args.length==3)?args[2]:args[1];delegate=(args.length==3)?args[1]:undefined;if(!_.isFunction(fn)){Debug.warn("Callback function for "+ev+" doesn't exist in "+this.modelID);return;} fn=_.bind(fn,this);if(delegate){elem.on(ev,delegate,fn);}else{elem.on(ev,fn);}});baseModel.method('getData',function(data,eventData){var self=this;var ajaxObj=ips.getAjax();if(!data.url.startsWith('http')){data.url=ips.getSetting('baseURL')+'index.php?'+data.url;} if(data.events&&_.isString(data.events)){data.events={loading:data.events+'Loading',done:data.events+'Done',fail:data.events+'Error',always:data.events+'Finished'};} if(data.namespace&&!data.namespace.startsWith('.')){data.namespace='.'+data.namespace;} if(data.events.loading){this.trigger(data.events.loading+(data.namespace||''),eventData||{});} ajaxObj(data.url,{data:data.data||{},dataType:data.dataType||'html',type:data.type||'get'}).done(function(response){if(data.events.done){if(data.dataType=='json'){var doneData=_.extend(eventData||{},response);}else{var doneData=_.extend(eventData||{},{response:response});} self.trigger(data.events.done+(data.namespace||''),doneData);}}).fail(function(jqXHR){if(data.events.fail){try{if(data.dataType=='json'){var doneData=_.extend(eventData||{},$.parseJSON(jqXHR.responseText));}else{var doneData=_.extend(eventData||{},{response:jqXHR.responseText});}}catch(err){} self.trigger(data.events.fail+(data.namespace||''),doneData)}}).always(function(){if(data.events.always){self.trigger(data.events.always+(data.namespace||''));}});});return baseModel;};return{register:register};});}(jQuery,_));; ;(function($,_,undefined){"use strict";ips.createModule('ips.loader',function(){var _loadedScripts=[],_loadingScripts=[];const LOADER_STATES={};var init=function(){var scripts=$('script[src][data-ips]');scripts.each(function(){var scriptInfo=ips.utils.url.getURIObject($(this).attr('src'));if(scriptInfo.queryKey.src){var paths=_getPathScripts(scriptInfo.queryKey.src);_.each(paths,function(value){_loadedScripts.push(value);});}else if(scriptInfo.path.indexOf('interface/')!==-1){var interfaces=_getInterfaceScript(scriptInfo.path);if(interfaces){_loadedScripts.push(interfaces);}}else{var other=_getOtherScript(scriptInfo.source);if(other){_loadedScripts.push(other);}}});},_getOtherScript=function(path){path=path.replace(ips.getSetting('baseURL'),'');if(path.startsWith('/')){path=path.substring(1);} if(path.startsWith('applications/')){path=path.replace(/^applications\//i,'')} return path;},_getInterfaceScript=function(path){var pieces=_.compact(path.split('/').reverse());var path=[];for(var i=0;inew Promise((resolve,reject)=>{LOADER_STATES[path]=LOADER_STATES[path]||{state:'unloaded',resolvers:new Set(),rejectors:new Set(),err:undefined,} const{state,resolvers,rejectors,err}=LOADER_STATES[path];if(state==='loaded'){return resolve();} if(state==='error'){return reject(err);} resolvers.add(resolve);rejectors.add(reject);if(state==='unloaded'){LOADER_STATES[path].state='loading';const script=document.createElement('script');const url=new URL(path);url.updateSearchParams({param:'antiCache',value:ips.getSetting('jsAntiCache')});script.src=url;script.addEventListener('load',()=>{Debug.log(`Loaded static script ${path}`);LOADER_STATES[path].state='loaded';resolvers.forEach(resolver=>resolver());resolvers.clear();rejectors.clear();},{once:true});script.addEventListener('error',()=>{LOADER_STATES[path].state='error';LOADER_STATES[path].err=new Error(`Failed to load ${path}`);Debug.error(LOADER_STATES[path].err);rejectors.forEach(rejector=>rejector(LOADER_STATES[path].err));rejectors.clear();resolvers.clear();},{once:true});document.body.appendChild(script);}})));}}});}(jQuery,_));; ;(function($,_,undefined){"use strict";ips.createModule('ips.controller',function(){let _controllers={},_autoMixins={},_manualMixins={},_mixins={},_beingLoaded=[],_queue={},_prototypes={},instanceID=1,_controllerCaseMap={'core.front.core.autosizeiframe':'core.front.core.autoSizeIframe'};function register(id,definition){_controllers[id]=definition;_checkQueue(id);} function isRegistered(id){return _controllers[id]!==undefined;} function init(){$(document).on('contentChange',function(e,newNode){initializeControllers(newNode);});initializeControllers();} function mixin(mixinName,controller,auto,mixinFunc){if(_.isFunction(auto)){mixinFunc=auto;auto=false;} var obj=(auto)?_autoMixins:_manualMixins;if(_.isUndefined(obj[controller])){obj[controller]={};} obj[controller][mixinName]=mixinFunc;} function initializeControllers(node){var controllers=_findControllers(node);var needsLoading={};for(var controller in controllers){if(isRegistered(controller)){for(var i=0;iinst!==obj));return;}} $(elem).removeData('_controller'+controllerID);$(document).trigger('controllerReady',{controllerID:obj.controllerID,controllerType:obj.controllerType,controllerElem:elem});} function _findSubControllers(controller,node){var results=[];node=(node&&(_.isElement(node)||node.jquery))?node:document;if(controller.indexOf('*')===-1){results=$(node).find('[data-controller*="'+controller+'"]');}else{var pieces=controller.split('.');if(pieces[0]==='*'){pieces.shift();results=$(node).find('[data-controller$="'+pieces.join('.')+'"]');}else if(pieces[pieces.length-1]==='*'){pieces.pop();results=$(node).find('[data-controller^="'+pieces.join('.')+'"]');}} return results;} class BaseController{scope;elem;constructor(scope,type){this.controllerType=type;this.controllerID=getInstanceID();this.scope=$(scope);this.elem=this.scope.get(0);this._eventListeners=[];const adviceFuncs={before:function(baseFn,newFn){return function(){newFn.apply(this,arguments);return baseFn.apply(this,arguments);};},after:function(baseFn,newFn){return function(){const toReturn=baseFn.apply(this,arguments);newFn.apply(this,arguments);return toReturn;}},around:function(baseFn,newFn){return function(...args){args.unshift(baseFn.bind(this));return newFn.apply(this,args);}}};for(const[type,generator]of Object.entries(adviceFuncs)){this[type]=(base,fn)=>{if(!(this[base]instanceof Function)){Debug.log("Method '"+base+'" is not present in controller '+this.controllerID);} this[base]=generator(this[base],fn)}}} _destroy(){Debug.log('Destroyed instance '+this.controllerID+' of '+this.controllerType);if(this._eventListeners.length){for(var i=0;i, from the UI widget system because the widget ID ${widgetID} is already in use.`));}else{widgets[widgetID]=COMPONENT_LAZY_LOAD_SYMBOL;if(isElementConstructor(handler)){if(customElements.get(name)){Debug.warn(new RangeError(`Cannot define the web component <${name}/> because it is already registered.`));return;} customElements.define(name,handler);widgets[widgetID]=handler;}else if(Array.isArray(handler)){widgets[widgetID]=COMPONENT_LAZY_LOAD_ON_EVENT_SYMBOL;const listener=e=>{if(e.target instanceof HTMLElement&&e.target.tagName?.toLowerCase()===name){handler.forEach(eventType=>document.removeEventListener(eventType,listener,{capture:true}));setTimeout(()=>loadWebComponent(name));}} handler.forEach(eventType=>document.addEventListener(eventType,listener,{capture:true}));}else if(handler){setTimeout(()=>loadWebComponent(name))}else if(handler===false){document.addEventListener(`ips:loadComponent#${widgetID}`,()=>{if(widgets[widgetID]===COMPONENT_LAZY_LOAD_SYMBOL){setTimeout(()=>loadWebComponent(name));}},{once:true,capture:true});} customElements.whenDefined(name).then(()=>{widgets[widgetID]=customElements.get(name);document.querySelectorAll(name).forEach(el=>customElements.upgrade(el));Debug.log(`Registered the web component <${name}/>`)});} return;} widgetOptions=_.defaults(widgetOptions||{},{'lazyLoad':false,'lazyEvents':'','makejQueryPlugin':true});widgets[widgetID]={handler:handler,callback:fnCallback,acceptedOptions:acceptedOptions||[],widgetOptions:widgetOptions||{}};if(widgetOptions.makejQueryPlugin!==false){buildjQueryPlugin(widgetID,handler,acceptedOptions,widgetOptions,fnCallback);}},getAcceptedOptions=function(widgetID){return widgets[widgetID]['acceptedOptions']||[];},buildjQueryPlugin=function(widgetID,handler,acceptedOptions,widgetOptions){const jQueryKey=widgetOptions.jQueryKey||'ips'+widgetID.charAt(0).toUpperCase()+widgetID.slice(1),dataID='ips'+widgetID;if($.fn[jQueryKey]){Debug.warn("jQuery plugin '"+jQueryKey+"' already exists.");return;} $.fn[jQueryKey]=function(providedOptions){this.each(function(){let elem=$(this);elem.attr('data-'+dataID,'');for(let[key,value]of Object.entries(providedOptions)){if(acceptedOptions.includes(key)){elem.attr(`data-${dataID}-${key}`,value);}} if(widgetOptions.lazyLoad===false){_callWidget(widgetID,elem,_getWidgetOptions(widgetID,elem));}});};},_initializeWidgets=function(context){const immediateWidgets=[],lazyWidgets=[],componentWidgets=[];context=context instanceof Element?context:document;_.each(widgets,function(item,key){if(item===COMPONENT_LAZY_LOAD_ON_EVENT_SYMBOL||isElementConstructor(item)){return;} if(item===COMPONENT_LAZY_LOAD_SYMBOL){componentWidgets.push(key)}else if(_.isUndefined(item.widgetOptions.lazyLoad)||item.widgetOptions.lazyLoad===false){immediateWidgets.push(key);}else{lazyWidgets.push(key);}});_doImmediateWidgets(immediateWidgets,context);if(componentWidgets.length){_doComponentWidgets(componentWidgets,context)} if(!doneInitialInit&&context===document){_doLazyWidgets(lazyWidgets,context);doneInitialInit=true;}},destructAllWidgets=function(context){const widgetIDs=[...Object.entries(widgets)].filter(([key,widget])=>!(widget===COMPONENT_LAZY_LOAD_SYMBOL||isElementConstructor(widget))).map(([key])=>key);var selector=_.map(widgetIDs,function(item){return"[data-ips"+item+"]";});var foundWidgets=$(context).find(selector.join(','));foundWidgets.each(function(idx,elem){elem=$(elem);for(var i=0;i"[data-ips"+item+"]");const foundWidgets=$(context).find(selector.join(','));for(let elem of foundWidgets){elem=$(elem);for(var i=0;i{const widget=widgets[widgetID];if(widget!==COMPONENT_LAZY_LOAD_SYMBOL){return;} try{const name=webComponentName(widgetID);if(context.querySelector(name)){loadWebComponent(name);}}catch(e){}})},_callWidget=function(widgetID,elem,options,e){if(widgets[widgetID].callback instanceof Function){widgets[widgetID].callback.call(widgets[widgetID].handler,elem,options,e);}else if(widgets[widgetID].handler.respond instanceof Function){widgets[widgetID].handler.respond.call(widgets[widgetID].handler,elem,options,e);}else{Debug.error("No callback method specified for "+widgetID);}},_getWidgetOptions=function(widgetID,elem){var options={},optionKeys=widgets[widgetID].acceptedOptions;elem=$(elem);try{if(elem.attr('data-ips'+widgetID+'-options')){var optionsObj=$.parseJSON(elem.attr('data-ips'+widgetID+'-options'));if(_.isObject(optionsObj)){return optionsObj;}}}catch(err){Debug.warn("Invalid options object passed in for a "+widgetID+" widget. Must be valid JSON.");} if(optionKeys.length){for(var i=0;i').addClass('ipsModal').hide().appendTo($('body')).identify();},init=function(){$(document).on('contentChange',function(e,newContent){if(newContent instanceof jQuery){newContent.each(function(){if(Debug.isEnabled){Debug.info("contentChange event, reinitializing widgets in "+$(this).identify().attr('id'));} _initializeWidgets(this);});}else{if(Debug.isEnabled){Debug.info("contentChange event, reinitializing widgets in "+$(newContent).identify().attr('id'));} _initializeWidgets(newContent);}});_initializeWidgets(document);};if(document?.body?.style instanceof CSSStyleDeclaration){zIndex();}else{window.addEventListener('load',()=>{zIndex();})} class BaseWidget{static _defaults={};static instances=new WeakMap();constructor(elem,options){this.options=options;this.elem=$(elem);} _element=undefined;get element(){if(this._element===undefined){this._element=this.elem.get(0);} return this._element;} set element(val){Debug.warn(`The field "element" is not settable`);} destruct(){BaseWidget.instances.delete(this.element);} reset(){} on(...args){const cb=args.pop();if(!(cb instanceof Function)){return;} let base=this.elem;if(typeof args[0]!=='string'){base=$(args.shift());} base.on(...args,(...ev)=>cb.call(this,...ev))} static fixOptions(options){return options} static initializeOnElem(elem,options){elem=elem instanceof Element?elem:$(elem).get(0) if(!(elem instanceof Element)){return;} if(!this.getInstance(elem)){options=this.fixOptions({...this._defaults,...options});const instance=new this(elem,options);this.instances.set(elem,instance);}} static getInstance(elem){elem=elem instanceof Element?elem:$(elem).get(0) if(elem&&this.instances.has(elem)){return this.instances.get(elem);} return undefined;} static buildModuleAndRegisterWidget(name,options=[],widgetOptions=undefined,fnCallback=undefined){if(name){ips.ui.registerWidget(name,ips.ui[name],options,widgetOptions,fnCallback);} return{respond:(elem,options)=>this.initializeOnElem(elem,options),destruct:(elem)=>this.getInstance(elem)?.destruct(),getObj:elem=>this.getInstance(elem),reset:elem=>this.getInstance(elem)?.reset(),finalClass:this}}} function isElementConstructor(cls){if(typeof cls!=='function'||!cls.prototype){return false} return HTMLElement.prototype.isPrototypeOf(cls.prototype);} async function loadWebComponent(name){if(!LOADING_COMPONENTS.has(name)){const widgetID=webComponentWidgetID(name);LOADING_COMPONENTS.add(name);let urlPath;if(ips.getSetting('useCompiledFiles')===false){urlPath="/applications/core/interface/js/webcomponents.php?component="+widgetID;}else{urlPath='/static/js/global/root_component_'+widgetID+".js";} const url=window.ips.getSetting('baseURL').replace(/\/+$/,'')+urlPath+(urlPath.includes('?')?'&':'?')+'v='+ips.getSetting('jsAntiCache');const script=document.createElement('script');script.defer=true;script.src=url;script.dataset.ips='';document.body.appendChild(script);} await customElements.whenDefined(name);LOADING_COMPONENTS.delete(name);} function registerWebComponent(widgetID,cls){const name=webComponentName(widgetID);if(!isElementConstructor(cls)){throw new TypeError(`Cannot register web component because the provided cls is not a subclass of HTMLElement`);} if(customElements.get(name)){throw new RangeError(`The web component ${name} is already registered`);} if(!(widgetID in widgets)){Debug.log(`Registering the web component ${name}, however no widget is currently registered for this component. Registering the widget ${widgetID} now.`);registerWidget(widgetID,cls);}else{customElements.define(name,cls);}} function webComponentName(widgetID){if(!(widgetID in WEB_COMPONENT_NAMES)){const name='i-'+widgetID.replaceAll(/[A-Z]/g,(match)=>`-${match.toLowerCase()}`).replace(/^-+/,'');try{validateWebComponentName(name);WEB_COMPONENT_NAMES[widgetID]=name;WEB_COMPONENT_NAMES_REVERSE[name]=widgetID;}catch(e){WEB_COMPONENT_NAMES[widgetID]=()=>new RangeError(`The widgetID ${widgetID} converts to a disallowed Web Component name, ${name}`);}} return WEB_COMPONENT_NAMES[widgetID];} function webComponentWidgetID(name){if(!(name in WEB_COMPONENT_NAMES_REVERSE)){try{validateWebComponentName(name);const widgetID=name.replace(/^i-/,'').replaceAll(/-([a-z])/g,(match,$1)=>$1.toUpperCase());WEB_COMPONENT_NAMES[widgetID]=name;WEB_COMPONENT_NAMES_REVERSE[name]=widgetID;}catch(e){WEB_COMPONENT_NAMES_REVERSE[name]=()=>new RangeError(`${name} is not a valid web component name`);}} if(WEB_COMPONENT_NAMES_REVERSE[name]instanceof Function){throw WEB_COMPONENT_NAMES_REVERSE[name]();} return WEB_COMPONENT_NAMES_REVERSE[name];} function validateWebComponentName(name){if(typeof name!=='string'||!name.match(/^i-[a-z][a-z-0-9\-]*$/i)){throw new RangeError(`${name} is not a valid web component name`);}} return{registerWidget,init,zIndex,getModal,getAcceptedOptions,key,destructAllWidgets,BaseWidget,registerWebComponent,loadWebComponent};});}(jQuery,_));; ;(function($,_,undefined){"use strict";ips.createModule('ips.ui.selectTree',function(){var defaults={multiple:false,selected:false,searchable:true,placeholder:ips.getString('select')};var respond=function(elem,options){if(!$(elem).data('_selecttree')){$(elem).data('_selecttree',selectTreeObj($(elem),_.defaults(options,defaults)));}},getObj=function(elem){if($(elem).data('_selecttree')){return $(elem).data('_selecttree');} return undefined;},destruct=function(elem){var obj=getObj(elem);if(!_.isUndefined(obj)){obj.destruct();}};function selectTreeObj(elem,options){let results=null,elemID=null,selectedItems=[],name='',autoExpand=false,ro;var init=function(){elemID=elem.identify().attr('id');results=elem.find('.ipsSelectTree_nodes');name=elem.attr('data-name');if($(elem).closest('i-dropdown').length){$(elem).after($(results).get(0));$(results).addClass('ipsSelectTree_nodes--collapsed').removeClass('ipsHide').css({display:""});const inputEl=$(elem).closest('form .ipsForm > .ipsFieldRow').get(0);if(inputEl instanceof HTMLElement&&inputEl.matches(':not([hidden],[hidden] *)')&&![...inputEl.parentElement.querySelectorAll(':scope > .ipsFieldRow')].some(row=>row!==inputEl&&row.querySelector("input:not([hidden], [hidden] *)"))){autoExpand=true;$(results).addClass('ipsSelectTree_nodes--auto-expanded');}} if(!autoExpand){elem.on('click',_toggleResults);} results.on('click','[data-action="getChildren"]',_toggleChildren);results.on('click','[data-action="nodeSelect"]',_toggleNodeSelection);elem.on('click','[data-action="nodeLoadMore"] a:not(.ipsButton--disabled)',_nodeLoadMore);results.on('click','[data-action="nodeLoadMore"] a:not(.ipsButton--disabled)',_nodeLoadMore);if($('input[name="'+name+'-zeroVal"]')){$('input[name="'+name+'-zeroVal"]').on('change',_zeroValChange);} if(options.selected){try{var preSelected=$.parseJSON(options.selected);}catch(err){} if(preSelected&&_.isObject(preSelected)&&_.size(preSelected)){_buildPreSelected(preSelected);return;}} elem.find('.ipsSelectTree_value').addClass('ipsSelectTree_placeholder').text((options.placeholder)?options.placeholder:ips.getString('select'));_zeroValChange();if(autoExpand){_showResults();}},destruct=function(){$(document).off('click.'+elemID);},_buildPreSelected=function(preSelected){if(_.size(preSelected)){_.each(preSelected,function(val,key){selectedItems.push(key);if(options.multiple){var id=key;if(val.id){id=val.id;} _addToken(val.title,id);}else{_setValue(val.title);} if(results.find('[data-id="'+key+'"]').length){results.find('[data-id="'+key+'"]').addClass('ipsSelectTree_selected');}});_updateSelectedValues();elem.trigger('nodeInitialValues',{selectedItems:selectedItems});}},_zeroValChange=function(e){elem.toggleClass('ipsSelectTree_disabled',$('input[name="'+name+'-zeroVal"]').is(':checked'));if(!$('input[name="'+name+'-zeroVal"]').is(':checked')&&results.is(':visible')){_closeResults();}},_toggleChildren=function(e,ignoreClosed){e.preventDefault();e.stopPropagation();var item=$(e.currentTarget).closest('.ipsSelectTree_item');var listItem=item.closest('li');var id=item.attr('data-id');var url=options.url+'&_nodeSelect=children&_nodeId='+id;if(!item.hasClass('ipsSelectTree_withChildren')){return;} if(item.hasClass('ipsSelectTree_itemOpen')){if(ignoreClosed!==true){item.removeClass('ipsSelectTree_itemOpen');listItem.find('> [data-role="childWrapper"]').hide();_positionResults();}}else{item.addClass('ipsSelectTree_itemOpen');if(item.attr('data-childrenLoaded')){ips.utils.anim.go('fadeIn fast',listItem.find('> [data-role="childWrapper"]'));_positionResults();}else{listItem.append($('
    ').attr('data-role','childWrapper').html(ips.templates.render('core.general.loading',{text:ips.getString('loading')})));_positionResults();ips.getAjax()(url).done(function(response){item.attr('data-childrenLoaded',true);listItem.find('[data-role="childWrapper"]').html(response.output);listItem.find('[data-role="childWrapper"] .ipsSelectTree_item').each(function(){if($(this).attr('data-id')&&selectedItems.indexOf($(this).attr('data-id'))!=-1){$(this).addClass('ipsSelectTree_selected');}});_positionResults();});}}},_toggleNodeSelection=function(e){var node=$(e.currentTarget);if(node.hasClass('ipsSelectTree_selected')){_unselectNode(node,e);}else{_selectNode(node,e);} _updateSelectedValues();},_nodeLoadMore=function(e){e.stopPropagation();var offset=results.find('[data-action="nodeLoadMore"]').attr('data-offset');var url=options.url+'&_nodeSelect=loadMore&_nodeSelectOffset='+offset;results.find('[data-action="nodeLoadMore"] span.ipsLoading').removeClass('ipsHide');results.find('[data-action="nodeLoadMore"] > a.ipsButton').addClass('ipsButton--disabled');ips.getAjax()(url).done(function(response){if(!_.isUndefined(response.globalOutput)){results.find('[data-role="globalNodeList"]').append(response.globalOutput);if(!_.isUndefined(response.clubsOutput)){results.find('[data-role="clubNodeList"]').append(response.clubsOutput);}} else {results.find('[data-role="nodeList"]').append(response.output);} results.find('[data-action="nodeLoadMore"] span.ipsLoading').addClass('ipsHide');if(response.loadMore){results.find('[data-action="nodeLoadMore"]').attr('data-offset',response.loadMore);} else {results.find('[data-action="nodeLoadMore"]').addClass('ipsHide');} results.find('[data-action="nodeLoadMore"] > a.ipsButton').removeClass('ipsButton--disabled');results.find('[data-role="nodeList"]').find('.ipsSelectTree_item').each(function(){if($(this).attr('data-id')&&selectedItems.indexOf($(this).attr('data-id'))!=-1){$(this).addClass('ipsSelectTree_selected');}});_positionResults();});},_selectNode=function(node,e){if(!options.multiple){elem.find('.ipsSelectTree_selected').removeClass('ipsSelectTree_selected');} node.addClass('ipsSelectTree_selected');var title=node.find('[data-role="nodeTitle"]').text();var id=node.attr('data-id');if(!options.multiple){_setValue(title);}else{_addToken(title,id);} if(options.multiple){selectedItems.push(node.attr('data-id'));}else{selectedItems=[node.attr('data-id')];} if(e){_toggleChildren(e,true);} elem.trigger('nodeItemSelected',{title:title,id:id});if(!options.multiple&&!node.hasClass('ipsSelectTree_withChildren')){setTimeout(function(){_closeResults();},200);}},_unselectNode=function(node,e){node.removeClass('ipsSelectTree_selected');selectedItems=_.without(selectedItems,node.attr('data-id'));elem.trigger('nodeItemUnselected',{title:node.find('[data-role="nodeTitle"]').text(),id:node.attr('data-id')});if(!options.multiple){_setValue();}else{_removeToken(node);}},_addToken=function(title,id){var valueElem=elem.find('.ipsSelectTree_value');var elemHeight=elem.outerHeight();if(!elem.find('[data-role="tokenList"]').length){valueElem.html($('
      ').attr('data-role','tokenList'));} elem.find('[data-role="tokenList"]').append(ips.templates.render('core.selectTree.token',{title:title,id:id}));elem.find('.ipsSelectTree_value').removeClass('ipsSelectTree_placeholder');if(elemHeight!=elem.outerHeight()){_positionResults();}},_removeToken=function(node){var id=node.attr('data-id');var tokenList=elem.find('[data-role="tokenList"]');var elemHeight=elem.outerHeight();var token=tokenList.find('[data-nodeId="'+id+'"]').closest('li').remove();if(!tokenList.find('[data-nodeId]').length){tokenList.remove();_setValue();} if(elemHeight!=elem.outerHeight()){_positionResults();}},_updateSelectedValues=function(){elem.find('[data-role="nodeValue"]').val(_.uniq(selectedItems).join(','));elem.trigger('nodeSelectedChanged',{selectedItems:selectedItems});},_setValue=function(value){if(value){elem.find('.ipsSelectTree_value').text(value).removeClass('ipsSelectTree_placeholder');}else{elem.find('.ipsSelectTree_value').text((options.placeholder)?options.placeholder:ips.getString('select')).addClass('ipsSelectTree_placeholder');}},_toggleResults=function(e){if(!$(results).get(0).classList.contains('ipsSelectTree_nodes--collapsed')&&results.is(':visible')){_maybeHideResults(e);}else{_showResults(e);}},_maybeHideResults=function(e){var rawResults=results.get(0);if((!$.contains(rawResults,e.target)&&rawResults!=e.target)){_closeResults();}},_closeResults=function(){if($(elem).closest('i-dropdown').length){$(results).addClass('ipsSelectTree_nodes--collapsed');}else{ips.utils.anim.go('fadeOut fast',results);} $(document).off('click.'+elemID);elem.removeClass('ipsSelectTree_active');elem.trigger('nodeSelectionClosed');},_showResults=function(){if(!autoExpand){$(document).on('click.'+elemID,_closeResultsOnBlur);} if($(elem).closest('i-dropdown').length){$(results).removeClass("ipsSelectTree_nodes--collapsed");}else{_positionResults();results.show();} elem.addClass('ipsSelectTree_active');if(elem.find('[data-role="nodeSearch"]')){elem.find('[data-role="nodeSearch"]').focus();}},_positionResults=function(){if($(elem).closest('i-dropdown').length){return;} var above=false;var elemTop=elem.offset().top;var elemHeight=elem.height();if((elemTop+elemHeight+results.height())>$(window).height()){above=true;var scrollParent=_getScrollParent();var scrollParentTop=$(scrollParent).offset().top;Debug.log("elemTop: "+elemTop);Debug.log("elemTop - resultsHeight: "+(elemTop-results.height()));Debug.log("scrollParentTop: "+scrollParentTop);if((elemTop-results.height())=options.maxItems){elem.find('[data-action="stackAdd"]').hide();} elem.on('click','[data-action="stackAdd"]',_addItem);elem.on('click','[data-action="stackDelete"]',_deleteItem);elem.on('keydown','[data-role="stackItem"] input[type="text"]',_keyDown);if(options.sortable){ips.loader.get(['core/interface/jquery/jquery-ui.js']).then(function(){stack.sortable({handle:'[data-action="stackDrag"]'});});} elem.attr('data-initiated','true');$(elem).trigger('stackInitialized',{count:_getItemCount()});}},_keyDown=function(e){if(e.keyCode==ips.ui.key.ENTER){e.preventDefault();_addItem(null,$(e.currentTarget).closest('[data-role="stackItem"]'));}},_addItem=function(e,after){if(e){e.preventDefault();} if(options.maxItems&&_getItemCount()>=options.maxItems){return;} currentIndex++;var field=stack.find('[data-ipsStack-wrapper]').first().html().replace(/(name=['"][a-zA-Z0-9\-_]+?)\[([^\]]+?)?\]/g,'$1['+currentIndex+']').replace(/data-ipsFormData=['"](.+?)['"]/ig,'').replace(/id=['"](.+?)['"]/g,'id="$1_'+currentIndex+'"').replace(/data-toggles=['"](.+?)['"]/g,function(match,p1){var pieces=p1.split(',');var newPieces=[];_.each(pieces,function(val){if(val.match(/_[0-9]+$/g)){newPieces.push(val+'_'+currentIndex);}else{newPieces.push(val);}});return'data-toggles="'+newPieces.join(',')+'"';});field=field.replace(/\/g,'');if(stack.find('select').length){field=field.replace(/\/g,'');} var html=ips.templates.render(options.itemTemplate,{field:field});if(after){after.after(html).next('[data-role="stackItem"]').find('input,textarea').focus();}else{stack.append(html).find('[data-role="stackItem"] input,[data-role="stackItem"] textarea').last().focus();} if(options.maxItems&&_getItemCount()>=options.maxItems){elem.find('[data-action="stackAdd"]').hide();} $(document).trigger('contentChange',[elem]);$(elem).trigger('stackRowAdded',{count:_getItemCount()});},_deleteItem=function(e){e.preventDefault();var row=$(e.currentTarget).closest('[data-role="stackItem"]');if(_getItemCount()===1){row.find('input,textarea').val('');row.find("option:selected").removeAttr("selected");return;} ips.utils.anim.go('fadeOutDown',row).done(function(){row.hide();setTimeout(function(){row.remove();if(options.maxItems&&_getItemCount(){input.checked=!input.checked;input.dispatchEvent(new CustomEvent('change',{bubbles:true}));});}else{const items=[...workingItems] items.forEach(item=>{item.classList.remove('ipsSideMenu_itemActive') item.querySelectorAll('input[type="radio"], input[type="checkbox"]').forEach(input=>{if(input.checked){input.checked=false;input.dispatchEvent(new CustomEvent('change',{bubbles:true}))}});});item=$(item).get(0);item.classList.add('ipsSideMenu_itemActive') item.querySelectorAll('input[type="radio"], input[type="checkbox"]').forEach(input=>{if(!input.checked){input.checked=true;input.dispatchEvent(new CustomEvent("change",{bubbles:true}));}});} var selectedItems=[];workingItems.filter('.ipsSideMenu_itemActive').each(function(){selectedItems.push($(this).attr('data-ipsMenuValue'));});$(elem).trigger('itemClicked.sideMenu',{id:$(elem).identify().attr('id'),menuElem:$(elem),selectedElem:$(item),selectedItemID:$(item).attr('data-ipsMenuValue'),selectedItems:selectedItems});},_toggleSideMenu=function(e){if(e){e.preventDefault();} $(elem).toggleClass('ipsSideMenu_open');$(elem).find('.ipsSideMenu__view').each(function(){this.scrollIntoView({behavior:"smooth"})});};init();return{};};return{respond};});}(jQuery,_));; ;(function($,_,undefined){"use strict";ips.createModule('ips.ui.wizard',function(){var respond=function(elem,options,e){elem.on('click','[data-action="wizardLink"]',_.bind(refresh,e,elem));elem.on('submit','form',_.bind(refresh,e,elem));};var refresh=function(elem,e){var target=$(e.currentTarget);_showLoading(elem);if(target.is('form')){if(target.attr('data-bypassAjax')){return true;} e.preventDefault();e.stopPropagation();e.stopImmediatePropagation();var data=target.serialize()+'&_wizardHeight='+elem.find('[data-role="loading"]').outerHeight();if(e.originalEvent&&e.originalEvent.submitter&&e.originalEvent.submitter.name&&e.originalEvent.submitter.value){data+='&'+e.originalEvent.submitter.name+'='+e.originalEvent.submitter.value;} ips.getAjax()(target.attr('action'),{data:data,type:'post'}).done(function(response){_insertHtml(response,elem);}).fail(function(response,textStatus,errorThrown){target.attr('data-bypassAjax',true);target.submit();})}else{e.preventDefault();ips.getAjax()(target.attr('href')).done(function(response){_insertHtml(response,elem);});}},_insertHtml=function(response,elem){if(_.isObject(response)&&response.redirect){window.location=response.redirect;return;} var responseDiv=$('
      '+response+'
      ');var responseWizard=responseDiv.find('[data-ipsWizard]').html();if(!responseWizard){responseWizard=response;} responseDiv.find("link","script").appendTo('head');ips.controller.cleanContentsOf(elem);elem.html(responseWizard);$(document).trigger('contentChange',[elem]);elem.trigger('wizardStepChanged');},_showLoading=function(elem){var loading=elem.find('[data-role="loading"]');var formContainer=elem.find('[data-role="wizardContent"]');if(!formContainer.is(':visible')){return;} if(!loading.length){loading=$('
      ').attr('data-role','loading').addClass('ipsLoading').hide();elem.append(loading);} var dims={width:formContainer.outerWidth(),height:formContainer.outerHeight()};loading.css({width:dims.width+'px',height:dims.height+'px'}).show();formContainer.hide().after(loading.show());},_hideLoading=function(){var loading=elem.find('[data-role="loading"]');var formContainer=elem.find('[data-role="registerForm"]');loading.remove();formContainer.show();};ips.ui.registerWidget('wizard',ips.ui.wizard);return{respond:respond};});}(jQuery,_));; ;(function($,_){["card","dropdown","pwaInstall","pushNotificationsPrompt","themeEditor","latex","latexNodeview"].forEach(component=>{ips.createModule(`ips.ui.${component}`,function(){ips.ui.registerWidget(component,false);return{};});});}(jQuery,_));; ;(function($,_,undefined){"use strict";ips.createModule('ips.ui.validation',function(){var defaults={live:true,submit:true,characterLimit:3,displayAs:'list'};var respond=function(elem,options,e){if(!$(elem).data('_validation')){$(elem).data('_validation',validateObj(elem,_.defaults(options,defaults)));}};var validateObj=function(elem,options){var init=function(){if(options.live){$(elem).on('keyup blur','input:not( [type="button"] ):not( [type="checkbox"] ):not( [type="hidden"] )'+ ':not( [type="radio"] ):not( [data-validate-bypass] ), textarea:not( [data-validate-bypass] )',_textEvent);$(elem).on('change','select',_selectEvent);} if(options.submit){$(elem).closest('form').on('submit',_submitEvent);}},_submitEvent=function(e){var errors=0;var elements=$(elem).find('input:not( [type="submit"] ):not( [type="checkbox"] )'+ ':not( [type="radio"] ):not( [type="hidden"] ), select, textarea');elements.each(function(){if(!_validate($(this))){errors++;}});if(errors>0){e.preventDefault();$(e.currentTarget).trigger('error.validation',{count:errors});}else{$(e.currentTarget).trigger('success.validation');}},_selectEvent=function(e){},_textEvent=function(e){var field=$(e.currentTarget);if(e.type=='blur'||e.type=='focusout'){if(field.val().length>=options.characterLimit||field.is('[type="number"], [type="range"]')){_validate(field);}}else{if(field.attr('data-hasErrors')){_validate(field);}}},_validate=function(target){var result=ips.utils.validate.validate(target);if(result!==true&&!result.result){_displayErrors(target,result);}else{_clearErrors(target);} return result.result;},_displayErrors=function(target,results){var id=target.identify().attr('id');var errorList=$('#'+id+'_errors');if(!errorList.length){var wrapper=ips.templates.render('core.forms.validationWrapper',{id:id+'_errors'});target.after(wrapper);errorList=$('#'+id+'_errors');} errorList.html('');for(var i=0;i{"use strict";const accordionMap=new Map();const defaults={defaultopen:'open'} ips.createModule('ips.ui.accordion',function(){ips.ui.registerWidget('accordion',ips.ui.accordion,['defaultopen','alwaysopen']) return{respond(elem,options){if($(elem).get(0).closest('.ipsEditor__tiptap-wrap')){return;} if(!accordionMap.has($(elem).get(0))){accordionMap.set($(elem).get(0),new Accordion($(elem).get(0),options))}},getInstance(elem){if(accordionMap.has($(elem).get(0))){return accordionMap.get($(elem).get(0))} return null},destroy(elem){if(this.getInstance(elem)){accordionMap.delete($(elem).get(0))}}}}) class Accordion{constructor(elem,options={}){this.options={...defaults,...options} this.elem=elem if(this.options.alwaysopen){this.elem.open=true;} this.elem.addEventListener('toggle',()=>{if(this.elem.open&&!this.options.alwaysopen){this.accordionSiblings.forEach(sibling=>{sibling.open=false})}}) this.summary?.addEventListener('click',e=>{e.preventDefault() this.open=!this.open}) this.summary?.addEventListener('keyup',e=>{if(['enter','space','return',' '].includes(e.key.toLowerCase())){e.preventDefault() this.open=!this.open}})} get summary(){return this.elem.querySelector(':scope > summary')} get open(){return this.elem.open} set open(open){open=!!open if(this.options.alwaysopen){return} if(open===this.open)return const content=this.elem.querySelector(':scope > :not(summary)') if(!content)return;this.elem.open=true;content.animate([{minHeight:'revert',maxHeight:'revert',height:`${open ? 0 : content.getBoundingClientRect().height}px`},{minHeight:'revert',maxHeight:'revert',height:`${!open ? 0 : content.getBoundingClientRect().height}px`},{minHeight:'revert',maxHeight:'revert',height:`${!open ? 0 : content.getBoundingClientRect().height}px`}],{duration:225}) setTimeout(()=>this.elem.open=open,150)} get accordionSiblings(){let element=this.elem.previousElementSibling let siblings=[];while(element?.dataset?.ipsaccordion!==undefined){if(ips.ui.accordion.getInstance(element)){siblings.push(ips.ui.accordion.getInstance(element))} element=element.previousElementSibling} siblings=siblings.reverse();element=this.elem.nextElementSibling while(element?.dataset?.ipsaccordion!==undefined){if(ips.ui.accordion.getInstance(element)){siblings.push(ips.ui.accordion.getInstance(element))} element=element.nextElementSibling} return siblings}}})(jQuery,_));; ;(function($,_,undefined){"use strict";ips.createModule('ips.ui.addressForm',function(){const defaults={minimize:false,country:"",requireFullAddress:true};function respond(elem,options,e){if(!_.isUndefined(elem.data('initialized'))){return;} options=_.defaults(options,defaults);if(options.minimize){minimizeAddress(elem,options);}else{init(elem,options,e);} elem.data('initialized',true);} function init(elem,options,e){elem.on('change','[data-role="countrySelect"]',_.bind(countryChange,e,elem,options));$(elem).find('[data-role="countrySelect"]').change();recalculateAddAddressLineButton(elem);} function minimizeAddress(elem,options){const tempInput=$('').attr('type','text').attr('data-role','minimizedVersion').addClass('ipsInput').attr('placeholder',ips.getString('specifyLocation')).on('focus',function(e){$(this).hide();if(options.country){$(elem).find('[data-role="countrySelect"]').val(options.country);} init(elem,options,e);elem.show().find('input').first().focus();});const value=[];elem.find('input, select').each(function(){if($(this).val()){if($(this).is('select')){value.push($(this).find('option[value="'+$(this).val()+'"]').text().trim());}else{value.push($(this).val().trim());}}});if(value.length){tempInput.val(value.join(', '));} elem.hide().after(tempInput);} function countryChange(elem,options,e){ips.getAjax()(ips.getSetting('baseURL')+'index.php?app=core&module=system&controller=ajax&do=states&country='+$(e.target).val()).done(function(response){let regionSelect;let regionText;if(response.length){if(!$(elem).find('[data-role="regionSelect"]').length){regionText=$(elem).find('[data-role="regionText"]');} else {regionText=$(elem).find('[data-role="regionSelect"]');} regionSelect=$('');regionText.attr('name',regionSelect.attr('name')).val("");regionSelect.replaceWith(regionText);}}});if(typeof elem.attr('data-ipsAddressForm-googlePlaces')==='string'){ips.ui.map.afterGoogleMapsLoaded(()=>googlePlacesInit(elem))}} function addAddressLine(elem,value){const lastLine=elem.find('[data-role="addressLine"]').closest('li').last();const newLine=lastLine.clone();if(value){newLine.find('input').focus().val(value);} lastLine.after(newLine);} function recalculateAddAddressLineButton(elem){elem.find('[data-role="addAddressLine"]').remove();const button=$('');button.click(function(){addAddressLine(elem,'');recalculateAddAddressLineButton(elem);});elem.find('[data-role="addressLine"]').last().after(button);} function googlePlacesInit(elem){const googlePlacesInput=$(elem).find('[data-role="addressLine"]').first();const options={types:['geocode'],componentRestrictions:{country:$(elem).find('[data-role="countrySelect"]').val()}};if(!options.componentRestrictions.country){delete options.componentRestrictions} const autocomplete=new google.maps.places.Autocomplete(googlePlacesInput.get(0),options);googlePlacesInput.on('focus',function(){if(navigator.geolocation){navigator.geolocation.getCurrentPosition(function(position){const geolocation=new google.maps.LatLng(position.coords.latitude,position.coords.longitude);autocomplete.setBounds(new google.maps.LatLngBounds(geolocation,geolocation));});}});googlePlacesInput.on('keypress',function(e){if((e.which&&e.which==13)||(e.keyCode&&e.keyCode==13)){return false;}});google.maps.event.addListener(autocomplete,'place_changed',function(){const place=autocomplete.getPlace();for(let i=0;i<$(elem).find('[data-role="addressLine"]').length;i++){$(elem).find('[data-role="addressLine"]').val('');} const parsedAddress=$('
      '+place.adr_address+'
      ');const addressLines=[];let existingAddressLines=$(elem).find('[data-role="addressLine"]').length;if(parsedAddress.find('.post-office-box').length){addressLines.push(parsedAddress.find('.post-office-box').text());} if(parsedAddress.find('.street-address').length){addressLines.push(parsedAddress.find('.street-address').text());} if(parsedAddress.find('.extended-address').length){addressLines.push(parsedAddress.find('.extended-address').text());} for(let i=0;i{class AlertMessage extends ips.ui.BaseWidget{constructor(...args){super(...args);this.form?.addEventListener('submit',this.remoteSubmit.bind(this),{capture:true});this.element.addEventListener('click',this.remoteSubmit.bind(this),{capture:true});this.element.addEventListener('ips:editorUpdated',()=>{this.element.querySelector('[data-role="reply"]').removeAttribute('disabled')},{once:true})} get form(){return this.element?.querySelector('form')||(this.element instanceof HTMLFormElement?this.element:undefined);} get url(){return this.element?.querySelector('[data-role="reply"]')?.getAttribute('href')||this.form?.getAttribute('action');} async remoteSubmit(e){if(e.type==='submit'||e.target.closest('input[type="submit"],form button:not([type="button"]), a:is([data-role="dismiss"], [data-role="reply"])')){e.preventDefault();if(e.target.closest('[disabled]')){return;} if(e.type==='submit'||e.target.closest('[data-role="reply"]')){const url=this.url;const form=this.form;if(url&&form){const data=Object.fromEntries((new FormData(form)).entries());try{const response=await ips.fetch(url,{method:form.method||'post',data,bypassRedirect:true,});if(typeof response?.redirect==='string'){setTimeout(()=>{ips.ui.alert.show({message:ips.getString('moderator_alert_reply_ready'),type:'confirm',buttons:{ok:ips.getString('moderator_alert_reply_view'),cancel:ips.getString('ok')},callbacks:{ok(){window.location=response.redirect;}}});});}}catch(e){Debug.warn(e);}}}else{const url=e.target.closest('a[data-role="dismiss"]')?.getAttribute('href');try{if(url){await ips.fetch(url,{method:'get',bypassRedirect:true,});}else{throw new Error(`Failed to get the dismiss ajax url of a notification`);}}catch(e){e.message=`Failed to set the status as dismissed.\n${e.message}`;Debug.warn(e)}} this.destruct();this.element.remove();}}} return AlertMessage.buildModuleAndRegisterWidget('alertMessage');})}(jQuery,_));; ;(function($,_,undefined){"use strict";ips.createModule('ips.ui.autoCheck',function(){var defaults={};var respond=function(elem,options){if(!$(elem).data('_autoCheck')){$(elem).data('_autoCheck',autoCheckObj(elem,_.defaults(options,defaults)));}},destruct=function(elem){var obj=getObj(elem);if(!_.isUndefined(obj)){obj.destruct();}},getObj=function(elem){if($(elem).data('_autoCheck')){return $(elem).data('_autoCheck');} return undefined;};ips.ui.registerWidget('autoCheck',ips.ui.autoCheck,['context']);return{respond:respond,getObj:getObj,destruct:destruct};});var autoCheckObj=function(elem,options){var initialCount=0;var init=function(){if(options.context&&$(options.context).length){elem.on('menuItemSelected',clickedMenu);$(options.context).on('change','input[type="checkbox"][data-state]',_updateCount);} elem.on('refresh.autoCheck',refresh);elem.on('setInitialCount.autoCheck',setInitialCount);elem.find('[data-role="autoCheckCount"]').hide();},destruct=function(){if(options.context){$(options.context).off('change','input[type="checkbox"][data-state]',_updateCount);}},refresh=function(){_updateCount();},setInitialCount=function(e,data){initialCount=data.count;_updateCount();},clickedMenu=function(e,data=e.detail){if(!_.isUndefined(data.originalEvent)){data.originalEvent.preventDefault();} if(!data.selectedItemID){return;} var checkboxes=$(options.context).find(':checkbox[data-state]');if(data.selectedItemID=='all'){checkboxes.prop('checked',true);}else if(data.selectedItemID=='none'){checkboxes.prop('checked',false);}else{checkboxes.prop('checked',false).filter('[data-state~="'+data.selectedItemID+'"]').prop('checked',true);} checkboxes.trigger('change');var count=_updateCount();elem.trigger('autoChecked',{menu:elem,currentFilter:data.selectedItemID,count:count});},_updateCount=function(){var checkboxes=$(options.context).find(':checkbox[data-state]');var count=$(options.context).find(':checkbox[data-state]:checked');if(count.length==checkboxes.length&&checkboxes.length!==0){elem.find('.cAutoCheckIcon').html('');}else if(count.length===0){elem.find('.cAutoCheckIcon').html('');}else{elem.find('.cAutoCheckIcon').html('');} var countToDisplay=count.length+initialCount;if(countToDisplay){elem.find('[data-role="autoCheckCount"]').text(countToDisplay).show();}else if(elem.find('[data-role="autoCheckCount"]').is(':visible')){setTimeout(function(){if(!initialCount){ips.utils.anim.go('fadeOut',elem.find('[data-role="autoCheckCount"]'));}},300);} return count.length;};init();return{destruct:destruct,refresh:refresh};};}(jQuery,_));; ;(function($,_,undefined){"use strict";ips.createModule('ips.ui.autocomplete',function(){const defaults={multiValues:true,freeChoice:true,itemSep:{chr:',',keycode:188,charcode:44},disallowedCharacters:JSON.stringify(["<",">","'","\""]),unique:false,customValues:true,fieldTemplate:'core.autocomplete.field',resultsTemplate:'core.autocomplete.resultWrapper',resultItemTemplate:'core.autocomplete.resultItem',tokenTemplate:'core.autocomplete.token',addTokenTemplate:'core.autocomplete.addToken',addTokenText:ips.getString('add_tag'),queryParam:'q',forceLower:false,minLength:1,minAjaxLength:1,commaTrigger:true,searchFieldThreshold:10,suggestionsOnly:false};function respond(elem,options){if(!$(elem).data('_autocomplete')){$(elem).data('_autocomplete',autocompleteObj(elem,_.defaults(options,defaults)));}} function destruct(elem){var obj=getObj(elem);if(!_.isUndefined(obj)){obj.destruct();}} function getObj(elem){elem=$(elem);if(elem.data('_autocomplete')){return elem.data('_autocomplete');}else if($('[name="'+elem.attr('name')+'_original'+'"]').length&&$('[name="'+elem.attr('name')+'_original'+'"]').data('_autocomplete')){return $('[name="'+elem.attr('name')+'_original'+'"]').data('_autocomplete');} return undefined;} ips.ui.registerWidget('autocomplete',ips.ui.autocomplete,['multiValues','freeChoice','dataSource','maxItems','itemSep','resultsElem','unique','commaTrigger','fieldTemplate','resultsTemplate','resultItemTemplate','tokenTemplate','addTokenTemplate','addTokenText','queryParam','minLength','maxLength','forceLower','disallowedCharacters','minAjaxLength','suggestionsOnly']);return{respond:respond,destruct:destruct,getObj:getObj};});function autocompleteObj(elem,options,e){let timer,blurTimer,lastValue='',originalTextField,valueField,textField,dataSource,elemID=$(elem).identify().attr('id'),wrapper,inputItem,resultsElem,selectedToken,disabled=false,required=false,tooltip=null,tooltipTimer=null,mouseOverResults=false,hasError=false;let _visible=false;let cleanupQueue=[];const _resizeObserver=new ResizeObserver(entries=>{for(const entry of[...entries].reverse()){if(entry.target instanceof HTMLElement&&resultsElem&&resultsElem.get(0)===entry.target){_visible=!!(entry.borderBoxSize?.[0]?.blockSize&&entry.borderBoxSize?.[0]?.inlineSize);break;}}});cleanupQueue.push(()=>_resizeObserver.disconnect());function init(){if($(elem).is('textarea, input[type="text"], input[type="search"]')){originalTextField=$(elem);}else{originalTextField=$(elem).find('textarea, input[type="text"], input[type="search"]').first();} try{options.disallowedCharacters=$.parseJSON(options.disallowedCharacters);}catch(err){Debug.error("Couldn't parse disallowed characters option");} _buildWrapper();_getDataSource();originalTextField.removeAttr('list');if(dataSource.type!='none'){_buildResultsList();if(dataSource.type=='local'){_initAutocomplete();} $([...resultsElem.find('input[type="search"]'),...textField]).each(function(){this.addEventListener('input',_keyupAutocomplete);cleanupQueue.push(()=>this.removeEventListener('input',_keyupAutocomplete));});} if(originalTextField.is('[required]')){required=true;originalTextField.removeProp('required').removeAttr('aria-required');} textField.prop('autocomplete','off').prop('spellcheck',false).prop('disabled',disabled).attr('aria-autocomplete','list').attr('aria-haspopup','true').attr('tabindex',originalTextField.attr('tabindex')||'');if(options.maxLength){textField.attr('maxlength',options.maxLength+1);} wrapper.click(function(e){e.stopPropagation();return false;});textField.on('focus',_focusField).on('blur',_blurField).on('keydown',_keydownField).on('keyup',_keyupField).on('keypress',_keypressField);wrapper.on('click','[data-action="addToken"]',_clickAddToken).on('keydown',_keydownWrapper).on('propChanged',_propChanged).toggleClass('ipsField_autocompleteDisabled',disabled);cleanupQueue.push(()=>{textField.off('focus',_focusField).off('blur',_blurField).off('keydown',_keydownField).off('keyup',_keyupField).off('keypress',_keypressField);wrapper.off('click','[data-action="addToken"]',_clickAddToken).off('keydown',_keydownWrapper).off('propChanged',_propChanged)}) _buildInitialTokens();const onBlur=()=>{if(textField!==elem){textField.trigger('blur');}} elem.on('blur',onBlur).trigger('autoCompleteReady',{elemID:elemID,elem:elem,currentValues:tokens.getValues()});elem.on('reissueReady',function(){elem.trigger('autoCompleteReady',{elemID:elemID,elem:elem,currentValues:tokens.getValues()});});cleanupQueue.push(()=>{elem.off('blur',onBlur);elem.off('reissueReady');});} function destruct(){cleanupQueue.forEach(cb=>cb());cleanupQueue=[];$(document).off('click',_documentClick);} function hasErrors(){return hasError;} function _propChanged(e){disabled=originalTextField.is(':disabled');wrapper.toggleClass('ipsField_autocompleteDisabled',disabled);} function _buildInitialTokens(){var value=_getOriginalValue();if(!value){return;} var splitValues=_.without(value.split("\n"),'');var itemCount=0;itemCount=splitValues.length;originalTextField.val('');if(splitValues.length){for(var i=0;ioptions.searchFieldThreshold&&!options.freeChoice){var searchField=ips.templates.render('core.autocomplete.searchTypeAhead',{});$(resultsElem).prepend(searchField);}} const _keyupAutocomplete=_.throttle(function(e){_loadResults(e.target.value);return true;},200);function _buildWrapper(){var existingClasses=elem[0].className;$(elem).after(ips.templates.render(options.fieldTemplate,{id:elemID})).removeClass(existingClasses);wrapper=$(elem).parent().find('#'+elemID+'_wrapper');inputItem=$(wrapper).find('#'+elemID+'_inputItem');if(!options.freeChoice){var insertElem=ips.templates.render(options.addTokenTemplate,{text:options.addTokenText});textField=elem;}else{var insertElem=$('').attr({type:'text',id:elemID+'_dummyInput'}).prop('autocomplete','off');textField=insertElem;} if(options.suggestionsOnly){const form=$(elem).closest('form').get(0) if(form){const onSubmit=e=>{if(_getCurrentValue()&&!($(elem).get(0).closest('.ipsFieldRow[hidden]'))){e.preventDefault() e.stopPropagation() const warning=$(elem).get(0).closest('.ipsFieldRow__content')?.querySelector(".ipsFieldRow__warning") if(warning){warning.innerHTML=ips.getString('form_autocomplete_bad')}}};form.addEventListener('submit',onSubmit);cleanupQueue.push(()=>form.removeEventListener("submit",onSubmit));}} var name=originalTextField.attr('name');originalTextField.attr('name',originalTextField.attr('name')+'_original');valueField=$('