Version 5.0.0 beta 5

This commit is contained in:
Neo committed 2025-12-19 17:04:22 -08:00
1 parent 2f24f9de48
commit 57d9db6ce2
218 files changed
+5331 -7416

No files matched your search

+260 -214
View File
@@ -413,82 +413,21 @@ if ( $advertisement!==null ):
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( $isCarousel ):
$return .= <<<IPSCONTENT
IPSCONTENT;
$carouselID = 'widget--clubs_' . mt_rand();
$return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "global", "core" )->carouselNavigation( $carouselID );
$return .= <<<IPSCONTENT
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<section class="ipsWidget__content">
<i-data>
<ul class='ipsData ipsData--
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $layout, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( $isCarousel ):
$return .= <<<IPSCONTENT
ipsData--carousel
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
ipsData--widget-ads'
IPSCONTENT;
if ( $isCarousel ):
$return .= <<<IPSCONTENT
id='
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $carouselID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
' tabindex="0"
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
>
<section class="ipsWidget__content ipsWidget__content--tnemesitrevda i-text-align_center">
IPSCONTENT;
foreach ( $advertisement as $ad ):
$return .= <<<IPSCONTENT
<li class='ipsData__item i-padding_0'>
<div class="ipsData__content">
{$ad}
</div>
</li>
{$ad}
IPSCONTENT;
endforeach;
$return .= <<<IPSCONTENT
</ul>
</i-data>
</section>
</section>
IPSCONTENT;
@@ -1447,128 +1386,152 @@ endforeach;
$return .= <<<IPSCONTENT
<div class='ipsTabs ipsJS_show' id='tabs_
<i-tabs class='ipsTabs' id='ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
' data-ipsTabBar data-ipsTabBar-contentArea='#ipsTabs_content_
' data-ipsTabBar data-ipsTabBar-contentArea='#ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
'>
<ul role='tablist'>
_content'>
<div role='tablist'>
IPSCONTENT;
$checkedTab = NULL;
$return .= <<<IPSCONTENT
IPSCONTENT;
if ( $hasSettings ):
$return .= <<<IPSCONTENT
<li>
<a href='#ipsTabs_tabs_
<button type="button" id='ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_
_settings' class="ipsTabs__tab" role="tab" aria-controls="ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_tab_settings_panel' id='
_settings_panel" aria-selected="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
if ( !$checkedTab ):
$return .= <<<IPSCONTENT
_tab_settings' class="ipsTabs__tab" role="tab" aria-selected="true">
true
IPSCONTENT;
$checkedTab = 'settings';
$return .= <<<IPSCONTENT
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
false
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'settings', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
</button>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
<li>
<a href='#ipsTabs_tabs_
<button type="button" id='ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_
_visibility' class="ipsTabs__tab" role="tab" aria-controls="ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_tab_visibility_panel' id='
_visibility_panel" aria-selected="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
if ( !$checkedTab ):
$return .= <<<IPSCONTENT
_tab_visibility' class="ipsTabs__tab" role="tab" aria-selected="true">
true
IPSCONTENT;
$checkedTab = 'visibility';
$return .= <<<IPSCONTENT
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
false
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'visibility', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
</button>
IPSCONTENT;
if ( $widget->isBuilderWidget() ):
$return .= <<<IPSCONTENT
<li>
<a href='#ipsTabs_tabs_
<button type="button" id='ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_
_advanced' class="ipsTabs__tab" role="tab" aria-controls="ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_tab_advanced_panel' id='
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_tab_advanced' class="ipsTabs__tab" role="tab" aria-selected="false">
_advanced_panel" aria-selected="false">
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'widget_tab_advanced', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
</button>
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
</ul>
</div>
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "global", "core", 'global' )->tabScrollers( );
$return .= <<<IPSCONTENT
</div>
<div id='ipsTabs_content_
</i-tabs>
<div id='ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
' class='ipsTabs__panels'>
<div id='ipsTabs_tabs_
_content' class='ipsTabs__panels'>
<div id='ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_tab_settings_panel' class="
_settings_panel' class="
IPSCONTENT;
if ( $widget->menuStyle !== 'modal' ):
@@ -1578,11 +1541,21 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
ipsTabs__panel" aria-labelledby="
ipsTabs__panel" role="tabpanel" aria-labelledby="ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_tab_settings" aria-hidden="false">
_settings"
IPSCONTENT;
if ( $checkedTab != 'settings' ):
$return .= <<<IPSCONTENT
hidden
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
>
<ul class='ipsForm ipsForm--vertical ipsForm--widget-template'>
IPSCONTENT;
@@ -1642,15 +1615,11 @@ $return .= <<<IPSCONTENT
</ul>
</div>
<div id='ipsTabs_tabs_
<div id='ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_tab_visibility_panel' class="
_visibility_panel' class="
IPSCONTENT;
if ( $widget->menuStyle !== 'modal' ):
@@ -1660,11 +1629,21 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
ipsTabs__panel" aria-labelledby="
ipsTabs__panel" role="tabpanel" aria-labelledby="ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_tab_visibility" aria-hidden="false">
_visibility"
IPSCONTENT;
if ( $checkedTab != 'visibility' ):
$return .= <<<IPSCONTENT
hidden
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
>
<ul class='ipsForm ipsForm--vertical ipsForm--widget-template'>
IPSCONTENT;
@@ -1719,15 +1698,11 @@ IPSCONTENT;
if ( $widget->isBuilderWidget() ):
$return .= <<<IPSCONTENT
<div id='ipsTabs_tabs_
<div id='ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_tab_advanced_panel' class="
_advanced_panel' class="
IPSCONTENT;
if ( $widget->menuStyle !== 'modal' ):
@@ -1737,11 +1712,11 @@ IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
ipsTabs__panel" aria-labelledby="
ipsTabs__panel" role="tabpanel" aria-labelledby="ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $id, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_tab_advanced" aria-hidden="false">
_advanced" hidden>
<ul class='ipsForm ipsForm--vertical ipsForm--widget-template'>
IPSCONTENT;
@@ -2370,10 +2345,10 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$tabID = 'widget-mostSolved_' . mt_rand();
$tabID = 'ipsTabs_mostSolved' . mt_rand();
$return .= <<<IPSCONTENT
<div class='ipsTabs ipsTabs_small ipsTabs--stretch' id='
<i-tabs class='ipsTabs ipsTabs--small ipsTabs--stretch' id='
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -2382,25 +2357,27 @@ IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_content'>
<ul role="tablist">
<li>
<a href='#ipsTabs_
<div role="tablist">
<button type="button" data-taburl='
IPSCONTENT;
$return .= htmlspecialchars( \IPS\Http\Url::internal( "app=core&module=system&controller=ajax&do=mostSolved&time=week&limit={$limit}", null, "", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );
$return .= <<<IPSCONTENT
' id='
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_el_MostSolvedWeek_panel' id='
_week' class='ipsTabs__tab' role="tab" aria-controls="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
-el_MostSolvedWeek' class='ipsTabs__tab ipsTabs__tab--active' role="tab" aria-selected='true'>
_week_panel" aria-selected='true'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'week', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
<li>
<a href='
</button>
<button type="button" data-taburl='
IPSCONTENT;
$return .= htmlspecialchars( \IPS\Http\Url::internal( "app=core&module=system&controller=ajax&do=mostSolved&time=month&limit={$limit}", null, "", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );
@@ -2409,15 +2386,17 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
-el_MostSolvedMonth' class='ipsTabs__tab' role="tab" aria-selected='false'>
_month' class='ipsTabs__tab' role="tab" aria-controls="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_month_panel" aria-selected='false'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'month', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
<li>
<a href='
</button>
<button type="button" data-taburl='
IPSCONTENT;
$return .= htmlspecialchars( \IPS\Http\Url::internal( "app=core&module=system&controller=ajax&do=mostSolved&time=year&limit={$limit}", null, "", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );
@@ -2426,15 +2405,17 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
-el_MostSolvedYear' class='ipsTabs__tab' role="tab" aria-selected='false'>
_year' class='ipsTabs__tab' role="tab" aria-controls="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_year_panel" aria-selected='false'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'year', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
<li>
<a href='
</button>
<button type="button" data-taburl='
IPSCONTENT;
$return .= htmlspecialchars( \IPS\Http\Url::internal( "app=core&module=system&controller=ajax&do=mostSolved&time=all&limit={$limit}", null, "", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );
@@ -2443,32 +2424,38 @@ $return .= <<<IPSCONTENT
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
-el_MostSolvedAll' class='ipsTabs__tab' role="tab" aria-selected='false'>
_all' class='ipsTabs__tab' role="tab" aria-controls="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_all_panel" aria-selected='false'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'alltime', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
</ul>
</button>
</div>
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "global", "core", 'global' )->tabScrollers( );
$return .= <<<IPSCONTENT
</div>
</i-tabs>
<section id='
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_content' class='ipsTabs__panels ipsWidget__content'>
<div id="ipsTabs_
<div id="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_el_MostSolvedWeek_panel" class='ipsTabs__panel'>
_week_panel" class='ipsTabs__panel' role="tabpanel" aria-labelledby="
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_week">
IPSCONTENT;
@@ -3603,15 +3590,15 @@ $return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'b
$return .= <<<IPSCONTENT
</h3>
<div class='ipsWidget__content'>
<ul class='ipsList ipsList--stacked ipsList--border ipsList--fill'>
<ul class='ipsList ipsList--stats ipsList--stacked ipsList--border ipsList--fill'>
<li>
<strong class='ipsList__label'>
<strong class='ipsList__value'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->formatNumber( $stats['member_count'] );
$return .= <<<IPSCONTENT
</strong>
<span class='ipsList__value'>
<span class='ipsList__label'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'stats_total_members', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -3619,7 +3606,7 @@ $return .= <<<IPSCONTENT
</span>
</li>
<li>
<strong class='ipsList__label' data-ipsTooltip title='<time data-norelative="true">
<strong class='ipsList__value' data-ipsTooltip title='<time data-norelative="true">
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $stats['most_online']['time'], ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -3629,7 +3616,7 @@ IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->formatNumber( $stats['most_online']['count'] );
$return .= <<<IPSCONTENT
</strong>
<span class='ipsList__value'>
<span class='ipsList__label'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'stats_most_online', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
@@ -4409,7 +4396,7 @@ IPSCONTENT;
if ( in_array($layout, array("wallpaper", "featured", "grid")) ):
$return .= <<<IPSCONTENT
<figure class='ipsData__image' data-show-on="wallpaper featured grid">
<figure class='ipsData__image'>
IPSCONTENT;
@@ -4445,7 +4432,7 @@ IPSCONTENT;
else:
$return .= <<<IPSCONTENT
<figure class='ipsData__icon' data-hide-on="wallpaper featured grid">
<figure class='ipsData__icon'>
IPSCONTENT;
@@ -4478,7 +4465,7 @@ $return .= <<<IPSCONTENT
</a></h4>
</div>
<div class='ipsData__desc ipsRichText' data-controller='core.front.core.lightboxedImages'>{$item->truncated()}</div>
<p class='ipsData__meta' data-hide-on="mini-grid">
<p class='ipsData__meta'>
IPSCONTENT;
@@ -4524,62 +4511,90 @@ IPSCONTENT;
if ( count( $data ) > 1 ):
$return .= <<<IPSCONTENT
<div class='ipsTabs ipsTabs--stretch' id='el
<i-tabs class='ipsTabs ipsTabs--stretch' id='ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $key, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
' data-ipsTabBar data-ipsTabBar-updateURL='false' data-ipsTabBar-contentArea='#el
' data-ipsTabBar data-ipsTabBar-updateURL='false' data-ipsTabBar-contentArea='#ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $key, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_content'>
<ul role="tablist">
<div role="tablist">
IPSCONTENT;
$checked = NULL;
$return .= <<<IPSCONTENT
IPSCONTENT;
foreach ( $data as $tag => $items ):
$return .= <<<IPSCONTENT
IPSCONTENT;
$tabId = $key . \str_replace( ' ', '-', $tag );
$tabId = \str_replace( ' ', '-', $tag );
$return .= <<<IPSCONTENT
<li>
<a href='#ipsTabs_el
<button type="button" id='ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $key, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_el
_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabId, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_panel' id='el
' class='ipsTabs__tab' role="tab" aria-controls="ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $key, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabId, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
' class='ipsTabs__tab ipsTabs__tab--active' role="tab" aria-selected='true'>
_panel" aria-selected="
IPSCONTENT;
if ( !$checked ):
$return .= <<<IPSCONTENT
true
IPSCONTENT;
$checked = $tabId;
$return .= <<<IPSCONTENT
IPSCONTENT;
else:
$return .= <<<IPSCONTENT
false
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
">
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tag, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
</a>
</li>
</button>
IPSCONTENT;
endforeach;
$return .= <<<IPSCONTENT
</ul>
</div>
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "global", "core", 'global' )->tabScrollers( );
$return .= <<<IPSCONTENT
</div>
<section id='el
</i-tabs>
<section id='ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $key, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
@@ -4590,28 +4605,46 @@ IPSCONTENT;
foreach ( $data as $tag => $items ):
$return .= <<<IPSCONTENT
IPSCONTENT;
$tabId = $key . \str_replace( ' ', '-', $tag );
$tabId = \str_replace( ' ', '-', $tag );
$return .= <<<IPSCONTENT
<div id="ipsTabs_el
<div id="ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $key, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_el
_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabId, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_panel" class='ipsTabs__panel'>
_panel" class='ipsTabs__panel' role="tabpanel" aria-labelledby="ipsTabs_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $key, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabId, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
"
IPSCONTENT;
if ( $checked != $tabId ):
$return .= <<<IPSCONTENT
hidden
IPSCONTENT;
endif;
$return .= <<<IPSCONTENT
>
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "widgets", "core" )->tagRows( $items, $layout );
$return .= <<<IPSCONTENT
</div>
</div>
IPSCONTENT;
@@ -4911,97 +4944,110 @@ IPSCONTENT;
$tabID = mt_rand();
$return .= <<<IPSCONTENT
<div class='ipsTabs ipsTabs--stretch' id='elTopContributors_
<i-tabs class='ipsTabs ipsTabs--stretch' id='ipsTabs_topContributors
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
' data-ipsTabBar data-ipsTabBar-updateURL='false' data-ipsTabBar-contentArea='#elTopContributors_
' data-ipsTabBar data-ipsTabBar-updateURL='false' data-ipsTabBar-contentArea='#ipsTabs_topContributors
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_content'>
<ul role="tablist">
<li>
<a href='#ipsTabs_elTopContributors_el_topContributorsWeek_panel' id='el_topContributorsWeek_
<div role="tablist">
<button type="button" data-taburl='
IPSCONTENT;
$return .= htmlspecialchars( \IPS\Http\Url::internal( "app=core&module=system&controller=ajax&do=topContributors&time=week&limit={$limit}", null, "", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );
$return .= <<<IPSCONTENT
' class='ipsTabs__tab' role="tab" id='ipsTabs_topContributors
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
' class='ipsTabs__tab ipsTabs__tab--active' role="tab" aria-selected='true'>
_week' aria-controls="ipsTabs_topContributors
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_week_panel" aria-selected='true'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'week', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
<li>
<a href='
</button>
<button type="button" data-taburl='
IPSCONTENT;
$return .= htmlspecialchars( \IPS\Http\Url::internal( "app=core&module=system&controller=ajax&do=topContributors&time=month&limit={$limit}", null, "", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );
$return .= <<<IPSCONTENT
' id='el_topContributorsMonth_
' class='ipsTabs__tab' role="tab" id='ipsTabs_topContributors
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
' class='ipsTabs__tab' role="tab" aria-selected='false'>
_month' aria-controls="ipsTabs_topContributors
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_month_panel" aria-selected='false'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'month', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
<li>
<a href='
</button>
<button type="button" data-taburl='
IPSCONTENT;
$return .= htmlspecialchars( \IPS\Http\Url::internal( "app=core&module=system&controller=ajax&do=topContributors&time=year&limit={$limit}", null, "", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );
$return .= <<<IPSCONTENT
' id='el_topContributorsYear_
' class='ipsTabs__tab' role="tab" id='ipsTabs_topContributors
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
' class='ipsTabs__tab' role="tab" aria-selected='false'>
_year' aria-controls="ipsTabs_topContributors
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_year_panel" aria-selected='false'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'year', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
<li>
<a href='
</button>
<button type="button" data-taburl='
IPSCONTENT;
$return .= htmlspecialchars( \IPS\Http\Url::internal( "app=core&module=system&controller=ajax&do=topContributors&time=all&limit={$limit}", null, "", array(), 0 ), ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', TRUE );
$return .= <<<IPSCONTENT
' id='el_topContributorsAll_
' class='ipsTabs__tab' role="tab" id='ipsTabs_topContributors
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
' class='ipsTabs__tab' role="tab" aria-selected='false'>
_all' aria-controls="ipsTabs_topContributors
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_all_panel" aria-selected='false'>
IPSCONTENT;
$return .= \IPS\Member::loggedIn()->language()->addToStack( htmlspecialchars( 'alltime', ENT_DISALLOWED, 'UTF-8', FALSE ), TRUE, array( ) );
$return .= <<<IPSCONTENT
</a>
</li>
</ul>
</button>
</div>
IPSCONTENT;
$return .= \IPS\Theme::i()->getTemplate( "global", "core", 'global' )->tabScrollers( );
$return .= <<<IPSCONTENT
</div>
<section id='elTopContributors_
</i-tabs>
<section id='ipsTabs_topContributors
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_content' class='ipsTabs__panels'>
<div id="ipsTabs_elTopContributors_
<div id="ipsTabs_topContributors
IPSCONTENT;
$return .= \IPS\Theme\Template::htmlspecialchars( $tabID, ENT_QUOTES | ENT_DISALLOWED, 'UTF-8', FALSE );
$return .= <<<IPSCONTENT
_el_topContributorsWeek_panel" class='ipsTabs__panel'>
_week_panel" class='ipsTabs__panel' role="tabpanel">
IPSCONTENT;