Version 5.0.13

This commit is contained in:
Neo committed 2025-12-19 19:04:57 -08:00
1 parent b89858b2ff
commit 5efe744c5f
1407 files changed
+69690 -30177

No files matched your search

+135 -349
View File
@@ -56,7 +56,7 @@ $return .= <<<IPSCONTENT
<ol class="ipsBlockSpacer" data-controller="forums.front.forum.forumList" data-baseurl="">
<li class="ipsBox ipsPull">
<li class="ipsBox ipsBox--forumsClubCategory ipsPull">
<h2 class="ipsBox__header">
IPSCONTENT;
@@ -71,7 +71,7 @@ if ( \IPS\Member::loggedIn()->getLayoutValue('forums_forum') === 'grid' ):
$return .= <<<IPSCONTENT
<i-data>
<div class="ipsData ipsData--grid ipsData--forum-grid i-padding_3 i-background_2 i-border-end-start-radius_box i-border-end-end-radius_box">
<div class="ipsData ipsData--grid ipsData--forum-grid">
IPSCONTENT;
@@ -385,7 +385,7 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
if ( \IPS\Platform\Bridge::i()->featureIsEnabled( 'realtime' ) ):
if ( \IPS\Platform\Bridge::i()->featureIsEnabled( 'live_full' ) ):
$return .= <<<IPSCONTENT
<div data-controller="cloud.front.realtime.whosViewing" data-location="
@@ -456,7 +456,7 @@ IPSCONTENT;
if ( $forum->isCombinedView() ):
$return .= <<<IPSCONTENT
<div class="ipsPageHeader__row ipsResponsive_hideDesktop">
<div class="i-margin-block_2 ipsResponsive_hideDesktop">
IPSCONTENT;
@@ -469,19 +469,19 @@ $return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "forums/fr
$return .= <<<IPSCONTENT
<li>
<a class="ipsButton ipsButton--inherit" href="#" rel="nofollow" data-ipsdialog data-ipsdialog-title="
<button type="button" class="ipsButton ipsButton--secondary ipsButton--small" data-ipsdialog data-ipsdialog-title="
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'forums_simple_dialog_title', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
" data-ipsdialog-content="#elFluidFormFilters">
<span data-role="fluidForumMobileDesc">
<i class="fa-solid fa-list-check"></i><span data-role="fluidForumMobileDesc">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'forums_simple_filter_by', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span> <i class="fa-solid fa-angle-down"></i>
</a>
</span>
</button>
</li>
IPSCONTENT;
@@ -688,7 +688,7 @@ $return .= <<<IPSCONTENT
<div data-controller="forums.front.forum.forumPage
IPSCONTENT;
if ( \IPS\Platform\Bridge::i()->featureIsEnabled( 'realtime' ) ):
if ( \IPS\Platform\Bridge::i()->featureIsEnabled( 'live_full' ) ):
$return .= <<<IPSCONTENT
,cloud.front.realtime.viewingProvider
IPSCONTENT;
@@ -707,10 +707,10 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
if ( \IPS\Member::loggedIn()->member_id || !\IPS\Widget\Request::i()->advancedSearchForm && $forum->sub_can_post and !$forum->password ):
if ( \IPS\Member::loggedIn()->member_id || !\IPS\Widget\Request::i()->advancedSearchForm && $forum->sub_can_post ):
$return .= <<<IPSCONTENT
<div class="ipsPageActions ipsBox i-padding_2 ipsPull ipsResponsive_showPhone">
<div class="ipsPageActions ipsBox ipsBox--forumsDisplayActions i-padding_2 ipsPull ipsResponsive_showPhone">
IPSCONTENT;
@@ -795,256 +795,6 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
IPSCONTENT;
return $return;
}
function forumHome( $forum, $featuredTopic, $popularQuestions, $newQuestions ) {
$return = '';
$return .= <<<IPSCONTENT
<!-- v5 todo: Is this template used? -->
<style>*{ color: #bde361 !important; }</style>
IPSCONTENT;
if ( $featuredTopic ):
$return .= <<<IPSCONTENT
<div class="i-padding_3">
<h2 class="ipsTitle ipsTitle--h3">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'featured_question', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</h2>
<br><br>
<div class="ipsPhotoPanel">
<span class="ipsUserPhoto">
<img src='
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $featuredTopic->author()->photo, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
' alt='' loading='lazy'>
</span>
<div class='ipsPhotoPanel__text'>
<h3 class="i-font-size_2">
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $featuredTopic->url(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
">
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $featuredTopic->title, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
</a>
</h3>
<p class="i-color_soft">
IPSCONTENT;
$htmlsprintf = array($featuredTopic->author()->link( NULL, NULL, $featuredTopic->isAnonymous() ), \IPS\DateTime::ts( $featuredTopic->start_date )->html( false )); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'ask_byline', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'htmlsprintf' => $htmlsprintf ) );
$return .= <<<IPSCONTENT
</p>
<br>
<div class="ipsTruncate_5">
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $featuredTopic->truncated(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
</div>
</div>
</div>
</div>
<hr class="ipsHr">
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<div class="ipsSpanGrid">
<div class="ipsSpanGrid__6 i-padding_3">
<h2 class="ipsTitle ipsTitle--h3">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'most_popular_questions', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</h2>
<p class="i-color_soft">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'from_the_past_30_days', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</p>
<i-data>
<ol class="ipsData ipsData--table ipsData--popular-questions" id="elTopicList">
IPSCONTENT;
foreach ( $popularQuestions as $question ):
$return .= <<<IPSCONTENT
<li class="ipsData__item"
IPSCONTENT;
if ( $question->unread() ):
$return .= <<<IPSCONTENT
data-ips-unread
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
>
<div class='i-basis_50'>
<span class='ipsUserPhoto ipsUserPhoto--mini'>
<img src="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $question->author()->photo, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" alt='' loading='lazy'>
</span>
</div>
<div class="ipsData__main">
<h4 class="ipsData__title">
IPSCONTENT;
if ( $question->unread() ):
$return .= <<<IPSCONTENT
<i class="fa-solid fa-circle cTopicIcon"></i>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $question->url(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
">
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $question->title, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
</a></h4>
<ul class="ipsData__meta ipsList ipsList--inline i-color_soft">
IPSCONTENT;
if ( $question->bestAnswer() ):
$return .= <<<IPSCONTENT
<li>
IPSCONTENT;
$htmlsprintf = array($question->bestAnswer()->author()->link( NULL, NULL, $question->bestAnswer()->isAnonymous() ), \IPS\DateTime::ts( $question->bestAnswer()->post_date )->html( false )); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'best_answer_by', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'htmlsprintf' => $htmlsprintf ) );
$return .= <<<IPSCONTENT
</li>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</ul>
</div>
</li>
IPSCONTENT;
endforeach;
$return .= <<<IPSCONTENT
</ol>
</i-data>
</div>
<div class="ipsSpanGrid__6 i-padding_3">
<h2 class="ipsTitle ipsTitle--h3">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'new_questions', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</h2>
<p class="i-color_soft">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'awaiting_an_answer', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</p>
<i-data>
<ol class="ipsData ipsData--compact ipsData ipsData--question-list" id="elTopicList">
IPSCONTENT;
foreach ( $newQuestions as $question ):
$return .= <<<IPSCONTENT
<li class="ipsData__item"
IPSCONTENT;
if ( $question->unread() ):
$return .= <<<IPSCONTENT
data-ips-unread
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
>
<div class='i-basis_50'>
<span class='ipsUserPhoto ipsUserPhoto--mini'>
<img src="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $question->author()->photo, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" alt='' loading='lazy'>
</span>
</div>
<div class="ipsData__main">
<h4 class="ipsData__title">
IPSCONTENT;
if ( $question->unread() ):
$return .= <<<IPSCONTENT
<i class="fa-solid fa-circle cTopicIcon"></i>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $question->url(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
">
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $question->title, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
</a></h4>
<ul class="ipsData__meta ipsList ipsList--inline i-color_soft">
<li>
IPSCONTENT;
$htmlsprintf = array($question->author()->link( NULL, NULL, $question->isAnonymous() ), \IPS\DateTime::ts( $question->start_date )->html( false )); $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'ask_byline', ENT_DISALLOWED, 'UTF-8', FALSE ), FALSE, array( 'htmlsprintf' => $htmlsprintf ) );
$return .= <<<IPSCONTENT
</li>
</ul>
</div>
</li>
IPSCONTENT;
endforeach;
$return .= <<<IPSCONTENT
</ol>
</i-data>
</div>
</div>
IPSCONTENT;
return $return;
@@ -1059,7 +809,7 @@ IPSCONTENT;
if ( !\IPS\Widget\Request::i()->isAjax() ):
$return .= <<<IPSCONTENT
<div class="ipsBox">
<div class="ipsBox ipsBox--forumPasswordPopup">
IPSCONTENT;
endif;
@@ -1218,7 +968,7 @@ IPSCONTENT;
if ( !\IPS\Widget\Request::i()->isAjax() ):
$return .= <<<IPSCONTENT
class='ipsBox'
class='ipsBox ipsBox--forumSelector'
IPSCONTENT;
endif;
@@ -1240,7 +990,7 @@ IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "forums/front/forums/forumTable", "topicListTable:before", [ $table,$headers,$rows,$quickSearch ] );
$return .= <<<IPSCONTENT
<div data-ips-hook="topicListTable" class="ipsBox ipsPull" data-baseurl="
<div data-ips-hook="topicListTable" class="ipsBox ipsBox--forumsTable ipsPull" data-baseurl="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->baseUrl, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -1365,34 +1115,40 @@ IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "forums/front/forums/forumTable", "sortOptions:inside-start", [ $table,$headers,$rows,$quickSearch ] );
$return .= <<<IPSCONTENT
<a href="#elSortByMenu_menu" class="ipsDataFilters__button" id="elSortByMenu_
<button class="ipsDataFilters__button" type="button" popovertarget="elSortByMenu_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->uniqueId, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" data-role="sortButton" data-ipsmenu data-ipsmenu-activeclass="ipsDataFilters__button--active" data-ipsmenu-selectable="radio"><span>
_menu" data-role="sortButton"><span>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'sort_by', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span><i class="fa-solid fa-caret-down"></i></a>
<ul class="ipsMenu ipsMenu_auto ipsMenu_withStem ipsMenu_selectable ipsHide" id="elSortByMenu_
</span><i class="fa-solid fa-caret-down"></i></button>
<i-dropdown id="elSortByMenu_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->uniqueId, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_menu">
_menu" popover data-i-dropdown-selectable="radio">
<div class="iDropdown">
<ul class="iDropdown__items">
IPSCONTENT;
$custom = TRUE;
$return .= <<<IPSCONTENT
IPSCONTENT;
foreach ( $table->sortOptions as $k => $col ):
$return .= <<<IPSCONTENT
<li class="ipsMenu_item
<li><a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->baseUrl->setQueryString( array( 'filter' => $table->filter, 'sortby' => $col, 'sortdirection' => $table->getSortDirection( $col ) ) )->setPage('page', 1), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" rel="nofollow"
IPSCONTENT;
if ( $col === $table->getSortByColumn() ):
@@ -1402,12 +1158,12 @@ IPSCONTENT;
$custom = FALSE;
$return .= <<<IPSCONTENT
ipsMenu_itemChecked
aria-selected="true"
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
" data-ipsmenuvalue="
data-ipsmenuvalue="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $col, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -1415,40 +1171,26 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->getSortDirection( $col ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
"><a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->baseUrl->setQueryString( array( 'filter' => $table->filter, 'sortby' => $col, 'sortdirection' => $table->getSortDirection( $col ) ) )->setPage('page', 1), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" rel="nofollow">
"><i class="iDropdown__input"></i>
IPSCONTENT;
$val = "{$table->langPrefix}sort_{$k}"; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( $val, ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a></li>
IPSCONTENT;
endforeach;
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( $table->advancedSearch ):
$return .= <<<IPSCONTENT
<li class="ipsMenu_item
IPSCONTENT;
if ( $custom ):
$return .= <<<IPSCONTENT
ipsMenu_itemChecked
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
" data-noselect="true">
<a href="
<li>
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->baseUrl->setQueryString( array( 'advancedSearchForm' => '1', 'filter' => $table->filter, 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection ) ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -1457,20 +1199,32 @@ IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'custom_sort', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
">
"
IPSCONTENT;
if ( $custom ):
$return .= <<<IPSCONTENT
aria-selected="true"
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
data-i-dropdown-noselect><i class="iDropdown__input"></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'custom', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
</li>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</ul>
</ul>
</div>
</i-dropdown>
IPSCONTENT;
@@ -1505,82 +1259,87 @@ IPSCONTENT;
$return .= \IPS\Theme\CustomTemplate::getCustomTemplatesForHookPoint( "forums/front/forums/forumTable", "filters:inside-start", [ $table,$headers,$rows,$quickSearch ] );
$return .= <<<IPSCONTENT
<a href="#elFilterByMenu_menu" class="ipsDataFilters__button" id="elFilterByMenu_
<button class="ipsDataFilters__button" type="button" popovertarget="elFilterByMenu_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->uniqueId, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" data-role="tableFilterMenu" data-ipsmenu data-ipsmenu-activeclass="ipsDataFilters__button--active" data-ipsmenu-selectable="radio"><span>
_menu" data-role="tableFilterMenu">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'filter_by', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</span><i class="fa-solid fa-caret-down"></i></a>
<ul class="ipsMenu ipsMenu_auto ipsMenu_withStem ipsMenu_selectable ipsHide" data-role="tableFilterMenu" id="elFilterByMenu_
<i class="fa-solid fa-caret-down"></i></button>
<i-dropdown id="elFilterByMenu_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->uniqueId, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_menu">
<li data-action="tableFilter" data-ipsmenuvalue="" class="ipsMenu_item
_menu" popover data-i-dropdown-selectable="radio" data-role="tableFilterMenu">
<div class="iDropdown">
<ul class="iDropdown__items">
<li>
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->baseUrl->setQueryString( array( 'filter' => '', 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection ) )->setPage('page', 1), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" rel="nofollow" data-action="tableFilter" data-ipsmenuvalue=""
IPSCONTENT;
if ( !$table->filter ):
$return .= <<<IPSCONTENT
ipsMenu_itemChecked
aria-selected="true"
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
">
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->baseUrl->setQueryString( array( 'filter' => '', 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection ) )->setPage('page', 1), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" rel="nofollow">
><i class="iDropdown__input"></i>
IPSCONTENT;
$val = "{$table->langPrefix}all"; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( $val, ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
</li>
<li><hr></li>
IPSCONTENT;
foreach ( $table->filters as $k => $q ):
$return .= <<<IPSCONTENT
<li data-action="tableFilter" data-ipsmenuvalue="
<li>
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->baseUrl->setQueryString( array( 'filter' => $k, 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection ) )->setPage('page', 1), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" rel="nofollow" data-action="tableFilter" data-ipsmenuvalue="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $k, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" class="ipsMenu_item
"
IPSCONTENT;
if ( $k === $table->filter ):
$return .= <<<IPSCONTENT
ipsMenu_itemChecked
aria-selected="true"
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
">
<a href="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->baseUrl->setQueryString( array( 'filter' => $k, 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection ) )->setPage('page', 1), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" rel="nofollow">
><i class="iDropdown__input"></i>
IPSCONTENT;
$val = "{$table->langPrefix}{$k}"; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( $val, ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
</li>
IPSCONTENT;
endforeach;
$return .= <<<IPSCONTENT
</ul>
</ul>
</div>
</i-dropdown>
IPSCONTENT;
@@ -1605,11 +1364,11 @@ if ( $table->canModerate() ):
$return .= <<<IPSCONTENT
<li>
<a href="#elCheck_menu" class="ipsDataFilters__button" id="elCheck_
<button class="ipsDataFilters__button" type="button" popovertarget="elCheck_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->uniqueId, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" title="
_menu" title="
IPSCONTENT;
$val = "{$table->langPrefix}select_rows_tooltip"; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( $val, ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -1618,69 +1377,73 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->uniqueId, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
" data-ipsmenu data-ipsmenu-activeclass="ipsDataFilters__button--active">
">
<span class="cAutoCheckIcon"><i class="fa-regular fa-square"></i></span> <i class="fa-solid fa-caret-down"></i>
<span class="ipsNotification" data-role="autoCheckCount">0</span>
</a>
<ul class="ipsMenu ipsMenu_auto ipsMenu_withStem ipsHide" id="elCheck_
</button>
<i-dropdown id="elCheck_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $table->uniqueId, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_menu">
<li class="ipsMenu_title">
_menu" popover data-i-dropdown-selectable="radio" data-role="tableFilterMenu">
<div class="iDropdown">
<ul class="iDropdown__items">
<li class="iDropdown__title">
IPSCONTENT;
$val = "{$table->langPrefix}select_rows"; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( $val, ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</li>
<li class="ipsMenu_item" data-ipsmenuvalue="all"><a href="#">
<li><button type="button" data-ipsmenuvalue="all"><i class="iDropdown__input"></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'all', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a></li>
<li class="ipsMenu_item" data-ipsmenuvalue="none"><a href="#">
</button></li>
<li><button type="button" data-ipsmenuvalue="none"><i class="iDropdown__input"></i>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'none', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a></li>
</button></li>
IPSCONTENT;
if ( \count($table->getFilters()) ):
$return .= <<<IPSCONTENT
<li class="ipsMenu_sep"><hr></li>
<li><hr></li>
IPSCONTENT;
foreach ( $table->getFilters() as $filter ):
$return .= <<<IPSCONTENT
<li class="ipsMenu_item" data-ipsmenuvalue="
<li><button type="button" data-ipsmenuvalue="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $filter, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
"><a href="#">
"><i class="iDropdown__input"></i>
IPSCONTENT;
$val = "{$filter}"; $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( $val, ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a></li>
</button></li>
IPSCONTENT;
endforeach;
$return .= <<<IPSCONTENT
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</ul>
</ul>
</div>
</i-dropdown>
</li>
IPSCONTENT;
@@ -2407,12 +2170,35 @@ $return .= <<<IPSCONTENT
{$tabData[1]->author()->link( NULL, NULL, $tabData[1]->isAnonymous() )}
</div>
<div class='ipsPhotoPanel__secondary'>
<a href='
IPSCONTENT;
if ( $tabID == 'firstPost' ):
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabData[1]->item()->url(), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabData[1]->item()->url( 'getLastComment' ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
'>
IPSCONTENT;
$val = ( $tabData[1]->mapped('date') instanceof \IPS\DateTime ) ? $tabData[1]->mapped('date') : \IPS\DateTime::ts( $tabData[1]->mapped('date') );$return .= $val->html(useTitle: true);
$return .= <<<IPSCONTENT
</a>
IPSCONTENT;
@@ -2516,7 +2302,7 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
if ( \IPS\Settings::i()->core_datalayer_enabled ):
if ( \IPS\core\DataLayer::enabled() ):
$return .= <<<IPSCONTENT
<script>
@@ -2888,7 +2674,7 @@ $return .= <<<IPSCONTENT
"
IPSCONTENT;
if ( \IPS\Platform\Bridge::i()->featureIsEnabled( 'realtime' ) ):
if ( \IPS\Platform\Bridge::i()->featureIsEnabled( 'live_full' ) ):
$return .= <<<IPSCONTENT
data-controller="cloud.front.realtime.forumsTopicRow"
IPSCONTENT;
@@ -3995,7 +3781,7 @@ $return .= <<<IPSCONTENT
<li data-ips-hook="topicRow"
IPSCONTENT;
if ( \IPS\Platform\Bridge::i()->featureIsEnabled( 'realtime' ) ):
if ( \IPS\Platform\Bridge::i()->featureIsEnabled( 'live_full' ) ):
$return .= <<<IPSCONTENT
data-controller="cloud.front.realtime.forumsTopicRow"
IPSCONTENT;