Version 5.0.0 beta 10

This commit is contained in:
Neo committed 2025-12-19 17:53:48 -08:00
1 parent 56979f8ee8
commit 264eeb97e0
325 files changed
+6442 -1849

No files matched your search

+153 -149
View File
@@ -3,7 +3,7 @@ ips.templates.set('core.tooltip'," <div id='{{id}}' class='ipsTooltip' role='to
<div class='ipsPixabayThumb' {{#width}}{{#height}}style="--i-ratio: {{width}} / {{height}}"{{/height}}{{/width}}>
<img loading="lazy" {{#width}}width='{{width}}'{{/width}} {{#height}}height='{{height}}'{{/height}} src="{{thumb}}" class="ipsPixabayImage" data-url="{{url}}" data-id="{{imgid}}" alt="">
</div>
`);ips.templates.set('core.editor.emoticons'," <div class='ipsMenu ipsMenu_wide' id='{{id}}_menu' style='display: none' data-editorID='{{editor}}' data-controller='core.global.editor.emoticons'> <div class='ipsMenu_headerBar'> <h4 class='ipsTitle ipsTitle--h4'>{{#lang}}emoji{{/lang}}</h4> <div class='i-flex i-gap_2'> <a href='#' class='i-color_inherit ipsHide' data-role='skinToneMenu' data-ipsMenu data-ipsMenu-appendTo='#{{id}}_menu' id='{{id}}_tones'>{{#lang}}emoji_skin_tone{{/lang}} <i class='fa-solid fa-caret-down'></i></a> <a href='#' class='i-color_inherit ipsHide' data-role='categoryTrigger' data-ipsMenu data-ipsMenu-appendTo='#{{id}}_menu' id='{{id}}_more'>{{#lang}}emoticonCategories{{/lang}} <i class='fa-solid fa-caret-down'></i></a> </div> <ul class='ipsMenu ipsMenu_veryNarrow i-cursor_pointer' id='{{id}}_tones_menu' role='menu' style='display: none'> <li class='ipsMenu_title'>{{#lang}}emoji_skin_tone{{/lang}}</li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='none'><a>{{#lang}}emoji_skin_tone_default{{/lang}}</a></li> <li class='ipsMenu_sep'><hr></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='light'><a>\uD83C\uDFFB {{#lang}}emoji_skin_tone_light{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='medium-light'><a>\uD83C\uDFFC {{#lang}}emoji_skin_tone_medium_light{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='medium'><a>\uD83C\uDFFD {{#lang}}emoji_skin_tone_medium{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='medium-dark'><a>\uD83C\uDFFE {{#lang}}emoji_skin_tone_medium_dark{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='dark'><a>\uD83C\uDFFF {{#lang}}emoji_skin_tone_dark{{/lang}}</a></li> </ul> <ul data-role='categoryMenu' class='ipsMenu ipsMenu_auto i-cursor_pointer' id='{{id}}_more_menu' role='menu' style='display: none'> </ul> </div> <div class='ipsMenu_innerContent'> <div class='ipsEmoticons_content'> <div class='ipsEmpty ipsEmoticons_contentLoading' data-role='emojiLoading'> {{#lang}}loading{{/lang}}... </div> </div> </div> <div class='ipsMenu_footerBar'> <input type='text' data-role='emoticonSearch' class='ipsInput ipsInput--wide' placeholder='{{#lang}}emoticonFind{{/lang}}'> </div></div>");ips.templates.set('core.editor.emoticonSection'," <div data-panel='{{id}}'>{{{content}}}</div>");ips.templates.set('core.editor.emoticonMenu'," <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='{{categoryID}}'><a><span class='ipsMenu_itemCount'>{{count}}</span>{{title}}</a></li>");ips.templates.set('core.editor.emoticonCategory'," <div class='i-background_2 i-padding_2'><strong>{{title}}</strong></div> <div class='ipsEmoticons_category' data-categoryid='{{categoryID}}'>{{{emoticons}}}</div>");ips.templates.set('core.editor.emoticonSearch'," <div class='ipsEmoticons_category'>{{{emoticons}}}</div>");ips.templates.set('core.editor.emoticonRow'," <div class='ipsEmoticons_row ipsEmoji'>{{{emoticons}}}</div>");ips.templates.set('core.editor.emoticonItem'," <div class='ipsEmoticons_item' data-emoticon='{{tag}}' src='{{src}}' data-height='{{height}}' data-width='{{width}}' title='{{tag}}' loading='lazy'>{{{img}}}</div>");ips.templates.set('core.editor.emoji'," <div class='ipsEmoticons_item' title='{{name}}' data-emoji='{{code}}'>{{{display}}}</div>");ips.templates.set('core.editor.emojiNotNative'," <div class='ipsEmoticons_item' title='{{name}}' data-emoji='{{code}}'>{{{img}}}</div>");ips.templates.set('core.editor.emoticonBlank'," <div class='ipsEmoticons_item'>&nbsp;</div>");ips.templates.set('core.editor.emoticonNoResults'," <div class='i-padding_3 i-text-align_center i-color_soft'>{{#lang}}no_results{{/lang}}</div>");ips.templates.set('core.editor.emojiResult'," <li class='ipsMenu_item i-cursor_pointer' title='{{name}}' data-emoji='{{code}}'> <a><span class='ipsEmoji_result'>{{{emoji}}}</span> <span data-role='shortCode'>{{short_code}}</span></a> </li>");ips.templates.set('core.editor.quote',"<blockquote class='ipsQuote' data-ipsQuote data-gramm='false' cite='{{citeurl}}'><div class='ipsQuote_citation'>{{{citation}}}</div><div class='ipsQuote_contents ipsClearfix' data-gramm='false'>{{{contents}}}</div></blockquote>");ips.templates.set('core.editor.legacyQuoteUpcast',"<div class='ipsQuote_citation'>{{citation}}</div><div class='ipsQuote_contents ipsClearfix' data-gramm='false'>{{{contents}}}</div>");ips.templates.set('core.editor.citation'," <div class='ipsQuote_citation ipsQuote_open'> <a href='#' data-action='toggleQuote' aria-label='{{#lang}}toggle_quote{{/lang}}'>&nbsp;</a> {{#contenturl}} <a href='{{contenturl}}' class='ipsQuote_citation-origin'><i class='fa-solid fa-share'></i></a> {{/contenturl}} {{{citation}}} </div>");ips.templates.set('core.editor.citationLink'," <a href='{{baseURL}}?app=core&module=members&controller=profile&id={{userid}}' data-ipsHover data-ipshover-target='{{base Line truncated
`);ips.templates.set('core.editor.emoticons'," <div class='ipsMenu ipsMenu_wide' id='{{id}}_menu' style='display: none' data-editorID='{{editor}}' data-controller='core.global.editor.emoticons'> <div class='ipsMenu_headerBar'> <h4 class='ipsTitle ipsTitle--h4'>{{#lang}}emoji{{/lang}}</h4> <div class='i-flex i-gap_2'> <a href='#' class='i-color_inherit ipsHide' data-role='skinToneMenu' data-ipsMenu data-ipsMenu-appendTo='#{{id}}_menu' id='{{id}}_tones'>{{#lang}}emoji_skin_tone{{/lang}} <i class='fa-solid fa-caret-down'></i></a> <a href='#' class='i-color_inherit ipsHide' data-role='categoryTrigger' data-ipsMenu data-ipsMenu-appendTo='#{{id}}_menu' id='{{id}}_more'>{{#lang}}emoticonCategories{{/lang}} <i class='fa-solid fa-caret-down'></i></a> </div> <ul class='ipsMenu ipsMenu_veryNarrow i-cursor_pointer' id='{{id}}_tones_menu' role='menu' style='display: none'> <li class='ipsMenu_title'>{{#lang}}emoji_skin_tone{{/lang}}</li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='none'><a>{{#lang}}emoji_skin_tone_default{{/lang}}</a></li> <li class='ipsMenu_sep'><hr></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='light'><a>\uD83C\uDFFB {{#lang}}emoji_skin_tone_light{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='medium-light'><a>\uD83C\uDFFC {{#lang}}emoji_skin_tone_medium_light{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='medium'><a>\uD83C\uDFFD {{#lang}}emoji_skin_tone_medium{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='medium-dark'><a>\uD83C\uDFFE {{#lang}}emoji_skin_tone_medium_dark{{/lang}}</a></li> <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='dark'><a>\uD83C\uDFFF {{#lang}}emoji_skin_tone_dark{{/lang}}</a></li> </ul> <ul data-role='categoryMenu' class='ipsMenu ipsMenu_auto i-cursor_pointer' id='{{id}}_more_menu' role='menu' style='display: none'> </ul> </div> <div class='ipsMenu_innerContent'> <div class='ipsEmoticons_content'> <div class='ipsEmpty ipsEmoticons_contentLoading' data-role='emojiLoading'> {{#lang}}loading{{/lang}}... </div> </div> </div> <div class='ipsMenu_footerBar'> <input type='text' data-role='emoticonSearch' class='ipsInput ipsInput--wide' placeholder='{{#lang}}emoticonFind{{/lang}}'> </div></div>");ips.templates.set('core.editor.emoticonSection'," <div data-panel='{{id}}'>{{{content}}}</div>");ips.templates.set('core.editor.emoticonMenu'," <li class='ipsMenu_item' role='menuitem' data-ipsMenuValue='{{categoryID}}'><a><span class='ipsMenu_itemCount'>{{count}}</span>{{title}}</a></li>");ips.templates.set('core.editor.emoticonCategory'," <div class='i-background_2 i-padding_2'><strong>{{title}}</strong></div> <div class='ipsEmoticons_category' data-categoryid='{{categoryID}}'>{{{emoticons}}}</div>");ips.templates.set('core.editor.emoticonSearch'," <div class='ipsEmoticons_category'>{{{emoticons}}}</div>");ips.templates.set('core.editor.emoticonRow'," <div class='ipsEmoticons_row ipsEmoji'>{{{emoticons}}}</div>");ips.templates.set('core.editor.emoticonItem'," <div class='ipsEmoticons_item' data-emoticon='{{tag}}' src='{{src}}' data-height='{{height}}' data-width='{{width}}' title='{{tag}}' loading='lazy'>{{{img}}}</div>");ips.templates.set('core.editor.emoji'," <div class='ipsEmoticons_item' title='{{name}}' data-emoji='{{code}}'>{{{display}}}</div>");ips.templates.set('core.editor.emojiNotNative'," <div class='ipsEmoticons_item' title='{{name}}' data-emoji='{{code}}'>{{{img}}}</div>");ips.templates.set('core.editor.emoticonBlank'," <div class='ipsEmoticons_item'>&nbsp;</div>");ips.templates.set('core.editor.emoticonNoResults'," <div class='i-padding_3 i-text-align_center i-color_soft'>{{#lang}}no_results{{/lang}}</div>");ips.templates.set('core.editor.emojiResult'," <li class='ipsMenu_item i-cursor_pointer' title='{{name}}' data-emoji='{{code}}'> <a><span class='ipsEmoji_result'>{{{emoji}}}</span> <span data-role='shortCode'>{{short_code}}</span></a> </li>");ips.templates.set('core.editor.quote',"<blockquote class='ipsQuote' data-ipsQuote data-gramm='false' cite='{{citeurl}}'><div class='ipsQuote_citation'>{{{citation}}}</div><div class='ipsQuote_contents ipsClearfix' data-gramm='false'>{{{contents}}}</div></blockquote>");ips.templates.set('core.editor.legacyQuoteUpcast',"<div class='ipsQuote_citation'>{{citation}}</div><div class='ipsQuote_contents ipsClearfix' data-gramm='false'>{{{contents}}}</div>");ips.templates.set('core.editor.citation'," <div class='ipsQuote_citation ipsQuote_open'> <a href='#' data-action='toggleQuote' aria-label='{{#lang}}toggle_quote{{/lang}}'>&nbsp;</a> {{#contenturl}} <a href='{{contenturl}}' class='ipsQuote_citation-origin'><i class='fa-solid fa-share'></i></a> {{/contenturl}} {{{citation}}} </div>");ips.templates.set('core.editor.citationLink'," <a href='{{baseURL}}?app=core&module=members&controller=profile&id={{userid}}' data-ipsHover data-ipshover-target='{{base Line truncated
ips.templates.set('core.rating.star'," <li class='{{className}}' data-ratingValue='{{value}}'><a href='#'><i class='fa-solid fa-star'></i></a></li>");ips.templates.set('core.rating.halfStar'," <li class='ipsRating_half' data-ratingValue='{{value}}'><i class='fa-solid fa-star-half'></i><i class='fa-solid fa-star-half fa-flip-horizontal'></i></li>");ips.templates.set('core.rating.loading'," <i class='ipsLoadingIcon'></span>");ips.templates.set('core.sidebar.managerWrapper',`\
<div id='elSidebarManager' data-role='manager' class='ipsToolbox' hidden>
<div class='ipsToolbox__tools'>
@@ -1140,12 +1140,12 @@ var workingItems;if(!options.group){workingItems=$(elem).find('.ipsSideMenu_item
if(options.type=='check'){item.toggleClass('ipsSideMenu_itemActive').find('input[type="radio"], input[type="checkbox"]').prop("checked",function(i,val){return!val;}).change();}else{workingItems.removeClass('ipsSideMenu_itemActive').find('input[type="radio"], input[type="checkbox"]').prop("checked",false);item.addClass('ipsSideMenu_itemActive').find('input[type="radio"], input[type="checkbox"]').prop("checked",true).change();}
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.spoiler',function(){function respond(elem,options,e){if(elem.parents('[data-ipseditorv5]').length){return;}
if(!elem.get(0)?.tagName.toLowerCase()==='details'){spoilerLegacy(elem)}else{ips.ui.accordion.respond(elem)}}
function spoilerLegacy(elem){elem.contents().hide();var existingHeader=elem.children('.ipsSpoiler_header');var header=ips.templates.render('core.editor.spoilerHeader');if(existingHeader.length){existingHeader.replaceWith(header);}else{elem.prepend(header);}
;(function($,_,undefined){"use strict";ips.createModule('ips.ui.spoiler',function(){function respond(elem,options,e){elem.contents().hide();const details=document.createElement('details');for(const attr of[...$(elem).get(0).getAttributeNames()]){try{details.setAttribute(attr,$(elem).get(0).getAttribute(attr));}catch(e){Debug.warn(e);}}
$(elem).get(0).after(details);elem.hide();for(const child of[...$(elem).get(0).childNodes]){details.appendChild(child);}
elem=$(details);var existingHeader=elem.children('.ipsSpoiler_header');var header=ips.templates.render('core.editor.spoilerHeader');if(existingHeader.length){existingHeader.replaceWith(header);}else{elem.prepend(header);}
elem.find('> .ipsSpoiler_header').on('click',_toggleSpoiler);}
function _toggleSpoiler(e){var header=$(e.currentTarget);var target=$(e.target);var spoiler=$(e.target).closest('[data-ipsSpoiler]');if(target.is('a:not( [data-action="toggleSpoiler"] )')||(target.closest('a').length&&!target.closest('a').is('[data-action="toggleSpoiler"]'))){return;}
e.preventDefault();if(header.hasClass('ipsSpoiler_closed')){ips.utils.anim.go('fadeIn',header.siblings());header.removeClass('ipsSpoiler_closed').addClass('ipsSpoiler_open').find('span').text(ips.getString('spoilerClickToHide'));$(document).trigger('contentChange',[spoiler]);}else{header.siblings().hide();header.removeClass('ipsSpoiler_open').addClass('ipsSpoiler_closed').find('span').text(ips.getString('spoilerClickToReveal'));}
e.preventDefault();if(header.hasClass('ipsSpoiler_closed')){spoiler.attr('open','');ips.utils.anim.go('fadeIn',header.siblings());header.removeClass('ipsSpoiler_closed').addClass('ipsSpoiler_open').find('span').text(ips.getString('spoilerClickToHide'));$(document).trigger('contentChange',[spoiler]);}else{spoiler.attr('open',null);header.siblings().hide();header.removeClass('ipsSpoiler_open').addClass('ipsSpoiler_closed').find('span').text(ips.getString('spoilerClickToReveal'));}
e.stopPropagation();}
ips.ui.registerWidget('spoiler',ips.ui.spoiler);return{respond:respond}});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.createModule('ips.ui.stack',function(){var defaults={sortable:true,itemTemplate:'core.forms.stack'};var respond=function(elem,options){if(!$(elem).data('_stack')){$(elem).data('_stack',stackObj(elem,_.defaults(options,defaults)));}};ips.ui.registerWidget('stack',ips.ui.stack,['sortable','maxItems','itemTemplate']);return{respond:respond};});var stackObj=function(elem,options){var stack=null;var currentIndex=0;var init=function(){if(!elem.attr('data-initiated')){stack=elem.find('[data-role="stack"]');currentIndex=_getItemCount();if(options.maxItems&&currentIndex>=options.maxItems){elem.find('[data-action="stackAdd"]').hide();}
@@ -1157,6 +1157,33 @@ var html=ips.templates.render(options.itemTemplate,{field:field});if(after){afte
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()<options.maxItems){elem.find('[data-action="stackAdd"]').show();}},100);});},_getItemCount=function(){return stack.find('[data-role="stackItem"]').length;};init();};}(jQuery,_));;
;(function($,_){"use strict";ips.createModule('ips.ui.tabbar',function(){const defaults={itemSelector:'.ipsTabs__tab',activeClass:false,loadingClass:'ipsLoading ipsTabs_loadingContent',panelClass:'ipsTabs__panel',updateURL:true,updateTitle:false,disableNav:false};ips.ui.registerWidget('tabbar',ips.ui.tabbar,['contentArea','itemSelector','activeClass','loadingClass','disableNav','panelClass','updateURL','updateTitle']);return{respond(elem,options){if(!$(elem).data('_tabbar')){$(elem).data('_tabbar',tabBarObj(elem,_.defaults(options,defaults)));}}};});function tabBarObj(elem,options){const rawElem=$(elem).get(0);const tabs=$(elem).find(options.itemSelector);let barId=rawElem.id;let active;let ajaxObj;function init(){if(!barId){barId=$(rawElem).identify().attr('id');}
if(!options.contentArea||!$(options.contentArea).length){options.contentArea='#'+$(rawElem).next().identify().attr('id');}
if(!tabs.length){Debug.warn("No tabs found in tab bar"+barId);return;}
active=_getActiveTab();_initializeActive();$(elem).on('click',options.itemSelector,_handleTabClick);let tabbar=elem[0],tablist=tabbar.querySelector('[role="tablist"]'),scrollers=tabbar.querySelector('[data-role="tabScrollers"]');if(scrollers){scrollers.addEventListener("click",e=>_handleScrollerClick(e,tablist));let scrollerObserver=new IntersectionObserver(tabs=>tabs.forEach(tab=>tabbar.querySelector(`[data-direction="${tab.target.matches(':first-child') ? 'prev' : 'next'}"]`).hidden=tab.intersectionRatio>.99),{root:tablist,threshold:0.99});tablist.querySelectorAll(':scope > :first-child, :scope > :last-child').forEach(el=>{scrollerObserver.observe(el)});}}
function _handleScrollerClick(e,tablist){let direction=e.target.closest('button').getAttribute("data-direction"),currentScroll=tablist.scrollLeft,listWidth=tablist.offsetWidth/2;if(direction==="prev"){listWidth=-listWidth;}
tablist.scrollTo({left:currentScroll+listWidth,behavior:"smooth"})}
function _handleTabClick(e){if(options.disableNav){return;}
e.preventDefault();if($(this).attr('aria-selected')==='true'){return;}
let thisId=$(this).identify().attr('id'),thisContent=$('#'+$(this).attr('aria-controls'));if(!thisContent.length){thisContent=$('#'+thisId+'_panel');}
if(!thisContent.length){thisContent=_createTabPanel(thisId);_loadContent(this,thisContent).done(()=>_switchTab(thisId)).fail(()=>Debug.log('failed'));}else{_hideAllPanels();_switchTab(thisId);}
_updateURL(thisId);}
function _switchTab(tabId){_hideAllPanels();const thisContent=$('#'+tabId+'_panel'),thisContentParent=document.querySelector(elem[0].getAttribute("data-ipstabbar-contentarea"));thisContent.removeAttr('hidden');$(elem).trigger('tabShown',{barID:barId,tabID:tabId,tab:active,panel:thisContent});$(document).trigger('contentChange',[thisContent]);if(elem[0].matches(".ipsTabs--sticky")&&thisContentParent&&window.scrollY>thisContentParent.offsetTop){thisContentParent.scrollIntoView({behavior:"smooth"});}
active=$('#'+tabId);_makeTabActive(active);$(elem).trigger('tabChanged',{barID:barId,tabID:tabId,tab:active,panel:thisContent});}
function _updateURL(tabId){if(!options.updateURL){return;}
const tabLink=$(`#${tabId}`);const href=tabLink.attr('href');const title=(options.updateTitle&&tabLink.attr('title'))?tabLink.attr('title'):document.title;if(!_.isEmpty(href)&&!href.startsWith('#')){ips.utils.history.replaceState({},'ips.ui.tabbar',href);document.title=title
ips.utils.analytics.trackPageView(href);}}
function _getActiveTab(){const activeTab=elem.find('[aria-selected="true"]');if(activeTab.length){return activeTab.get(0);}
return $(elem).find(options.itemSelector).first();}
function _initializeActive(){const activeId=$(active).identify().attr('id');if(!$('#'+activeId+'_panel').length){if($(options.contentArea).children().length){$(options.contentArea).wrapInner(_createTabPanel(activeId,true));_switchTab(activeId);}else{var newPanel=_createTabPanel(activeId);_loadContent(active,newPanel).done(function(){_switchTab(activeId);});}}else{_switchTab(activeId);}}
function _makeTabActive(activeTab){$(elem).find(options.itemSelector).attr('aria-selected','false');if(options.activeClass){$(elem).find(options.itemSelector).removeClass(options.activeClass);}
$(activeTab).attr('aria-selected','true');if(options.activeClass){$(activeTab).addClass(options.activeClass);}}
function _loadContent(tab,container){let url;const deferred=$.Deferred();_hideAllPanels();if($(tab).attr('data-tabURL')){url=$(tab).attr('data-tabURL');}else{url=$(tab).attr('href');}
$(options.contentArea).addClass(options.loadingClass);ajaxObj=ips.getAjax();ajaxObj(url).done(response=>{$(container).html(response);deferred.resolve();}).fail(()=>window.location=$(tab).attr('href')).always(()=>$(options.contentArea).removeClass(options.loadingClass));return deferred.promise();}
function _hideAllPanels(){$(options.contentArea).find('> .'+options.panelClass).attr('hidden','');}
function _createTabPanel(tabId,noAppend=false){const newPanel=$('<div/>').attr({'id':tabId+'_panel'}).addClass(options.panelClass).attr({'role':'tabpanel'}).attr({'aria-labelledby':tabId});if(!noAppend){$(options.contentArea).append(newPanel);}
return newPanel;}
init();return{init};}}(jQuery,_));;
;((($,_)=>{"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;}
@@ -1185,6 +1212,126 @@ 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";const endCachingDebounced=_.throttle((elem)=>{ips.utils.position.endCaching(elem);},100,{leading:false});ips.createModule('ips.ui.tooltip',function(){let _tooltip=null,_timer=[],_currentElem=null,_showTimeout;function respond(elem,options,e){clearTimeout(_showTimeout);if(ips.utils.events.isTouchDevice()){return;}
if(!_tooltip){_createTooltipElement();}
if(e.type==='mouseleave'||e.type==='blur'||e.type==='focusout'){_hide();}else{const content=_getContent(elem,options);if(content){ips.utils.position.startCaching();_showTimeout=setTimeout(()=>{_show(elem,options,content);endCachingDebounced();});}}}
function _calculatePosition(elem,_tooltip){const positionInfo={trigger:elem,target:_tooltip,center:true,above:true,stemOffset:{left:10,top:0}};const tooltipEl=$(_tooltip).get(0);const tooltipPosition=ips.utils.position.positionElem(positionInfo);Object.assign(tooltipEl.style,{left:((tooltipPosition.left>0)?tooltipPosition.left:20)+'px',top:tooltipPosition.top+'px',position:(tooltipPosition.fixed)?'fixed':'absolute',zIndex:ips.ui.zIndex()});if(tooltipPosition.location.vertical==='top'){tooltipEl.classList.add('ipsTooltip_top')
tooltipEl.classList.remove('ipsTooltip_bottom');}else{tooltipEl.classList.add('ipsTooltip_bottom')
tooltipEl.classList.remove('ipsTooltip_top');}
tooltipEl.classList.remove('ipsTooltip_left','ipsTooltip_right');if(tooltipPosition.left>0){if(tooltipPosition.location.horizontal==='left'){tooltipEl.classList.add('ipsTooltip_left');}else if(tooltipPosition.location.horizontal==='right'){tooltipEl.classList.add('ipsTooltip_right');}}}
function _show(elem,options,content){elem=$(elem);ips.utils.anim.cancel(_tooltip);if(options.safe){_tooltip.hide().html(content);}else{_tooltip.hide().text(content);}
if(options.ajax&&!elem.data('_tooltip')){ips.getAjax()(options.ajax).done(response=>{$(elem).data('_tooltip',response);if(options.safe){_tooltip.html(response);}else{_tooltip.text(response);}
_calculatePosition(elem,_tooltip);});}
const element=$(elem).get(0);if(element.hasAttribute('title')){element.setAttribute('_title',element.getAttribute('title'));element.removeAttribute('title');}
_tooltip.show();_calculatePosition(elem,_tooltip);_currentElem=elem;_timer.push(setInterval(_checkForElemPresence,100));setTimeout(()=>$(elem).trigger('tooltipShown'),1);}
function _hide(){ips.utils.anim.go('fadeOut',_tooltip);_currentElem=null;if(_timer.length){for(var i=0;i<_timer.length;i++){clearInterval(_timer[i]);}
_timer=[];}}
function _checkForElemPresence(element){if(!_currentElem||!_currentElem.length||!_currentElem.is(':visible')){_hide();}}
function _getContent(elem,options){elem=$(elem);if(elem.data('_tooltip')){return elem.data('_tooltip');}
else if(options.label){if(options.json){return $.parseJSON(options.label).join("<br>");}else{return options.label;}}else if(elem.attr('aria-label')){return elem.attr('aria-label');}else if(elem.attr('_title')){return elem.attr('_title');}else if(elem.attr('title')){return elem.attr('title');}}
function _createTooltipElement(){var tooltip=ips.templates.render('core.tooltip',{id:'ipsTooltip'});ips.getContainer().append(tooltip);_tooltip=$('#ipsTooltip');}
ips.ui.registerWidget('tooltip',ips.ui.tooltip,['label','extraClass','safe','json','ajax'],{lazyLoad:true,lazyEvents:'mouseenter mouseleave focus blur'});return{respond};});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.createModule('ips.ui.truncate',function(){const TRUNCATE_CALLBACK_MAP=new WeakMap();document.addEventListener('ips:truncateCollapse',e=>{if(TRUNCATE_CALLBACK_MAP.has(e.target)){TRUNCATE_CALLBACK_MAP.get(e.target)();TRUNCATE_CALLBACK_MAP.delete(e.target);}},{capture:true});var defaults={expandText:ips.getString('show_more'),deferred:false,deferredClasses:undefined,};var respond=function(elem,options){let el=elem[0];if(el.closest('[data-ipseditorv5],.tiptap')){return;}
const collapseIfNeeded=()=>{delete el.dataset.ipstruncateDeferred;if(el.scrollHeight>el.offsetHeight){if(options.deferred&&options.deferredClasses){for(const cls of options.deferredClasses.split(/\s+/)){el.classList.add(cls);}}
_hideTruncate(elem,_.defaults(options,defaults));}}
if(options.deferred){TRUNCATE_CALLBACK_MAP.set(el,collapseIfNeeded);return;}
collapseIfNeeded();},_hideTruncate=function(elem,options){if(elem.attr('data-truncated')){return;}
var showMore=ips.templates.render('core.truncate.expand',{text:options.expandText});$(elem).after(showMore);var expander=elem.next("[data-action='expandTruncate']");elem.attr('data-truncated',true);expander.on('click',function(e){elem.attr('data-truncate-expanded',true);expander.remove();});};ips.ui.registerWidget('truncate',ips.ui.truncate,['expandText','deferred']);return{respond:respond};});}(jQuery,_));;
;(function($,_,undefined){const imageExtensions=new Set(['jpg','jpeg','jpe','gif','png','webp','avif']),audioExtensions=new Set(['mp3','ogg','wav','m4a']),videoExtensions=new Set(['mp4','3gp','mov','ogg','ogv','mpg','mpeg','flv','webm','wmv','avi','m4v']);const uploadObj=function(elem,options,e){elem=$(elem);let pluploadObj,runtime,listContainer,uploadCount=0,totalSize=0,injectIds={},uploaderID='',sound=null;function init(){uploaderID=$(elem).identify().attr('id');if(options.listContainer){listContainer=$(options.listContainer);}else if($(elem).find('[data-role="fileList"]').length){listContainer=$(elem).find('[data-role="fileList"]');}else{listContainer=$(elem);}
if(ips.templates.get(options.template+'Wrapper')){listContainer.prepend(ips.templates.render(options.template+'Wrapper'));const firstItem=listContainer.children().first();firstItem.append(listContainer.children().not(firstItem));listContainer=firstItem;$(document).trigger('contentChange',[listContainer.parent()]);}
$(document).on('addUploaderFile',_addUploaderFile);$(document).on('removeAllFiles',_removeAllFiles);if(options.existingFiles){try{const files=$.parseJSON(options.existingFiles);if(files.length){_buildExistingFiles(files);}}catch(err){Debug.error("Couldn't build existing files: "+err);}}
ips.utils.cookie.set('editor_supports_drag',_supportsDraggable()?'true':'false');$(elem).find('[data-action="browse"],[data-supports-drag]').attr('data-supports-drag',_supportsDraggable()?'true':'false');const load=ips.getSetting('useCompiledFiles')?['core/interface/plupload/plupload.full.min.js']:['core/interface/plupload/moxie.js','core/interface/plupload/plupload.dev.js'];ips.loader.get(load).then(function(){_setUpUploader();_initUploader();_postInitEvents();_setUpFormEvents();});}
function refresh(){if(pluploadObj){Debug.log("Refreshing");pluploadObj.refresh();}}
function _setUpFormEvents(){const form=_getForm();if(!form.length){return;}
if(options.allowStockPhotos!==false){$(elem).find('[data-action="stockPhoto"]').on('click',function(e){e.preventDefault();e.stopPropagation();const dialogRef=ips.ui.dialog.create({title:ips.getString("stockphoto_header"),fixed:false,destructOnClose:true,url:ips.getSetting('baseURL')+'?app=core&module=system&controller=pixabay&uploader='+$(elem).attr('data-ipsUploader-name'),});dialogRef.show();});}
form.on('submit',function(e){if(pluploadObj.state!==plupload.STOPPED){e.preventDefault();e.stopPropagation();ips.ui.alert.show({type:'alert',message:ips.getString('filesStillUploading'),subText:ips.getString('filesStillUploadingDesc'),icon:'warn'});$(elem).trigger('fileStillUploading');}});}
function _addUploaderFile(e,data){if(data.uploaderID===uploaderID){data.extIcon=ips.ui.uploader.getExtensionIcon(data.title);listContainer.append(ips.templates.render(_getTemplateName(data),data));}}
function _getTemplateName(data){if(options.template!==null){return options.template;}
let type='fileItem';if(data.isImage){type='imageItem';}else if(data.isVideo){type='videoItem';}
return`core.attachments.${type}`;}
function _removeAllFiles(){listContainer.find('[data-role="file"]').remove();}
function _buildExistingFiles(files){if(!files.length){return;}
for(let file of files){const data={id:file.id,imagesrc:file.imagesrc,thumbnail:file.thumbnail?file.thumbnail:'',thumbnail_for_css:file.thumbnail?file.thumbnail.replace('(','\\(').replace(')','\\)'):'',title:file.originalFileName,size:file.size,field_name:$(elem).attr('data-ipsUploader-name'),newUpload:false,insertable:!options.insertable,done:true,'default':file.default?file.default:null,supportsDelete:options.supportsDelete,extIcon:ips.ui.uploader.getExtensionIcon(file.originalFileName)};if(file.id===$(elem).attr('data-ipsUploader-default')){data['checked']="checked";}
if(file.hasThumb){data['thumb']="<img src='"+(file['thumbnail']?file['thumbnail']:file['imagesrc'])+"' class='ipsImage' alt='An uploaded image'>";}
listContainer.append(ips.templates.render(options.template,data));$('#'+file.id).trigger('newItem',[$('#'+file.id)]);}
$(elem).trigger('fileAdded',{count:files.length,uploader:options.name});}
function _setUpUploader(){pluploadObj=new plupload.Uploader(_getUploaderSettings());pluploadObj.bind('Init',events.init);listContainer.find('[data-role="file"]').each(function(){const fileElem=$(this);fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));uploadCount++;});}
function _getForm(){let form=$(elem).parentsUntil('','form');if(!form.length&&options.postkey){form=$(`[data-ipseditorv5-postkey="${options.postkey}"]`).closest('form');}
return form;}
function _getUploaderSettings(){const form=_getForm();if(options.action===null){options.action=form.attr('action');}
if(options.key===null){options.key=form.children("[name='plupload']").val();}
const pluploadOptions={runtimes:'html5,flash,silverlight,html4',multi_selection:options.multiple,url:encodeURI(_decodeUrl(options.action)),file_data_name:options.name,flash_swf_url:'applications/core/interface/plupload/Movie.swf',silverlight_xap_url:'applications/core/interface/plupload/Movie.xap',browse_button:$(elem).find(options.button).identify().attr('id'),headers:{'x-plupload':options.key},chunk_size:options.maxChunkSize+'mb'};if(options.dropTarget){pluploadOptions.drop_element=$(options.dropTarget).attr('id');}else if($(elem).hasClass('ipsAttachment_dropZone')){pluploadOptions.drop_element=$(elem).attr('id');}else if($(elem).find('.ipsAttachment_dropZone').length){pluploadOptions.drop_element=$(elem).find('.ipsAttachment_dropZone').identify().attr('id');}
return pluploadOptions;}
function _isEncoded(url){url=url||'';return url!==decodeURI(url);}
function _decodeUrl(url){while(_isEncoded(url)){url=decodeURI(url);}
return url;}
function _initUploader(){pluploadObj.init();}
function _postInitEvents(){pluploadObj.bind('Error',events.error);pluploadObj.bind('FilesAdded',events.filesAdded);pluploadObj.bind('FilesRemoved',events.filesRemoved);pluploadObj.bind('UploadFile',events.uploadFile);pluploadObj.bind('UploadProgress',events.uploadProgress);pluploadObj.bind('FileUploaded',events.fileUploaded);pluploadObj.bind('UploadComplete',events.uploadComplete);$(elem).on('injectFile',function(e,data){data=data===undefined?e.originalEvent?.data:data;if(typeof data!=='object'||!(data.file instanceof File)||!('data'in data)){Debug.log('Cannot handle the file injection because there is no file to inject');return;}
const pluploadFile=new plupload.File(new moxie.file.File(getRuntimeUid(),data.file));injectIds[pluploadFile.id]=data.data;pluploadObj.addFile(pluploadFile);}).on('resetUploader',function(data){_resetUploader();});$(window).on('resize',function(){pluploadObj.refresh();});}
function getRuntimeUid(){if(!runtime){runtime=new(moxie.runtime.Runtime.getConstructor(pluploadObj.runtime))();runtime.init();}
return runtime.uid;}
function _resetUploader(){uploadCount=0;totalSize=0;_updateCount();$(elem).trigger('removeAllFiles',{uploaderID:uploaderID});}
function _startUpload(){Debug.log('Starting upload process...');pluploadObj.start();}
function _getStatus(status){switch(status){case plupload.QUEUED:return ips.getString('attachQueued');case plupload.UPLOADING:return ips.getString('attachUploading');case plupload.FAILED:return ips.getString('attachFailed');case plupload.DONE:return ips.getString('attachDone');}}
function _updateFileElement(file){const fileElem=_findFileElem(file);_removeStatusClasses(fileElem);_updateStatus(fileElem,file.status);_updateCount();return fileElem;}
function _findFileElem(file){return $(elem).find('#'+file.id);}
function _updateStatus(fileElem,status){$(fileElem).find('[data-role="status"]').html(_getStatus(status));$(fileElem).toggleClass('ipsAttach_error',status===plupload.FAILED);}
function _removeStatusClasses(fileElem){_.each(['uploading','done','error','queued'],function(type){fileElem.removeClass('ipsAttach_'+type);});}
function _updateCount(){$(elem).find('[data-role="count"]').text(uploadCount);elem.trigger('uploadedCountChanged',{count:uploadCount,percent:pluploadObj.total.percent,uploader:options.name});}
function _setPercent(fileElem,percent){$(fileElem).find('[data-role="progressbar"]').attr('value',percent);if(percent===100){fileElem.find('.ipsMeter').slideUp();}}
function _buildThumb(fileElem,file,info){let toInsert='';if(info.imagesrc){Debug.log(fileElem.find('[data-role="preview"]'));toInsert=$('<img/>').attr({src:info.thumbnail?info.thumbnail:info.imagesrc,alt:''});fileElem.attr('data-fullsizeurl',info.imagesrc).attr('data-thumbnailurl',info.thumbnail?info.thumbnail:info.imagesrc).find('[data-role="preview"]').html(toInsert);}else if(info.videosrc){toInsert=$('<video/>').append($('<source/>').attr({src:info.videosrc,type:fileElem.attr('data-mimeType')}));fileElem.attr('data-fullsizeurl',info.videosrc).find('[data-role="preview"]').html(toInsert);}
fileElem.attr('data-fileid',info.id);if(info.securityKey){fileElem.attr('data-filekey',info.securityKey);}}
function _deleteFile(fileElem,e){e.preventDefault();e.stopPropagation();let baseUrl=options.action;if(baseUrl.match(/\?/)){if(baseUrl.slice(-1)!=='?'){baseUrl+='&';}}else{baseUrl+='?';}
ips.getAjax()(baseUrl+'getUploader&postKey='+options.postkey+'&deleteFile='+encodeURIComponent(fileElem.attr('data-fileid')));uploadCount--;totalSize=totalSize-fileElem.attr('data-filesize');_updateCount();fileElem.fadeOut(function(){fileElem.remove();elem.trigger('fileDeleted',{fileElem:fileElem,uploader:options.name,count:uploadCount,postkey:options.postkey});});}
function _supportsDraggable(){return'draggable'in document.createElement('span')&&FileReader!==undefined&&!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);}
function _fixZIndex(){$(elem).get(0).querySelector(options.button)?.style.setProperty('z-index','')}
let events={init(up){_fixZIndex();if(_supportsDraggable()){const dropElement=$(up.settings.drop_element);let currentElem=null;$(document).on('dragenter',function(e){if(currentElem&&!$(e.target).is(dropElement)&&!$.contains(dropElement.get(0),currentElem)){dropElement.removeClass('ipsDragging');currentElem=null;}});dropElement.on('dragleave',function(){if(!$(currentElem).is(dropElement)&&!$.contains(dropElement.get(0),currentElem)){dropElement.removeClass('ipsDragging');currentElem=null;}}).on('dragenter',function(e){const target=$(e.target);if(target.is(dropElement)||$.contains(dropElement.get(0),e.target)){dropElement.addClass('ipsDragging');currentElem=e.target;}}).on('drop',function(){dropElement.removeClass('ipsDragging');currentElem=null;});}},filesAdded(up,files){_fixZIndex();if(!options.multiple){listContainer.find('[data-role="deleteFile"]').click();if(files.length>1){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.getString('uploadSingleErr')});return false;}}else if(options.maxFiles){if(files.length>options.maxFiles||(uploadCount+files.length)>options.maxFiles){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('uploadMaxFilesErr'),options.maxFiles),callbacks:{}});for(const file of files){up.removeFile(file);}
return false;}}else if(options.maxTotalSize&&totalSize>(options.maxTotalSize*1048576)){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.getString('uploadTotalErr',{size:parseFloat((options.maxTotalSize>=1)?options.maxTotalSize:(options.maxTotalSize*1024)).toLocaleString($('html').attr('lang')),size_suffix:(options.maxTotalSize>=1)?ips.getString('size_mb'):ips.getString('size_kb')}),callbacks:{}});for(const file of files){up.removeFile(file);}
return false;}
const allowedFileTypes=(options.allowedFileTypes!==null)?new Set(JSON.parse(options.allowedFileTypes?.toLowerCase?.())||[]):'';let tooLarge=0,overTotalLimit=0,badType=0,sizeAllowance=options.maxTotalSize?(options.maxTotalSize*1048576)-totalSize:null,fileSizeAllowance=options.maxFileSize?options.maxFileSize*1048576:null
for(let file of files){if(fileSizeAllowance!==null&&file.size>fileSizeAllowance){tooLarge++;up.removeFile(file);continue;}
if(sizeAllowance!==null){if(sizeAllowance<file.size){overTotalLimit++;up.removeFile(file);continue;}
sizeAllowance-=file.size;}
const ext=file.name.split('.').pop().toLowerCase();if(allowedFileTypes?.size&&!allowedFileTypes.has(ext)){badType++;up.removeFile(file);continue;}
const size=plupload.formatSize(file.size),status=_getStatus(file.status);$(elem).trigger('addUploaderFile',{uploaderID:uploaderID,id:file.id,title:file.name,mime:file.type,size:size,sizeRaw:file.size,status,statusCode:file.status,statusText:ips.getString('attachStatus',{size:size,status:status}),field_name:elem.attr('data-ipsUploader-name'),newUpload:true,insertable:true,isImage:imageExtensions.has(ext),isVideo:videoExtensions.has(ext),isAudio:audioExtensions.has(ext),supportsDelete:options.supportsDelete});$('#'+file.id).addClass('ipsAttach_queued').trigger('newItem',[$('#'+file.id)]);}
if(tooLarge){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('uploadSizeErr',{max_file_size:parseFloat((options.maxFileSize>1)?options.maxFileSize:(options.maxFileSize*1024)).toLocaleString(document.documentElement.lang),size_suffix:(options.maxFileSize>1)?ips.getString('size_mb'):ips.getString('size_kb')}),[tooLarge,tooLarge])});for(const file of files){up.removeFile(file);}}
if(overTotalLimit){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('uploadSizeTotalErr',{max_file_size:parseFloat(options.maxTotalSize>1?options.maxTotalSize:options.maxTotalSize*1024).toLocaleString(document.documentElement.lang),size_suffix:(options.maxTotalSize>1)?ips.getString('size_mb'):ips.getString('size_kb')}),[overTotalLimit,overTotalLimit]),callbacks:{}});}
if(badType){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('pluploaderr_-601',{allowed_extensions:[...allowedFileTypes].join(', ')}),[tooLarge,tooLarge]),callbacks:{}});}
if(up.files.length){$(elem).trigger('fileAdded',{count:up.files.length,uploader:options.name});if(options.autoStart){_startUpload();}}},filesRemoved(uploader,files){if(files instanceof Array||Symbol.iterator in files){for(const file of files){if(file.id&&injectIds[file.id]?.error instanceof Function){try{injectIds[file.id].error();}catch(e){console.error(e);}}}}
_fixZIndex();Debug.log('removed');},uploadFile(up,file){_fixZIndex();$(elem).find('.ipsAttachment_loading').show();_updateFileElement(file).addClass('ipsAttach_uploading');},uploadProgress(up,file){_fixZIndex();const fileElem=_updateFileElement(file);fileElem.addClass('ipsAttach_uploading');_setPercent(fileElem,file.percent);elem.trigger('uploadProgress',{count:uploadCount,percent:pluploadObj.total.percent,uploader:options.name});},uploadComplete(up,files){_fixZIndex();let success=0;let error=0;_.each(files,function(file){if(file.status===5){success++;}else if(file.status===4){error++;}});const total=success+error;$(elem).find('.ipsAttachment_loading').hide();elem.trigger('uploadComplete',{success:success,error:error,total:total,uploader:options.name});if(ips.utils.events.getVisibilityProp()!==undefined||!document[ips.utils.events.getVisibilityProp()]){return;}
const text=[];if(!total){return;}
if(success){text.push(ips.pluralize(ips.getString('notifyUploadSuccess'),[success]));}
if(error){text.push(ips.pluralize(ips.getString('notifyUploadError'),[error]));}
if(ips.utils.notification.hasPermission()){ips.utils.notification.create({title:ips.pluralize(ips.getString('yourUploadsFinished'),[total]),body:text.join(' '),icon:ips.getSetting('upload_imgURL'),onClick:function(){try{window.focus();}catch(err){}}}).show();}
if(sound){try{sound.play();}catch(err){}}},fileUploaded(up,file,info){_fixZIndex();uploadCount++;totalSize+=file.size;const fileElem=_updateFileElement(file);fileElem.addClass('ipsAttach_done');if(options.insertable){ips.utils.anim.go('fadeIn',fileElem.find('[data-role="insert"]'));}
fileElem.find('[data-role="deleteFileWrapper"]').slideDown();_setPercent(fileElem,100);try{const jsonInfo=$.parseJSON(info.response);elem.before($('<input type="hidden">').attr('name',elem.attr('data-ipsUploader-name')+'_existing['+file.id+']').attr('value',jsonInfo.id));if(jsonInfo['error']){fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));file.status=plupload.FAILED;up.trigger('error',{code:jsonInfo['error'],extra:jsonInfo['extra'],subText:jsonInfo['sub'],file:file,uploader:options.name});return;}
if(jsonInfo){_buildThumb(fileElem,file,jsonInfo);fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));}}catch(err){fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));file.status=plupload.FAILED;up.trigger('error',{code:'upload_error',extra:err.message,file:file,uploader:options.name});Debug.warn(err);}
if(file.id&&injectIds[file.id]){$(elem).trigger('fileInjected',{'fileElem':fileElem,'data':injectIds[file.id]});delete injectIds[file.id];}},error(up,err){_fixZIndex();if(err.file){_updateFileElement(err.file);}
if(err.code===-600||err.code===-601){return;}
let errorMessage=ips.getString('pluploaderr_'+err.code,{max_file_size:parseFloat((options.maxFileSize>1)?options.maxFileSize:(options.maxFileSize*1024)).toLocaleString($('html').attr('lang')),size_suffix:(options.maxFileSize>1)?ips.getString('size_mb'):ips.getString('size_kb'),allowed_extensions:(options.allowedFileTypes!==null)?$.parseJSON(options.allowedFileTypes).join(','):'',server_error_code:(err.extra!==null)?err.extra:0,});if(!errorMessage){errorMessage=ips.getString('pluploaderr_SERVER_CONFIGURATION',{server_error_code:err.code});err.subText=ips.getString('pluploaderr_error_code',{code:err.code});}
ips.ui.alert.show({type:'alert',icon:'warn',message:errorMessage,callbacks:{},subTextHtml:err.subText?err.subText:null});}};init();return{init,refresh};};"use strict";const iconMap={'txt':'file-lines','rtf':'file-lines','csv':'file-lines','pdf':'file-pdf','doc':'file-word','docx':'file-word','xls':'file-excel','xlsx':'file-excel','xlsm':'file-excel','zip':'file-archive','tar':'file-archive','gz':'file-archive','ppt':'file-powerpoint','pptx':'file-powerpoint','ico':'file-image','gif':'file-image','jpeg':'file-image','jpg':'file-image','jpe':'file-image','png':'file-image','avif':'file-image','psd':'file-image','webp':'file-image','aac':'file-audio','mp3':'file-audio','ogg':'file-audio','ogv':'file-audio','wav':'file-audio','m4a':'file-audio','flv':'file-video','mkv':'file-video','mp4':'file-video','mpg':'file-video','mpeg':'file-video','3gp':'file-video','webm':'file-video','wmv':'file-video','avi':'file-video','m4v':'file-video','mov':'file-video','css':'file-code','html':'file-code','js':'file-code','xml':'file-code',};ips.createModule('ips.ui.uploader',function(){const defaults={multiple:false,allowedFileTypes:null,maxFileSize:null,maxTotalSize:null,maxChunkSize:null,action:null,name:'upload',button:'.ipsButton--primary',key:null,autoStart:true,insertable:false,template:'core.attachments.fileItem',postkey:'',supportsDelete:true,allowStockPhotos:false,};function respond(elem,options){if(!$(elem).data('_uploader')){$(elem).show();$(elem).data('_uploader',uploadObj(elem,_.defaults(options,defaults)));}else{try{const obj=$(elem).data('_uploader');obj.refresh();}catch(err){Debug.log("Couldn't refresh uploader "+$(elem).identify().attr('id'));}}}
function refresh(elem){try{const obj=$(elem).data('_uploader');obj.refresh();}catch(err){Debug.log("Couldn't refresh uploader "+$(elem).identify().attr('id'));}}
function getObj(elem){if($(elem).data('_uploader')){return $(elem).data('_uploader');}
return undefined;}
function getExtensionIcon(filename){const extRegex=/(?:\.([^.]+))?$/;const ext=extRegex.exec(filename);if(!_.isUndefined(iconMap[ext[1]])){return iconMap[ext[1]];}
return'file';}
ips.ui.registerWidget('uploader',ips.ui.uploader,['multiple','allowedFileTypes','maxFileSize','maxTotalSize','maxChunkSize','action','name','button','key','maxFiles','dropTarget','listContainer','autoStart','insertable','template','existingFiles','postkey','supportsDelete','allowStockPhotos']);return{respond:respond,refresh:refresh,getObj:getObj,getExtensionIcon:getExtensionIcon};});}(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<results.messages.length;i++){errorList.append(ips.templates.render('core.forms.validationItem',{message:results.messages[i].message}));}
target.addClass('ipsField_error').attr('data-hasErrors',true);},_clearErrors=function(target){var id=target.identify().attr('id');if($('#'+id+'_errors').length){$('#'+id+'_errors').remove();}
target.removeClass('ipsField_error').removeAttr('data-hasErrors');}
init();return{};};ips.ui.registerWidget('validation',ips.ui.validation);return{respond: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=$('<div>'+response+'</div>');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=$('<div/>').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,_));;
;(($,_)=>{"use strict";const defaults={currentitems:[],canEdit:false}
const _globalExclude=`:not(.ipsTableOfContents *, .ipsEdited, aside *, #elPostFeed [data-ips-hook="postWrapper"]:not([data-ips-first-post]) *)`;const _pagebuilderContainer=`:is([data-blockid*="app_cms_Wysiwyg"], [data-blockid*="app_cms_Codemirror"], [data-pageid] [data-widgetarea*="col"] [data-blockid]) > .ipsWidget__content`
const _rootTocTextNodes=`:is(p,h1,h2,h3,h4,h5,h6)`;const _doubleNestedTocTextNodes=`:is(details, .ipsRichTextBox) > :is(summary, .ipsRichTextBox__title)`
@@ -1405,150 +1552,6 @@ lastItems=options.currentitems;TableOfContents.setItems(options.currentitems)}ca
TableOfContents.instanceMap.set(realElem,new TableOfContents(realElem,options))}
return TableOfContents.instanceMap.get(realElem)},refreshElems(){if(Array.isArray(lastItems)||lastItems===null){TableOfContents.setItems(lastItems,true);}},getInstance(elem){if(TableOfContents.instanceMap.has($(elem).get(0))){return TableOfContents.instanceMap.get($(elem).get(0))}
return null;},createSelector(elem){return TableOfContents.createSelector(elem)},getOptions(){return TableOfContents.options}}})})(jQuery,_);
;(function($,_,undefined){"use strict";const endCachingDebounced=_.throttle((elem)=>{ips.utils.position.endCaching(elem);},100,{leading:false});ips.createModule('ips.ui.tooltip',function(){let _tooltip=null,_timer=[],_currentElem=null,_showTimeout;function respond(elem,options,e){clearTimeout(_showTimeout);if(ips.utils.events.isTouchDevice()){return;}
if(!_tooltip){_createTooltipElement();}
if(e.type==='mouseleave'||e.type==='blur'||e.type==='focusout'){_hide();}else{const content=_getContent(elem,options);if(content){ips.utils.position.startCaching();_showTimeout=setTimeout(()=>{_show(elem,options,content);endCachingDebounced();});}}}
function _calculatePosition(elem,_tooltip){const positionInfo={trigger:elem,target:_tooltip,center:true,above:true,stemOffset:{left:10,top:0}};const tooltipEl=$(_tooltip).get(0);const tooltipPosition=ips.utils.position.positionElem(positionInfo);Object.assign(tooltipEl.style,{left:((tooltipPosition.left>0)?tooltipPosition.left:20)+'px',top:tooltipPosition.top+'px',position:(tooltipPosition.fixed)?'fixed':'absolute',zIndex:ips.ui.zIndex()});if(tooltipPosition.location.vertical==='top'){tooltipEl.classList.add('ipsTooltip_top')
tooltipEl.classList.remove('ipsTooltip_bottom');}else{tooltipEl.classList.add('ipsTooltip_bottom')
tooltipEl.classList.remove('ipsTooltip_top');}
tooltipEl.classList.remove('ipsTooltip_left','ipsTooltip_right');if(tooltipPosition.left>0){if(tooltipPosition.location.horizontal==='left'){tooltipEl.classList.add('ipsTooltip_left');}else if(tooltipPosition.location.horizontal==='right'){tooltipEl.classList.add('ipsTooltip_right');}}}
function _show(elem,options,content){elem=$(elem);ips.utils.anim.cancel(_tooltip);if(options.safe){_tooltip.hide().html(content);}else{_tooltip.hide().text(content);}
if(options.ajax&&!elem.data('_tooltip')){ips.getAjax()(options.ajax).done(response=>{$(elem).data('_tooltip',response);if(options.safe){_tooltip.html(response);}else{_tooltip.text(response);}
_calculatePosition(elem,_tooltip);});}
const element=$(elem).get(0);if(element.hasAttribute('title')){element.setAttribute('_title',element.getAttribute('title'));element.removeAttribute('title');}
_tooltip.show();_calculatePosition(elem,_tooltip);_currentElem=elem;_timer.push(setInterval(_checkForElemPresence,100));setTimeout(()=>$(elem).trigger('tooltipShown'),1);}
function _hide(){ips.utils.anim.go('fadeOut',_tooltip);_currentElem=null;if(_timer.length){for(var i=0;i<_timer.length;i++){clearInterval(_timer[i]);}
_timer=[];}}
function _checkForElemPresence(element){if(!_currentElem||!_currentElem.length||!_currentElem.is(':visible')){_hide();}}
function _getContent(elem,options){elem=$(elem);if(elem.data('_tooltip')){return elem.data('_tooltip');}
else if(options.label){if(options.json){return $.parseJSON(options.label).join("<br>");}else{return options.label;}}else if(elem.attr('aria-label')){return elem.attr('aria-label');}else if(elem.attr('_title')){return elem.attr('_title');}else if(elem.attr('title')){return elem.attr('title');}}
function _createTooltipElement(){var tooltip=ips.templates.render('core.tooltip',{id:'ipsTooltip'});ips.getContainer().append(tooltip);_tooltip=$('#ipsTooltip');}
ips.ui.registerWidget('tooltip',ips.ui.tooltip,['label','extraClass','safe','json','ajax'],{lazyLoad:true,lazyEvents:'mouseenter mouseleave focus blur'});return{respond};});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.createModule('ips.ui.truncate',function(){var defaults={expandText:ips.getString('show_more')};var respond=function(elem,options){let el=elem[0];if(el.closest('[data-ipseditorv5],.tiptap')){return;}
if(el.scrollHeight>el.offsetHeight){_hideTruncate(elem,_.defaults(options,defaults));}},_hideTruncate=function(elem,options){if(elem.attr('data-truncated')){return;}
var showMore=ips.templates.render('core.truncate.expand',{text:options.expandText});$(elem).after(showMore);var expander=elem.next("[data-action='expandTruncate']");elem.attr('data-truncated',true);expander.on('click',function(e){elem.attr('data-truncate-expanded',true);expander.remove();});};ips.ui.registerWidget('truncate',ips.ui.truncate,['expandText']);return{respond:respond};});}(jQuery,_));;
;(function($,_,undefined){const imageExtensions=new Set(['jpg','jpeg','jpe','gif','png','webp','avif']),audioExtensions=new Set(['mp3','ogg','wav','m4a']),videoExtensions=new Set(['mp4','3gp','mov','ogg','ogv','mpg','mpeg','flv','webm','wmv','avi','m4v']);const uploadObj=function(elem,options,e){elem=$(elem);let pluploadObj,runtime,listContainer,uploadCount=0,totalSize=0,injectIds={},uploaderID='',sound=null;function init(){uploaderID=$(elem).identify().attr('id');if(options.listContainer){listContainer=$(options.listContainer);}else if($(elem).find('[data-role="fileList"]').length){listContainer=$(elem).find('[data-role="fileList"]');}else{listContainer=$(elem);}
if(ips.templates.get(options.template+'Wrapper')){listContainer.prepend(ips.templates.render(options.template+'Wrapper'));const firstItem=listContainer.children().first();firstItem.append(listContainer.children().not(firstItem));listContainer=firstItem;$(document).trigger('contentChange',[listContainer.parent()]);}
$(document).on('addUploaderFile',_addUploaderFile);$(document).on('removeAllFiles',_removeAllFiles);if(options.existingFiles){try{const files=$.parseJSON(options.existingFiles);if(files.length){_buildExistingFiles(files);}}catch(err){Debug.error("Couldn't build existing files: "+err);}}
ips.utils.cookie.set('editor_supports_drag',_supportsDraggable()?'true':'false');$(elem).find('[data-action="browse"],[data-supports-drag]').attr('data-supports-drag',_supportsDraggable()?'true':'false');const load=ips.getSetting('useCompiledFiles')?['core/interface/plupload/plupload.full.min.js']:['core/interface/plupload/moxie.js','core/interface/plupload/plupload.dev.js'];ips.loader.get(load).then(function(){_setUpUploader();_initUploader();_postInitEvents();_setUpFormEvents();});}
function refresh(){if(pluploadObj){Debug.log("Refreshing");pluploadObj.refresh();}}
function _setUpFormEvents(){const form=_getForm();if(!form.length){return;}
if(options.allowStockPhotos!==false){$(elem).find('[data-action="stockPhoto"]').on('click',function(e){e.preventDefault();e.stopPropagation();const dialogRef=ips.ui.dialog.create({title:ips.getString("stockphoto_header"),fixed:false,destructOnClose:true,url:ips.getSetting('baseURL')+'?app=core&module=system&controller=pixabay&uploader='+$(elem).attr('data-ipsUploader-name'),});dialogRef.show();});}
form.on('submit',function(e){if(pluploadObj.state!==plupload.STOPPED){e.preventDefault();e.stopPropagation();ips.ui.alert.show({type:'alert',message:ips.getString('filesStillUploading'),subText:ips.getString('filesStillUploadingDesc'),icon:'warn'});$(elem).trigger('fileStillUploading');}});}
function _addUploaderFile(e,data){if(data.uploaderID===uploaderID){data.extIcon=ips.ui.uploader.getExtensionIcon(data.title);listContainer.append(ips.templates.render(_getTemplateName(data),data));}}
function _getTemplateName(data){if(options.template!==null){return options.template;}
let type='fileItem';if(data.isImage){type='imageItem';}else if(data.isVideo){type='videoItem';}
return`core.attachments.${type}`;}
function _removeAllFiles(){listContainer.find('[data-role="file"]').remove();}
function _buildExistingFiles(files){if(!files.length){return;}
for(let file of files){const data={id:file.id,imagesrc:file.imagesrc,thumbnail:file.thumbnail?file.thumbnail:'',thumbnail_for_css:file.thumbnail?file.thumbnail.replace('(','\\(').replace(')','\\)'):'',title:file.originalFileName,size:file.size,field_name:$(elem).attr('data-ipsUploader-name'),newUpload:false,insertable:!options.insertable,done:true,'default':file.default?file.default:null,supportsDelete:options.supportsDelete,extIcon:ips.ui.uploader.getExtensionIcon(file.originalFileName)};if(file.id===$(elem).attr('data-ipsUploader-default')){data['checked']="checked";}
if(file.hasThumb){data['thumb']="<img src='"+(file['thumbnail']?file['thumbnail']:file['imagesrc'])+"' class='ipsImage' alt='An uploaded image'>";}
listContainer.append(ips.templates.render(options.template,data));$('#'+file.id).trigger('newItem',[$('#'+file.id)]);}
$(elem).trigger('fileAdded',{count:files.length,uploader:options.name});}
function _setUpUploader(){pluploadObj=new plupload.Uploader(_getUploaderSettings());pluploadObj.bind('Init',events.init);listContainer.find('[data-role="file"]').each(function(){const fileElem=$(this);fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));uploadCount++;});}
function _getForm(){let form=$(elem).parentsUntil('','form');if(!form.length&&options.postkey){form=$(`[data-ipseditorv5-postkey="${options.postkey}"]`).closest('form');}
return form;}
function _getUploaderSettings(){const form=_getForm();if(options.action===null){options.action=form.attr('action');}
if(options.key===null){options.key=form.children("[name='plupload']").val();}
const pluploadOptions={runtimes:'html5,flash,silverlight,html4',multi_selection:options.multiple,url:encodeURI(_decodeUrl(options.action)),file_data_name:options.name,flash_swf_url:'applications/core/interface/plupload/Movie.swf',silverlight_xap_url:'applications/core/interface/plupload/Movie.xap',browse_button:$(elem).find(options.button).identify().attr('id'),headers:{'x-plupload':options.key},chunk_size:options.maxChunkSize+'mb'};if(options.dropTarget){pluploadOptions.drop_element=$(options.dropTarget).attr('id');}else if($(elem).hasClass('ipsAttachment_dropZone')){pluploadOptions.drop_element=$(elem).attr('id');}else if($(elem).find('.ipsAttachment_dropZone').length){pluploadOptions.drop_element=$(elem).find('.ipsAttachment_dropZone').identify().attr('id');}
return pluploadOptions;}
function _isEncoded(url){url=url||'';return url!==decodeURI(url);}
function _decodeUrl(url){while(_isEncoded(url)){url=decodeURI(url);}
return url;}
function _initUploader(){pluploadObj.init();}
function _postInitEvents(){pluploadObj.bind('Error',events.error);pluploadObj.bind('FilesAdded',events.filesAdded);pluploadObj.bind('FilesRemoved',events.filesRemoved);pluploadObj.bind('UploadFile',events.uploadFile);pluploadObj.bind('UploadProgress',events.uploadProgress);pluploadObj.bind('FileUploaded',events.fileUploaded);pluploadObj.bind('UploadComplete',events.uploadComplete);$(elem).on('injectFile',function(e,data){data=data===undefined?e.originalEvent?.data:data;if(typeof data!=='object'||!(data.file instanceof File)||!('data'in data)){Debug.log('Cannot handle the file injection because there is no file to inject');return;}
const pluploadFile=new plupload.File(new moxie.file.File(getRuntimeUid(),data.file));injectIds[pluploadFile.id]=data.data;pluploadObj.addFile(pluploadFile);}).on('resetUploader',function(data){_resetUploader();});$(window).on('resize',function(){pluploadObj.refresh();});}
function getRuntimeUid(){if(!runtime){runtime=new(moxie.runtime.Runtime.getConstructor(pluploadObj.runtime))();runtime.init();}
return runtime.uid;}
function _resetUploader(){uploadCount=0;totalSize=0;_updateCount();$(elem).trigger('removeAllFiles',{uploaderID:uploaderID});}
function _startUpload(){Debug.log('Starting upload process...');pluploadObj.start();}
function _getStatus(status){switch(status){case plupload.QUEUED:return ips.getString('attachQueued');case plupload.UPLOADING:return ips.getString('attachUploading');case plupload.FAILED:return ips.getString('attachFailed');case plupload.DONE:return ips.getString('attachDone');}}
function _updateFileElement(file){const fileElem=_findFileElem(file);_removeStatusClasses(fileElem);_updateStatus(fileElem,file.status);_updateCount();return fileElem;}
function _findFileElem(file){return $(elem).find('#'+file.id);}
function _updateStatus(fileElem,status){$(fileElem).find('[data-role="status"]').html(_getStatus(status));$(fileElem).toggleClass('ipsAttach_error',status===plupload.FAILED);}
function _removeStatusClasses(fileElem){_.each(['uploading','done','error','queued'],function(type){fileElem.removeClass('ipsAttach_'+type);});}
function _updateCount(){$(elem).find('[data-role="count"]').text(uploadCount);elem.trigger('uploadedCountChanged',{count:uploadCount,percent:pluploadObj.total.percent,uploader:options.name});}
function _setPercent(fileElem,percent){$(fileElem).find('[data-role="progressbar"]').attr('value',percent);if(percent===100){fileElem.find('.ipsMeter').slideUp();}}
function _buildThumb(fileElem,file,info){let toInsert='';if(info.imagesrc){Debug.log(fileElem.find('[data-role="preview"]'));toInsert=$('<img/>').attr({src:info.thumbnail?info.thumbnail:info.imagesrc,alt:''});fileElem.attr('data-fullsizeurl',info.imagesrc).attr('data-thumbnailurl',info.thumbnail?info.thumbnail:info.imagesrc).find('[data-role="preview"]').html(toInsert);}else if(info.videosrc){toInsert=$('<video/>').append($('<source/>').attr({src:info.videosrc,type:fileElem.attr('data-mimeType')}));fileElem.attr('data-fullsizeurl',info.videosrc).find('[data-role="preview"]').html(toInsert);}
fileElem.attr('data-fileid',info.id);if(info.securityKey){fileElem.attr('data-filekey',info.securityKey);}}
function _deleteFile(fileElem,e){e.preventDefault();e.stopPropagation();let baseUrl=options.action;if(baseUrl.match(/\?/)){if(baseUrl.slice(-1)!=='?'){baseUrl+='&';}}else{baseUrl+='?';}
ips.getAjax()(baseUrl+'getUploader&postKey='+options.postkey+'&deleteFile='+encodeURIComponent(fileElem.attr('data-fileid')));uploadCount--;totalSize=totalSize-fileElem.attr('data-filesize');_updateCount();fileElem.fadeOut(function(){fileElem.remove();elem.trigger('fileDeleted',{fileElem:fileElem,uploader:options.name,count:uploadCount,postkey:options.postkey});});}
function _supportsDraggable(){return'draggable'in document.createElement('span')&&FileReader!==undefined&&!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);}
function _fixZIndex(){$(elem).get(0).querySelector(options.button)?.style.setProperty('z-index','')}
let events={init(up){_fixZIndex();if(_supportsDraggable()){const dropElement=$(up.settings.drop_element);let currentElem=null;$(document).on('dragenter',function(e){if(currentElem&&!$(e.target).is(dropElement)&&!$.contains(dropElement.get(0),currentElem)){dropElement.removeClass('ipsDragging');currentElem=null;}});dropElement.on('dragleave',function(){if(!$(currentElem).is(dropElement)&&!$.contains(dropElement.get(0),currentElem)){dropElement.removeClass('ipsDragging');currentElem=null;}}).on('dragenter',function(e){const target=$(e.target);if(target.is(dropElement)||$.contains(dropElement.get(0),e.target)){dropElement.addClass('ipsDragging');currentElem=e.target;}}).on('drop',function(){dropElement.removeClass('ipsDragging');currentElem=null;});}},filesAdded(up,files){_fixZIndex();if(!options.multiple){listContainer.find('[data-role="deleteFile"]').click();if(files.length>1){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.getString('uploadSingleErr')});return false;}}else if(options.maxFiles){if(files.length>options.maxFiles||(uploadCount+files.length)>options.maxFiles){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('uploadMaxFilesErr'),options.maxFiles),callbacks:{}});for(const file of files){up.removeFile(file);}
return false;}}else if(options.maxTotalSize&&totalSize>(options.maxTotalSize*1048576)){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.getString('uploadTotalErr',{size:parseFloat((options.maxTotalSize>=1)?options.maxTotalSize:(options.maxTotalSize*1024)).toLocaleString($('html').attr('lang')),size_suffix:(options.maxTotalSize>=1)?ips.getString('size_mb'):ips.getString('size_kb')}),callbacks:{}});for(const file of files){up.removeFile(file);}
return false;}
const allowedFileTypes=(options.allowedFileTypes!==null)?new Set(JSON.parse(options.allowedFileTypes?.toLowerCase?.())||[]):'';let tooLarge=0,overTotalLimit=0,badType=0,sizeAllowance=options.maxTotalSize?(options.maxTotalSize*1048576)-totalSize:null,fileSizeAllowance=options.maxFileSize?options.maxFileSize*1048576:null
for(let file of files){if(fileSizeAllowance!==null&&file.size>fileSizeAllowance){tooLarge++;up.removeFile(file);continue;}
if(sizeAllowance!==null){if(sizeAllowance<file.size){overTotalLimit++;up.removeFile(file);continue;}
sizeAllowance-=file.size;}
const ext=file.name.split('.').pop().toLowerCase();if(allowedFileTypes?.size&&!allowedFileTypes.has(ext)){badType++;up.removeFile(file);continue;}
const size=plupload.formatSize(file.size),status=_getStatus(file.status);$(elem).trigger('addUploaderFile',{uploaderID:uploaderID,id:file.id,title:file.name,mime:file.type,size:size,sizeRaw:file.size,status,statusCode:file.status,statusText:ips.getString('attachStatus',{size:size,status:status}),field_name:elem.attr('data-ipsUploader-name'),newUpload:true,insertable:true,isImage:imageExtensions.has(ext),isVideo:videoExtensions.has(ext),isAudio:audioExtensions.has(ext),supportsDelete:options.supportsDelete});$('#'+file.id).addClass('ipsAttach_queued').trigger('newItem',[$('#'+file.id)]);}
if(tooLarge){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('uploadSizeErr',{max_file_size:parseFloat((options.maxFileSize>1)?options.maxFileSize:(options.maxFileSize*1024)).toLocaleString(document.documentElement.lang),size_suffix:(options.maxFileSize>1)?ips.getString('size_mb'):ips.getString('size_kb')}),[tooLarge,tooLarge])});for(const file of files){up.removeFile(file);}}
if(overTotalLimit){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('uploadSizeTotalErr',{max_file_size:parseFloat(options.maxTotalSize>1?options.maxTotalSize:options.maxTotalSize*1024).toLocaleString(document.documentElement.lang),size_suffix:(options.maxTotalSize>1)?ips.getString('size_mb'):ips.getString('size_kb')}),[overTotalLimit,overTotalLimit]),callbacks:{}});}
if(badType){ips.ui.alert.show({type:'alert',icon:'warn',message:ips.pluralize(ips.getString('pluploaderr_-601',{allowed_extensions:[...allowedFileTypes].join(', ')}),[tooLarge,tooLarge]),callbacks:{}});}
if(up.files.length){$(elem).trigger('fileAdded',{count:up.files.length,uploader:options.name});if(options.autoStart){_startUpload();}}},filesRemoved(uploader,files){if(files instanceof Array||Symbol.iterator in files){for(const file of files){if(file.id&&injectIds[file.id]?.error instanceof Function){try{injectIds[file.id].error();}catch(e){console.error(e);}}}}
_fixZIndex();Debug.log('removed');},uploadFile(up,file){_fixZIndex();$(elem).find('.ipsAttachment_loading').show();_updateFileElement(file).addClass('ipsAttach_uploading');},uploadProgress(up,file){_fixZIndex();const fileElem=_updateFileElement(file);fileElem.addClass('ipsAttach_uploading');_setPercent(fileElem,file.percent);elem.trigger('uploadProgress',{count:uploadCount,percent:pluploadObj.total.percent,uploader:options.name});},uploadComplete(up,files){_fixZIndex();let success=0;let error=0;_.each(files,function(file){if(file.status===5){success++;}else if(file.status===4){error++;}});const total=success+error;$(elem).find('.ipsAttachment_loading').hide();elem.trigger('uploadComplete',{success:success,error:error,total:total,uploader:options.name});if(ips.utils.events.getVisibilityProp()!==undefined||!document[ips.utils.events.getVisibilityProp()]){return;}
const text=[];if(!total){return;}
if(success){text.push(ips.pluralize(ips.getString('notifyUploadSuccess'),[success]));}
if(error){text.push(ips.pluralize(ips.getString('notifyUploadError'),[error]));}
if(ips.utils.notification.hasPermission()){ips.utils.notification.create({title:ips.pluralize(ips.getString('yourUploadsFinished'),[total]),body:text.join(' '),icon:ips.getSetting('upload_imgURL'),onClick:function(){try{window.focus();}catch(err){}}}).show();}
if(sound){try{sound.play();}catch(err){}}},fileUploaded(up,file,info){_fixZIndex();uploadCount++;totalSize+=file.size;const fileElem=_updateFileElement(file);fileElem.addClass('ipsAttach_done');if(options.insertable){ips.utils.anim.go('fadeIn',fileElem.find('[data-role="insert"]'));}
fileElem.find('[data-role="deleteFileWrapper"]').slideDown();_setPercent(fileElem,100);try{const jsonInfo=$.parseJSON(info.response);elem.before($('<input type="hidden">').attr('name',elem.attr('data-ipsUploader-name')+'_existing['+file.id+']').attr('value',jsonInfo.id));if(jsonInfo['error']){fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));file.status=plupload.FAILED;up.trigger('error',{code:jsonInfo['error'],extra:jsonInfo['extra'],subText:jsonInfo['sub'],file:file,uploader:options.name});return;}
if(jsonInfo){_buildThumb(fileElem,file,jsonInfo);fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));}}catch(err){fileElem.on('click','[data-role="deleteFile"]',_.bind(_deleteFile,fileElem,fileElem));file.status=plupload.FAILED;up.trigger('error',{code:'upload_error',extra:err.message,file:file,uploader:options.name});Debug.warn(err);}
if(file.id&&injectIds[file.id]){$(elem).trigger('fileInjected',{'fileElem':fileElem,'data':injectIds[file.id]});delete injectIds[file.id];}},error(up,err){_fixZIndex();if(err.file){_updateFileElement(err.file);}
if(err.code===-600||err.code===-601){return;}
let errorMessage=ips.getString('pluploaderr_'+err.code,{max_file_size:parseFloat((options.maxFileSize>1)?options.maxFileSize:(options.maxFileSize*1024)).toLocaleString($('html').attr('lang')),size_suffix:(options.maxFileSize>1)?ips.getString('size_mb'):ips.getString('size_kb'),allowed_extensions:(options.allowedFileTypes!==null)?$.parseJSON(options.allowedFileTypes).join(','):'',server_error_code:(err.extra!==null)?err.extra:0,});if(!errorMessage){errorMessage=ips.getString('pluploaderr_SERVER_CONFIGURATION',{server_error_code:err.code});err.subText=ips.getString('pluploaderr_error_code',{code:err.code});}
ips.ui.alert.show({type:'alert',icon:'warn',message:errorMessage,callbacks:{},subTextHtml:err.subText?err.subText:null});}};init();return{init,refresh};};"use strict";const iconMap={'txt':'file-lines','rtf':'file-lines','csv':'file-lines','pdf':'file-pdf','doc':'file-word','docx':'file-word','xls':'file-excel','xlsx':'file-excel','xlsm':'file-excel','zip':'file-archive','tar':'file-archive','gz':'file-archive','ppt':'file-powerpoint','pptx':'file-powerpoint','ico':'file-image','gif':'file-image','jpeg':'file-image','jpg':'file-image','jpe':'file-image','png':'file-image','avif':'file-image','psd':'file-image','webp':'file-image','aac':'file-audio','mp3':'file-audio','ogg':'file-audio','ogv':'file-audio','wav':'file-audio','m4a':'file-audio','flv':'file-video','mkv':'file-video','mp4':'file-video','mpg':'file-video','mpeg':'file-video','3gp':'file-video','webm':'file-video','wmv':'file-video','avi':'file-video','m4v':'file-video','mov':'file-video','css':'file-code','html':'file-code','js':'file-code','xml':'file-code',};ips.createModule('ips.ui.uploader',function(){const defaults={multiple:false,allowedFileTypes:null,maxFileSize:null,maxTotalSize:null,maxChunkSize:null,action:null,name:'upload',button:'.ipsButton--primary',key:null,autoStart:true,insertable:false,template:'core.attachments.fileItem',postkey:'',supportsDelete:true,allowStockPhotos:false,};function respond(elem,options){if(!$(elem).data('_uploader')){$(elem).show();$(elem).data('_uploader',uploadObj(elem,_.defaults(options,defaults)));}else{try{const obj=$(elem).data('_uploader');obj.refresh();}catch(err){Debug.log("Couldn't refresh uploader "+$(elem).identify().attr('id'));}}}
function refresh(elem){try{const obj=$(elem).data('_uploader');obj.refresh();}catch(err){Debug.log("Couldn't refresh uploader "+$(elem).identify().attr('id'));}}
function getObj(elem){if($(elem).data('_uploader')){return $(elem).data('_uploader');}
return undefined;}
function getExtensionIcon(filename){const extRegex=/(?:\.([^.]+))?$/;const ext=extRegex.exec(filename);if(!_.isUndefined(iconMap[ext[1]])){return iconMap[ext[1]];}
return'file';}
ips.ui.registerWidget('uploader',ips.ui.uploader,['multiple','allowedFileTypes','maxFileSize','maxTotalSize','maxChunkSize','action','name','button','key','maxFiles','dropTarget','listContainer','autoStart','insertable','template','existingFiles','postkey','supportsDelete','allowStockPhotos']);return{respond:respond,refresh:refresh,getObj:getObj,getExtensionIcon:getExtensionIcon};});}(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<results.messages.length;i++){errorList.append(ips.templates.render('core.forms.validationItem',{message:results.messages[i].message}));}
target.addClass('ipsField_error').attr('data-hasErrors',true);},_clearErrors=function(target){var id=target.identify().attr('id');if($('#'+id+'_errors').length){$('#'+id+'_errors').remove();}
target.removeClass('ipsField_error').removeAttr('data-hasErrors');}
init();return{};};ips.ui.registerWidget('validation',ips.ui.validation);return{respond: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=$('<div>'+response+'</div>');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=$('<div/>').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($,_){"use strict";ips.createModule('ips.ui.tabbar',function(){const defaults={itemSelector:'.ipsTabs__tab',activeClass:false,loadingClass:'ipsLoading ipsTabs_loadingContent',panelClass:'ipsTabs__panel',updateURL:true,updateTitle:false,disableNav:false};ips.ui.registerWidget('tabbar',ips.ui.tabbar,['contentArea','itemSelector','activeClass','loadingClass','disableNav','panelClass','updateURL','updateTitle']);return{respond(elem,options){if(!$(elem).data('_tabbar')){$(elem).data('_tabbar',tabBarObj(elem,_.defaults(options,defaults)));}}};});function tabBarObj(elem,options){const rawElem=$(elem).get(0);const tabs=$(elem).find(options.itemSelector);let barId=rawElem.id;let active;let ajaxObj;function init(){if(!barId){barId=$(rawElem).identify().attr('id');}
if(!options.contentArea||!$(options.contentArea).length){options.contentArea='#'+$(rawElem).next().identify().attr('id');}
if(!tabs.length){Debug.warn("No tabs found in tab bar"+barId);return;}
active=_getActiveTab();_initializeActive();$(elem).on('click',options.itemSelector,_handleTabClick);let tabbar=elem[0],tablist=tabbar.querySelector('[role="tablist"]'),scrollers=tabbar.querySelector('[data-role="tabScrollers"]');if(scrollers){scrollers.addEventListener("click",e=>_handleScrollerClick(e,tablist));let scrollerObserver=new IntersectionObserver(tabs=>tabs.forEach(tab=>tabbar.querySelector(`[data-direction="${tab.target.matches(':first-child') ? 'prev' : 'next'}"]`).hidden=tab.intersectionRatio>.99),{root:tablist,threshold:0.99});tablist.querySelectorAll(':scope > :first-child, :scope > :last-child').forEach(el=>{scrollerObserver.observe(el)});}}
function _handleScrollerClick(e,tablist){let direction=e.target.closest('button').getAttribute("data-direction"),currentScroll=tablist.scrollLeft,listWidth=tablist.offsetWidth/2;if(direction==="prev"){listWidth=-listWidth;}
tablist.scrollTo({left:currentScroll+listWidth,behavior:"smooth"})}
function _handleTabClick(e){if(options.disableNav){return;}
e.preventDefault();if($(this).attr('aria-selected')==='true'){return;}
let thisId=$(this).identify().attr('id'),thisContent=$('#'+$(this).attr('aria-controls'));if(!thisContent.length){thisContent=$('#'+thisId+'_panel');}
if(!thisContent.length){thisContent=_createTabPanel(thisId);_loadContent(this,thisContent).done(()=>_switchTab(thisId)).fail(()=>Debug.log('failed'));}else{_hideAllPanels();_switchTab(thisId);}
_updateURL(thisId);}
function _switchTab(tabId){_hideAllPanels();const thisContent=$('#'+tabId+'_panel'),thisContentParent=document.querySelector(elem[0].getAttribute("data-ipstabbar-contentarea"));thisContent.removeAttr('hidden');$(elem).trigger('tabShown',{barID:barId,tabID:tabId,tab:active,panel:thisContent});$(document).trigger('contentChange',[thisContent]);if(elem[0].matches(".ipsTabs--sticky")&&thisContentParent&&window.scrollY>thisContentParent.offsetTop){thisContentParent.scrollIntoView({behavior:"smooth"});}
active=$('#'+tabId);_makeTabActive(active);$(elem).trigger('tabChanged',{barID:barId,tabID:tabId,tab:active,panel:thisContent});}
function _updateURL(tabId){if(!options.updateURL){return;}
const tabLink=$(`#${tabId}`);const href=tabLink.attr('href');const title=(options.updateTitle&&tabLink.attr('title'))?tabLink.attr('title'):document.title;if(!_.isEmpty(href)&&!href.startsWith('#')){ips.utils.history.replaceState({},'ips.ui.tabbar',href);document.title=title
ips.utils.analytics.trackPageView(href);}}
function _getActiveTab(){const activeTab=elem.find('[aria-selected="true"]');if(activeTab.length){return activeTab.get(0);}
return $(elem).find(options.itemSelector).first();}
function _initializeActive(){const activeId=$(active).identify().attr('id');if(!$('#'+activeId+'_panel').length){if($(options.contentArea).children().length){$(options.contentArea).wrapInner(_createTabPanel(activeId,true));_switchTab(activeId);}else{var newPanel=_createTabPanel(activeId);_loadContent(active,newPanel).done(function(){_switchTab(activeId);});}}else{_switchTab(activeId);}}
function _makeTabActive(activeTab){$(elem).find(options.itemSelector).attr('aria-selected','false');if(options.activeClass){$(elem).find(options.itemSelector).removeClass(options.activeClass);}
$(activeTab).attr('aria-selected','true');if(options.activeClass){$(activeTab).addClass(options.activeClass);}}
function _loadContent(tab,container){let url;const deferred=$.Deferred();_hideAllPanels();if($(tab).attr('data-tabURL')){url=$(tab).attr('data-tabURL');}else{url=$(tab).attr('href');}
$(options.contentArea).addClass(options.loadingClass);ajaxObj=ips.getAjax();ajaxObj(url).done(response=>{$(container).html(response);deferred.resolve();}).fail(()=>window.location=$(tab).attr('href')).always(()=>$(options.contentArea).removeClass(options.loadingClass));return deferred.promise();}
function _hideAllPanels(){$(options.contentArea).find('> .'+options.panelClass).attr('hidden','');}
function _createTabPanel(tabId,noAppend=false){const newPanel=$('<div/>').attr({'id':tabId+'_panel'}).addClass(options.panelClass).attr({'role':'tabpanel'}).attr({'aria-labelledby':tabId});if(!noAppend){$(options.contentArea).append(newPanel);}
return newPanel;}
init();return{init};}}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.createModule('ips.utils',function(options){var argsToArray=function(obj){return Array.prototype.slice.call(obj);},uppercaseFirst=function(fromString){return fromString.charAt(0).toUpperCase()+fromString.slice(1);},getIDsFromList=function(list){if(!list){return'';}
if(!_.isArray(list)){list=list.toString().split(',');}
list=_.compact(list);if(!list.length){return false;}
@@ -1556,6 +1559,7 @@ return _.map(list,function(val){return'#'+val;}).join(',');},getCitation=functio
if(data.timestamp){citation=ips.getString('editorQuoteLineWithTime',{date:ips.utils.time.readable(data.timestamp),username:username});}else{citation=ips.getString('editorQuoteLine',{username:username});}}
return citation;},escapeRegexp=function(toEscape){return toEscape.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");},urlBase64ToUint8Array=function(base64String){var padding='='.repeat((4-base64String.length%4)%4);var base64=(base64String+padding).replace(/\-/g,'+').replace(/_/g,'/');var rawData=window.atob(base64);var outputArray=new Uint8Array(rawData.length);for(var i=0;i<rawData.length;++i){outputArray[i]=rawData.charCodeAt(i);}
return outputArray;};return{argsToArray:argsToArray,uppercaseFirst:uppercaseFirst,getIDsFromList:getIDsFromList,getCitation:getCitation,escapeRegexp:escapeRegexp,urlBase64ToUint8Array:urlBase64ToUint8Array};});}(jQuery,_));;
;(function($,_){"use strict";ips.createModule('ips.utils.broadcastChannel',()=>{const channel='BroadcastChannel'in window?new window.BroadcastChannel("ipsBroadcastChannel"):undefined;return{channel:channel,enabled:'BroadcastChannel'in window}})})(jQuery,_);;
;(function($,_,undefined){"use strict";ips.createModule('ips.utils.color',function(){var init=function(){};var convertHex=function(hex,toHue,toSat){hex=hex.replace('#','');if(hex.length===3){hex=hex.slice(0,1)+hex.slice(0,1)+hex.slice(1,2)+hex.slice(1,2)+hex.slice(2,3)+hex.slice(2,3);}
if(hex.length!==6){Debug.write(hex+" isn't a valid hex color");return false;}
var r=(hexToRGB(hex.slice(0,2))/255);var g=(hexToRGB(hex.slice(2,4))/255);var b=(hexToRGB(hex.slice(4,6))/255);var hsl=RGBtoHSL(r,g,b);hsl[0]=(1/360)*toHue;hsl[1]=(1/100)*toSat;var rgb=HSLtoRGB(hsl[0],hsl[1],hsl[2]);return RGBtoHex(rgb[0],rgb[1],rgb[2]);},HSLtoRGB=function(h,s,l){var red=0;var green=0;var blue=0;var v2=0;if(s==0){red=l*255;green=l*255;blue=l*255;}else{if(l<0.5){v2=l*(1+s);}else{v2=(l+s)-(s*l);}
+11 -7
View File
@@ -11,13 +11,15 @@ if(!this._tableOverlay){this._tableOverlay=$('<div/>').addClass('ipsLoading').hi
if(loading){var dims=ips.utils.position.getElemDims(rowElem);var position=ips.utils.position.getElemPosition(rowElem);this._tableOverlay.show().css({left:position.viewportOffset.left+'px',top:position.viewportOffset.top+$(document).scrollTop()+'px',width:dims.width+'px',height:dims.height+'px',position:'absolute',zIndex:ips.ui.zIndex()});rowElem.css({opacity:"0.5"});}else{rowElem.animate({opacity:"1"});this._tableOverlay.hide();}};this.changeSorting=function(e,data){data.originalEvent.preventDefault();if(_.isUndefined(data.selectedItemID)){return;}
var current=this._getSortValue();var menuItem=data.menuElem.find('[data-ipsMenuValue="'+data.selectedItemID+'"]');var sortBy=data.selectedItemID;var sortDirection=current.order;if(menuItem.attr('data-sortDirection')){sortDirection=menuItem.attr('data-sortDirection');}
this.updateURL({sortby:sortBy,sortdirection:sortDirection,page:1});};this._getSortValue=function(){var by=ips.utils.url.getParam('sortby');var order=ips.utils.url.getParam('sortdirection');return{by:by||'',order:order||''};};this._getFilterValue=function(){var filter=ips.utils.url.getParam('filter');return filter||'';};});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.controller.register('core.front.core.app',{initialize:function(){this.on('click','a[data-confirm],button[data-confirm]',this.confirmSomething);this.on(document,'contentChange',this._checkAndClearAutosave);this.on(document,'contentChange',this.checkOldEmbeds);this.on(document,'contentChange',this.updateExternalLinks);document.addEventListener("ips:colorScheme",this.colorScheme);window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change',this.updatePrefersColorScheme);this.setup();},setup:function(){if(ips.utils.serviceWorker.supported){ips.utils.serviceWorker.registerServiceWorker('front',!_.isUndefined(ips.utils.cookie.get('loggedIn')));}
;(function($,_,undefined){"use strict";ips.controller.register('core.front.core.app',{initialize:function(){this.on('click','a[data-confirm],button[data-confirm]',this.confirmSomething);this.on(document,'contentChange',this._checkAndClearAutosave);this.on(document,'contentChange',this.checkOldEmbeds);this.on(document,'contentChange',this.updateExternalLinks);document.addEventListener("ips:colorScheme",this.colorScheme);window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change',this.updatePrefersColorScheme);if(ips.utils.broadcastChannel.enabled){ips.utils.broadcastChannel.channel.addEventListener("message",this.broadcastChannelEvent);}
this.setup();},setup:function(){if(ips.utils.serviceWorker.supported){ips.utils.serviceWorker.registerServiceWorker('front',!_.isUndefined(ips.utils.cookie.get('loggedIn')));}
if(!ips.utils.events.isTouchDevice()){this.scope.addClass('ipsApp_noTouch');}
ips.utils.cookie.set('ipsTimezone',new Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC");this._checkAndClearAutosave();if(!ips.getSetting('memberID')&&ips.utils.url.getParam('_fromLogout')){ips.utils.db.removeByType('editorSave');}
if($('#elInlineMessage').length){var dialogRef=ips.ui.dialog.create({showFrom:'#inbox',content:'#elInlineMessage',title:$('#elInlineMessage').attr('title')});setTimeout(function(){dialogRef.show();},800);}
ips.utils.links.updateExternalLinks(this.scope);this._upgradeOldEmbeds(this.scope);if(!ips.getSetting('viewProfiles')){this._removeProfileLinks();}},updateExternalLinks:function(e,data){ips.utils.links.updateExternalLinks(data);},checkOldEmbeds:function(e,data){this._upgradeOldEmbeds(data);},_removeProfileLinks:function(){this.scope.find('a[data-mentionid],a[href*="controller=profile"]').replaceWith(function(){return $(this).contents();});},_upgradeOldEmbeds:function(element){if(_.isUndefined(element)){return;}
var oldEmbeds=element.find('[data-embedcontent]:not([data-controller], [data-embed-src])');var toRefresh=[];if(oldEmbeds.length){oldEmbeds.each(function(){$(this).attr('data-controller','core.front.core.autoSizeIframe');toRefresh.push(this);Debug.log("Upgraded old embed");});$(document).trigger('contentChange',[jQuery([]).pushStack(toRefresh)]);}},_checkAndClearAutosave:function(){if(ips.utils.cookie.get('clearAutosave')){var autoSaveKeysToClear=ips.utils.cookie.get('clearAutosave').split(',');for(var i=0;i<autoSaveKeysToClear.length;i++){ips.utils.db.remove('editorSave',autoSaveKeysToClear[i]);}
ips.utils.cookie.unset('clearAutosave');}},confirmSomething:function(e){e.preventDefault();var elem=$(e.currentTarget);var customMessage=$(e.currentTarget).attr('data-confirmMessage');var subMessage=$(e.currentTarget).attr('data-confirmSubMessage');var icon=$(e.currentTarget).attr('data-confirmIcon');ips.ui.alert.show({type:'confirm',icon:(icon)?icon:'warn',message:(customMessage)?customMessage:ips.getString('generic_confirm'),subText:(subMessage)?subMessage:'',callbacks:{ok:function(){window.location=elem.attr('href')+'&wasConfirmed=1';}}});},colorScheme(ev){let value=ev.detail.scheme;document.querySelectorAll('[data-ips-prefers-color-scheme]').forEach(el=>{el.removeAttribute('aria-current');if(el.matches('[data-ips-prefers-color-scheme='+value+']')){el.setAttribute('aria-current','true');}});document.documentElement.dataset.ipsSchemeActive=value;if(value==='system'){document.documentElement.dataset.ipsScheme=(window.matchMedia('(prefers-color-scheme: dark)').matches)?'dark':'light';}else{document.documentElement.dataset.ipsScheme=value;}
ips.utils.cookie.unset('clearAutosave');}},confirmSomething:function(e){e.preventDefault();var elem=$(e.currentTarget);var customMessage=$(e.currentTarget).attr('data-confirmMessage');var subMessage=$(e.currentTarget).attr('data-confirmSubMessage');var icon=$(e.currentTarget).attr('data-confirmIcon');ips.ui.alert.show({type:'confirm',icon:(icon)?icon:'warn',message:(customMessage)?customMessage:ips.getString('generic_confirm'),subText:(subMessage)?subMessage:'',callbacks:{ok:function(){window.location=elem.attr('href')+'&wasConfirmed=1';}}});},broadcastChannelEvent(ev){if(ev.data.command==="colorScheme"){document.dispatchEvent(new CustomEvent("ips:colorScheme",{bubbles:true,detail:{scheme:ev.data.value}}));}},colorScheme(ev){if(document.documentElement.matches('[data-ips-scheme-toggle="false"]')){return;}
let value=ev.detail.scheme;document.querySelectorAll('[data-ips-prefers-color-scheme]').forEach(el=>{if(el.matches('[data-ips-prefers-color-scheme='+value+']')){el.setAttribute('aria-current','true');}else{el.removeAttribute('aria-current');}});document.documentElement.dataset.ipsSchemeActive=value;if(value==='system'){document.documentElement.dataset.ipsScheme=(window.matchMedia('(prefers-color-scheme: dark)').matches)?'dark':'light';}else{document.documentElement.dataset.ipsScheme=value;}
ips.utils.cookie.set('scheme_preference',value,true);},updatePrefersColorScheme:function(){if(document.documentElement.getAttribute('data-ips-scheme-active')==='system'){document.documentElement.setAttribute('data-ips-scheme',(window.matchMedia('(prefers-color-scheme: dark)').matches)?'dark':'light');}}});}(jQuery,_));;
;(function($,_,undefined){"use strict";ips.controller.register('core.front.core.autoSizeIframe',{_origin:ips.utils.url.getOrigin(),_embedId:'',_iframe:null,_border:{vertical:0,horizontal:0},initialize(){if(!this.scope.is('iframe')){return;}
this.on(window,'message',this.receiveMessage);this.on(document,'breakpointChange',this.breakpointChange);this.setup();},setup(){this._lastDims={height:0,width:0};var iframe=this.scope.get(0);iframe.style.overflow='hidden';this._getBorderAdjustment();if(this.scope.height()>800){this.scope.css({height:'800px'});}
@@ -26,7 +28,7 @@ this._startReadyTimeout();},_startReadyTimeout(){this._readyTimeout=setInterval(
try{const pmData=typeof e.originalEvent.data==='string'?JSON.parse(e.originalEvent.data):e.originalEvent.data;const method=pmData.method;if(pmData.embedId===undefined||pmData.embedId!==this._embedId){return;}
this._stopReadyTimeout();this[method]?.call(this,pmData);}catch(err){Debug.error(err.message);}},_postMessage(method,obj){Debug.log("Posting to iframe "+this._embedId);this._iframe.postMessage(JSON.stringify(_.extend(obj||{},{method:method,embedId:this._embedId})),this._origin);},_getBorderAdjustment(){this._border.vertical=parseInt(this.scope.css('border-top-width'))+parseInt(this.scope.css('border-bottom-width'));this._border.horizontal=parseInt(this.scope.css('border-left-width'))+parseInt(this.scope.css('border-right-width'));},breakpointChange(e,data){this._postMessage('responsiveState',{currentIs:data.curBreakName});},dialog(data){var options=ips.ui.getAcceptedOptions('dialog');var dialogOptions={};_.each(options,function(opt){if(!_.isUndefined(data.options['data-ipsdialog-'+opt.toLowerCase()])){dialogOptions[opt]=data.options['data-ipsdialog-'+opt.toLowerCase()];}});if(_.isUndefined(dialogOptions['url'])){dialogOptions['url']=data.url;}
var dialogRef=ips.ui.dialog.create(dialogOptions);dialogRef.show();},height(data){if(this._lastDims.height!==data.height){this.scope.css({height:parseInt(data.height)+this._border.vertical+'px'});this._postMessage('setDimensions',{height:parseInt(data.height)});this._lastDims.height=data.height;}},dims(data){if(parseInt(this._lastDims.height)!==parseInt(data.height)||this._lastDims.width!==data.width){this.scope.css({height:parseInt(data.height)+this._border.vertical+'px',maxWidth:(data.width.toString().indexOf('%')==-1)?parseInt(data.width)+this._border.horizontal+'px':'100%'});this._lastDims.height=data.height;this._lastDims.width=data.width;}},ok(){this._stopReadyTimeout();this.scope.addClass('ipsEmbed_finishedLoading');this._postMessage('responsiveState',{currentIs:ips.utils.responsive.getCurrentKey()});}});}(jQuery,_));;
;(function(){"use strict";ips.controller.register('core.front.core.colorScheme',{initialize(){this.menu=this.scope[0];this.on(this.menu,'click',this.changeColorScheme);if(!this.menu.querySelector("[aria-current")){this.schemePref=ips.utils.cookie.get('scheme_preference')||document.documentElement.dataset.ipsSchemeDefault;document.querySelectorAll('[data-ips-prefers-color-scheme='+this.schemePref+']').forEach(el=>el.setAttribute('aria-current','true'));}},changeColorScheme(ev){let el=ev.target.closest('[data-controller="core.front.core.colorScheme"] [data-ips-prefers-color-scheme]');if(!el)return;document.dispatchEvent(new CustomEvent("ips:colorScheme",{bubbles:true,detail:{scheme:el.dataset.ipsPrefersColorScheme}}));}});}());;
;(function(){"use strict";ips.controller.register('core.front.core.colorScheme',{initialize(){this.menu=this.scope[0];this.on(this.menu,'click',this.changeColorScheme);if(!this.menu.querySelector("[aria-current")){this.schemePref=ips.utils.cookie.get('scheme_preference')||document.documentElement.dataset.ipsSchemeDefault;document.querySelectorAll('[data-ips-prefers-color-scheme='+this.schemePref+']').forEach(el=>el.setAttribute('aria-current','true'));}},changeColorScheme(ev){let el=ev.target.closest('[data-controller="core.front.core.colorScheme"] [data-ips-prefers-color-scheme]');if(!el)return;document.dispatchEvent(new CustomEvent("ips:colorScheme",{bubbles:true,detail:{scheme:el.dataset.ipsPrefersColorScheme}}));if(ips.utils.broadcastChannel.enabled){ips.utils.broadcastChannel.channel.postMessage({command:'colorScheme',value:el.dataset.ipsPrefersColorScheme});}}});}());;
;(function($,_,undefined){"use strict";ips.controller.register('core.front.core.comment',{_quoteData:null,_commentContents:'',_quotingDisabled:false,_quoteTimeout:null,_isEditing:false,_clickHandler:null,_observer:null,initialize:function(){for(const link of this.scope.find('[data-ipsMenu]')){const menuSelector=$(link).attr('href');for(const action of['editComment','cancelEditComment','deleteComment','approveComment']){this.on(document,'click',`${menuSelector} [data-action="${action}"]`,this[action]);}}
for(const action of['quoteComment','multiQuoteComment','rateReview']){this.on('click',`[data-action="${action}"]`,this[action]);}
this.on('submit','form',this.submitEdit);this.on('change','input[type="checkbox"][data-role="moderation"]',this.commentCheckbox);this.elem.addEventListener('ipsCalcQuote',()=>this.inlineQuote())
@@ -143,7 +145,8 @@ this._updateDoneCallback=null});this._overlay.hide();const currentPageNo=ips.uti
this._setUpMultiQuote();$(document).trigger('contentChange',[this.scope]);this._findCheckedComments();ips.ui.tableOfContents.refreshElems();},_getResultsFail:function(jqXHR,textStatus,errorThrown){if(Debug.isEnabled()){if(jqXHR instanceof RangeError){Debug.error(jqXHR)
return;}
Debug.error("Ajax request failed ("+textStatus+"): "+errorThrown);Debug.error(jqXHR.responseText);}else{window.location=this._getURL();}},_getResultsAlways:function(){},_setLoading:function(status){var commentFeed=this.scope.find('[data-role="commentFeed"]');if(status){if(!this._overlay){this._overlay=$('<div/>').addClass('ipsLoading').hide();ips.getContainer().append(this._overlay);}
var dims=ips.utils.position.getElemDims(commentFeed);var position=ips.utils.position.getElemPosition(commentFeed);this._overlay.show().css({left:position.viewportOffset.left+'px',top:position.viewportOffset.top+$(document).scrollTop()+'px',width:dims.width+'px',height:dims.height+'px',position:'absolute',zIndex:ips.ui.zIndex()});commentFeed.animate({opacity:"0.5"});}else{}},paginationClick:function(e,data){data.originalEvent.preventDefault();if(data.pageNo!==this._urlParams[this._pageParam]){var urlObj=ips.utils.url.getURIObject(data.href);var queryKey=urlObj.queryKey;if(_.isUndefined(queryKey[this._pageParam])){queryKey[this._pageParam]=data.pageNo;}
var dims=ips.utils.position.getElemDims(commentFeed);var position=ips.utils.position.getElemPosition(commentFeed);this._overlay.show().css({left:position.viewportOffset.left+'px',top:position.viewportOffset.top+$(document).scrollTop()+'px',width:dims.width+'px',height:dims.height+'px',position:'absolute',zIndex:ips.ui.zIndex()});commentFeed.animate({opacity:"0.5"});}else{}},_paginatedOnce:false,paginationClick:function(e,data){data.originalEvent.preventDefault();if(data.pageNo!==this._urlParams[this._pageParam]){Debug.log("Possibly collapsing elements as the user navigated away from the first page");if(parseInt(`${this._urlParams[this._pageParam]}`)===1&&!this._paginatedOnce){document.querySelectorAll(`[data-feedid="${this._commentFeedID}"] [data-collapse-off-first-page]`).forEach(toCollapse=>{toCollapse.dispatchEvent(new CustomEvent("ips:truncateCollapse",{bubbles:true}));})}
this._paginatedOnce=true;var urlObj=ips.utils.url.getURIObject(data.href);var queryKey=urlObj.queryKey;if(_.isUndefined(queryKey[this._pageParam])){queryKey[this._pageParam]=data.pageNo;}
this._seoPagination=data.seoPagination;this._updateURL(queryKey,()=>{const elem=this.elem.querySelector(`.ipsButtonBar--top`)
if(!(elem instanceof HTMLElement)){Debug.warn("Couldn't find the .ipsButtonBar--top or .ipsButtonBar--bottom pagination container inside the comment feed controller. This is likely a theme error that needs to be addressed so that the content feed can be scrolled to the top or bottom after pagination")
return;}
@@ -170,8 +173,9 @@ this.loadNewPosts(e);}};if(this._notification){this._notification.hide();}
if(parseInt(response.count)===1&&'photo'in response&&'name'in response){Object.apply(notifyData,{title:ips.getString('notificationNewPostSingleTitle',response),body:ips.getString('notificationNewPostSingleBody',response),icon:response.photo});}else{Object.apply(notifyData,{title:ips.pluralize(ips.getString('notificationNewPostMultipleTitle'),[response.count]),body:ips.pluralize(ips.getString('notificationNewPostMultipleBody',response),[response.count])});}
this._notification=ips.utils.notification.create(notifyData);this._notification.show();},async _importNewReplies(loadNewPage=true){const form=this.scope.find('[data-role="replyArea"] form');const commentsOnThisPage=this.scope.find('[data-commentid]');const _lastSeenID=this._getLastSeenID(commentsOnThisPage);try{const response=await ips.fetch(form.attr('action'),{data:{do:'checkForNewReplies',type:'fetch',lastSeenID:_lastSeenID,showing:this.getCurrentCommentPageCount()},type:'post'});if(loadNewPage&&commentsOnThisPage.length+parseInt(response.totalNewCount)>response.perPage){if(response.spillOverUrl){window.location=response.spillOverUrl;}else{window.location.reload();}}else{for(const item of[response.content].flat()){this.trigger('addToCommentFeed',{content:item,feedID:this._commentFeedID,resetEditor:false,totalItems:response.totalCount});}}
this._clearNotifications();}catch(e){Debug.warn(`Could not import new replies for the comment feed!`);Debug.error(e);}},_clearNotifications:function(){if(this._notification&&_.isFunction(this._notification.hide())){this._notification.hide();}
if($('#elFlashMessage').find('[data-role="newPostNotification"]').length){$('#elFlashMessage').find('[data-role="newPostNotification"]').trigger('closeFlashMsg.flashMsg');}},quickReply:function(e){var form=this.scope.find('[data-role="replyArea"] form');if(form.attr('data-noAjax')){return;}
e.preventDefault();e.stopPropagation();var self=this;var replyArea=this.scope.find('[data-role="replyArea"]');var submit=form.find('[type="submit"]');var autoFollow=this.scope.find('input[name$="auto_follow_checkbox"]');var commentsOnThisPage=this.scope.find('[data-commentid]');var _lastSeenID=this._getLastSeenID(commentsOnThisPage);var initialText=submit.text();submit.prop('disabled',true).text(ips.getString('saving'));var page=ips.utils.url.getPageNumber(this._pageParam);if(!page){page=1;}
if($('#elFlashMessage').find('[data-role="newPostNotification"]').length){$('#elFlashMessage').find('[data-role="newPostNotification"]').trigger('closeFlashMsg.flashMsg');}},quickReply:function(e){const form=this.scope.find('[data-role="replyArea"] form');if(form.attr('data-noAjax')){return;}
e.preventDefault();e.stopPropagation();const self=this;const replyArea=this.scope.find('[data-role="replyArea"]');const submit=form.find('[type="submit"]');const autoFollow=this.scope.find('input[name$="auto_follow_checkbox"]');const commentsOnThisPage=this.scope.find('[data-commentid]');const _lastSeenID=this._getLastSeenID(commentsOnThisPage);const submitButtons=[...submit];const submitRestorations=[];submitButtons.forEach(button=>{if(button.closest('.ipsIconPicker')){return;}
const initialText=button.innerText;button.setAttribute('disabled','');button.innerText=ips.getString('saving');submitRestorations.push(()=>{button.removeAttribute('disabled');button.innerText=initialText;});});let page=ips.utils.url.getPageNumber(this._pageParam);if(!page){page=1;}
this._clearNotifications();ips.getAjax()(form.attr('action'),{data:form.serialize()+'&currentPage='+page+'&_lastSeenID='+_lastSeenID,type:'post'}).done(function(response){if(response.type=='error'){if(response.form){if(replyArea.find('[data-ipseditorv5]')){ips.ui.editorv5.getObj(replyArea.find('[data-ipseditorv5]')).destruct();}
form.replaceWith($(response.form));$(document).trigger('contentChange',[self.scope]);}else{ips.ui.alert.show({type:'alert',icon:'warn',message:response.message,callbacks:{}});}}
else if(response.type=='redirect'){self.paginationClick(e,{href:response.url,originalEvent:e});}else if(response.type=='merge'){var comment=$(self.findCommentInFeed(response.id));comment.find('[data-role="commentContent"]').html(response.content);if(comment.find('pre.prettyprint').length){comment.find('pre.prettyprint').each(function(){$(this).html(window.PR.prettyPrintOne(_.escape($(this).text())));});}
@@ -181,7 +185,7 @@ ips.ui.flashMsg.show(ips.getString('mergedConncurrentPosts'));$(document).trigge
self.trigger('addToCommentFeed',{content:response.content,totalItems:response.total,feedID:self._commentFeedID,scrollToItem:true});if(response.message){ips.ui.flashMsg.show(response.message);}
if(self.scope.find('[data-role="replyArea"] input[name="guest_name"]').length){self.scope.find('[data-role="replyArea"] input[name="guest_name"]').val('');self.scope.find('[data-role="replyArea"] [data-ipsEditorv5]').find('.ipsComposeArea_dummy').hide().end().find('[data-role="mainEditorArea"]').show().end().closest('.ipsComposeArea').removeClass('ipsComposeArea_minimized').find('[data-ipsEditor-toolList]').show();}
form.find("[data-role='commentFormError']").each(function(){$(this).remove();});if(autoFollow.length){self.trigger('followingItem',{feedID:self.scope.attr('data-feedID'),following:autoFollow.is(':checked')});}}
self._clearNotifications();}).fail(function(jqXHR,textStatus,errorThrown){if(Debug.isEnabled()){Debug.error("Posting new reply failed: "+textStatus);Debug.log(jqXHR);Debug.log(errorThrown);}else{form.attr('data-noAjax','true');form.attr('action',form.attr('action')+((!form.attr('action').match(/\?/))?'?failedReply=1':'&failedReply=1'));form.submit();}}).always(function(){submit.prop('disabled',false).text(initialText?initialText:ips.getString('submit_reply'));});},loadNewPosts:function(e){e?.preventDefault?.();this._importNewReplies();},findCommentInFeed(commentId){const commentSelector=`[data-commentid="${commentId}"]`;const comment=this.elem.querySelector(`[data-role="commentFeed"] ${commentSelector}`);if(comment){return comment;}else if(this.elem.dataset.feedid){const feedSelector=`[data-feedid="${this.elem.dataset.feedid}"]`;return document.querySelector(`${feedSelector}${commentSelector}, ${feedSelector} ${commentSelector}`)||null;}
self._clearNotifications();}).fail(function(jqXHR,textStatus,errorThrown){if(Debug.isEnabled()){Debug.error("Posting new reply failed: "+textStatus);Debug.log(jqXHR);Debug.log(errorThrown);}else{form.attr('data-noAjax','true');form.attr('action',form.attr('action')+((!form.attr('action').match(/\?/))?'?failedReply=1':'&failedReply=1'));form.submit();}}).always(function(){submitRestorations.forEach(cb=>cb());});},loadNewPosts:function(e){e?.preventDefault?.();this._importNewReplies();},findCommentInFeed(commentId){const commentSelector=`[data-commentid="${commentId}"]`;const comment=this.elem.querySelector(`[data-role="commentFeed"] ${commentSelector}`);if(comment){return comment;}else if(this.elem.dataset.feedid){const feedSelector=`[data-feedid="${this.elem.dataset.feedid}"]`;return document.querySelector(`${feedSelector}${commentSelector}, ${feedSelector} ${commentSelector}`)||null;}
return null;},addToCommentFeed(e,data){if(typeof data?.content!=="string"||data.feedID!==this._commentFeedID){return;}
const content=$('<div/>').append(data.content);const div=content.get(0);const comment=content.find('.js-ipsEntry');let commentFeed=this.scope.find('[data-role="commentFeed"]');if(commentFeed.find('[data-role="moderationTools"]').length){commentFeed=commentFeed.find('[data-role="moderationTools"]');}
this.scope.find('[data-role="noComments"]').remove();const actualContent=div.querySelector(`[data-ips-hook="postWrapper"]`)