Files
IPB/applications/forums/data/theme.xml
T
2025-12-19 16:47:22 -08:00

4221 lines
229 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<theme name="Default" author_name="Invision Power Services, Inc" author_url="https://www.invisioncommunity.com">
<template template_group="forums" template_name="clubForums" template_data="" template_location="front" template_app="forums"><![CDATA[
<header class='ipsPageHeader ipsPageHeader--forum-table' data-ips-hook="header">
<h1 data-ips-hook="title" class='ipsPageHeader__title'>{lang="club_node_forums"}</h1>
</header>
<ol class="ipsBlockSpacer" data-controller='forums.front.forum.forumList' data-baseURL=''>
<li class='ipsBox ipsPull'>
<h2 class="ipsBox__header">{lang="subforums_header_category"}</h2>
<div class='ipsBox__content'>
{{if \IPS\Member::loggedIn()->getLayoutValue('forums_forum') === 'grid'}}
<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'>
{{foreach \IPS\forums\Forum::clubNodes() as $childforum}}
{template="forumGridItem" group="index" app="forums" params="$childforum"}
{{endforeach}}
</div>
</i-data>
{{else}}
<i-data>
<ol class="ipsData ipsData--table ipsData--category ipsData--forum-category">
{{foreach \IPS\forums\Forum::clubNodes() as $childforum}}
{template="forumRow" group="index" app="forums" params="$childforum, TRUE"}
{{endforeach}}
</ol>
</i-data>
{{endif}}
</div>
</li>
</ol>]]></template>
<template template_group="forums" template_name="forumButtons" template_data="$forum" template_location="front" template_app="forums"><![CDATA[<ul data-ips-hook="buttons" class="ipsButtons ipsButtons--main ipsButtons--margin">
{{if $forum->isCombinedView()}}
<li>
<a class="ipsButton ipsButton--primary" href="{$forum->url()->setQueryString( [ 'do' => 'createMenu', 'root' => $forum->id ] )}" data-ipsDialog-title='{lang="select_forum"}' data-ipsDialog data-ipsDialog-size='narrow' title='{lang="create_new_topic"}' rel='nofollow noindex'><i class="fa-regular fa-pen-to-square"></i><span>{lang="start_new_topic"}</span></a>
</li>
{{elseif $forum->can('add')}}
<li>
<a class="ipsButton ipsButton--primary" href="{$forum->url()->setQueryString( 'do', 'add' )}" title='{lang="start_new_topic_desc"}' rel='nofollow noindex'><i class="fa-regular fa-pen-to-square"></i><span>{lang="start_new_topic"}</span></a>
</li>
{{endif}}
</ul>]]></template>
<template template_group="forums" template_name="forumDisplay" template_data="$forum, $table" template_location="front" template_app="forums"><![CDATA[
{{if $club = $forum->club()}}
{{if settings.clubs and settings.clubs_header == 'full'}}
{template="header" app="core" group="clubs" params="$club, $forum"}
{{endif}}
<div id='elClubContainer'>
{{endif}}
{{if $forum->feature_color}}<style>:root{--i-featured: {$forum->feature_color}}</style>{{endif}}
{{if !\IPS\Request::i()->advancedSearchForm}}
{{$followerCount = \IPS\forums\Topic::containerFollowerCount( $forum );}}
<header class="ipsPageHeader ipsBox ipsPull ipsPageHeader--topic-list {{if $forum->feature_color}}ipsPageHeader--hasFeatureColor{{endif}}" {{if $forum->feature_color}}style="--i-featured: {$forum->feature_color}"{{endif}}>
<div class="ipsPageHeader__row">
<div data-ips-hook="header" class='ipsPageHeader__primary'>
<h1 data-ips-hook="title" class='ipsPageHeader__title'>{$forum->_title}</h1>
{{if $forum->description}}
{template="richText" group="global" app="core" location="global" params="$forum->description, array('ipsPageHeader__desc')"}
{{endif}}
{{if \IPS\Application::appIsEnabled('cloud') AND \IPS\cloud\Application::featureIsEnabled( 'realtime' )}}
<div data-controller='cloud.front.realtime.whosViewing' data-location='{expression="\IPS\cloud\Realtime::i()->getLocationHash()"}'></div>
{{endif}}
</div>
{{if $forum->sub_can_post and !$forum->password}}
<ul class='ipsButtons'>
{{if \IPS\Application::appIsEnabled('cloud')}}
<li>{template="analyticsButton" app="cloud" group="analytics" params="$forum, $forum->_id"}</li>
{{endif}}
<li>{template="follow" app="core" group="global" params="'forums','forum', $forum->_id, $followerCount"}</li>
</ul>
{{endif}}
</div>
{{if $forum->isCombinedView()}}
<div class='ipsPageHeader__row ipsResponsive_hideDesktop'>
<ul data-ips-hook="buttons" class='ipsButtons ipsButtons--fill'>
<li>
<a class="ipsButton ipsButton--inherit" href="#" rel="nofollow" data-ipsDialog data-ipsDialog-title='{lang="forums_simple_dialog_title"}' data-ipsDialog-content='#elFluidFormFilters'>
<span data-role='fluidForumMobileDesc'>{lang="forums_simple_filter_by"}</span> <i class='fa-solid fa-angle-down'></i>
</a>
</li>
</ul>
</div>
{{endif}}
{{if $forum->show_rules == 1}}
<div class='ipsPageHeader__row'>
<a href="#elForumRules" class='ipsJS_show' data-ipsDialog data-ipsDialog-title="{lang="forums_forum_{$forum->id}_rulestitle"}" data-ipsDialog-content="#elForumRules">{lang="forums_forum_{$forum->id}_rulestitle"}</a>
<div id='elForumRules' class='ipsJS_hide i-background_2 i-padding_3'>
{template="richText" group="global" app="core" location="global" params="\IPS\Member::loggedIn()->language()->addToStack('forums_forum_' . $forum->id . '_rules'), array('')"}
</div>
</div>
{{elseif $forum->show_rules == 2}}
<div class='ipsPageHeader__row'>
<strong class='i-font-size_2 i-font-weight_600 i-margin-bottom_1 i-display_block'>{lang="forums_forum_{$forum->id}_rulestitle"}</strong>
{template="richText" group="global" app="core" location="global" params="\IPS\Member::loggedIn()->language()->addToStack('forums_forum_' . $forum->id . '_rules'), array('')"}
</div>
{{endif}}
</header>
{{if ! $forum->isCombinedView() and $forum->children()}}
<div data-ips-hook="subForums" class='ipsBox ipsBox--forum-categories ipsPull' data-controller='core.global.core.table, forums.front.forum.forumList' data-baseURL=''>
<h2 class='ipsBox__header'>{{if $forum->sub_can_post}}{lang="subforums_header"}{{else}}{lang="subforums_header_category"}{{endif}}</h2>
<div class='ipsBox__content'>
{{if \IPS\Member::loggedIn()->getLayoutValue('forums_forum') === 'grid'}}
<i-data>
<ol class="ipsData ipsData--grid ipsData--forum-grid">
{{foreach $forum->children( 'view' ) as $childforum}}
{template="forumGridItem" group="index" app="forums" params="$childforum"}
{{endforeach}}
</ol>
</i-data>
{{else}}
<i-data>
<ol class="ipsData ipsData--table ipsData--category ipsData--forum-category">
{{foreach $forum->children( 'view' ) as $childforum}}
{template="forumRow" group="index" app="forums" params="$childforum, TRUE"}
{{endforeach}}
</ol>
</i-data>
{{endif}}
</div>
</div>
{{endif}}
{{endif}}
<div data-controller='forums.front.forum.forumPage,cloud.front.realtime.viewingProvider'>
{template="forumButtons" group="forums" params="$forum"}
{$table|raw}
</div>
{{if \IPS\Member::loggedIn()->member_id || !\IPS\Request::i()->advancedSearchForm && $forum->sub_can_post and !$forum->password}}
<div class='ipsPageActions ipsBox i-padding_2 ipsPull ipsResponsive_showPhone'>
{{if \IPS\Application::appIsEnabled('cloud')}}
{template="analyticsButton" app="cloud" group="analytics" params="$forum, $forum->_id"}
{{endif}}
{{if \IPS\Member::loggedIn()->member_id}}
<a href="{$forum->url()->setQueryString( array( 'do' => 'markRead', 'fromForum' => 1 ) )->csrf()}" title='{lang="mark_forum_read_title"}' class='ipsButton ipsButton--inherit'><i class="fa-solid fa-check"></i><span>{lang="mark_forum_read"}</span></a>
{{endif}}
{{if !\IPS\Request::i()->advancedSearchForm && $forum->sub_can_post and !$forum->password}}
{template="follow" app="core" group="global" params="'forums','forum', $forum->_id, $followerCount"}
{{endif}}
</div>
{{endif}}
{{if $forum->club()}}
</div>
{{endif}}]]></template>
<template template_group="forums" template_name="forumHome" template_data="$forum, $featuredTopic, $popularQuestions, $newQuestions" template_location="front" template_app="forums"><![CDATA[
<!-- v5 todo: Is this template used? -->
<style>*{ color: #bde361 !important; }</style>
{{if $featuredTopic}}
<div class="i-padding_3">
<h2 class="ipsTitle ipsTitle--h3">{lang="featured_question"}</h2>
<br><br>
<div class="ipsPhotoPanel">
<span class="ipsUserPhoto">
<img src='{expression="$featuredTopic->author()->photo"}' alt='' loading='lazy'>
</span>
<div class='ipsPhotoPanel__text'>
<h3 class="i-font-size_2">
<a href="{$featuredTopic->url()}">{$featuredTopic->title}</a>
</h3>
<p class="i-color_soft">{lang="ask_byline" htmlsprintf="$featuredTopic->author()->link( NULL, NULL, $featuredTopic->isAnonymous() ), \IPS\DateTime::ts( $featuredTopic->start_date )->html( false )"}</p>
<br>
<div class="ipsTruncate_5">
{$featuredTopic->truncated()}
</div>
</div>
</div>
</div>
<hr class="ipsHr">
{{endif}}
<div class="ipsSpanGrid">
<div class="ipsSpanGrid__6 i-padding_3">
<h2 class="ipsTitle ipsTitle--h3">{lang="most_popular_questions"}</h2>
<p class="i-color_soft">{lang="from_the_past_30_days"}</p>
<i-data>
<ol class="ipsData ipsData--table ipsData--popular-questions" id="elTopicList">
{{foreach $popularQuestions as $question}}
<li class="ipsData__item" {{if $question->unread()}}data-ips-unread{{endif}}>
<div class='i-basis_50'>
<span class='ipsUserPhoto ipsUserPhoto--mini'>
<img src="{$question->author()->photo}" alt='' loading='lazy'>
</span>
</div>
<div class="ipsData__main">
<h4 class="ipsData__title">{{if $question->unread()}} <i class="fa-solid fa-circle cTopicIcon"></i> {{endif}}<a href="{$question->url()}">{$question->title}</a></h4>
<ul class="ipsData__meta ipsList ipsList--inline i-color_soft">
{{if $question->bestAnswer()}}
<li>
{lang="best_answer_by" htmlsprintf="$question->bestAnswer()->author()->link( NULL, NULL, $question->bestAnswer()->isAnonymous() ), \IPS\DateTime::ts( $question->bestAnswer()->post_date )->html( false )"}
</li>
{{endif}}
</ul>
</div>
</li>
{{endforeach}}
</ol>
</i-data>
</div>
<div class="ipsSpanGrid__6 i-padding_3">
<h2 class="ipsTitle ipsTitle--h3">{lang="new_questions"}</h2>
<p class="i-color_soft">{lang="awaiting_an_answer"}</p>
<ol class="ipsData ipsData--compact ipsData ipsData--question-list" id="elTopicList">
{{foreach $newQuestions as $question}}
<li class="ipsData__item" {{if $question->unread()}}data-ips-unread{{endif}}>
<div class='i-basis_50'>
<span class='ipsUserPhoto ipsUserPhoto--mini'>
<img src="{$question->author()->photo}" alt='' loading='lazy'>
</span>
</div>
<div class="ipsData__main">
<h4 class="ipsData__title">{{if $question->unread()}} <i class="fa-solid fa-circle cTopicIcon"></i> {{endif}}<a href="{$question->url()}">{$question->title}</a></h4>
<ul class="ipsData__meta ipsList ipsList--inline i-color_soft">
<li>
{lang="ask_byline" htmlsprintf="$question->author()->link( NULL, NULL, $question->isAnonymous() ), \IPS\DateTime::ts( $question->start_date )->html( false )"}
</li>
</ul>
</div>
</li>
{{endforeach}}
</ol>
</div>
</div>]]></template>
<template template_group="forums" template_name="forumPasswordPopup" template_data="$forum, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="forums"><![CDATA[{{if !\IPS\Request::i()->isAjax()}}<div class="ipsBox">{{endif}}
<form accept-charset='utf-8' class="ipsForm ipsForm--vertical ipsForm--forum-password" method='post' action='{$action}' data-ipsValidation novalidate>
<input type="hidden" name="{$id}_submitted" value="1">
{{foreach $hiddenValues as $k => $v}}
<input type="hidden" name="{$k}" value="{$v}">
{{endforeach}}
<div class='ipsBox__padding'>
<p class='i-font-size_3 i-font-weight_600 i-margin-bottom_2'>
{lang="enter_forum_password_1" sprintf="$forum->_title"}
</p>
<ul class='i-flex i-flex-wrap_wrap i-gap_1'>
{{foreach $elements as $collection}}
{{foreach $collection as $input}}
{{if $input instanceof \IPS\Helpers\Form\Text}}
<li class="i-basis_240 i-flex_91">
<input type="{$input->formType}" class="ipsInput ipsInput--text" required placeholder="{lang="$input->name"}" name='{$input->name}' id='{$input->htmlId}'>
{{if $input->error}}
<div class="ipsFieldRow__warning">{lang="$input->error"}</div>
{{endif}}
</li>
{{endif}}
{{endforeach}}
{{endforeach}}
<li class="i-flex_11">
<button type="submit" class="ipsButton ipsButton--primary i-width_100p">{lang="enter_forum"}</button>
</li>
</ul>
</div>
</form>
{{if !\IPS\Request::i()->isAjax()}}</div>{{endif}}]]></template>
<template template_group="forums" template_name="forumSelector" template_data="$form" template_location="front" template_app="forums"><![CDATA[
<div data-ips-template='forumSelector' {{if !\IPS\Request::i()->isAjax()}}class='ipsBox'{{endif}}>
{$form|raw}
</div>]]></template>
<template template_group="forums" template_name="forumTable" template_data="$table, $headers, $rows, $quickSearch" template_location="front" template_app="forums"><![CDATA[<div data-ips-hook="topicListTable" class='ipsBox ipsPull' data-baseurl='{$table->baseUrl}' data-resort='{$table->resortKey}' data-tableID='topics' {{if $table->dummyLoading}}data-dummyLoading{{endif}} data-controller='core.global.core.table{{if $table->canModerate()}},core.front.core.moderation{{endif}}'>
{{if $table->title}}
<h2 hidden>{$table->title}</h2>
{{endif}}
{{if $table->count > 0}}
<div class="ipsButtonBar ipsButtonBar--top">
<div data-role="tablePagination" class="ipsButtonBar__pagination" {{if $table->pages <= 1}}hidden{{endif}}>
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
</div>
<div class="ipsButtonBar__end">
<ul class="ipsDataFilters">
{{if \IPS\Member::loggedIn()->member_id}}
<li class="ipsResponsive_hidePhone">
<a href="{$table->baseUrl->setQueryString( array( 'do' => 'markRead', 'fromForum' => 1 ) )->csrf()}" class="ipsDataFilters__button" title='{lang="mark_forum_read_title"}' data-action='markForumRead'><i class="fa-solid fa-check"></i><span>{lang="mark_forum_read"}</span></a>
</li>
{{endif}}
{{if isset( $table->sortOptions ) and !empty( $table->sortOptions ) }}
<li data-ips-hook="sortOptions">
<a href="#elSortByMenu_menu" class="ipsDataFilters__button" id="elSortByMenu_{$table->uniqueId}" data-role='sortButton' data-ipsMenu data-ipsMenu-activeClass="ipsDataFilters__button--active" data-ipsMenu-selectable="radio"><span>{lang="sort_by"}</span><i class="fa-solid fa-caret-down"></i></a>
<ul class="ipsMenu ipsMenu_auto ipsMenu_withStem ipsMenu_selectable ipsHide" id="elSortByMenu_{$table->uniqueId}_menu">
{{$custom = TRUE;}}
{{foreach $table->sortOptions as $k => $col}}
<li class="ipsMenu_item {{if $col === $table->getSortByColumn()}}{{$custom = FALSE;}}ipsMenu_itemChecked{{endif}}" data-ipsMenuValue="{$col}" data-sortDirection='{$table->getSortDirection( $col )}'><a href="{$table->baseUrl->setQueryString( array( 'filter' => $table->filter, 'sortby' => $col, 'sortdirection' => $table->getSortDirection( $col ) ) )->setPage('page', 1)}" rel="nofollow">{lang="{$table->langPrefix}sort_{$k}"}</a></li>
{{endforeach}}
{{if $table->advancedSearch}}
<li class="ipsMenu_item {{if $custom}}ipsMenu_itemChecked{{endif}}" data-noSelect="true">
<a href='{$table->baseUrl->setQueryString( array( 'advancedSearchForm' => '1', 'filter' => $table->filter, 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection ) )}' rel="nofollow" data-ipsDialog data-ipsDialog-title='{lang="custom_sort"}'>{lang="custom"}</a>
</li>
{{endif}}
</ul>
</li>
{{endif}}
{{if !empty( $table->filters )}}
<li data-ips-hook="filters">
<a href="#elFilterByMenu_menu" class="ipsDataFilters__button" id="elFilterByMenu_{$table->uniqueId}" data-role='tableFilterMenu' data-ipsMenu data-ipsMenu-activeClass="ipsDataFilters__button--active" data-ipsMenu-selectable="radio"><span>{lang="filter_by"}</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_{$table->uniqueId}_menu'>
<li data-action="tableFilter" data-ipsMenuValue='' class='ipsMenu_item {{if !$table->filter}}ipsMenu_itemChecked{{endif}}'>
<a href='{$table->baseUrl->setQueryString( array( 'filter' => '', 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection ) )->setPage('page', 1)}' rel="nofollow">{lang="{$table->langPrefix}all"}</a>
</li>
{{foreach $table->filters as $k => $q}}
<li data-action="tableFilter" data-ipsMenuValue='{$k}' class='ipsMenu_item {{if $k === $table->filter}}ipsMenu_itemChecked{{endif}}'>
<a href='{$table->baseUrl->setQueryString( array( 'filter' => $k, 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection ) )->setPage('page', 1)}' rel="nofollow">{lang="{$table->langPrefix}{$k}"}</a>
</li>
{{endforeach}}
</ul>
</li>
{{endif}}
{{if $table->canModerate()}}
<li>
<a href="#elCheck_menu" class="ipsDataFilters__button" id="elCheck_{$table->uniqueId}" title='{lang="{$table->langPrefix}select_rows_tooltip"}' data-ipsTooltip data-ipsAutoCheck data-ipsAutoCheck-context="#elTable_{$table->uniqueId}" 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_{$table->uniqueId}_menu">
<li class="ipsMenu_title">{lang="{$table->langPrefix}select_rows"}</li>
<li class="ipsMenu_item" data-ipsMenuValue="all"><a href="#">{lang="all"}</a></li>
<li class="ipsMenu_item" data-ipsMenuValue="none"><a href="#">{lang="none"}</a></li>
{{if \count($table->getFilters())}}
<li class="ipsMenu_sep"><hr></li>
{{foreach $table->getFilters() as $filter}}
<li class="ipsMenu_item" data-ipsMenuValue="{$filter}"><a href="#">{lang="$filter"}</a></li>
{{endforeach}}
{{endif}}
</ul>
</li>
{{endif}}
</ul>
</div>
</div>
{{endif}}
{{if $table->canModerate()}}
<form action="{$table->baseUrl->csrf()}" method="post" data-role='moderationTools' data-ipsPageAction>
{{endif}}
{{if \count( $rows )}}
<i-data>
<ol class="ipsData {{if \IPS\Member::loggedIn()->getLayoutValue('forums_topic') == 'snippet'}}ipsData--snippet-topic-list{{else}}ipsData--table ipsData--entries ipsData--table-topic-list{{endif}} {{foreach $table->classes as $class}}{$class} {{endforeach}}" id='elTable_{$table->uniqueId}' data-role="tableRows">
{template="$table->rowsTemplate[1]" params="$table, $headers, $rows" object="$table->rowsTemplate[0]"}
</ol>
</i-data>
{{else}}
<div class='i-text-align_center ipsBox__padding'>
<p class='i-font-size_2 i-font-weight_500 i-margin-bottom_2'>{lang="no_topics_in_forum"}</p>
{{if $table->container()->can('add')}}
<a href='{$table->container()->url()->setQueryString( 'do', 'add' )}' rel="nofollow" class='ipsButton ipsButton--inherit ipsButton--large'>
{lang="submit_first_topic"}
</a>
{{endif}}
</div>
{{endif}}
{{if $table->canModerate()}}
<div class="ipsJS_hide ipsData__modBar" data-role="pageActionOptions">
<select name="modaction" data-role="moderationAction" class="ipsInput ipsInput--select i-basis_300">
{{if $table->canModerate('unhide')}}
<option value='approve' data-icon='check-circle'>{lang="approve"}</option>
{{endif}}
{{if $table->canModerate('feature') or $table->canModerate('unfeature')}}
<optgroup label="{lang="feature"}" data-icon='star' data-action='feature'>
{{if $table->canModerate('feature')}}
<option value='feature'>{lang="feature"}</option>
{{endif}}
{{if $table->canModerate('unhide')}}
<option value='unfeature'>{lang="unfeature"}</option>
{{endif}}
</optgroup>
{{endif}}
{{if $table->canModerate('pin') or $table->canModerate('unpin')}}
<optgroup label="{lang="pin"}" data-icon='thumb-tack' data-action='pin'>
{{if $table->canModerate('pin')}}
<option value='pin'>{lang="pin"}</option>
{{endif}}
{{if $table->canModerate('unpin')}}
<option value='unpin'>{lang="unpin"}</option>
{{endif}}
</optgroup>
{{endif}}
{{if $table->canModerate('hide') or $table->canModerate('unhide')}}
<optgroup label="{lang="hide"}" data-icon='eye' data-action='hide'>
{{if $table->canModerate('hide')}}
<option value='hide'>{lang="hide"}</option>
{{endif}}
{{if $table->canModerate('unhide')}}
<option value='unhide'>{lang="unhide"}</option>
{{endif}}
</optgroup>
{{endif}}
{{if $table->canModerate('lock') or $table->canModerate('unlock')}}
<optgroup label="{lang="lock"}" data-icon='lock' data-action='lock'>
{{if $table->canModerate('lock')}}
<option value='lock'>{lang="lock"}</option>
{{endif}}
{{if $table->canModerate('unlock')}}
<option value='unlock'>{lang="unlock"}</option>
{{endif}}
</optgroup>
{{endif}}
{{if $table->canModerate('move')}}
<option value='move' data-icon='arrow-right'>{lang="move"}</option>
{{endif}}
{{if $table->canModerate('split_merge')}}
<option value='merge' data-icon='level-up'>{lang="merge"}</option>
{{endif}}
{{if $table->canModerate('delete')}}
<option value='delete' data-icon='trash'>{lang="delete"}</option>
{{endif}}
{{if $table->canModerate( 'tag' )}}
<optgroup label='{lang="tag"}' data-icon='tag' data-action='tag'>
<option value='tag'>{lang="add_single_tag"}</option>
<option value='untag'>{lang="remove_single_tag"}</option>
</optgroup>
{{endif}}
{{if $table->savedActions}}
<optgroup label="{lang="saved_actions"}" data-icon='tasks' data-action='saved_actions'>
{{foreach $table->savedActions as $k => $v}}
<option value='savedAction-{$k}'>{$v}</option>
{{endforeach}}
</optgroup>
{{endif}}
</select>
<button type="submit" class="ipsButton ipsButton--primary">{lang="submit"}</button>
</div>
</form>
{{endif}}
<div data-ips-hook="pagination" class="ipsButtonBar ipsButtonBar--bottom" data-role="tablePagination" {{if $table->pages <= 1}}hidden{{endif}}>
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
</div>
</div>]]></template>
<template template_group="forums" template_name="popularQuestionRow" template_data="$question, $forum" template_location="front" template_app="forums"><![CDATA[<!-- v5 todo: Is this template file used? -->
<style>*{color: purple !important; }</style>
{{$iposted = $forum->contentPostedIn( null, array( $question->tid ) );}}
{{if !$question->mapped('moved_to')}}
<li class="ipsData__item cForumQuestion {{if $question->hidden()}}ipsModerated{{endif}}" {{if $question->unread()}}data-ips-unread{{endif}}>
<div class='ipsData__icon'>
{{if $question->topic_answered_pid}}
<span title='{lang="answered"}' class='cBestAnswerIndicator' data-ipsTooltip>
<i class='fa-solid fa-check'></i>
</span>
{{else}}
<span title='{lang="awaiting_answer"}' class='cBestAnswerIndicator cBestAnswerIndicator_off' data-ipsTooltip>
<i class='fa-solid fa-question'></i>
</span>
{{endif}}
</div>
<div class='ipsData__main'>
<h4 class='ipsData__title _container'>
<span class=''>
{{if $question->locked()}}
<i class='fa-solid fa-lock' data-ipsTooltip title='{lang="topic_locked"}'></i>
{{endif}}
{{if $question->unread()}}
<a href='{$question->url( 'getNewComment' )}' title='{lang="first_unread_post"}' data-ipsTooltip class='ipsIndicator {{if \in_array( $question->tid, $iposted )}}ipsIndicator--participated{{endif}}' data-ips-hook="unreadIcon"></a>
{{else}}
<span class='ipsIndicator ipsIndicator--read {{if \in_array( $question->tid, $iposted )}}ipsIndicator--participated{{endif}}'></span>
{{endif}}
<span>
{{foreach $question->badges() as $badge}}{$badge|raw}{{endforeach}}
</span>
{{if $question->prefix()}}
{template="prefix" group="global" app="core" params="$question->prefix( TRUE ), $question->prefix()"}
{{endif}}
<a href='{$question->url()}'>
{{if $question->mapped('title')}}{$question->mapped('title')}{{else}}<em class="i-color_soft">{lang="content_deleted"}</em>{{endif}}
</a>
</span>
</h4>
<div class='ipsData__meta'>
<p>{lang="ask_byline" htmlsprintf="$question->author()->link( NULL, NULL, $question->isAnonymous() ), \IPS\DateTime::ts( $question->start_date )->html( false )"}</p>
</div>
{{if \count( $question->tags() )}}
<p>{template="tags" group="global" app="core" params="$question->tags()"}</p>
{{endif}}
</div>
<div class='i-basis_80 i-text-align_center cForumQuestion_stat'>
<span>{{if $question->question_rating}}{$question->question_rating}{{else}}0{{endif}}</span>
<span class='i-color_soft'>{lang="votes_no_number" pluralize="$question->question_rating"}</span>
</div>
<div class='i-basis_80 i-text-align_center cForumQuestion_stat'>
{{foreach $question->stats(FALSE) AS $k => $v}}
{{if $k == 'forums_comments' OR $k == 'answers_no_number'}}
<span>{number="$v"}</span>
<span class='i-color_soft'>{lang="answers_no_number" pluralize="$v"}</span>
{{endif}}
{{endforeach}}
</div>
</li>
{{endif}}]]></template>
<template template_group="forums" template_name="qaForum" template_data="$table, $popularQuestions, $newQuestions, $featuredTopic, $forum" template_location="front" template_app="forums"><![CDATA[
{{if $popularQuestions && $newQuestions}}
<div class='ipsBox i-margin-bottom_4'>
<h2 class='ipsBox__header ipsHide'>{lang="explore_questions_title"}</h2>
<div class="ipsTabs" id="elQuestionsTabs" data-ipsTabBar data-ipsTabBar-contentarea="#elQuestionsTabsContent">
<ul role="tablist">
<li>
<a href="#elPopularQuestions" role="tab" id="elPopularQuestions" class="ipsTabs__tab {{if \count( $popularQuestions ) || !\count( $popularQuestions ) && !\count( $newQuestions )}}ipsTabs__tab--active{{endif}}" role="tab" aria-selected="{{if \count( $popularQuestions ) || !\count( $popularQuestions ) && !\count( $newQuestions )}}true{{else}}false{{endif}}">
{lang="popular_questions_title"}
</a>
</li>
<li>
<a href="#elNewQuestions" id="elNewQuestions" role="tab" class="ipsTabs__tab {{if !\count( $popularQuestions ) && \count( $newQuestions )}}ipsTabs__tab--active{{endif}}" role="tab" aria-selected="{{if !\count( $popularQuestions ) && \count( $newQuestions )}}true{{else}}false{{endif}}">
{{if \IPS\Settings::i()->forums_new_questions}}{lang="new_questions_title_no_answer"}{{else}}{lang="new_questions_title_no_best"}{{endif}}
</a>
</li>
</ul>
{template="tabScrollers" app="core" group="global" location="global"}
</div>
<section id='elQuestionsTabsContent'>
<div id="ipsTabs_elQuestionsTabs_elPopularQuestions_panel" class="ipsTabs__panel" aria-labelledby="elPopularQuestions">
{{if \count( $popularQuestions )}}
<!-- v5 todo: I think this entire template file is no longer needed.. -->
<i-data>
<ol class="ipsData ipsData--table cForumTopicTable cForumQuestions cTopicList" id='elTable_popularQuestions' data-role="tableRows">
{{foreach $popularQuestions as $question}}
{template="popularQuestionRow" params="$question, $forum" group="forums"}
{{endforeach}}
</ol>
</i-data>
{{else}}
<div class='i-text-align_center i-color_soft i-padding_3'>
<p class='i-font-size_2'>{lang="no_popular_questions"}</p>
</div>
{{endif}}
</div>
<div id="ipsTabs_elQuestionsTabs_elNewQuestions_panel" class="ipsTabs__panel" aria-labelledby="elNewQuestions">
{{if \count( $newQuestions )}}
<i-data>
<ol class="ipsData ipsData--table cForumTopicTable cForumQuestions cTopicList" id='elTable_newQuestions' data-role="tableRows">
{{foreach $newQuestions as $question}}
{template="popularQuestionRow" params="$question, $forum" group="forums"}
{{endforeach}}
</ol>
</i-data>
{{else}}
<div class='i-text-align_center i-color_soft i-padding_3'>
<p class='i-font-size_2'>{lang="no_new_questions"}</p>
</div>
{{endif}}
</div>
</section>
</div>
{{else}}
{{if $popularQuestions}}
<section class='ipsBox i-margin-bottom_4'>
<h2 class='ipsBox__header'>{lang="popular_questions_title"}</h2>
{{if \count( $popularQuestions )}}
<i-data>
<ol class="ipsData ipsData--table cForumTopicTable" id='elTable_' data-role="tableRows">
{{foreach $popularQuestions as $question}}
{template="popularQuestionRow" params="$question, $forum" group="forums"}
{{endforeach}}
</ol>
</i-data>
{{else}}
<div class='i-text-align_center i-color_soft i-padding_3'>
<p class='i-font-size_2'>{lang="no_popular_questions"}</p>
</div>
{{endif}}
</section>
{{endif}}
{{if $newQuestions}}
<section class='ipsBox i-margin-bottom_4'>
<h2 class='ipsBox__header'>{{if \IPS\Settings::i()->forums_new_questions}}{lang="new_questions_title_no_answer"}{{else}}{lang="new_questions_title_no_best"}{{endif}}</h2>
{{if \count( $newQuestions )}}
<i-data>
<ol class="ipsData ipsData--table cForumTopicTable" id='elTable_' data-role="tableRows">
{{foreach $newQuestions as $question}}
{template="popularQuestionRow" params="$question, $forum" group="forums"}
{{endforeach}}
</ol>
</i-data>
{{else}}
<div class='i-text-align_center i-color_soft i-padding_3'>
<p class='i-font-size_2'>{lang="no_new_questions"}</p>
</div>
{{endif}}
</section>
{{endif}}
{{endif}}
{$table|raw}]]></template>
<template template_group="forums" template_name="questionRow" template_data="$table, $headers, $rows" template_location="front" template_app="forums"><![CDATA[<!-- v5 todo: Is this template file used? -->
<style>*{color: gold !important; }</style>
{{$rowIds = array();}}
{{foreach $rows as $row}}
{{$idField = $row::$databaseColumnId;}}
{{$rowIds[] = $row->$idField;}}
{{endforeach}}
{{if \count( $rows )}}
{{$rowCount=1; $adShown=0;}}
{{foreach $rows as $row}}
{{if $advertisement = \IPS\core\Advertisement::loadByLocation( 'ad_forum_listing', $rowCount, $adShown )}}
<li class="ipsData__item">
{$advertisement|raw}
{{$adShown++;}}
</li>
{{endif}}
{{$rowCount++;}}
{{$idField = $row::$databaseColumnId;}}
{{if $row->mapped('moved_to')}}
{{if $movedTo = $row->movedTo()}}
<li class="ipsData__item {{if \IPS\forums\Forum::getMemberListView() == 'snippet'}}ipsTopicSnippet ipsQuestionSnippet{{endif}}">
<div class='ipsData__icon i-text-align_center'>
<i class="fa-solid fa-arrow-left i-font-size_2"></i>
</div>
<div class='ipsData__main'>
<h4 class='ipsData__title'>
<span class=''>
<em><a href='{$movedTo->url()}' title='{lang="go_to_new_location"}'>{$row->mapped('title')}</a></em>
</span>
</h4>
<div class='ipsData__meta'>
{{if isset( $row::$databaseColumnMap['status'] )}}
{{$statusField = $row::$databaseColumnMap['status'];}}
{{if $row->$statusField == 'merged'}}
<p>{lang="question_merged_to" sprintf="$movedTo->url(), $movedTo->mapped('title')"}</p>
{{else}}
<p>{lang="question_moved_to" sprintf="$movedTo->container()->url(), $movedTo->container()->_title"}</p>
{{endif}}
{{else}}
<p>{lang="question_moved_to" sprintf="$movedTo->container()->url(), $movedTo->container()->_title"}</p>
{{endif}}
</div>
</div>
{{if $table->canModerate()}}
<div class='ipsData__mod'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->mapped('pinned')}}pinned{{endif}} {{if $row->mapped('featured')}}featured{{endif}}' class="ipsInput ipsInput--toggle">
</div>
{{endif}}
</li>
{{endif}}
{{else}}
<li class="ipsData__item {{if \IPS\forums\Forum::getMemberListView() == 'snippet'}}ipsTopicSnippet ipsQuestionSnippet{{endif}} {{if method_exists( $row, 'tableClass' ) && $row->tableClass()}}ipsData__item_{$row->tableClass()}{{endif}} {{if $row->hidden()}}ipsModerated{{endif}} cForumQuestion" data-rowID='{$row->$idField}' {{if $row->unread()}}data-ips-unread{{endif}}>
<div class='ipsData__icon'>
{{if $row->topic_answered_pid}}
<span title='{lang="answered"}' class='cBestAnswerIndicator' data-ipsTooltip>
<i class='fa-solid fa-check'></i>
</span>
{{else}}
<span title='{lang="awaiting_answer"}' class='cBestAnswerIndicator cBestAnswerIndicator_off' data-ipsTooltip>
<i class='fa-solid fa-question'></i>
</span>
{{endif}}
</div>
<div class='ipsData__main'>
<h4 class='ipsData__title'>
<span class=''>
{{if $row->locked()}}
<span><i class='fa-solid fa-lock' data-ipsTooltip title='{lang="topic_locked"}'></i></span>
{{endif}}
{{if $row->unread()}}
<a href='{$row->url( 'getNewComment' )}' title='{lang="first_unread_post"}' data-ipsTooltip class='ipsIndicator {{if \in_array( $row->$idField, $table->contentPostedIn )}}ipsIndicator--participated{{endif}}' data-ips-hook="unreadIcon"></span>
</a>
{{else}}
<span class='ipsIndicator ipsIndicator--read {{if \in_array( $row->$idField, $table->contentPostedIn )}}ipsIndicator--participated{{endif}}'></span>
{{endif}}
<span>{{foreach $row->badges() as $badge}}{$badge|raw}{{endforeach}}</span>
{{if $row->prefix()}}
<span>{template="prefix" group="global" app="core" params="$row->prefix( TRUE ), $row->prefix()"}</span>
{{endif}}
<a href='{$row->url( "getPrefComment" )}' title='{{if $row->mapped('title')}}{$row->mapped('title')}{{else}}{lang="content_deleted"}{{endif}} {{if $row->canEdit()}}{lang="click_hold_edit"}{{endif}}' {{if $row->tableHoverUrl and $row->canView()}}data-ipsHover data-ipsHover-target='{$row->url()->setQueryString('preview', 1)}' data-ipsHover-timeout='1.5'{{endif}} {{if $row->canEdit()}} data-role="editableTitle"{{endif}}>
<span>
{{if $row->mapped('title')}}{$row->mapped('title')}{{else}}<em class="i-color_soft">{lang="content_deleted"}</em>{{endif}}
</span>
</a>
</span>
</h4>
{{if \IPS\forums\Forum::getMemberListView() == 'snippet'}}
<div class='ipsTopicSnippet__snippet i-link-color_inherit'>
<p>{$row->firstComment->snippet(680)}</p>
</div>
{{endif}}
<div class='ipsData__meta'>
<p>
<span>
{lang="ask_byline_itemprop" htmlsprintf="$row->author()->link( NULL, NULL, $row->isAnonymous() ), \IPS\DateTime::ts( $row->start_date )->html( false )"}
</span>
{{if \IPS\Request::i()->controller != 'forums'}}
{lang="in"} <a href="{$row->container()->url()}">{$row->container()->_title}</a>
{{endif}}
</p>
{{if \count( $row->tags() )}}
<div>{template="tags" group="global" app="core" params="$row->tags()"}</div>
{{endif}}
</div>
</div>
<div class='i-basis_80 i-text-align_center cForumQuestion_stat'>
<span>{{if $row->question_rating}}{$row->question_rating}{{else}}0{{endif}}</span>
<span class='i-color_soft'>{lang="votes_no_number" pluralize="$row->question_rating"}</span>
</div>
<div class='i-basis_80 i-text-align_center cForumQuestion_stat'>
{{foreach $row->stats(FALSE) AS $k => $v}}
{{if $k == 'forums_comments' OR $k == 'answers_no_number'}}
<span>{number="$v"}</span>
<span class='i-color_soft'>
{lang="answers_no_number" pluralize="$v"}
{{if \IPS\forums\Topic::modPermission( 'unhide', NULL, $row->container() ) AND $unapprovedComments = $row->mapped('unapproved_comments')}}
&nbsp;<a href='{$row->url()->setQueryString( 'queued_posts', 1 )}' class='i-color_warning i-font-size_-2' data-ipsTooltip title='{lang="queued_posts_badge" pluralize="$row->topic_queuedposts"}'><i class='fa-solid fa-triangle-exclamation'></i> <strong>{$unapprovedComments}</strong></a>
{{endif}}
</span>
{{endif}}
{{endforeach}}
</div>
{{if $table->canModerate()}}
<div class='ipsData__mod'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->tableStates()}}{$row->tableStates()}{{endif}}' class="ipsInput ipsInput--toggle">
</div>
{{endif}}
</li>
{{endif}}
{{endforeach}}
{{endif}}]]></template>
<template template_group="forums" template_name="topicHover" template_data="$topic, $overviews" template_location="front" template_app="forums"><![CDATA[
<div class='cTopicHovercard' data-controller='forums.front.forum.hovercard' data-topicID='{$topic->tid}'>
{{if \count( $overviews ) > 1}}
<div class="ipsTabs ipsTabs_small" id="elTopic_{$topic->tid}" data-ipsTabBar data-ipsTabBar-contentarea="#elTopic_{$topic->tid}_content">
<ul role="tablist">
{{foreach $overviews as $tabID => $tabData}}
<li>
<a href="#ipsTabs_elTopic_{$topic->tid}_elTopic_{$topic->tid}_{$tabID}_panel" id="elTopic_{$topic->tid}_{$tabID}" class="ipsTabs__tab" role="tab" aria-selected="{{if $tabID == 'firstPost'}}true{{else}}false{{endif}}">{lang="$tabData[0]"}</a>
</li>
{{endforeach}}
</ul>
{template="tabScrollers" app="core" group="global" location="global"}
</div>
<div id='elTopic_{$topic->tid}_content' class='ipsTabs__panels ipsTabs__panels--padded cTopicHovercard_container ipsScrollbar'>
{{else}}
<div class='i-padding_3 cTopicHovercard_container ipsScrollbar'>
{{endif}}
{{foreach $overviews as $tabID => $tabData}}
{{if \count( $overviews ) > 1}}
<div id='ipsTabs_elTopic_{$topic->tid}_elTopic_{$topic->tid}_{$tabID}_panel' class='ipsTabs__panel'>
{{endif}}
<div class='ipsPhotoPanel'>
{template="userPhoto" group="global" app="core" params="$tabData[1]->author(), 'fluid'"}
<div class='ipsPhotoPanel__text'>
<div class='ipsPhotoPanel__primary'>
{$tabData[1]->author()->link( NULL, NULL, $tabData[1]->isAnonymous() )|raw}
</div>
<div class='ipsPhotoPanel__secondary'>
{datetime="$tabData[1]->mapped('date')"}
{{if $tabData[1]->item()->unread() }}
&middot; <a href='{$tabData[1]->item()->url('markRead')->csrf()}' title='{lang="mark_topic_read"}' data-action='markTopicRead'><i class='fa-solid fa-check'></i> {lang="mark_topic_read"}</a>
{{endif}}
{{if $tabData[1]->canReportOrRevoke() === TRUE}}
&middot; <a href='{$tabData[1]->url('report')}' {{if member.member_id or \IPS\Helpers\Form\Captcha::supportsModal()}}data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report_post"}"{{endif}} data-action='reportComment' title='{lang="report_post"}'>{lang="report_post"}</a>
{{endif}}
</div>
</div>
</div>
<hr class='ipsHr'>
<div class='ipsRichText' data-controller='core.front.core.lightboxedImages'>{$tabData[1]->content()|raw}</div>
{{if \count( $overviews ) > 1}}
</div>
{{endif}}
{{endforeach}}
</div>
{{if \IPS\Settings::i()->core_datalayer_enabled}}
<script>
if ( IpsDataLayerConfig && !window.IpsDataLayerConfig && IpsDataLayerConfig._events.content_view.enabled ) {
$('body').trigger( 'ipsDataLayer', {
_key: 'content_view',
_properties: {expression="json_encode(array_replace($topic->getDataLayerProperties(), ['view_location' => 'hovercard', 'page_number' => null]))" raw="true"}
} );
}
</script>
{{endif}}
</div>]]></template>
<template template_group="forums" template_name="topicRow" template_data="$table, $headers, $rows" template_location="front" template_app="forums"><![CDATA[{{$rowIds = array();}}
{{foreach $rows as $row}}
{{$idField = $row::$databaseColumnId;}}
{{$rowIds[] = $row->$idField;}}
{{endforeach}}
{{if \count( $rows )}}
{{$rowCount=1; $adShown=0;}}
{{foreach $rows as $row}}
{{if $advertisement = \IPS\core\Advertisement::loadByLocation( 'ad_forum_listing', $rowCount, $adShown )}}
<li class="ipsData__item ipsData__item--advertisement">
{$advertisement|raw}
{{$adShown++;}}
</li>
{{endif}}
{{$rowCount++;}}
{{$idField = $row::$databaseColumnId;}}
{{if $row->mapped('moved_to')}}
{{if $movedTo = $row->movedTo() AND $movedTo->container()->can('view')}}
<li class="ipsData__item ipsData__item--moved">
<a href='{$movedTo->url()}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$row->mapped('title')}</span></a>
<div class='ipsData__icon ipsData__icon--indicator'>
<i class="fa-solid fa-arrow-left"></i>
</div>
<div class='ipsData__content'>
<div class='ipsData__main'>
<div class='ipsData__title'>
<h4>
<a href='{$movedTo->url()}' title='{lang="go_to_new_location"}'>{$row->mapped('title')}</a>
</h4>
</div>
<p class='ipsData__meta'>
{{if isset( $row::$databaseColumnMap['status'] )}}
{{$statusField = $row::$databaseColumnMap['status'];}}
{{if $row->$statusField == 'merged'}}
{lang="topic_merged_to" sprintf="$movedTo->url( 'getPrefComment' ), $movedTo->mapped('title')"}
{{else}}
{lang="topic_moved_to" sprintf="$movedTo->container()->url(), $movedTo->container()->_title"}
{{endif}}
{{else}}
{lang="topic_moved_to" sprintf="$movedTo->container()->url(), $movedTo->container()->_title"}
{{endif}}
</p>
</div>
</div>
{{if $table->canModerate()}}
<div class='ipsData__mod'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{{if $row->mapped('featured')}}unfeature{{endif}} {{if $row->mapped('pinned')}}unpin{{endif}} delete" data-state='{{if $row->mapped('pinned')}}pinned{{endif}} {{if $row->mapped('featured')}}featured{{endif}}' class="ipsInput ipsInput--toggle">
</div>
{{endif}}
</li>
{{endif}}
{{else}}
<li data-ips-hook="topicRow" class="ipsData__item {{if $row->groupsPosted}}ipsData__item--highlighted{{endif}} {{if method_exists( $row, 'tableClass' ) && $row->tableClass()}}ipsData__item--{$row->tableClass()}{{endif}} {{if $row->hidden() or $row->isFutureDate()}}ipsModerated{{endif}} {{if $row->isFutureDate()}}ipsModerated--future{{endif}} {$row->ui( 'css' )} {{if $row->isAssignedToMember()}}ipsData__item--assigned{{endif}}" data-rowID='{$row->$idField}' data-location='{{if isset($row->locationHash)}}{$row->locationHash}{{endif}}' data-controller='cloud.front.realtime.forumsTopicRow' {{if $row->unread()}}data-ips-unread{{else}}data-ips-read{{endif}} {$row->ui( 'dataAttributes' )}>
{{if $row->mapped('title') or $row->mapped('title') == 0}}<a href='{$row->url( "getPrefComment" )}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$row->mapped('title')}</span></a>{{endif}}
{{if member.member_id and $row->unread()}}
<a href='{$row->url( "getNewComment" )}' class="ipsData__icon" aria-label='{lang="first_unread_post"}' data-ipsTooltip data-ips-hook="unreadIcon">
<span class="ipsUserPhoto">
<img src="{$row->author()->photo}" alt="" loading="lazy">
</span>
{{if $row->author() != \IPS\Member::loggedIn() and \in_array( $row->$idField, $table->contentPostedIn )}}
<span class="ipsUserPhoto">
<img src='{expression="\IPS\Member::loggedIn()->photo"}' alt='' loading="lazy">
</span>
{{endif}}
</a>
{{else}}
<div class="ipsData__icon">
<span class="ipsUserPhoto">
<img src="{$row->author()->photo}" alt="" loading="lazy">
</span>
{{if $row->author() != \IPS\Member::loggedIn() and \in_array( $row->$idField, $table->contentPostedIn )}}
<span class="ipsUserPhoto">
<img src='{expression="\IPS\Member::loggedIn()->photo"}' alt='' loading="lazy">
</span>
{{endif}}
</div>
{{endif}}
<div class='ipsData__content'>
<div class='ipsData__main'>
<div class='ipsData__title'>
{{if member.member_id and $row->unread()}}
<a href='{$row->url( "getNewComment" )}' class="ipsIndicator {{if \in_array( $row->$idField, $table->contentPostedIn )}}ipsIndicator--participated{{endif}}" aria-label='{lang="first_unread_post"}' data-ipsTooltip data-ips-hook="topicIcon"></a>
{{endif}}
{{if $row->prefix()}}
{template="prefix" group="global" app="core" params="$row->prefix( TRUE ), $row->prefix()"}
{{endif}}
<h4 data-ips-hook="title">
<a href='{$row->url( "getPrefComment" )}' title='{{if $row->mapped('title')}}{$row->mapped('title')}{{else}}{lang="content_deleted"}{{endif}} {{if $row->canEdit()}}{lang="click_hold_edit"}{{endif}}' {{if $row->tableHoverUrl and $row->canView()}} data-ipsHover data-ipsHover-target='{$row->url()->setQueryString('preview', 1)}' data-ipsHover-timeout='1.0'{{endif}}{{if $row->canEdit()}} data-role="editableTitle"{{endif}}>
<span>
{{if $row->mapped('title') or $row->mapped('title') == 0}}{$row->mapped('title')}{{else}}<em class="i-color_soft">{lang="content_deleted"}</em>{{endif}}
</span>
</a>
</h4>
{{if $row->commentPageCount() > 1}}
{$row->commentPagination( array(), 'miniPagination' )|raw}
{{endif}}
{template="assignmentBadge" app="core" group="global" params="$row, ''"}
<div class="ipsBadges">{{foreach $row->badges() as $badge}}{$badge|raw}{{endforeach}}</div>
</div>
<div class='ipsData__meta'>
{lang="byline_nodate" htmlsprintf="$row->author()->link( NULL, NULL, $row->isAnonymous() )"},
<a href='{$row->url()}'>{datetime="$row->mapped('date')"}</a>
{{if !\in_array( \IPS\Dispatcher::i()->controller, array( 'forums', 'index' ) )}}
{lang="in"} <a href="{$row->container()->url()}">{$row->container()->_title}</a>
{{endif}}
</div>
{{if \count( $row->tags() )}}
{template="tags" group="global" app="core" params="$row->tags(), true"}
{{endif}}
</div>
<span data-role="activeUsers"></span>
{{if $row->groupsPosted}}
{template="groupPostedBadges" group="global" app="core" location="front" params="$row->groupsPosted, 'topic_posted_in_groups'"}
{{endif}}
<div class="ipsData__extra">
<ul data-ips-hook="stats" class='ipsData__stats'>
{{foreach $row->stats(FALSE) as $k => $v}}
<li {{if $k == 'num_views'}} {{elseif \in_array( $k, $row->hotStats )}}class="ipsData__stats-hot" data-text='{lang="hot_item"}' data-ipsTooltip title='{lang="hot_item_desc"}'{{endif}} data-statType='{$k}' {{if $v === 0}}data-v="0"{{endif}}>
<span class='ipsData__stats-icon' data-stat-value='{number="$v" format="short"}' aria-hidden="true" data-ipstooltip title='{number="$v" format="short"} {lang="{$k}" pluralize="$v" format="short"}'></span>
<span class='ipsData__stats-label'>{number="$v" format="short"} {lang="{$k}" pluralize="$v" format="short"}</span>
{{if ( $k == 'forums_comments' OR $k == 'answers_no_number' ) && \IPS\forums\Topic::modPermission( 'unhide', NULL, $row->container() ) AND $unapprovedComments = $row->mapped('unapproved_comments')}}
<a href='{$row->url()->setQueryString( 'queued_posts', 1 )}' class='i-color_warning i-font-size_-2' data-ipsTooltip title='{lang="queued_posts_badge" pluralize="$row->topic_queuedposts"}'><i class='fa-solid fa-triangle-exclamation'></i> <strong>{$unapprovedComments}</strong></a>
{{endif}}
</li>
{{endforeach}}
</ul>
<div data-ips-hook="latestData" class="ipsData__last">
{{if $row->mapped('num_comments')}}
{template="userPhoto" app="core" group="global" params="$row->lastCommenter(), 'fluid'"}
{{else}}
{template="userPhoto" app="core" group="global" params="$row->author(), 'fluid'"}
{{endif}}
<div class="ipsData__last-text">
<div class="ipsData__last-primary">
{{if $row->mapped('num_comments')}}
{{if $row->mapped('last_comment_anon')}}
{template="userLink" app="core" group="global" params="$row->author(), NULL, NULL, TRUE"}
{{else}}
{$row->lastCommenter()->link()|raw}
{{endif}}
{{else}}
{$row->author()->link( NULL, NULL, $row->isAnonymous() )|raw}
{{endif}}
</div>
<div class="ipsData__last-secondary">
<a href='{$row->url( 'getLastComment' )}' title='{lang="get_last_post"}'>
{{if $row->mapped('last_comment')}}{datetime="$row->mapped('last_comment')"}{{else}}{datetime="$row->mapped('date')"}{{endif}}
</a>
</div>
</div>
</div>
</div>
</div>
{{if $table->canModerate()}}
<div class='ipsData__mod'>
<label class='ipsInvisible' for='mod-checkbox-{$row->$idField}'>{lang="moderator_checkbox"}</label>
<input type='checkbox' id='mod-checkbox-{$row->$idField}' class='ipsInput ipsInput--toggle' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->tableStates()}}{$row->tableStates()}{{endif}}'>
</div>
{{endif}}
</li>
{{endif}}
{{endforeach}}
{{endif}}]]></template>
<template template_group="forums" template_name="topicRowSnippet" template_data="$table, $headers, $rows" template_location="front" template_app="forums"><![CDATA[{{$rowIds = array();}}
{{foreach $rows as $row}}
{{$idField = $row::$databaseColumnId;}}
{{$rowIds[] = $row->$idField;}}
{{endforeach}}
{{if \count( $rows )}}
{{$rowCount=1; $adShown=0;}}
{{foreach $rows as $row}}
{{if $advertisement = \IPS\core\Advertisement::loadByLocation( 'ad_forum_listing', $rowCount, $adShown )}}
<li class="ipsData__item ipsData__item--advertisement">
{$advertisement|raw}
{{$adShown++;}}
</li>
{{endif}}
{{$rowCount++;}}
{{$idField = $row::$databaseColumnId;}}
{{if $row->mapped('moved_to')}}
{{if $movedTo = $row->movedTo() AND $movedTo->container()->can('view')}}
<li class="ipsData__item ipsData__item--snippet">
<a href="{$movedTo->url()}" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$row->mapped('title')}</span></a>
<div class='ipsData__icon ipsData__icon--indicator'>
<i class="fa-solid fa-arrow-left"></i>
</div>
<div class='ipsData__content'>
<div class='ipsData__main'>
<div class='ipsData__title'>
<h4>
<a href='{$movedTo->url()}' title='{lang="go_to_new_location"}'>{$row->mapped('title')}</a>
</h4>
</div>
<p class='ipsData__meta'>
{{if isset( $row::$databaseColumnMap['status'] )}}
{{$statusField = $row::$databaseColumnMap['status'];}}
{{if $row->$statusField == 'merged'}}
{lang="topic_merged_to" sprintf="$movedTo->url( 'getPrefComment' ), $movedTo->mapped('title')"}
{{else}}
{lang="topic_moved_to" sprintf="$movedTo->container()->url(), $movedTo->container()->_title"}
{{endif}}
{{else}}
{lang="topic_moved_to" sprintf="$movedTo->container()->url(), $movedTo->container()->_title"}
{{endif}}
</p>
</div>
</div>
{{if $table->canModerate()}}
<div class='ipsData__mod'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{{if $row->mapped('featured')}}unfeature{{endif}} {{if $row->mapped('pinned')}}unpin{{endif}} delete" data-state='{{if $row->mapped('pinned')}}pinned{{endif}} {{if $row->mapped('featured')}}featured{{endif}}' class="ipsInput ipsInput--toggle">
</div>
{{endif}}
</li>
{{endif}}
{{else}}
<li data-ips-hook="topicRow" data-controller="cloud.front.realtime.forumsTopicRow" class="ipsData__item ipsData__item--snippet {{if $row->groupsPosted}}ipsData__item--highlighted{{endif}}{{if $row->isAssignedToMember()}} ipsData__item--assigned{{endif}} {{if method_exists( $row, 'tableClass' ) && $row->tableClass()}}ipsData__item--{$row->tableClass()}{{endif}} {{if $row->hidden() or $row->isFutureDate()}}ipsModerated{{endif}}{{if $row->isFutureDate()}} ipsModerated--alternate{{endif}}" data-rowID='{$row->$idField}' {{if isset($row->locationHash)}}data-location='{$row->locationHash}'{{endif}}' {{if $row->unread()}}data-ips-unread{{else}}data-ips-read{{endif}}>
<a href='{$row->url( "getPrefComment" )}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$row->mapped('title')}</span></a>
<div class='ipsData__icon'>
{template="userPhoto" app="core" group="global" params="$row->author(), 'fluid'"}
</div>
<div class='ipsData__content'>
<div class='ipsData__main'>
<div class="ipsColumns">
<div class="ipsColumns__primary">
<div class='ipsData__title'>
{{if member.member_id}}
{{if $row->unread()}}
<a href="{$row->url( 'getNewComment' )}" class="ipsIndicator {{if \in_array( $row->$idField, $table->contentPostedIn )}}ipsIndicator--participated{{endif}}" aria-label='{lang="first_unread_post"}' data-ipsTooltip data-ips-hook="unreadIcon"></a>
{{else}}
<span class='ipsIndicator ipsIndicator--read {{if \in_array( $row->$idField, $table->contentPostedIn )}}ipsIndicator--participated{{endif}}' aria-hidden='true'></span>
{{endif}}
{{endif}}
<div data-ips-hook="badges" class="ipsBadges">
{template="assignmentBadge" app="core" group="global" params="$row, ''"}
{{if $row->prefix()}}
{template="prefix" group="global" app="core" params="$row->prefix( TRUE ), $row->prefix()"}
{{endif}}
{{foreach $row->badges() as $badge}}{$badge|raw}{{endforeach}}
</div>
<h4 data-ips-hook="title">
<a href='{$row->url( "getPrefComment" )}' title='{{if $row->mapped('title')}}{$row->mapped('title')}{{else}}{lang="content_deleted"}{{endif}} {{if $row->canEdit()}}{lang="click_hold_edit"}{{endif}}' {{if $row->tableHoverUrl and $row->canView()}} data-ipsHover data-ipsHover-target='{$row->url()->setQueryString('preview', 1)}' data-ipsHover-timeout='1.0'{{endif}}{{if $row->canEdit()}} data-role="editableTitle"{{endif}}>
<span>
{{if $row->mapped('title') or $row->mapped('title') == 0}}{$row->mapped('title')}{{else}}<em class="i-color_soft">{lang="content_deleted"}</em>{{endif}}
</span>
</a>
</h4>
{{if $row->commentPageCount() > 1}}
{$row->commentPagination( array(), 'miniPagination' )|raw}
{{endif}}
</div>
<div class='ipsData__meta i-font-weight_500'><!-- <a href="{$row->container()->url()}">{$row->container()->_title|raw}</a> &middot; -->{lang="topic_started_username_date" htmlsprintf="$row->author()->link( NULL, NULL, $row->isAnonymous() ), \IPS\DateTime::ts( $row->mapped('date') )->html( false )"}</div>
</div>
<div class="ipsColumns__secondary">
{{if \count( $row->tags() )}}
{template="tags" group="global" app="core" params="$row->tags(), true"}
{{endif}}
</div>
</div>
{{if isset($row->firstComment)}}
<p class='ipsData__desc'>{$row->firstComment->snippet(680)}</p>
{{endif}}
<div class='ipsData__extra'>
<ul data-ips-hook="stats" class='ipsData__stats'>
<li>
{template="reactionOverview" group="global" app="core" params="$row, NULL, NULL"}
</li>
{{foreach $row->stats(FALSE) as $k => $v}}
<li {{if $k == 'num_views'}} {{elseif \in_array( $k, $row->hotStats )}}class="ipsData__stats-hot" data-text='{lang="hot_item"}' data-ipsTooltip title='{lang="hot_item_desc"}'{{endif}} data-statType='{$k}' {{if $v === 0}}data-v="0"{{endif}}>
<span class='ipsData__stats-icon' data-stat-value="{number='$v' format='short'}" aria-hidden="true" data-ipstooltip title='{number="$v" format="short"} {lang="{$k}" pluralize="$v" format="short"}'></span>
<span class='ipsData__stats-label'>{number="$v" format="short"} {lang="{$k}" pluralize="$v" format="short"}</span>
{{if ( $k == 'forums_comments' OR $k == 'answers_no_number' ) && \IPS\forums\Topic::modPermission( 'unhide', NULL, $row->container() ) AND $unapprovedComments = $row->mapped('unapproved_comments')}}
<a href='{$row->url()->setQueryString( 'queued_posts', 1 )}' class='i-color_warning i-font-size_-2' data-ipsTooltip title='{lang="queued_posts_badge" pluralize="$row->topic_queuedposts"}'><i class='fa-solid fa-triangle-exclamation'></i> <strong>{$unapprovedComments}</strong></a>
{{endif}}
</li>
{{endforeach}}
{{if $row->followerCount}}
<li>
<a href='{url="app=core&module=system&controller=notifications&do=followers&follow_app=forums&follow_area=topic&follow_id={$row->tid}"}' rel="nofollow" title='{lang="followers_tooltip"}' data-ipsTooltip data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="who_follows_this"}'>{lang="topic_follower_count" pluralize="$row->followerCount"}</a>
</li>
{{endif}}
</ul>
<div data-ips-hook="latestPoster" class="ipsData__last">
{{if $row->mapped('num_comments') and $row->mapped( 'num_comments') > 1}}
{template="userPhoto" app="core" group="global" params="$row->lastCommenter(), 'fluid'"}
<div class="ipsData__last-text">
<div class='ipsData__last-primary'>
{lang="topic_snippet_last_reply" htmlsprintf="$row->lastCommenter()->link(), $row->url( 'getLastComment' ), \IPS\DateTime::ts( $row->mapped('last_comment') )->html( false )"}
</div>
</div>
{{endif}}
</div>
</div>
</div>
</div>
{{if $table->canModerate()}}
<div class='ipsData__mod'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->tableStates()}}{$row->tableStates()}{{endif}}' class="ipsInput ipsInput--toggle">
</div>
{{endif}}
</li>
{{endif}}
{{endforeach}}
{{endif}}]]></template>
<template template_group="global" template_name="commentTableHeader" template_data="$comment, $topic" template_location="front" template_app="forums"><![CDATA[{{$idField = $topic::$databaseColumnId;}}
{{$iposted = $topic->container()->contentPostedIn( NULL, [ $topic->$idField ] );}}
<div>
<h3 class='ipsTitle ipsTitle--h3'>
{{if $topic->unread()}}
<a href='{$topic->url( 'getNewComment' )}' title='{lang="first_unread_post"}' data-ipsTooltip class='ipsIndicator {{if \in_array( $topic->$idField, $iposted )}}ipsIndicator--participated{{endif}}' data-ips-hook="unreadIcon"></a>
{{else}}
<span class='ipsIndicator ipsIndicator--read {{if \in_array( $topic->$idField, $iposted )}}ipsIndicator--participated{{endif}}'></span>
{{endif}}
<a href='{$comment->url()}' title='{lang="view_this_topic" sprintf="$topic->title"}'>{$topic->title}</a>
{{if $topic->container()->allow_rating}}
{template="rating" group="global" location="front" app="core" params="'large', $topic->rating_hits ? ( $topic->rating_total / $topic->rating_hits ) : 0"}
{{endif}}
</h3>
<p class='i-color_soft i-link-color_inherit'>{lang="in"} <a href='{$topic->container()->url()}'>{$topic->container()->_title}</a></p>
</div>]]></template>
<template template_group="global" template_name="embedPost" template_data="$comment, $item, $url" template_location="front" template_app="forums"><![CDATA[
<div class='ipsRichEmbed ipsRichEmbed--forum-post'>
{template="embedHeader" group="embed" app="core" params="$comment, $item->mapped('title'), $comment->mapped('date'), $url"}
<div class='ipsRichEmbed__content'>
<div class='ipsRichEmbed_originalItem'>
{template="embedOriginalItem" group="embed" app="core" params="$item, TRUE"}
</div>
<div class='ipsRichEmbed__snippet'>
{$comment->truncated(TRUE)|raw}
</div>
{{if settings.reputation_enabled and \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and \count( $comment->reactions() )}}
<ul class='ipsList ipsList--inline'>
<li>
{template="reactionOverview" app="core" group="global" params="$comment, TRUE, 'small'"}
</li>
</ul>
{{endif}}
</div>
</div>]]></template>
<template template_group="global" template_name="embedTopic" template_data="$item, $url" template_location="front" template_app="forums"><![CDATA[<div class='ipsRichEmbed ipsRichEmbed--forum-topic'>
{template="embedHeader" group="embed" app="core" params="$item, $item->mapped('title'), $item->mapped('date'), $url"}
{{if $contentImage = $item->contentImages(1)}}
{{$attachType = key( $contentImage[0] );}}
{{$firstPhoto = \IPS\File::get( $attachType, $contentImage[0][ $attachType ] );}}
<a href='{$url}' class='ipsRichEmbed_masthead'>
<img src='{$firstPhoto->url}' alt='' loading="lazy">
</a>
{{endif}}
<div class='ipsRichEmbed__content'>
<div class='ipsRichEmbed__snippet'>
{$item->truncated(TRUE)|raw}
</div>
{template="embedItemStats" group="embed" app="core" params="$item"}
</div>
</div>]]></template>
<template template_group="global" template_name="manageFollowNodeRow" template_data="$table, $headers, $rows" template_location="front" template_app="forums"><![CDATA[{{foreach $rows as $row}}
{{$contentItemClass = $row::$contentItemClass;}}
<li class="ipsData__item ipsData__item--manage-follow-node-row {{if method_exists( $row, 'tableClass' ) && $row->tableClass()}}ipsData__item--{$row->tableClass()}{{endif}}" data-controller='core.front.system.manageFollowed' data-followID='{$row->_followData['follow_area']}-{$row->_followData['follow_rel_id']}'>
<div class='ipsData__content'>
<div class='ipsData__main'>
<h4 class='ipsData__title'>
{{if $row->_locked}}
<i class="fa-solid fa-lock"></i>
{{endif}}
<a href='{$row->url()}'>
{$row->_title}
</a>
</h4>
<ul class='ipsList ipsList--inline i-color_soft'>
{{if $row->memberCanAccessOthersTopics( \IPS\Member::loggedIn() ) }}
{{$count = \IPS\forums\Topic::contentCount( $row, TRUE );}}
<li>{lang="posts_number" pluralize="$count"}</li>
{{endif}}
</ul>
</div>
<div>
<span class='ipsBadge ipsBadge--icon ipsBadge--new {{if !$row->_followData['follow_is_anon']}}ipsHide{{endif}}' data-role='followAnonymous' data-ipsTooltip title='{lang="follow_is_anon"}'><i class='fa-solid fa-eye-slash'></i></span>
</div>
<div class='i-basis_180'>
<ul>
<li title='{lang="follow_when"}' data-role='followDate'><i class='fa-regular fa-clock'></i> {datetime="$row->_followData['follow_added']"}</li>
<li title='{lang="follow_how"}' data-role='followFrequency'>
{{if $row->_followData['follow_notify_freq'] == 'none'}}
<i class='fa-regular fa-bell-slash'></i>
{{else}}
<i class='fa-solid fa-bell'></i>
{{endif}} {lang="follow_freq_{$row->_followData['follow_notify_freq']}"}
</li>
</ul>
</div>
<div class='i-basis_180 i-text-align_center'>
{template="manageFollow" group="system" app="core" params="$row->_followData['follow_app'], $row->_followData['follow_area'], $row->_followData['follow_rel_id']"}
</div>
</div>
{{if $table->canModerate()}}
<div class='ipsData__mod'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->_id}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='' class="ipsInput ipsInput--toggle">
</div>
{{endif}}
</li>
{{endforeach}}]]></template>
<template template_group="global" template_name="row" template_data="$table, $headers, $topic, $showReadMarkers=TRUE" template_location="front" template_app="forums"><![CDATA[{{$idField = $topic::$databaseColumnId;}}
{{$iPosted = isset( $table->contentPostedIn ) ? $table->contentPostedIn : ( ( $table AND method_exists( $table, 'container' ) AND $topic->container() !== NULL ) ? $topic->container()->contentPostedIn() : array() );}}
<li data-ips-hook="row" class="ipsData__item {{if method_exists( $topic, 'tableClass' ) && $topic->tableClass()}}ipsData__item--{$topic->tableClass()}{{endif}} {{if $topic->hidden()}}ipsModerated{{endif}}" {{if $showReadMarkers and $topic->unread()}}data-ips-unread{{else}}data-ips-read{{endif}}>
<a href='{$topic->url( "getPrefComment" )}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$topic->mapped('title')}</span></a>
{{if $showReadMarkers}}
{{if member.member_id}}
{{if $topic->unread()}}
<a href="{$topic->url( 'getNewComment' )}" class="ipsIndicator {{if \in_array( $topic->$idField, $iPosted )}}ipsIndicator--participated{{endif}}" aria-label='{lang="first_unread_post"}' data-ipsTooltip data-ips-hook="readMarker"></a>
{{else}}
<span class='ipsIndicator ipsIndicator--read {{if \in_array( $topic->$idField, $iPosted )}}ipsIndicator--participated{{endif}}' aria-hidden='true' data-ips-hook="readMarker"></span>
{{endif}}
{{endif}}
{{endif}}
<div class='ipsData__content'>
<div class='ipsData__main'>
<div class='ipsData__title'>
<div data-ips-hook="badges" class="ipsBadges">
{{foreach $topic->badges() as $badge}}{$badge|raw}{{endforeach}}
{{if $topic->prefix()}}
{template="prefix" group="global" app="core" params="$topic->prefix( TRUE ), $topic->prefix()"}</span>
{{endif}}
</div>
<h4 data-ips-hook="title">
<a href='{$topic->url( "getPrefComment" )}' {{if $topic->tableHoverUrl AND $topic->canView()}}data-ipsHover data-ipsHover-target='{$topic->url()->setQueryString('preview', 1)}' data-ipsHover-timeout='1.5' {{endif}}>
{$topic->mapped('title')}
</a>
</h4>
{{if $topic->commentPageCount() > 1}}
{$topic->commentPagination( array(), 'miniPagination' )|raw}
{{endif}}
</div>
<div class='ipsData__meta'>
{lang="byline" htmlsprintf="$topic->author()->link( NULL, NULL, $topic->isAnonymous() )"} {datetime="$topic->mapped('date')"}
{{if \IPS\Request::i()->controller != 'forums'}}
{lang="in"} <a href="{$topic->container()->url()}">{$topic->container()->_title}</a>
{{endif}}
</div>
{{if \count( $topic->tags() )}}
{template="tags" group="global" app="core" params="$topic->tags(), true, true"}
{{endif}}
</div>
<ul data-ips-hook="stats" class='ipsData__stats'>
{{foreach $topic->stats(FALSE) as $k => $v}}
<li {{if \in_array( $k, $topic->hotStats )}}class="ipsData__stats-hot" data-text='{lang="hot_item"}' data-ipsTooltip title='{lang="hot_item_desc"}'{{endif}}>
<span class='ipsData__stats-icon' data-stat-value="{number='$v' format='short'}" aria-hidden="true" data-ipstooltip title='{number="$v" format="short"} {lang="{$k}" pluralize="$v" format="short"}'></span>
<span class='ipsData__stats-label'>{number="$v"} {lang="{$k}" pluralize="$v"}</span>
</li>
{{endforeach}}
</ul>
<div class="ipsData__last">
<div class="ipsPhotoPanel" data-ips-hook="latestUserPhoto">
{{if $topic->mapped('num_comments')}}
{template="userPhoto" app="core" group="global" params="$topic->lastCommenter(), 'fluid'"}
{{else}}
{template="userPhoto" app="core" group="global" params="$topic->author(), 'fluid'"}
{{endif}}
<div class="ipsPhotoPanel__text">
<div class="ipsPhotoPanel__primary">
{{if $topic->mapped('num_comments')}}
{$topic->lastCommenter()->link()|raw}
{{else}}
{$topic->author()->link( NULL, NULL, $topic->isAnonymous() )|raw}
{{endif}}
</div>
<div class="ipsPhotoPanel__secondary">
<a href='{$topic->url( 'getLastComment' )}' title='{lang="get_last_post"}'>
{{if $topic->mapped('last_comment')}}<span class='ipsData__last-replied'>{lang="replied_lc"}</span> {datetime="$topic->mapped('last_comment')"}{{else}}{datetime="$topic->mapped('date')"}{{endif}}
</a>
</div>
</div>
</div>
</div>
</div>
{{if $table AND method_exists( $table, 'canModerate' ) AND $table->canModerate()}}
<div class='ipsData__mod'>
<input class="ipsInput ipsInput--toggle" type='checkbox' data-role='moderation' name="moderate[{$topic->tid}]" data-actions="{expression="implode( ' ', $table->multimodActions( $topic ) )"}" data-state='{{if $topic->tableStates()}}{$topic->tableStates()}{{endif}}'>
</div>
{{endif}}
</li>]]></template>
<template template_group="global" template_name="rows" template_data="$table, $headers, $rows" template_location="front" template_app="forums">{{if \count( $rows )}}
{{foreach $rows as $row}}
{template=&quot;row&quot; group=&quot;global&quot; app=&quot;forums&quot; params=&quot;$table, $headers, $row&quot;}
{{endforeach}}
{{endif}}</template>
<template template_group="global" template_name="searchNoPermission" template_data="$lang, $link=NULL" template_location="front" template_app="forums"><![CDATA[<li class="ipsStreamItem ipsStreamItem--password ipsStreamItem_contentBlock">
<div class='ipsStreamItem__iconCell'>
<i class="fa-solid fa-lock"></i>
</div>
<div class='ipsStreamItem__mainCell'>
<div class='i-color_soft i-font-weight_500'>
{$lang}{{if $link}} <a href="{$link}">{lang="enter_password"}</a>{{endif}}
</div>
</div>
</li>
]]></template>
<template template_group="index" template_name="forumGridItem" template_data="$forum, $isSubForum=FALSE" template_location="front" template_app="forums"><![CDATA[{{if $forum->can('view')}}
{{$lastPosts = $forum->lastPost(2);}}
{{$club = $forum->club();}}
<li data-ips-hook="gridItem" class="{$forum->ui( 'css' )} ipsData__item {{if $forum->redirect_on}}ipsData__item--redirect{{elseif $forum->password}}ipsData__item--password{{else}}ipsData__item--forum{{endif}}" data-forumID="{$forum->_id}" {{if \IPS\forums\Topic::containerUnread( $forum ) && !$forum->redirect_on}}data-ips-unread{{else}}data-ips-read{{endif}} {template="formattedInlineStyle" params="$forum" app="core" group="global" location="front"} {$forum->ui( 'dataAttributes' )}>
{{if $forum->password && !$forum->loggedInMemberHasPasswordAccess()}}
<a href="{$forum->url()->setQueryString( 'passForm', '1' )}" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="forum_requires_password" sprintf="$forum->_title"}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$forum->_title}</span></a>
{{else}}
<a href="{$forum->url()}" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{{if $club}}{lang="club_node" sprintf="$club->name, $forum->_title"}{{else}}{$forum->_title}{{endif}}</span></a>
{{endif}}
<a {{if $forum->password && !$forum->loggedInMemberHasPasswordAccess()}}href="{$forum->url()->setQueryString( 'passForm', '1' )}" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="forum_requires_password" sprintf="$forum->_title"}'{{else}}href="{$forum->url()}"{{endif}} class='ipsData__image' title='{{if $club}}{lang="club_node" sprintf="$club->name, $forum->_title"}{{else}}{$forum->_title}{{endif}}'>
{{if $forum->card_image}}
<img src='{file="$forum->card_image" extension="forums_Cards"}' alt='' loading='lazy'>
{{elseif $club}}
{{$coverPhoto = $club->coverPhoto( FALSE );}}
{{$cfObject = $coverPhoto->object;}}
{{if $coverPhoto->file}}
<img src="{$coverPhoto->file->url}" alt='' loading='lazy'>
{{elseif $club->profile_photo}}
<img src='{file="$club->profile_photo" extension="core_Clubs"}' alt='' loading='lazy'>
{{elseif ! empty( $cfObject::$coverPhotoDefault )}}
<div class="ipsFallbackImage" style="--i-empty-image-random--ba-co: {$coverPhoto->object->coverPhotoBackgroundColor()};"></div>
{{endif}}
{{else}}
<i></i>
{{endif}}
</a>
<div class='ipsData__content'>
<div class='ipsData__main'>
<div class='ipsData__title'>
{{if !$forum->redirect_on AND \IPS\forums\Topic::containerUnread( $forum ) AND \IPS\Member::loggedIn()->member_id}}
<span class="ipsBadge ipsBadge--new">New</span>
{{endif}}
<h3 data-ips-hook="title">
{{if $forum->password && !$forum->loggedInMemberHasPasswordAccess()}}
<a href="{$forum->url()->setQueryString( 'passForm', '1' )}" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="forum_requires_password" sprintf="$forum->_title"}'>{$forum->_title}</a>
{{else}}
<a href="{$forum->url()}">{{if $club}}{lang="club_node" sprintf="$club->name, $forum->_title"}{{else}}{$forum->_title}{{endif}}</a>
{{endif}}
{{if $forum->password}}
{{if !$forum->loggedInMemberHasPasswordAccess()}}
<i class="fa-solid fa-lock i-font-size_-2 i-color_soft"></i>
{{endif}}
{{endif}}
{{if $forum->redirect_on}}
<i class="fa-solid fa-arrow-right i-font-size_-2 i-color_soft"></i>
{{endif}}
</h3>
</div>
{{if $forum->description}}
<div class="ipsData__desc">
{template="richText" group="global" app="core" location="global" params="$forum->description, array('')"}
</div>
{{endif}}
{{if $forum->hasChildren()}}
<ul data-ips-hook="children" class="ipsSubList">
{{foreach $forum->children() as $subforum}}
<li class="ipsSubList__item {{if \IPS\forums\Topic::containerUnread( $subforum )}}ipsSubList__item--unread{{else}}ipsSubList__item--read{{endif}}">
<a href="{$subforum->url()}">{$subforum->_title}</a>
</li>
{{endforeach}}
</ul>
{{endif}}
</div>
<ul data-ips-hook="stats" class='ipsData__stats'>
{{if !$forum->redirect_on}}
{{$count = \IPS\forums\Topic::contentCount( $forum, TRUE );}}
<li>{lang="posts_number" pluralize="$count" format="long"}</li>
{{if $forum->followerCount}}
<li data-el='grid-follower-count'>
<a href='{url="app=core&module=system&controller=notifications&do=followers&follow_app=forums&follow_area=forum&follow_id={$forum->_id}"}' title='{lang="followers_tooltip"}' data-ipsTooltip data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="who_follows_this"}'>{lang="forum_follower_count" pluralize="$forum->followerCount"}</a>
</li>
{{endif}}
{{else}}
<li>{lang="redirect_hits" pluralize="$forum->redirect_hits"}</li>
{{endif}}
{{if \IPS\forums\Topic::modPermission( 'unhide', NULL, $forum ) AND $forum->queued_topics}}
<li class='i-color_negative i-link-color_inherit'>
<i class='fa-solid fa-triangle-exclamation'></i>
<a href='{$forum->url()->setQueryString( array( 'filter' => 'queued_topics' ) )}'>{lang="queued_topics_badge" pluralize="$forum->queued_topics"}</a>
</li>
{{endif}}
{{if \IPS\forums\Topic::modPermission( 'unhide', NULL, $forum ) AND $forum->queued_posts}}
<li class='i-color_negative i-link-color_inherit'>
<i class='fa-solid fa-triangle-exclamation'></i>
<a href='{$forum->url()->setQueryString( array( 'filter' => 'queued_posts' ) )}'>{lang="queued_posts_badge" pluralize="$forum->queued_posts"}</a>
</li>
{{endif}}
</ul>
{{if $lastPosts and count( $lastPosts )}}
{{foreach $lastPosts as $lastPost}}
<div class="ipsData__last" data-ips-hook="latestPoster">
{template="userPhoto" app="core" group="global" params="$lastPost['author'], 'fluid'"}
<div class="ipsData__last-text">
<div class="ipsData__last-primary"><a href="{{if member.member_id}}{$lastPost['topic_url']->setQueryString( 'do', 'getNewComment' )}{{else}}{$lastPost['topic_url']}{{endif}}" title='{$lastPost['topic_title']}'>{$lastPost['topic_title']}</a></div>
<small class="ipsData__last-secondary">
{{if $lastPost['last_poster_anon']}}
{lang="byline_nodate" htmlsprintf="$lastPost['author']->link( NULL, NULL, TRUE )"},
{{else}}
{lang="byline_nodate" htmlsprintf="$lastPost['author']->link()"},
{{endif}}
{{if $lastPost['topic_title']}}
<a href='{{if member.member_id}}{$lastPost['topic_url']->setQueryString( 'do', 'getLastComment' )}{{else}}{$lastPost['topic_url']}{{endif}}' title='{lang="get_last_post"}'>{datetime="$lastPost['date']"}</a>
{{else}}
{datetime="$lastPost['date']"}
{{endif}}
</small>
</div>
</div>
{{endforeach}}
{{endif}}
</div>
</li>
{{endif}}]]></template>
<template template_group="index" template_name="forumRow" template_data="$forum, $isSubForum=FALSE, $table=NULL" template_location="front" template_app="forums"><![CDATA[{{if $forum->can('view')}}
{{$lastPost = $forum->lastPost();}}
{{$club = $forum->club();}}
<li data-ips-hook="rowItem" class="{$forum->ui( 'css' )} ipsData__item {{if !$forum->redirect_on && !$forum->password}}ipsData__item--discussions{{endif}} {{if $forum->redirect_on}}ipsData__item--redirect{{endif}} {{if $forum->password}}ipsData__item--password {{if $forum->loggedInMemberHasPasswordAccess()}}ipsData__item--password-known{{endif}}{{endif}}" data-forumID="{$forum->_id}" {template="formattedInlineStyle" params="$forum" app="core" group="global" location="front"} {{if \IPS\forums\Topic::containerUnread( $forum ) && !$forum->redirect_on}}data-ips-unread{{else}}data-ips-read{{endif}} {$forum->ui( 'dataAttributes' )}>
{{if $forum->password && !$forum->loggedInMemberHasPasswordAccess()}}
<a href="{$forum->url()->setQueryString( 'passForm', '1' )}" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="forum_requires_password" sprintf="$forum->_title"}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$forum->_title}</span></a>
{{else}}
<a href="{$forum->url()}" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{{if $club}}{lang="club_node" sprintf="$club->name, $forum->_title"}{{else}}{$forum->_title}{{endif}}</span></a>
{{endif}}
<div class="ipsData__image">
{{if $club}}
<img src="{{if $club->profile_photo}}{file="$club->profile_photo" extension="core_Clubs"}{{else}}{resource="default_club.png" app="core" location="global"}{{endif}}" alt='' loading='lazy'>
{{elseif $forum->icon}}
{$forum->getIcon()|raw}
{{else}}
<span class='ipsIcon ipsIcon--fa' aria-hidden="true"><i class="fa-ips"></i></span>
{{endif}}
</div>
<div class="ipsData__content">
<div class="ipsData__main">
<div class='ipsData__title'>
{{if \IPS\forums\Topic::containerUnread( $forum ) && !$forum->redirect_on}}
<span class="ipsIndicator" title='{lang="unread"}' data-ipstooltip></span>
{{endif}}
<h3 data-ips-hook="title">
{{if $forum->password && !$forum->loggedInMemberHasPasswordAccess()}}
<a href="{$forum->url()->setQueryString( 'passForm', '1' )}" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="forum_requires_password" sprintf="$forum->_title"}'>{$forum->_title}</a>
{{else}}
<a href="{$forum->url()}">{{if $club}}{lang="club_node" sprintf="$club->name, $forum->_title"}{{else}}{$forum->_title}{{endif}}</a>
{{endif}}
</h3>
</div>
{{if \IPS\forums\Topic::modPermission( 'unhide', NULL, $forum ) AND $unapprovedContent = $forum->unapprovedContentRecursive() and ( $unapprovedContent['topics'] OR $unapprovedContent['posts'] )}}
<div data-ips-hook="pendingIcons" class='i-color_warning i-font-size_-1'>
<strong>
{lang="pending_approval"}:
{{if $unapprovedContent['topics']}}
<a href='{$forum->url()->setQueryString( array( 'filter' => 'queued_topics' ) )}' class='i-color_inherit'>{lang="queued_topics_badge" pluralize="$unapprovedContent['topics']"}</a>
{{endif}}
{{if $unapprovedContent['topics'] && $unapprovedContent['posts']}} &amp; {{endif}}
{{if $unapprovedContent['posts']}}
<a href='{$forum->url()->setQueryString( array( 'filter' => 'queued_posts' ) )}' class='i-color_inherit'>{lang="queued_posts_badge" pluralize="$unapprovedContent['posts']"}</a>
{{endif}}
</strong>
</div>
{{endif}}
{{if $forum->description}}
{template="richText" group="global" app="core" location="global" params="$forum->description, array('ipsData__desc')"}
{{endif}}
{{if $forum->hasChildren()}}
<ul data-ips-hook="children" class="ipsSubList">
{{foreach $forum->children() as $subforum}}
<li class="ipsSubList__item {{if \IPS\forums\Topic::containerUnread( $subforum )}}ipsSubList__item--unread{{else}}ipsSubList__item--read{{endif}}">
<a href="{$subforum->url()}">{$subforum->_title}</a>
</li>
{{endforeach}}
</ul>
{{endif}}
</div>
{{if $forum->redirect_on}}
<div class="ipsData__last">
<div class='ipsData__last-text'>
<span class='ipsData__last-secondary'>{lang="redirect_hits" pluralize="$forum->redirect_hits"}</span>
</div>
</div>
{{else}}
{{if $lastPost AND ( $forum->can_view_others OR \IPS\Member::loggedIn()->modPermission('can_read_all_topics') OR ( \is_array( \IPS\Member::loggedIn()->modPermission('forums') ) AND \in_array( $forum->_id, \IPS\Member::loggedIn()->modPermission('forums') ) ))}}
<ul data-ips-hook="stats" class="ipsData__stats ipsData__stats--large">
{{$count = \IPS\forums\Topic::contentCount( $forum, TRUE );}}
<li>
<span>{number="$count" format="short"}</span>
<span>{lang="posts_no_number" pluralize="$count" format="short"}</span>
</li>
</ul>
{{endif}}
{{if $lastPost}}
<div data-ips-hook="latestPoster" class="ipsData__last">
{template="userPhoto" app="core" group="global" params="$lastPost['author'], 'fluid'"}
<div class='ipsData__last-text'>
{{if $lastPost['topic_title']}}
<div class='ipsData__last-primary'>
<a href="{{if member.member_id}}{$lastPost['topic_url']->setQueryString( 'do', 'getNewComment' )}{{else}}{$lastPost['topic_url']}{{endif}}" title='{$lastPost['topic_title']}'>{$lastPost['topic_title']}</a>
</div>
{{endif}}
<div class='ipsData__last-secondary'>
{{if $lastPost['last_poster_anon']}}
{lang="byline_nodate" htmlsprintf="$lastPost['author']->link( NULL, NULL, TRUE )"},
{{else}}
{lang="byline_nodate" htmlsprintf="$lastPost['author']->link()"},
{{endif}}
{{if $lastPost['topic_title']}}
<a href='{{if member.member_id}}{$lastPost['topic_url']->setQueryString( 'do', 'getLastComment' )}{{else}}{$lastPost['topic_url']}{{endif}}' title='{lang="get_last_post"}'>{datetime="$lastPost['date']"}</a>
{{else}}
{datetime="$lastPost['date']"}
{{endif}}
</div>
</div>
</div>
{{endif}}
{{endif}}
</div>
</li>
{{endif}}]]></template>
<template template_group="index" template_name="forumSummaryRow" template_data="$forum, $isSubForum=FALSE" template_location="front" template_app="forums"><![CDATA[{{if $forum->can('view')}}
{{$lastPosts = $forum->lastPost(5);}}
{{$club = $forum->club();}}
<section class="{$forum->ui( 'css' )} ipsCategoryWithFeed__item" data-forumID="{$forum->_id}" data-type='{{if $forum->redirect_on}}redirect{{elseif $forum->password}}password{{else}}forum{{endif}}' {$forum->ui( 'dataAttributes' )} {{if $forum->feature_color}}style='--i-featured:{$forum->feature_color}'{{endif}}>
<i-data class='ipsCategoryWithFeed__meta'>
<div class="ipsData ipsData--grid ipsData--forumFeedViewParent">
<div class="ipsData__item" {{if \IPS\forums\Topic::containerUnread( $forum ) && !$forum->redirect_on}}data-ips-unread{{else}}data-ips-read{{endif}}>
<a {{if $forum->password && !$forum->loggedInMemberHasPasswordAccess()}}href="{$forum->url()->setQueryString( 'passForm', '1' )}" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="forum_requires_password" sprintf="$forum->_title"}'{{else}}href="{$forum->url()}"{{endif}} class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{{if $forum->password && !$forum->loggedInMemberHasPasswordAccess()}}{$forum->_title}{{elseif $club}}{lang="club_node" sprintf="$club->name, $forum->_title"}{{else}}{$forum->_title}{{endif}}</span></a>
<a {{if $forum->password && !$forum->loggedInMemberHasPasswordAccess()}}href="{$forum->url()->setQueryString( 'passForm', '1' )}" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="forum_requires_password" sprintf="$forum->_title"}'{{else}}href="{$forum->url()}"{{endif}} class='ipsData__image'>
{{if $club and ! $forum->card_image}}
{{$coverPhoto = $club->coverPhoto( FALSE );}}
{{$cfObject = $coverPhoto->object;}}
{{if $coverPhoto->file}}
<img src="{$coverPhoto->file->url}" alt='' loading='lazy'>
{{elseif $club->profile_photo}}
<img src='{file="$club->profile_photo" extension="core_Clubs"}' alt='' loading='lazy'>
{{elseif ! empty( $cfObject::$coverPhotoDefault )}}
<div class="ipsFallbackImage" style="--i-empty-image-random--ba-co: {$coverPhoto->object->coverPhotoBackgroundColor()};"></div>
{{endif}}
{{elseif $forum->card_image}}
<img src='{file="$forum->card_image" extension="forums_Cards"}' alt='' loading='lazy'>
{{elseif $forum->icon}}
{$forum->getIcon()|raw}
{{else}}
<i></i>
{{endif}}
<span class="ipsInvisible">
{{if $forum->password && !$forum->loggedInMemberHasPasswordAccess()}}
{$forum->_title}
{{elseif $club}}
{lang="club_node" sprintf="$club->name, $forum->_title"}
{{else}}
{$forum->_title}
{{endif}}
</span>
</a>
<div class="ipsData__content">
<div class="ipsData__main">
<header class='ipsData__title'>
{{if !$forum->redirect_on AND \IPS\forums\Topic::containerUnread( $forum ) AND \IPS\Member::loggedIn()->member_id}}
<span class="ipsBadge ipsBadge--new">{lang="new"}</span>
{{endif}}
<h3>
{{if $forum->password && !$forum->loggedInMemberHasPasswordAccess()}}
<a href="{$forum->url()->setQueryString( 'passForm', '1' )}" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="forum_requires_password" sprintf="$forum->_title"}'>{$forum->_title}</a>
{{else}}
<a href="{$forum->url()}">{{if $club}}{lang="club_node" sprintf="$club->name, $forum->_title"}{{else}}{$forum->_title}{{endif}}</a>
{{endif}}
</h3>
{{if $forum->password && !$forum->loggedInMemberHasPasswordAccess()}}
<i class="fa-solid fa-lock i-font-size_-2 i-color_soft"></i>
{{endif}}
{{if $forum->redirect_on}}
<i class="fa-solid fa-arrow-right i-font-size_-2 i-color_soft"></i>
{{endif}}
</header>
{{if $forum->description}}
{template="richText" group="global" app="core" location="global" params="$forum->description, array('ipsData__desc ipsData__desc--all')"}
{{endif}}
{{if $forum->hasChildren()}}
<ul class="ipsSubList">
{{foreach $forum->children() as $subforum}}
<li class="ipsSubList__item {{if \IPS\forums\Topic::containerUnread( $subforum )}}ipsSubList__item--unread{{else}}ipsSubList__item--read{{endif}}">
<a href="{$subforum->url()}">{$subforum->_title}</a>
</li>
{{endforeach}}
</ul>
{{endif}}
</div>
<div class="ipsData__extra">
<ul class='ipsData__stats'>
{{if !$forum->redirect_on}}
{{$count = \IPS\forums\Topic::contentCount( $forum, TRUE );}}
{{if $count > 0}}<li>{lang="posts_number" pluralize="$count" format="long"}</li>{{endif}}
{{if $forum->followerCount}}
<li data-el='grid-follower-count'>
<a href='{url="app=core&module=system&controller=notifications&do=followers&follow_app=forums&follow_area=forum&follow_id={$forum->_id}"}' title='{lang="followers_tooltip"}' data-ipsTooltip data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="who_follows_this"}'>{lang="forum_follower_count" pluralize="$forum->followerCount"}</a>
</li>
{{endif}}
{{else}}
<li>{lang="redirect_hits" pluralize="$forum->redirect_hits"}</li>
{{endif}}
{{if \IPS\forums\Topic::modPermission( 'unhide', NULL, $forum ) AND $forum->queued_topics}}
<li class='i-color_negative i-link-color_inherit'>
<i class='fa-solid fa-triangle-exclamation'></i>
<a href='{$forum->url()->setQueryString( array( 'filter' => 'queued_topics' ) )}'>{lang="queued_topics_badge" pluralize="$forum->queued_topics"}</a>
</li>
{{endif}}
{{if \IPS\forums\Topic::modPermission( 'unhide', NULL, $forum ) AND $forum->queued_posts}}
<li class='i-color_negative i-link-color_inherit'>
<i class='fa-solid fa-triangle-exclamation'></i>
<a href='{$forum->url()->setQueryString( array( 'filter' => 'queued_posts' ) )}'>{lang="queued_posts_badge" pluralize="$forum->queued_posts"}</a>
</li>
{{endif}}
</ul>
</div>
</div>
</div>
</div>
</i-data>
{{if !$forum->redirect_on}}
{{if $lastPosts and count( $lastPosts )}}
<i-data>
<ul data-ips-hook="latestPoster" class='ipsData ipsData--table ipsData--forumFeedView'>
{{foreach $lastPosts as $lastPost}}
<li class='ipsData__item'>
<a href="{{if member.member_id}}{$lastPost['topic_url']->setQueryString( 'do', 'getNewComment' )}{{else}}{$lastPost['topic_url']}{{endif}}" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$lastPost['topic_title']}</span></a>
<div class="ipsData__icon">{template="userPhoto" app="core" group="global" params="$lastPost['author'], 'fluid'"}</div>
<div class="ipsData__content">
<div class="ipsData__main">
<h4 class="ipsData__title">
<a href="{{if member.member_id}}{$lastPost['topic_url']->setQueryString( 'do', 'getNewComment' )}{{else}}{$lastPost['topic_url']}{{endif}}" title='{$lastPost['topic_title']}'>{$lastPost['topic_title']}</a>
</h4>
<small class="ipsData__meta">
</small>
</div>
<div class="ipsData__extra">
<ul class="ipsData__stats">
<li data-statType='comments' data-v="{$lastPost['posts']}">
<span class='ipsData__stats-label'>{lang="num_comments" pluralize="$lastPost['posts']"}</span>
</li>
</ul>
<div class="ipsData__last">
<div class="ipsData__last-text">
<div class="ipsData__last-primary">
{{if $lastPost['last_poster_anon']}}
{lang="byline_nodate" htmlsprintf="$lastPost['author']->link( NULL, NULL, TRUE )"}
{{else}}
{lang="byline_nodate" htmlsprintf="$lastPost['author']->link()"}
{{endif}}
</div>
<div class="ipsData__last-secondary">
{{if $lastPost['topic_title']}}
<a href='{{if member.member_id}}{$lastPost['topic_url']->setQueryString( 'do', 'getLastComment' )}{{else}}{$lastPost['topic_url']}{{endif}}' title='{lang="get_last_post"}'>{datetime="$lastPost['date']"}</a>
{{else}}
{datetime="$lastPost['date']"}
{{endif}}
</div>
</div>
</div>
</div>
</div>
</li>
{{endforeach}}
</ul>
</i-data>
{{else}}
<div>
<p class='ipsEmptyMessage'>
{{if $forum->password && !$forum->loggedInMemberHasPasswordAccess()}}
<a href="{$forum->url()->setQueryString( 'passForm', '1' )}" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="forum_requires_password" sprintf="$forum->_title"}'>{lang="no_forum_posts_password"}</a>
{{else}}
{lang="no_forum_posts"}
{{endif}}
</p>
</div>
{{endif}}
{{endif}}
</section>
{{endif}}]]></template>
<template template_group="index" template_name="forumTableRow" template_data="$table, $headers, $forums" template_location="front" template_app="forums">{{foreach $forums as $forum}}
{template=&quot;forumRow&quot; group=&quot;index&quot; app=&quot;forums&quot; params=&quot;$forum, FALSE, $table&quot;}
{{endforeach}}</template>
<template template_group="index" template_name="index" template_data="" template_location="front" template_app="forums"><![CDATA[
<header class='ipsPageHeader ipsPageHeader--forum-table'>
<div class="ipsPageHeader__row">
<div data-ips-hook="header" class='ipsPageHeader__primary'>
<h1 data-ips-hook="title" class='ipsPageHeader__title'>{lang="forums"}</h1>
</div>
<ul class='ipsButtons ipsButtons--main'>
{{if \IPS\forums\Forum::canOnAny( 'add' ) }}
<li>
<a href='{url="app=forums&module=forums&controller=forums&do=add" seoTemplate="topic_non_forum_add_button"}' class='ipsButton ipsButton--primary' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="select_forum"}'><i class="fa-regular fa-pen-to-square"></i><span>{lang="start_new_topic"}</span></a>
</li>
{{endif}}
</ul>
</div>
</header>
<section>
<ol class='ipsBlockSpacer' data-controller='core.global.core.table, forums.front.forum.forumList' data-baseURL=''>
{{foreach \IPS\forums\Forum::roots() as $category}}
{{if $category->can('view') && $category->hasChildren()}}
<li data-categoryID='{$category->_id}' class='ipsBox ipsPull'>
<h2 class="ipsBox__header">
<a href='{$category->url()}'>{$category->_title}</a>
<button class='ipsBox__header-toggle' type="button" aria-expanded='true' aria-controls='forum-category_{$category->_id}' data-ipscontrols data-action='toggleCategory' data-ipsTooltip aria-label='{lang="toggle_this_category"}'><i></i></button>
</h2>
{{if \IPS\Member::loggedIn()->getLayoutValue('forums_forum') === 'grid'}}
<i-data>
<ol class='ipsData ipsData--grid ipsData--category ipsData--forum-grid ipsBox__content' id='forum-category_{$category->_id}' data-ips-hidden-animation="slide" data-ips-hidden-event="ips:toggleForumCategory">
{{foreach $category->children() as $forum}}
{template="forumGridItem" group="index" app="forums" params="$forum"}
{{endforeach}}
</ol>
</i-data>
{{elseif \IPS\Member::loggedIn()->getLayoutValue('forums_forum') === 'modern'}}
<div class='ipsCategoryWithFeed ipsBox__content' id='forum-category_{$category->_id}' data-ips-hidden-animation="slide" data-ips-hidden-event="ips:toggleForumCategory">
{{foreach $category->children() as $forum}}
{template="forumSummaryRow" group="index" app="forums" params="$forum"}
{{endforeach}}
</div>
{{else}}
<i-data>
<ol class="ipsData ipsData--table ipsData--category ipsData--forum-category ipsBox__content" id='forum-category_{$category->_id}' data-ips-hidden-animation="slide" data-ips-hidden-event="ips:toggleForumCategory">
{{foreach $category->children() as $forum}}
{template="forumRow" group="index" app="forums" params="$forum"}
{{endforeach}}
</ol>
</i-data>
{{endif}}
</li>
{{endif}}
{{endforeach}}
{{if settings.club_nodes_in_apps and $clubForums = \IPS\forums\Forum::clubNodes()}}
<li data-ips-hook="clubs" data-categoryID='clubs' class='ipsBox ipsPull'>
<h2 class="ipsBox__header">
<a href='{url="app=forums&module=forums&controller=forums&do=clubs" seoTemplate="forums_clubs"}'>{lang="club_node_forums"}</a>
<button class='ipsBox__header-toggle' type="button" aria-expanded='true' aria-controls='forum-category_clubs' data-ipscontrols data-action='toggleCategory' data-ipsTooltip title='{lang="toggle_this_category"}'><i></i><span class='ipsInvisible'>{lang="toggle_this_category"}</span></button>
</h2>
<div class='ipsBox__content'>
{{if \IPS\Member::loggedIn()->getLayoutValue('forums_forum') === 'grid'}}
<i-data>
<ol class='ipsData ipsData--grid ipsData--forum-grid ipsBox__content' id='forum-category_clubs' data-ips-hidden-animation="slide" data-ips-hidden-event="ips:toggleForumCategory">
{{foreach $clubForums as $forum}}
{template="forumGridItem" group="index" app="forums" params="$forum"}
{{endforeach}}
</ol>
</i-data>
{{elseif \IPS\Member::loggedIn()->getLayoutValue('forums_forum') === 'modern'}}
<div class='ipsCategoryWithFeed ipsBox__content' id='forum-category_clubs' data-ips-hidden-animation="slide" data-ips-hidden-event="ips:toggleForumCategory">
{{foreach $clubForums as $forum}}
{template="forumSummaryRow" group="index" app="forums" params="$forum"}
{{endforeach}}
</div>
{{else}}
<i-data>
<ol class="ipsData ipsData--table ipsData--category ipsData--forum-category ipsBox__content" id='forum-category_clubs' data-ips-hidden-animation="slide" data-ips-hidden-event="ips:toggleForumCategory">
{{foreach $clubForums as $forum}}
{template="forumRow" group="index" app="forums" params="$forum"}
{{endforeach}}
</ol>
</i-data>
{{endif}}
</div>
</li>
{{endif}}
</ol>
</section>]]></template>
<template template_group="index" template_name="indexButtons" template_data="$showViewButtons=TRUE, $showFilterButton=FALSE" template_location="front" template_app="forums"><![CDATA[
{{if $showFilterButton}}
<div class='ipsPageHeader__row ipsResponsive_hideDesktop'>
<ul class='ipsButtons ipsButtons--fill'>
<li>
<a class="ipsButton ipsButton--inherit" href="#" rel="nofollow" data-ipsDialog data-ipsDialog-title='{lang="forums_simple_dialog_title"}' data-ipsDialog-content='#elFluidFormFilters'>
<span data-role='fluidForumMobileDesc'>{lang="forums_simple_filter_by"}</span><i class='fa-solid fa-angle-down'></i>
</a>
</li>
</ul>
</div>
{{endif}}]]></template>
<template template_group="index" template_name="simplifiedForumTable" template_data="$table, $headers, $rows, $quickSearch" template_location="front" template_app="forums"><![CDATA[<div data-ips-hook="fluidTable" class='ipsBox ipsPull cForumFluidTable' data-baseurl='{$table->baseUrl}' data-resort='{$table->resortKey}' data-tableID='topics' data-dummyLoading data-controller='core.global.core.table{{if $table->canModerate()}},core.front.core.moderation{{endif}}'>
{{if $table->title}}
<h2 hidden>{$table->title}</h2>
{{endif}}
{{if $table->count > 0}}
<div data-ips-hook="buttonBar" class="ipsButtonBar ipsButtonBar--top">
<div data-role="tablePagination" class="ipsButtonBar__pagination" {{if $table->pages <= 1}}hidden{{endif}}>
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
</div>
<div class="ipsButtonBar__end">
<ul class="ipsDataFilters">
{{if isset( $table->sortOptions ) and !empty( $table->sortOptions ) }}
<li>
<a href="#elSortByMenu_menu" id="elSortByMenu_{$table->uniqueId}" data-role='sortButton' data-ipsMenu data-ipsMenu-activeClass="ipsDataFilters__button--active" data-ipsMenu-selectable="radio" class="ipsDataFilters__button"><span>{lang="sort_by"}</span><i class="fa-solid fa-caret-down"></i></a>
<ul class="ipsMenu ipsMenu_auto ipsMenu_withStem ipsMenu_selectable ipsHide" id="elSortByMenu_{$table->uniqueId}_menu">
{{$custom = TRUE;}}
{{foreach $table->sortOptions as $k => $col}}
<li class="ipsMenu_item {{if $col === $table->getSortByColumn()}}{{$custom = FALSE;}}ipsMenu_itemChecked{{endif}}" data-ipsMenuValue="{$col}" data-sortDirection='{$table->getSortDirection( $col )}'><a href="{$table->baseUrl->setQueryString( array( 'filter' => $table->filter, 'sortby' => $col, 'sortdirection' => $table->getSortDirection( $col ) ) )->setPage( 'page', 1 )}" rel="nofollow">{lang="{$table->langPrefix}sort_{$k}"}</a></li>
{{endforeach}}
{{if $table->advancedSearch}}
<li class="ipsMenu_item {{if $custom}}ipsMenu_itemChecked{{endif}}" data-noSelect="true">
<a href='{$table->baseUrl->setQueryString( array( 'advancedSearchForm' => '1', 'filter' => $table->filter, 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection ) )}' data-ipsDialog data-ipsDialog-title='{lang="custom_sort"}' rel="nofollow">{lang="custom"}</a>
</li>
{{endif}}
</ul>
</li>
{{endif}}
{{if !empty( $table->filters )}}
<li>
<a href="#elFilterByMenu_menu" id="elFilterByMenu_{$table->uniqueId}" data-role='tableFilterMenu' data-ipsMenu data-ipsMenu-activeClass="ipsDataFilters__button--active" data-ipsMenu-selectable="radio" class="ipsDataFilters__button"><span>{lang="filter_by"}</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_{$table->uniqueId}_menu'>
<li data-action="tableFilter" data-ipsMenuValue='' class='ipsMenu_item {{if !$table->filter}}ipsMenu_itemChecked{{endif}}'>
<a href='{$table->baseUrl->setQueryString( array( 'filter' => '', 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection ) )->setPage( 'page', 1 )}' rel="nofollow">{lang="{$table->langPrefix}all"}</a>
</li>
{{foreach $table->filters as $k => $q}}
<li data-action="tableFilter" data-ipsMenuValue='{$k}' class='ipsMenu_item {{if $k === $table->filter}}ipsMenu_itemChecked{{endif}}'>
<a href='{$table->baseUrl->setQueryString( array( 'filter' => $k, 'sortby' => $table->sortBy, 'sortdirection' => $table->sortDirection) )->setPage( 'page', 1 )}' rel="nofollow">{lang="{$table->langPrefix}{$k}"}</a>
</li>
{{endforeach}}
</ul>
</li>
{{endif}}
{{if $table->canModerate()}}
<li>
<a class="ipsJS_show ipsDataFilters__button" href="#elCheck_menu" id="elCheck_{$table->uniqueId}" title='{lang="{$table->langPrefix}select_rows_tooltip"}' data-ipsTooltip data-ipsAutoCheck data-ipsAutoCheck-context="#elTable_{$table->uniqueId}" 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_{$table->uniqueId}_menu">
<li class="ipsMenu_title">{lang="{$table->langPrefix}select_rows"}</li>
<li class="ipsMenu_item" data-ipsMenuValue="all"><a href="#">{lang="all"}</a></li>
<li class="ipsMenu_item" data-ipsMenuValue="none"><a href="#">{lang="none"}</a></li>
{{if \count($table->getFilters())}}
<li class="ipsMenu_sep"><hr></li>
{{foreach $table->getFilters() as $filter}}
<li class="ipsMenu_item" data-ipsMenuValue="{$filter}"><a href="#">{lang="$filter"}</a></li>
{{endforeach}}
{{endif}}
</ul>
</li>
{{endif}}
</ul>
</div>
</div>
{{endif}}
{{if $table->canModerate()}}
<form action="{$table->baseUrl->csrf()}" method="post" data-role='moderationTools' data-ipsPageAction>
{{endif}}
{{if \count( $rows )}}
<i-data>
<ol class='ipsData {{if \IPS\Member::loggedIn()->getLayoutValue('forums_topic') == 'snippet'}}ipsData--snippet-topic-list{{else}}ipsData--table ipsData--entries ipsData--table-topic-list{{endif}} {{foreach $table->classes as $class}}{$class} {{endforeach}}' data-ips-hook="rows" id='elTable_{$table->uniqueId}' data-role="tableRows">
{template="$table->rowsTemplate[1]" params="$table, $headers, $rows" object="$table->rowsTemplate[0]"}
</ol>
</i-data>
{{else}}
<div class='i-text-align_center ipsBox__padding'>
<p class='i-font-size_3 i-font-weight_500'>{lang="no_topics_in_forum"}</p>
</div>
{{endif}}
{{if $table->canModerate()}}
<div class="ipsJS_hide ipsData__modBar" data-role="pageActionOptions">
<select name="modaction" data-role="moderationAction" class="ipsInput ipsInput--select i-basis_300">
{{if $table->canModerate('unhide')}}
<option value='approve' data-icon='check-circle'>{lang="approve"}</option>
{{endif}}
{{if $table->canModerate('feature') or $table->canModerate('unfeature')}}
<optgroup label="{lang="feature"}" data-icon='star' data-action='feature'>
{{if $table->canModerate('feature')}}
<option value='feature'>{lang="feature"}</option>
{{endif}}
{{if $table->canModerate('unhide')}}
<option value='unfeature'>{lang="unfeature"}</option>
{{endif}}
</optgroup>
{{endif}}
{{if $table->canModerate('pin') or $table->canModerate('unpin')}}
<optgroup label="{lang="pin"}" data-icon='thumb-tack' data-action='pin'>
{{if $table->canModerate('pin')}}
<option value='pin'>{lang="pin"}</option>
{{endif}}
{{if $table->canModerate('unpin')}}
<option value='unpin'>{lang="unpin"}</option>
{{endif}}
</optgroup>
{{endif}}
{{if $table->canModerate('hide') or $table->canModerate('unhide')}}
<optgroup label="{lang="hide"}" data-icon='eye' data-action='hide'>
{{if $table->canModerate('hide')}}
<option value='hide'>{lang="hide"}</option>
{{endif}}
{{if $table->canModerate('unhide')}}
<option value='unhide'>{lang="unhide"}</option>
{{endif}}
</optgroup>
{{endif}}
{{if $table->canModerate('lock') or $table->canModerate('unlock')}}
<optgroup label="{lang="lock"}" data-icon='lock' data-action='lock'>
{{if $table->canModerate('lock')}}
<option value='lock'>{lang="lock"}</option>
{{endif}}
{{if $table->canModerate('unlock')}}
<option value='unlock'>{lang="unlock"}</option>
{{endif}}
</optgroup>
{{endif}}
{{if $table->canModerate('move')}}
<option value='move' data-icon='arrow-right'>{lang="move"}</option>
{{endif}}
{{if $table->canModerate('split_merge')}}
<option value='merge' data-icon='level-up'>{lang="merge"}</option>
{{endif}}
{{if $table->canModerate('delete')}}
<option value='delete' data-icon='trash'>{lang="delete"}</option>
{{endif}}
{{if $table->canModerate( 'tag' )}}
<optgroup label='{lang="tag"}' data-icon='tag' data-action='tag'>
<option value='tag'>{lang="add_single_tag"}</option>
<option value='untag'>{lang="remove_single_tag"}</option>
</optgroup>
{{endif}}
{{if $table->savedActions}}
<optgroup label="{lang="saved_actions"}" data-icon='tasks' data-action='saved_actions'>
{{foreach $table->savedActions as $k => $v}}
<option value='savedAction-{$k}'>{$v}</option>
{{endforeach}}
</optgroup>
{{endif}}
</select>
<button type="submit" class="ipsButton ipsButton--primary">{lang="submit"}</button>
</div>
</form>
{{endif}}
<div class="ipsButtonBar ipsButtonBar--bottom" {{if $table->pages <= 1}}hidden{{endif}}>
<div class='ipsButtonBar__pagination' data-role="tablePagination">
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
</div>
</div>
</div>]]></template>
<template template_group="index" template_name="simplifiedTopicRow" template_data="$table, $headers, $rows" template_location="front" template_app="forums"><![CDATA[{{$rowIds = array();}}
{{foreach $rows as $row}}
{{$idField = $row::$databaseColumnId;}}
{{$rowIds[] = $row->$idField;}}
{{endforeach}}
{{if \count( $rows )}}
{{$rowCount=1; $adShown=0;}}
{{foreach $rows as $row}}
{{if $advertisement = \IPS\core\Advertisement::loadByLocation( 'ad_forum_listing', $rowCount, $adShown )}}
<li class="ipsData__item ipsData__item--advertisement">
{$advertisement|raw}
{{$adShown++;}}
</li>
{{endif}}
{{$rowCount++;}}
{{$idField = $row::$databaseColumnId;}}
{{if $row->mapped('moved_to')}}
{{if $movedTo = $row->movedTo() AND $movedTo->container()->can('view')}}
<li class="ipsData__item" data-controller="cloud.front.realtime.forumsTopicRow">
<a href='{$movedTo->url( "getPrefComment" )}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$row->mapped('title')}</span></a>
<div class='ipsData__icon ipsData__icon--indicator'>
<i class="fa-solid fa-arrow-left"></i>
</div>
<div class='ipsData__content'>
<div class='ipsData__main'>
<div class='ipsData__title'><h4><em><a href='{$movedTo->url( "getPrefComment" )}' title='{lang="go_to_new_location"}'>{$row->mapped('title')}</a></em></h4></div>
<div class='ipsData__meta'>
{{if isset( $row::$databaseColumnMap['status'] )}}
{{$statusField = $row::$databaseColumnMap['status'];}}
{{if $row->$statusField == 'merged'}}
<p>{lang="topic_merged_to" sprintf="$movedTo->url( 'getPrefComment' ), $movedTo->mapped('title')"}</p>
{{else}}
<p>{lang="topic_moved_to" sprintf="$movedTo->container()->url(), $movedTo->container()->_title"}</p>
{{endif}}
{{else}}
<p>{lang="topic_moved_to" sprintf="$movedTo->container()->url(), $movedTo->container()->_title"}</p>
{{endif}}
</div>
</div>
</div>
{{if $table->canModerate()}}
<div class='ipsData__mod'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{{if $row->mapped('featured')}}unfeature{{endif}} {{if $row->mapped('pinned')}}unpin{{endif}} delete" data-state='{{if $row->mapped('pinned')}}pinned{{endif}} {{if $row->mapped('featured')}}featured{{endif}}' class="ipsInput ipsInput--toggle">
</div>
{{endif}}
</li>
{{endif}}
{{else}}
<li data-ips-hook="row" class="ipsData__item {{if method_exists( $row, 'tableClass' ) && $row->tableClass()}}ipsData__item--{$row->tableClass()}{{endif}} {{if $row->hidden() or $row->isFutureDate()}}ipsModerated{{endif}}{{if $row->isFutureDate()}} ipsData__item--future{{endif}}" {template="formattedInlineStyle" params="$row->container()" app="core" group="global" location="front"} data-rowID='{$row->$idField}' {{if isset($row->locationHash)}}data-location='{$row->locationHash}'{{endif}} {{if $row->unread()}}data-ips-unread{{else}}data-ips-read{{endif}}>
<a href='{$row->url( "getPrefComment" )}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{{if $row->mapped('title') or $row->mapped('title') == 0}}{$row->mapped('title')}{{else}}{lang="content_deleted"}{{endif}}</span></a>
{{if member.member_id}}
{{if $row->unread()}}
<!-- <a href='{$row->url( "getNewComment" )}' class="ipsIndicator {{if \in_array( $row->$idField, $table->contentPostedIn )}}ipsIndicator--participated{{endif}}" aria-label='{lang="first_unread_post"}' data-ipsTooltip data-ips-hook="unreadIcon"></a> -->
{{else}}
<!-- <span class='ipsIndicator ipsIndicator--read {{if \in_array( $row->$idField, $table->contentPostedIn )}}ipsIndicator--participated{{endif}}' aria-hidden='true' data-ips-hook="unreadIcon"></span> -->
{{endif}}
{{endif}}
{{if member.member_id and $row->unread()}}
<a href='{$row->url( "getNewComment" )}' class="ipsData__icon" aria-label='{lang="first_unread_post"}' data-ipsTooltip data-ips-hook="unreadIcon">
<span class="ipsUserPhoto">
<img src="{$row->author()->photo}" alt="" loading="lazy">
</span>
{{if $row->author() != \IPS\Member::loggedIn() and \in_array( $row->$idField, $table->contentPostedIn )}}
<span class="ipsUserPhoto">
<img src='{expression="\IPS\Member::loggedIn()->photo"}' alt='' loading="lazy">
</span>
{{endif}}
</a>
{{else}}
<div class="ipsData__icon">
<span class="ipsUserPhoto">
<img src="{$row->author()->photo}" alt="" loading="lazy">
</span>
{{if $row->author() != \IPS\Member::loggedIn() and \in_array( $row->$idField, $table->contentPostedIn )}}
<span class="ipsUserPhoto">
<img src='{expression="\IPS\Member::loggedIn()->photo"}' alt='' loading="lazy">
</span>
{{endif}}
</div>
{{endif}}
<div class='ipsData__content'>
<div class='ipsData__main'>
<div class='ipsData__title'>
{{if member.member_id and $row->unread()}}
<a href='{$row->url( "getNewComment" )}' class="ipsIndicator" aria-label='{lang="first_unread_post"}' data-ipsTooltip data-ips-hook="unreadIcon"></a>
{{endif}}
<h4 data-ips-hook="title">
<a href='{$row->url( "getPrefComment" )}' title="{{if $row->mapped('title')}}{$row->mapped('title')}{{else}}{lang='content_deleted'}{{endif}} {{if $row->canEdit()}}{lang='click_hold_edit'}{{endif}}" {{if $row->tableHoverUrl and $row->canView()}} data-ipsHover data-ipsHover-target='{$row->url()->setQueryString('preview', 1)}' data-ipsHover-timeout='1.5'{{endif}}{{if $row->canEdit()}} data-role="editableTitle"{{endif}}>
<span>
{{if $row->mapped('title') or $row->mapped('title') == 0}}{$row->mapped('title')}{{else}}<em class="i-color_soft">{lang="content_deleted"}</em>{{endif}}
</span>
</a>
</h4>
{{if $row->commentPageCount() > 1}}
{$row->commentPagination( array(), 'miniPagination' )|raw}
{{endif}}
<div data-ips-hook="badges" class="ipsBadges">
{{foreach $row->badges() as $badge}}{$badge|raw}{{endforeach}}
</div>
</div>
<div data-ips-hook="description" class='ipsData__meta'>
<div data-ips-hook="badges" class="ipsBadges">
{{if $row->prefix()}}
{template="prefix" group="global" app="core" params="$row->prefix( TRUE ), $row->prefix()"}
{{endif}}
</div>
{lang="byline_itemprop" htmlsprintf="$row->author()->link( NULL, NULL, $row->isAnonymous() )"}
{datetime="$row->mapped('date')" lowercase="true"}
{lang="in"} <a href="{$row->container()->url()}" class="ipsData__container-title">{{if $club = $row->container()->club()}}{lang="club_node" sprintf="$club->name, $row->container()->_title"}{{else}}{$row->container()->_title|raw}{{endif}}</a>
</div>
{{if \count( $row->tags() )}}
{template="tags" group="global" app="core" params="$row->tags(), true"}
{{endif}}
</div>
{{if $row->groupsPosted}}
{template="groupPostedBadges" group="global" app="core" location="front" params="$row->groupsPosted, 'topic_posted_in_groups'"}
{{endif}}
<div class="ipsData__extra">
<ul data-ips-hook="stats" class='ipsData__stats'>
{{foreach $row->stats(FALSE) as $k => $v}}
<li {{if $k == 'num_views'}}class='ipsData__stats-soft i-color_soft'{{elseif \in_array( $k, $row->hotStats )}}class="ipsData__stats-hot" data-text='{lang="hot_item"}' data-ipsTooltip title='{lang="hot_item_desc"}'{{endif}}>
<span class='ipsData__stats-icon' data-stat-value="{number='$v' format='short'}" aria-hidden="true" data-ipstooltip title='{number="$v" format="short"} {lang="{$k}" pluralize="$v" format="short"}'></span>
<span class='ipsData__stats-label'>{number="$v" format="short"} {lang="{$k}" pluralize="$v" format="short"}</span>
{{if ( $k == 'forums_comments' OR $k == 'answers_no_number' ) && \IPS\forums\Topic::modPermission( 'unhide', NULL, $row->container() ) AND $unapprovedComments = $row->mapped('unapproved_comments')}}
<a href='{$row->url()->setQueryString( 'queued_posts', 1 )}' class='i-color_warning i-font-size_-2' data-ipsTooltip title='{lang="queued_posts_badge" pluralize="$row->topic_queuedposts"}'><i class='fa-solid fa-triangle-exclamation'></i> <strong>{$unapprovedComments}</strong></a>
{{endif}}
</li>
{{endforeach}}
</ul>
<div data-ips-hook="latestPoster" class="ipsData__last">
{template="userPhoto" app="core" group="global" params="$row->lastCommenter(), 'fluid'"}
<div class="ipsData__last-text">
<div class="ipsData__last-primary">
{{if $row->mapped('num_comments')}}
{$row->lastCommenter()->link()|raw}
{{else}}
{$row->author()->link()|raw}
{{endif}}
</div>
<div class="ipsData__last-secondary">
<a href='{$row->url( 'getLastComment' )}' title='{lang="get_last_post"}'>
{{if $row->mapped('last_comment')}}{datetime="$row->mapped('last_comment')"}{{else}}{datetime="$row->mapped('date')"}{{endif}}
</a>
</div>
</div>
</div>
</div>
</div>
{{if $table->canModerate()}}
<div class='ipsData__mod'>
<input type='checkbox' class="ipsInput ipsInput--toggle" data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->tableStates()}}{$row->tableStates()}{{endif}}'>
</div>
{{endif}}
</li>
{{endif}}
{{if $advertisement = \IPS\core\Advertisement::loadByLocation( 'ad_fluid_index_view', $rowCount, $adShown )}}
<li class="ipsData__item ipsData__item--advertisement">{$advertisement|raw}</li>
{{$adShown++;}}
{{endif}}
{{endforeach}}
{{endif}}]]></template>
<template template_group="index" template_name="simplifiedTopicRowSnippet" template_data="$table, $headers, $rows" template_location="front" template_app="forums"><![CDATA[{{$rowIds = array();}}
{{foreach $rows as $row}}
{{$idField = $row::$databaseColumnId;}}
{{$rowIds[] = $row->$idField;}}
{{endforeach}}
{{if \count( $rows )}}
{{$rowCount=1; $adShown=0;}}
{{foreach $rows as $row}}
{{if $advertisement = \IPS\core\Advertisement::loadByLocation( 'ad_forum_listing', $rowCount, $adShown )}}
<li class="ipsData__item ipsData__item--advertisement">
{$advertisement|raw}
{{$adShown++;}}
</li>
{{endif}}
{{$rowCount++;}}
{{$idField = $row::$databaseColumnId;}}
{{if $row->mapped('moved_to')}}
{{if $movedTo = $row->movedTo() AND $movedTo->container()->can('view')}}
<li data-ips-hook="movedRow" class="ipsData__item ipsData__item--snippet">
<a href='{$movedTo->url()}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$row->mapped('title')}</span></a>
<div class='ipsData__icon ipsData__icon--indicator'>
<i class="fa-solid fa-arrow-left"></i>
</div>
<div class='ipsData__content'>
<div class='ipsData__main'>
<div class='ipsData__title'>
<h4 data-ips-hook="movedTitle"><a href='{$movedTo->url()}' title='{lang="go_to_new_location"}'>{$row->mapped('title')}</a></h4>
</div>
<p class='ipsData__meta'>
{{if isset( $row::$databaseColumnMap['status'] )}}
{{$statusField = $row::$databaseColumnMap['status'];}}
{{if $row->$statusField == 'merged'}}
{lang="topic_merged_to" sprintf="$movedTo->url( 'getPrefComment' ), $movedTo->mapped('title')"}
{{else}}
{lang="topic_moved_to" sprintf="$movedTo->container()->url(), $movedTo->container()->_title"}
{{endif}}
{{else}}
{lang="topic_moved_to" sprintf="$movedTo->container()->url(), $movedTo->container()->_title"}
{{endif}}
</p>
</div>
</div>
{{if $table->canModerate()}}
<div class='ipsData__mod'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{{if $row->mapped('featured')}}unfeature{{endif}} {{if $row->mapped('pinned')}}unpin{{endif}} delete" data-state='{{if $row->mapped('pinned')}}pinned{{endif}} {{if $row->mapped('featured')}}featured{{endif}}' class="ipsInput ipsInput--toggle">
</div>
{{endif}}
</li>
{{endif}}
{{else}}
<li data-ips-hook="row" data-controller="cloud.front.realtime.forumsTopicRow" class="ipsData__item ipsData__item--snippet {{if $row->groupsPosted}}ipsData__item--highlighted{{endif}} {{if method_exists( $row, 'tableClass' ) && $row->tableClass()}}ipsData__item--{$row->tableClass()}{{endif}} {{if $row->hidden() or $row->isFutureDate()}}ipsModerated{{endif}}{{if $row->isFutureDate()}} ipsModerated--alternate{{endif}}" data-rowID='{$row->$idField}' {{if isset($row->locationHash)}}data-location='{$row->locationHash}'{{endif}}' {{if $row->unread()}}data-ips-unread{{else}}data-ips-read{{endif}}>
<a href='{$row->url( "getPrefComment" )}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$row->mapped('title')}</span></a>
<div class='ipsData__icon'>
{template="userPhoto" app="core" group="global" params="$row->author(), 'fluid'"}
</div>
<div class='ipsData__content'>
<div class='ipsData__main'>
<div class="ipsColumns">
<div class="ipsColumns__primary">
<div class='ipsData__title'>
<div data-ips-hook="badges" class="ipsBadges">
{{foreach $row->badges() as $badge}}{$badge|raw}{{endforeach}}
{{if $row->prefix()}}
{template="prefix" group="global" app="core" params="$row->prefix( TRUE ), $row->prefix()"}
{{endif}}
</div>
{{if member.member_id}}
{{if $row->unread()}}
<a href="{$row->url( 'getNewComment' )}" class="ipsIndicator {{if \in_array( $row->$idField, $table->contentPostedIn )}}ipsIndicator--participated{{endif}}" aria-label='{lang="first_unread_post"}' data-ipsTooltip data-ips-hook="unreadIcon"></a>
{{else}}
<span class='ipsIndicator ipsIndicator--read {{if \in_array( $row->$idField, $table->contentPostedIn )}}ipsIndicator--participated{{endif}}' aria-hidden='true'></span>
{{endif}}
{{endif}}
<h4 data-ips-hook="title">
<a href='{$row->url( "getPrefComment" )}' title='{{if $row->mapped('title')}}{$row->mapped('title')}{{else}}{lang="content_deleted"}{{endif}} {{if $row->canEdit()}}{lang="click_hold_edit"}{{endif}}' {{if $row->tableHoverUrl and $row->canView()}} data-ipsHover data-ipsHover-target='{$row->url()->setQueryString('preview', 1)}' data-ipsHover-timeout='1.5'{{endif}}{{if $row->canEdit()}} data-role="editableTitle"{{endif}}>
<span>
{{if $row->mapped('title') or $row->mapped('title') == 0}}{$row->mapped('title')}{{else}}<em class="i-color_soft">{lang="content_deleted"}</em>{{endif}}
</span>
</a>
</h4>
{{if $row->commentPageCount() > 1}}
{$row->commentPagination( array(), 'miniPagination' )|raw}
{{endif}}
</div>
<div class='ipsData__meta i-font-weight_500'><a href="{$row->container()->url()}">{$row->container()->_formattedTitle|raw}</a> &middot; {lang="topic_started_username_date" htmlsprintf="$row->author()->link( NULL, NULL, $row->isAnonymous() ), \IPS\DateTime::ts( $row->mapped('date') )->html( false )"}</div>
</div>
<div class="ipsColumns__secondary">
{{if \count( $row->tags() )}}
{template="tags" group="global" app="core" params="$row->tags(), true"}
{{endif}}
</div>
</div>
{{if isset($row->firstComment)}}
<p data-ips-hook="snippet" class='ipsData__desc'>{$row->firstComment->snippet(680)}</p>
{{endif}}
<div class='ipsData__extra'>
<ul data-ips-hook="stats" class='ipsData__stats'>
<li>
{template="reactionOverview" group="global" app="core" params="$row, NULL, NULL"}
</li>
{{foreach $row->stats(FALSE) as $k => $v}}
<li {{if $k == 'num_views'}} {{elseif \in_array( $k, $row->hotStats )}}class="ipsData__stats-hot" data-text='{lang="hot_item"}' data-ipsTooltip title='{lang="hot_item_desc"}'{{endif}} data-statType='{$k}' {{if $v === 0}}data-v="0"{{endif}}>
<span class='ipsData__stats-icon' data-stat-value="{number='$v' format='short'}" aria-hidden="true" data-ipstooltip title='{number="$v" format="short"} {lang="{$k}" pluralize="$v" format="short"}'></span>
<span class='ipsData__stats-label'>{number="$v" format="short"} {lang="{$k}" pluralize="$v" format="short"}</span>
{{if ( $k == 'forums_comments' OR $k == 'answers_no_number' ) && \IPS\forums\Topic::modPermission( 'unhide', NULL, $row->container() ) AND $unapprovedComments = $row->mapped('unapproved_comments')}}
<a href='{$row->url()->setQueryString( 'queued_posts', 1 )}' class='i-color_warning i-font-size_-2' data-ipsTooltip title='{lang="queued_posts_badge" pluralize="$row->topic_queuedposts"}'><i class='fa-solid fa-triangle-exclamation'></i> <strong>{$unapprovedComments}</strong></a>
{{endif}}
</li>
{{endforeach}}
{{if $row->followerCount}}
<li>
<a href='{url="app=core&module=system&controller=notifications&do=followers&follow_app=forums&follow_area=topic&follow_id={$row->tid}"}' rel="nofollow" title='{lang="followers_tooltip"}' data-ipsTooltip data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="who_follows_this"}'>{lang="topic_follower_count" pluralize="$row->followerCount"}</a>
</li>
{{endif}}
</ul>
<div data-ips-hook="latestPoster" class="ipsData__last">
{{if $row->mapped('num_comments')}}
{template="userPhoto" app="core" group="global" params="$row->lastCommenter(), 'fluid'"}
<div class="ipsData__last-text">
<div class='ipsData__last-primary'>
{lang="topic_snippet_last_reply" htmlsprintf="$row->lastCommenter()->link(), $row->url( 'getLastComment' ), \IPS\DateTime::ts( $row->mapped('last_comment') )->html( false )"}
</div>
</div>
{{endif}}
</div>
</div>
</div>
</div>
{{if $table->canModerate()}}
<div class='ipsData__mod'>
<input type='checkbox' data-role='moderation' name="moderate[{$row->$idField}]" data-actions="{expression="implode( ' ', $table->multimodActions( $row ) )"}" data-state='{{if $row->tableStates()}}{$row->tableStates()}{{endif}}' class="ipsInput ipsInput--toggle">
</div>
{{endif}}
</li>
{{endif}}
{{if $advertisement = \IPS\core\Advertisement::loadByLocation( 'ad_fluid_index_view', $rowCount, $adShown )}}
<li class="ipsData__item ipsData__item--advertisement">{$advertisement|raw}</li>
{{$adShown++;}}
{{endif}}
{{endforeach}}
{{endif}}]]></template>
<template template_group="index" template_name="simplifiedView" template_data="$table" template_location="front" template_app="forums"><![CDATA[<header class="ipsPageHeader ipsPageHeader--forum-fluid">
<div class="ipsPageHeader__row">
<div data-ips-hook="header" class='ipsPageHeader__primary'>
<h1 data-ips-hook="title" class='ipsPageHeader__title'>
{lang="topics"}
</h1>
</div>
<ul class='ipsButtons ipsButtons--main'>
{{if \IPS\forums\Forum::canOnAny( 'add' )}}
<li>
<a class="ipsButton ipsButton--primary" href="{url="app=forums&module=forums&controller=forums&do=add" seoTemplate="topic_non_forum_add_button"}" rel="nofollow" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="select_forum"}'><i class="fa-regular fa-pen-to-square"></i><span>{lang="start_new_topic"}</span></a>
</li>
{{endif}}
</ul>
</div>
{template="indexButtons" group="index" app="forums" params="FALSE, TRUE"}
</header>
{$table|raw}]]></template>
<template template_group="index" template_name="simplifiedViewForumSidebar" template_data="$forum, $depth=0" template_location="front" template_app="forums"><![CDATA[<div data-controller="forums.front.forum.flow" data-rootForum="{$forum->_id}" class='ipsWidget cForumMiniList_wrapper' id='elFluidFormFilters'>
<ul class='cForumMiniList cForumMiniList_multiRoot'>
<li class="cForumMiniList__category" data-category>
{{if $forum->sub_can_post}}
{{$lastPost = $forum->lastPost();}}
{{$unread = \IPS\forums\Topic::containerUnread( $forum );}}
{{$children = $forum->children();}}
<a href="{$forum->url()}" data-parent-id="{$forum->_id}" data-node-id="{$forum->_id}" data-has-children="1" {{if $unread}}data-ips-unread{{else}}data-ips-read{{endif}} {{if $forum->feature_color}}style="--i-featured: {$forum->feature_color}; --i-featured-text: {$forum->_featureTextColor};"{{endif}}>
<span class='cForumMiniList__blob' {{if $lastPost AND $lastPost['date']}}title="{lang="forum_simple_view_last_post"} {datetime="$lastPost['date']"}" data-ipsTooltip data-ipsTooltip-safe{{endif}}>
<i class='fa-solid fa-check'></i>
</span>
<span class='cForumMiniList__title'>{$forum->_title}</span>
<span class='cForumMiniList__count'>{number="\IPS\forums\Topic::contentCountItemsOnly( $forum )" format="short"}</span>
</a>
{{else}}
<a href="{$forum->url()}" data-parent-id="{$forum->_id}" data-node-id="{$forum->_id}"><span>{$forum->_title}</span></a>
{{endif}}
{{if $forum->hasChildren()}}
<ul class='cForumMiniList'>
{template="simplifiedViewForumSidebar_children" app="forums" location="front" group="index" params="$forum, $depth+1"}
</ul>
{{endif}}
</li>
</ul>
<div class='ipsResponsive_hideDesktop'>
<hr class='ipsHr'>
<a href='#' class='ipsButton ipsButton--wide ipsButton--primary' data-action='dialogClose'>{lang="done_forum_filtering"}</a>
</div>
</div>]]></template>
<template template_group="index" template_name="simplifiedViewForumSidebar_children" template_data="$parent" template_location="front" template_app="forums"><![CDATA[{{if $parent->hasChildren() }}
{{foreach $parent->children() as $idx => $forum}}
{{$lastPost = $forum->lastPost();}}
{{$unread = \IPS\forums\Topic::containerUnread( $forum );}}
{{$children = $forum->children();}}
{{if ! $forum->redirect_on and ( $forum->can('read') or !$forum->sub_can_post ) }}
<li class="{{if $children}}cForumMiniList__category{{endif}}" {{if $forum->feature_color}}style="--i-featured: {$forum->feature_color}; --i-featured-text: {$forum->_featureTextColor};"{{endif}}>
<a href="{$forum->url()}" data-parent-id="{$parent->_id}" data-node-id="{$forum->_id}" data-has-children="{{if $children}}1{{else}}0{{endif}}" {{if $unread}}data-ips-unread{{else}}data-ips-read{{endif}}>
<span class='cForumMiniList__blob' {{if $lastPost AND $lastPost['date']}}title="{lang="forum_simple_view_last_post"} {datetime="$lastPost['date']"}" data-ipsTooltip data-ipsTooltip-safe{{endif}}>
<i class='fa-solid fa-check'></i>
</span>
<span class='cForumMiniList__title'>{$forum->_title}</span>
<span class='cForumMiniList__count'>{number="\IPS\forums\Topic::contentCountItemsOnly( $forum )" format="short"}</span>
</a>
{{if $children}}
<ul class='cForumMiniList'>
{template="simplifiedViewForumSidebar_children" app="forums" location="front" group="index" params="$forum, 1"}
</ul>
{{endif}}
</li>
{{endif}}
{{endforeach}}
{{endif}}]]></template>
<template template_group="index" template_name="simplifiedViewSidebar" template_data="$forumIds, $map" template_location="front" template_app="forums"><![CDATA[<div data-controller="forums.front.forum.flow" class='ipsWidget cForumMiniList_wrapper' id='elFluidFormFilters'>
<ul class='cForumMiniList {{if \count( \IPS\forums\Forum::roots() ) === 1}}cForumMiniList_singleRoot{{else}}cForumMiniList_multiRoot{{endif}}'>
{{if \count( \IPS\forums\Forum::roots() ) === 1}}
{{foreach \IPS\forums\Forum::roots() as $category}}
{template="simplifiedViewSidebar_children" app="forums" location="front" group="index" params="$forumIds, $category, 0"}
{{endforeach}}
{{else}}
{{foreach \IPS\forums\Forum::roots() as $category}}
{{if $category->hasChildren()}}
<li data-category>
<a href="{$category->url()}" data-parent-id="{$category->_id}" data-node-id="{$category->_id}" class=''><span>{$category->_title}</span></a>
{{if $category->hasChildren()}}
<ul class='cForumMiniList'>
{template="simplifiedViewSidebar_children" app="forums" location="front" group="index" params="$forumIds, $category, 0"}
</ul>
{{endif}}
</li>
{{endif}}
{{endforeach}}
{{endif}}
{{if settings.club_nodes_in_apps and $clubForums = \IPS\forums\Forum::clubNodes()}}
<li class="{{if \in_array( 'clubs', $map )}}cForumMiniList__categorySelected{{endif}}" data-category>
<a href="{url="app=forums&module=forums&controller=index&forumId=clubs" seoTemplate="forums"}" data-parent-id="clubs" data-node-id="clubs" class='{{if \in_array( 'clubs', $map )}}cForumMiniList__selected{{endif}}'><span class=''>{lang="club_node_forums"}</span></a>
<ul class='cForumMiniList'>
{{foreach $clubForums as $idx => $forum}}
{{$lastPost = $forum->lastPost();}}
{{$unread = \IPS\forums\Topic::containerUnread( $forum );}}
{{$children = $forum->children();}}
{{if ! $forum->redirect_on and $forum->can('read') }}
<li class="{{if $children}}cForumMiniList__category{{endif}} {{if isset( $map[ $forum->parent_id ] ) AND \in_array( $forum->_id, $map[ $forum->parent_id ] )}}cForumMiniList__categorySelected{{endif}}" {{if $forum->feature_color}}style="--i-featured: {$forum->feature_color}; --i-featured-text: {$forum->_featureTextColor};"{{endif}}>
<a href="{$forum->url()}" data-parent-id="clubs" data-node-id="{$forum->_id}" data-has-children="{{if $children}}1{{else}}0{{endif}}" class='{{if \in_array( $forum->_id, $forumIds )}}cForumMiniList__selected{{endif}}' {{if $unread}}data-ips-unread{{else}}data-ips-read{{endif}}>
<span class='cForumMiniList__blob' {{if $lastPost AND $lastPost['date']}}title="{lang="forum_simple_view_last_post"} {datetime="$lastPost['date']"}" data-ipsTooltip data-ipsTooltip-safe{{endif}}>
<i class='fa-solid fa-check'></i>
</span>
<span class='cForumMiniList__title'>{lang="club_node" sprintf="$forum->club()->name, $forum->_title"}</span>
<span class='cForumMiniList__count'>{number="\IPS\forums\Topic::contentCount( $forum )" format="short"}</span>
</a>
</li>
{{endif}}
{{endforeach}}
</ul>
</li>
{{endif}}
</ul>
<div class='ipsResponsive_hideDesktop'>
<hr class='ipsHr'>
<a href='#' class='ipsButton ipsButton--wide ipsButton--primary' data-action='dialogClose'>{lang="done_forum_filtering"}</a>
</div>
</div>]]></template>
<template template_group="index" template_name="simplifiedViewSidebar_children" template_data="$forumIds, $parent, $depth" template_location="front" template_app="forums"><![CDATA[{{if $parent->hasChildren() and $depth < 5}}
{{foreach $parent->children() as $idx => $forum}}
{{$lastPost = $forum->lastPost();}}
{{$unread = \IPS\forums\Topic::containerUnread( $forum );}}
{{$children = $forum->children();}}
{{if ! $forum->redirect_on and ( $forum->can('read') or !$forum->sub_can_post ) }}
<li class="{{if $children}}cForumMiniList__category{{endif}}" {{if $forum->feature_color}}style="--i-featured: {$forum->feature_color}; --i-featured-text: {$forum->_featureTextColor};"{{endif}}>
<a href="{$forum->url()}" data-parent-id="{$parent->_id}" data-node-id="{$forum->_id}" data-has-children="{{if $children}}1{{else}}0{{endif}}" {{if $unread}}data-ips-unread{{else}}data-ips-read{{endif}}>
<span class='cForumMiniList__blob' {{if $lastPost AND $lastPost['date']}}title="{lang="forum_simple_view_last_post"} {datetime="$lastPost['date']"}" data-ipsTooltip data-ipsTooltip-safe{{endif}}>
<i class='fa-solid fa-check'></i>
</span>
<span class='cForumMiniList__title'>{$forum->_title}</span>
<span class='cForumMiniList__count'>{number="\IPS\forums\Topic::contentCount( $forum )" format="short"}</span>
</a>
{{if $children}}
<ul class='cForumMiniList'>
{template="simplifiedViewSidebar_children" app="forums" location="front" group="index" params="$forumIds, $forum, $depth+1"}
</ul>
{{endif}}
</li>
{{endif}}
{{endforeach}}
{{endif}}]]></template>
<template template_group="livesearch" template_name="forum" template_data="$forum" template_location="admin" template_app="forums"><![CDATA[<li data-role='result'>
<a href='{url="app=forums&module=forums&controller=forums&do=form&id="}{$forum->id}'>{$forum->_title}</a>
</li>
]]></template>
<template template_group="settings" template_name="archiveOffCic" template_data="" template_location="admin" template_app="forums"><![CDATA[<div class='i-padding_3'>
<p class='i-font-size_2'>
{lang="archiving_blurb_off_cloud"}
</p>
</div>]]></template>
<template template_group="settings" template_name="archiveRuleGtLt" template_data="$name, $value" template_location="admin" template_app="forums"><![CDATA[<select class="ipsInput ipsInput--select" name="{$name}[0]">
<option value=">" {{if isset( $value[0] ) and $value[0] == '>'}}selected{{endif}}>{lang="greater_than"}</option>
<option value="<" {{if isset( $value[0] ) and $value[0] == '<'}}selected{{endif}}>{lang="less_than"}</option>
</select>
<input type="number" name="{$name}[1]" value="{{if isset( $value[1] )}}{$value[1]}{{endif}}" id='el{$name}_1' class="ipsInput ipsField_short"> {lang="or"}
<input type="checkbox" class="ipsInput ipsInput--toggle" name="{$name}[2]" data-control="unlimited" {{if isset( $value[2] ) and $value[2]}}checked{{endif}}>
<label for='el{$name}_1' class='ipsField_unlimited'>{{if \in_array( $name, array( 'archive_topic_post', 'archive_topic_view', 'archive_topic_rating', 'archive_not_topic_post', 'archive_not_topic_view', 'archive_not_topic_rating' ) )}}{lang="no_restriction"}{{else}}{lang="any_time"}{{endif}}</label>]]></template>
<template template_group="settings" template_name="archiveRules" template_data="$form, $totalTopics, $existingCount, $existingPercentage" template_location="admin" template_app="forums"><![CDATA[<div data-controller="forums.admin.settings.archiveRules">
<div class="i-padding_3">{lang="archiving_blurb"}</div>
<div class="i-position_sticky-top i-padding_2 i-background_1 i-text-align_center">
<strong>{lang="archive_rules_effects"}</strong>
<p class="i-color_soft"><span data-role="percentage">{$existingPercentage}</span>% (<span data-role="number">{$existingCount}</span>/{$totalTopics})</p>
<progress class="ipsProgress" value='{$existingPercentage}' max="100"></progress>
</div>
{$form|raw}
</div>]]></template>
<template template_group="settings" template_name="archiveRuleTime" template_data="$name, $value" template_location="admin" template_app="forums"><![CDATA[<select class="ipsInput ipsInput--select" name="{$name}[0]">
<option value="<" {{if isset( $value[0] ) and $value[0] == '<'}}selected{{endif}}>{lang="greater_than"}</option>
<option value=">" {{if isset( $value[0] ) and $value[0] == '>'}}selected{{endif}}>{lang="less_than"}</option>
</select>
<input type="number" name="{$name}[1]" value="{{if isset( $value[1] )}}{$value[1]}{{endif}}" class="ipsInput ipsField_short" min="0">
<select class="ipsInput ipsInput--select" name="{$name}[2]">
<option value="d" {{if isset( $value[2] ) and $value[2] == 'd'}}selected{{endif}}>{lang="days"}</option>
<option value="m" {{if isset( $value[2] ) and $value[2] == 'm'}}selected{{endif}}>{lang="months"}</option>
<option value="y" {{if isset( $value[2] ) and $value[2] == 'y'}}selected{{endif}}>{lang="years"}</option>
</select>
{lang="ago"} {lang="or"}
<input type="checkbox" class="ipsInput ipsInput--toggle" name="{$name}[3]" id='el{$name}_3' data-control="unlimited" {{if isset( $value[3] ) and $value[3]}}checked{{endif}}>
<label for='el{$name}_3' class='ipsField_unlimited'>{{if mb_strpos( $name, 'not' )}}{lang="no_restriction"}{{else}}{lang="any_time"}{{endif}}</label>]]></template>
<template template_group="stats" template_name="solvedPercentage" template_data="$value, $total, $solved, $previousValue=NULL, $previousTotal=NULL, $previousSolved=NULL, $nodes=array()" template_location="admin" template_app="forums"><![CDATA[ <div>
<span class='cStat__number cStat__number--medium' data-number='{$value}' data-ipsTooltip title="{lang="stats_solved_tooltip" sprintf="$solved, $total"}">{$value}%</span>
{{if isset( $previousValue )}}
<p class='cStat__change cStat__change--large {{if $previousValue > $value}}i-color_negative{{elseif $previousValue < $value}}i-color_positive{{else}}i-color_soft{{endif}}' data-ipsTooltip title="{lang="stats_solved_tooltip_prev" sprintf="$previousSolved, $previousTotal, $previousValue"}">
{{if $previousValue > $value}}
-{expression="$previousValue - $value"}%
{{elseif $previousValue < $value}}
{{if $previousValue}}+{expression="$value - $previousValue"}%{{else}}+ ∞{{endif}}
{{else}}
&mdash;
{{endif}}
</p>
{{endif}}
{{if \count( $nodes )}}
<hr class='ipsHr'>
<div class='i-flex'>
<div class='cStatTile__split'>
<p class='cStat__change cStat__change--small'>
{lang="overview_stats_curfilter" list="$nodes"}
</p>
</div>
</div>
{{endif}}
</div>]]></template>
<template template_group="stats" template_name="statsTypeWrapper" template_data="$form, $solvedCount, $recommendedCount, $startTime, $endTime" template_location="admin" template_app="forums"><![CDATA[<div class='ipsBox' data-ips-template="statsTypeWrapper">
<h1 class='ipsBox__header'>{lang="stats_posts_by_type"}</h1>
<div>
{$form|raw}
</div>
</div>
<div class='i-margin-top_3' data-ips-template="statsTypeWrapper">
<div class="ipsTableScroll">
<table class="ipsTable ipsTable_zebra " data-role="table">
<thead>
<tr class="i-background_3">
<th>{lang="stats_posts_type_type"}</th>
<th>{lang="stats_posts_type_count"}</th>
</tr>
</thead>
<tbody>
<tr class="">
<td class="">
{lang="stats_posts_type_solved"}
</td>
<td><a href='{url="app=forums&module=stats&controller=posts&do=showSolvedPosts&startTime={$startTime}&endTime={$endTime}"}' data-ipsDialog data-ipsDialog-title='{lang="stats_posts_type_solved"}' title="{lang="stats_posts_show_posts"}" data-ipsTooltip>{$solvedCount}</a></td>
</tr>
<tr>
<td class=" ipsTable_wrap ipsTable_primary ">
{lang="stats_posts_type_recommended"}
</td>
<td><a href='{url="app=forums&module=stats&controller=posts&do=showRecommendedPosts&startTime={$startTime}&endTime={$endTime}"}' data-ipsDialog data-ipsDialog-title='{lang="stats_posts_type_recommended"}' title="{lang="stats_posts_show_posts"}" data-ipsTooltip>{$recommendedCount}</a></td>
</tr>
</tbody>
</table>
</div>
</div>
]]></template>
<template template_group="stats" template_name="timeToSolved" template_data="$value, $previousValue=NULL, $nodes=array()" template_location="admin" template_app="forums"><![CDATA[ <div>
<span class='cStat__number cStat__number--medium' data-number='{$value}'>{expression="\IPS\DateTime::roundedDiffFromSeconds( (int) $value )"}</span>
{{if isset( $previousValue )}}
<p class='cStat__change cStat__change--large {{if $previousValue < $value}}i-color_negative{{elseif $previousValue > $value}}i-color_positive{{else}}i-color_soft{{endif}}' data-ipsTooltip title="{lang="previous_period"} {expression="\IPS\DateTime::roundedDiffFromSeconds( (int) $previousValue )"}">
{{if $previousValue > $value}}
-{expression="round( 100 - ( $value / $previousValue * 100 ), 2 )"}%
{{elseif $previousValue < $value}}
{{if $previousValue}}+{expression="round( ( ( $value - $previousValue ) / $previousValue ) * 100, 2 )"}%{{else}}+ ∞{{endif}}
{{else}}
&mdash;
{{endif}}
</p>
{{endif}}
{{if \count( $nodes )}}
<hr class='ipsHr'>
<div class='i-flex'>
<div class='cStatTile__split'>
<p class='cStat__change cStat__change--small'>
{lang="overview_stats_curfilter" list="$nodes"}
</p>
</div>
</div>
{{endif}}
</div>]]></template>
<template template_group="submit" template_name="createTopic" template_data="$form, $forum, $title" template_location="front" template_app="forums"><![CDATA[
{{if $club = $forum->club()}}
{{if settings.clubs and settings.clubs_header == 'full'}}
{template="header" app="core" group="clubs" params="$club, $forum"}
{{endif}}
<div id='elClubContainer'>
{{endif}}
{template="pageHeader" if="!\IPS\Request::i()->isAjax()" group="global" app="core" params="\IPS\Member::loggedIn()->language()->addToStack( $title )"}
{$form|raw}
{{if $club = $forum->club()}}
</div>
{{endif}}]]></template>
<template template_group="submit" template_name="createTopicForm" template_data="$forum, $hasModOptions, $topic, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL, $errorTabs=array()" template_location="front" template_app="forums"><![CDATA[{{$modOptions = array( 'topic_create_state', 'create_topic_locked', 'create_topic_pinned', 'create_topic_hidden', 'create_topic_featured', 'topic_open_time', 'topic_close_time');}}
<form accept-charset='utf-8' class="ipsFormWrap" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} data-ipsForm data-ipsFormSubmit>
<input type="hidden" name="{$id}_submitted" value="1">
{{foreach $hiddenValues as $k => $v}}
<input type="hidden" name="{$k}" value="{$v}">
{{endforeach}}
{{if $uploadField}}
<input type="hidden" name="MAX_FILE_SIZE" value="{$uploadField}">
<input type="hidden" name="plupload" value="{expression="md5( mt_rand() )"}">
{{endif}}
{{if $form->error}}
<p class="ipsMessage ipsMessage--error i-margin-bottom_block">{$form->error}</p>
{{endif}}
{{if !empty( $errorTabs )}}
<p class="ipsMessage ipsMessage--error i-margin-bottom_block ipsJS_show">{lang="tab_error"}</p>
{{endif}}
<div class='ipsBox ipsPull'>
{{if \count( $elements ) > 1}}
<div class='ipsTabs ipsJS_show' id='tabs_{$id}' data-ipsTabBar data-ipsTabBar-contentArea='#ipsTabs_content_{$id}'>
<ul role='tablist'>
{{foreach $elements as $name => $content}}
<li>
<a href='#ipsTabs_tabs_{$id}_{$id}_tab_{$name}_panel' id='{$id}_tab_{$name}' class="ipsTabs__tab {{if \in_array( $name, $errorTabs )}}ipsTabs_error{{endif}}" role="tab" aria-selected="{{if $name == 'mainTab'}}true{{else}}false{{endif}}">
{{if \in_array( $name, $errorTabs )}}<i class="fa-solid fa-circle-exclamation"></i> {{endif}}{lang="$name"}
</a>
</li>
{{endforeach}}
</ul>
{template="tabScrollers" app="core" group="global" location="global"}
</div>
<div id='ipsTabs_content_{$id}' class='ipsTabs__panels'>
{{foreach $elements as $name => $contents}}
<div id='ipsTabs_tabs_{$id}_{$id}_tab_{$name}_panel' class="ipsTabs__panel ipsTabs__panel--{$name}" aria-labelledby="{$id}_tab_{$name}" aria-hidden="false">
{{if $hasModOptions && $name == 'topic_mainTab'}}
<div class='ipsColumns ipsColumns--new-topic ipsColumns--lines'>
<div class='ipsColumns__primary'>
{{endif}}
<ul class='ipsForm ipsForm--vertical {$class} ipsForm--new-topic'>
{{foreach $contents as $inputName => $input}}
{{if !\in_array( $inputName, $modOptions )}}
{$input|raw}
{{endif}}
{{endforeach}}
</ul>
{{if $hasModOptions && $name == 'topic_mainTab'}}
</div>
<div class='ipsColumns__secondary i-basis_300'>
{template="createTopicModOptions" group="submit" app="forums" params="$elements, $modOptions"}
</div>
</div>
{{endif}}
</div>
{{endforeach}}
</div>
{{else}}
<div class=''>
{{if $hasModOptions}}
<div class='ipsColumns ipsColumns--new-topic ipsColumns--lines'>
<div class='ipsColumns__primary'>
{{endif}}
<ul class='ipsForm ipsForm--vertical {$class} ipsForm--new-topic'>
{{foreach $elements as $collection}}
{{foreach $collection as $inputName => $input}}
{{if !\in_array( $inputName, $modOptions )}}
{$input|raw}
{{endif}}
{{endforeach}}
{{endforeach}}
</ul>
{{if $hasModOptions}}
</div>
<div class='ipsColumns__secondary i-basis_300'>
{template="createTopicModOptions" group="submit" app="forums" params="$elements, $modOptions"}
</div>
</div>
{{endif}}
</div>
{{endif}}
<div class='ipsSubmitRow'>
{{if $topic}}
<button type='submit' class='ipsButton ipsButton--primary' tabindex="1" accesskey="s" role="button">{lang="submit_topic_edit"}</button>
{{else}}
<button type='submit' class='ipsButton ipsButton--primary' tabindex="1" accesskey="s" role="button">{lang="submit_topic"}</button>
{{endif}}
</div>
</div>
</form>]]></template>
<template template_group="submit" template_name="createTopicModOptions" template_data="$elements, $modOptions" template_location="front" template_app="forums"><![CDATA[
<h3 class='i-padding_3 i-border-bottom_3 ipsTitle ipsTitle--h5' hidden>{lang="topic_moderator_options"}</h3>
<ul class='ipsForm ipsForm--vertical ipsForm--topic-mod-options'>
{{foreach $elements as $collection}}
{{foreach $collection as $inputName => $input}}
{{if \in_array( $inputName, $modOptions )}}
{{if $inputName == 'topic_open_time' or $inputName == 'topic_close_time'}}
<li class='ipsFieldRow'>
<label class="ipsFieldRow__label" for="elInput_{$input->name}">{lang="$input->name"}</label>
<ul class='ipsFieldRow__content cCreateTopic_date'>
<li>
<input type="date" name="{$input->name}" id="elInput_{$input->name}" class="ipsInput" data-control="date" placeholder='{expression="str_replace( array( 'YYYY', 'MM', 'DD' ), array( \IPS\Member::loggedIn()->language()->addToStack('_date_format_yyyy'), \IPS\Member::loggedIn()->language()->addToStack('_date_format_mm'), \IPS\Member::loggedIn()->language()->addToStack('_date_format_dd') ), str_replace( 'Y', 'YY', \IPS\Member::loggedIn()->language()->preferredDateFormat() ) )"}' value="{{if $input->value instanceof \IPS\DateTime}}{$input->value->format('Y-m-d')}{{else}}{$input->value}{{endif}}" data-preferredFormat="{{if $input->value instanceof \IPS\DateTime}}{$input->value->localeDate()}{{else}}{$input->value}{{endif}}">
</li>
<li>
<input name="{$input->name}_time" type="time" size="12" class="ipsInput" placeholder="{lang="_time_format_hhmm"}" step="60" min="00:00" value="{{if $input->value instanceof \IPS\DateTime}}{$input->value->format('H:i')}{{endif}}">
</li>
</ul>
</li>
{{else}}
{$input|raw}
{{endif}}
{{endif}}
{{endforeach}}
{{endforeach}}
</ul>
]]></template>
<template template_group="topics" template_name="activity" template_data="$topic, $location" template_location="front" template_app="forums"><![CDATA[{{$lastPoster = \IPS\Member::load( $topic->last_poster_id);}}
{{$members = $topic->topPosters(4);}}
{{$busy = $topic->showSummaryFeature('popularDays') ? $topic->popularDays(4) : FALSE;}}
{{$reacted = $topic->showSummaryFeature('topPost') ? $topic->topReactedPosts(3) : FALSE;}}
{{$helpful = $topic->showSummaryFeature('helpful') ? $topic->helpfulPosts(3) : FALSE;}}
{{$images = $topic->showSummaryFeature('uploads') ? $topic->imageAttachments(4) : FALSE;}}
{{$hasAnyContent = (bool) ($members or $reacted or $helpful or $images);}}
{{if $location == 'sidebar'}}
<div class="ipsWidget cTopicOverview cTopicOverview--sidebar i-flex i-flex-direction_column i-overflow_hidden ipsResponsive_showDesktop" {{if $hasAnyContent}}data-controller='forums.front.topic.activity'{{endif}}>
{{else}}
<div class="cTopicOverview cTopicOverview--row i-flex {{if $topic->showSummaryOnDesktop() != 'post'}}ipsResponsive_hideDesktop{{endif}} {{if ! $topic->showSummaryOnMobile()}}ipsResponsive_hidePhone{{endif}}" {{if $hasAnyContent}}data-controller='forums.front.topic.activity'{{endif}}>
{{endif}}
<div class='cTopicOverview__header i-background_1 i-flex_00 i-flex i-flex-wrap_wrap'>
<ul class="iTopicOverview__header i-flex_91 i-padding_3 i-flex i-flex-wrap_wrap i-justify-content_space-around i-gap_3 i-text-align_center">
<li>
<span class="i-color_soft i-font-weight_500 i-display_block">{lang="replies"}</span>
<span class="i-color_hard i-font-weight_700 i-display_block i-font-size_3">{number="$topic->posts-1" format="short"}</span>
</li>
<li>
<span class="i-color_soft i-font-weight_500 i-display_block">{lang="topicactivity_created"}</span>
<span class="i-color_hard i-font-weight_700 i-display_block i-font-size_3">{datetime="$topic->start_date" short="true"}</span>
</li>
<li>
<span class="i-color_soft i-font-weight_500 i-display_block">{lang="last_reply"}</span>
<span class="i-color_hard i-font-weight_700 i-display_block i-font-size_3">{datetime="$topic->last_post" short="true"}</span>
</li>
</ul>
{{if $location != 'sidebar'}}
<a href='#' data-action='toggleOverview' class='cTopicOverview__toggle cTopicOverview__toggle--row i-flex_10 i-basis_80 i-color_soft i-font-size_2'><span class="ipsInvisible">{lang="topicactivity_expand"}</span><i class='fa-solid fa-chevron-down'></i></a>
{{endif}}
</div>
{{if $location !== 'sidebar'}}
<div class='cTopicOverview__preview i-flex_10' data-role="preview">
<div class='cTopicOverview__previewInner i-padding_3 i-flex i-gap_3 ipsResponsive_hidePhone'>
{{if $members}}
<div class='cTopicOverview__section--users i-flex_00'>
<h4 class='cTopicOverview__sectionTitle i-font-size_-1 i-color_hard i-text-transform_uppercase i-font-weight_600'>{lang="topicactivity_topposters"}</h4>
<ul class='cTopicOverview__dataList i-flex i-justify-content_space-between i-align-items_center i-gap_3 i-margin-top_1'>
{{foreach $members as $data}}
<li class="cTopicOverview__dataItem i-flex i-justify-content_start i-align-items_center i-gap_2">
{template="userPhoto" app="core" group="global" params="$data['member'], 'tiny'"}
<span>{$data['count']}</span>
</li>
{{endforeach}}
</ul>
</div>
{{endif}}
{{if $busy}}
<div class='cTopicOverview__section--popularDays i-flex_00'>
<h4 class='cTopicOverview__sectionTitle i-font-size_-1 i-color_hard i-text-transform_uppercase i-font-weight_600'>{lang="topicactivity_populardays"}</h4>
<ul class='cTopicOverview__dataList i-flex i-justify-content_space-between i-align-items_center i-gap_3 i-margin-top_1'>
{{foreach $busy as $row}}
<li class='i-flex_10'>
<a href="{$topic->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $row['commentId'] ) )}" rel="nofollow" class='cTopicOverview__dataItem i-flex i-justify-content_space-between i-align-items_center i-gap_2'>
<span class='i-color_soft'>{$row['date']->dayAndShortMonth()}</span>
<span class='i-font-weight_500 i-color_hard'>{$row['count']}</span>
</a>
</li>
{{endforeach}}
</ul>
</div>
{{endif}}
</div>
</div>
{{endif}}
<div class='cTopicOverview__body i-padding_3 i-gap_3 {{if $location !== 'sidebar'}}ipsHide i-flex i-flex_11 i-flex-direction_column{{endif}}' data-role="overview">
{{if $members}}
<div class='cTopicOverview__section--users'>
<h4 class='ipsTitle ipsTitle--hr ipsTitle--h6 i-font-weight_600 i-text-transform_uppercase i-font-size_-2 i-margin-bottom_2'>{lang="topicactivity_topposters"}</h4>
<ul class='cTopicOverview__dataList ipsGrid i-basis_140 i-gap_2'>
{{foreach $members as $data}}
<li class="ipsPhotoPanel">
{template="userPhoto" app="core" group="global" params="$data['member'], 'fluid'"}
<div class='ipsPhotoPanel__text'>
<strong class='ipsPhotoPanel__primary'><a href='{$data['member']->url()}'>{$data['member']->name}</a></strong>
<span class='ipsPhotoPanel__secondary'>{lang="topicactivity_number_posts" pluralize="$data['count']"}</span>
</div>
</li>
{{endforeach}}
</ul>
</div>
{{endif}}
{{if $busy}}
<div class='cTopicOverview__section--popularDays'>
<h4 class='ipsTitle ipsTitle--hr ipsTitle--h6 i-font-weight_600 i-text-transform_uppercase i-font-size_-2 i-margin-top_4 i-margin-bottom_2'>{lang="topicactivity_populardays"}</h4>
<ul class='cTopicOverview__dataList ipsGrid i-basis_140 i-gap_2'>
{{foreach $busy as $row}}
<li>
<a href="{$topic->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $row['commentId'] ) )}" rel="nofollow" class='cTopicOverview__dataItem i-flex i-justify-content_start i-align-items_center i-gap_2'>
<span class='i-font-weight_bold'>{$row['date']->dayAndShortMonth()} {$row['date']->format('Y')}</span>
<span class='i-color_soft'>{lang="topicactivity_number_posts" pluralize="$row['count']"}</span>
</a>
</li>
{{endforeach}}
</ul>
</div>
{{endif}}
{{if $reacted}}
<div class='cTopicOverview__section--topPost'>
<h4 class='ipsTitle ipsTitle--hr ipsTitle--h6 i-font-weight_600 i-text-transform_uppercase i-font-size_-2 i-margin-top_4'>{lang="topicactivity_popularposts"}</h4>
{{foreach $reacted as $data}}
<div class='i-position_relative'>
<a href="{$data['comment']->url()}" rel="nofollow" class="i-position_cover" aria-hidden='true'><span class='ipsInvisible'>{$data['comment']->author()->name}</span></a>
<div class='ipsPhotoPanel ipsPhotoPanel--tiny i-margin-top_3'>
<span class='ipsUserPhoto'>
<img src='{$data['comment']->author()->photo}' alt='{$data['comment']->author()->name}' loading='lazy'>
</span>
<div class="ipsPhotoPanel__text">
<h5 class='ipsPhotoPanel__primary'>{$data['comment']->author()->name}</h5>
<p class='ipsPhotoPanel__secondary'>{datetime="$data['comment']->mapped('date')"}</p>
</div>
</div>
<p class='i-margin-top_2 ipsRichText ipsTruncate_3'>
{$data['comment']->truncated(true, 200)}
</p>
</div>
{{endforeach}}
</div>
{{endif}}
{{if $helpful}}
<div class='cTopicOverview__section--topPost'>
<h4 class='ipsTitle ipsTitle--hr ipsTitle--h6 i-font-weight_600 i-text-transform_uppercase i-font-size_-2 i-margin-top_4'>{lang="topicactivity_helpfulposts"}</h4>
{{foreach $helpful as $data}}
<div class='i-position_relative'>
<a href="{$data['comment']->url()}" rel="nofollow" class="i-position_cover" aria-hidden='true'><span class='ipsInvisible'>{$data['comment']->author()->name}</span></a>
<div class='ipsPhotoPanel ipsPhotoPanel--tiny i-margin-top_3'>
<span class='ipsUserPhoto'>
<img src='{$data['comment']->author()->photo}' alt='{$data['comment']->author()->name}' loading='lazy'>
</span>
<div>
<h5 class='i-font-weight_bold'>{$data['comment']->author()->name}</h5>
<p class='i-color_soft'>{datetime="$data['comment']->mapped('date')"}</p>
</div>
</div>
<p class='i-margin-top_2 ipsRichText ipsTruncate_3'>
{$data['comment']->truncated(true, 200)}
</p>
</div>
{{endforeach}}
</div>
{{endif}}
{{if $images}}
<div class='cTopicOverview__section--images'>
<h4 class='ipsTitle ipsTitle--hr ipsTitle--h6 i-font-weight_600 i-text-transform_uppercase i-font-size_-2 i-margin-top_4'>{lang="topicactivity_images"}</h4>
<div class="i-margin-top_2" data-controller='core.front.core.lightboxedImages'>
<ul class='cTopicOverview__imageGrid ipsGrid i-basis_120 i-gap_1'>
{{foreach $images as $row}}
{{$image = \IPS\File::get( 'core_Attachment', ( $row['attach_thumb_location'] ) ? $row['attach_thumb_location'] : $row['attach_location'] )->url;}}
<li class='cTopicOverview__image'>
<a href="{$row['commentUrl']}" rel="nofollow" class='ipsThumb'>
<img src="{$image}" alt='' loading='lazy'>
</a>
</li>
{{endforeach}}
</ul>
</div>
</div>
{{endif}}
</div>
{{if $location !== 'sidebar' and $hasAnyContent}}
<a href='#' data-action='toggleOverview' class='cTopicOverview__toggle cTopicOverview__toggle--afterStats i-font-size_2 i-color_soft i-padding_3 i-flex i-align-items_center i-justify-content_center'><span class="ipsInvisible">{lang="topicactivity_expand"}</span><i class='fa-solid fa-chevron-down'></i></a>
{{endif}}
{{if $location == 'sidebar'}}
</div>
{{else}}
</div>
{{endif}}
]]></template>
<template template_group="topics" template_name="expertBadge" template_data="$topic, $comment, $viewerIsFollowingTheseExperts" template_location="front" template_app="forums"><![CDATA[{{$isFollowing = ( is_array( $viewerIsFollowingTheseExperts ) and count( $viewerIsFollowingTheseExperts ) and in_array( $comment->author()->member_id, $viewerIsFollowingTheseExperts ) );}}
<span class="ipsBadge ipsBadge--expert">
<i class="fa-solid fa-graduation-cap"></i>
{lang="forums_is_expert"}
{{if $comment->author()->member_id != \IPS\Member::loggedIn()->member_id }}
<span data-followApp='core' data-followArea='member' data-followID='{$comment->author()->member_id}' data-buttonSize="small" data-controller='core.front.core.followButton'>
{template="memberFollowButton" group="profile" app="core" params="'core', 'member', $comment->author()->member_id, 0, 'small', $isFollowing"}
</span>
{{endif}}
</span>
]]></template>
<template template_group="topics" template_name="post" template_data="$item, $comment, $editorName, $app, $type, $class='', $viewerIsFollowingTheseExperts=[]" template_location="front" template_app="forums"><![CDATA[{{$idField = $comment::$databaseColumnId;}}
<div id='comment-{$comment->$idField}_wrap' data-controller='core.front.core.comment' data-feedid="{$comment->feedId}" data-commentApp='{$app}' data-commentType='{$type}' data-commentID="{$comment->$idField}" data-quoteData='{expression="json_encode( array('userid' => $comment->author()->member_id, 'username' => $comment->author()->name, 'timestamp' => $comment->mapped('date'), 'contentapp' => $comment::$application, 'contenttype' => $type, 'contentid' => $item->tid, 'contentclass' => $class, 'contentcommentid' => $comment->$idField) )"}' class='ipsEntry__content js-ipsEntry__content'
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\IntersectionViewTracking' ) AND $hash=$comment->getViewTrackingHash()}}
data-view-hash="{$hash|raw}"
data-view-tracking-data="{expression="base64_encode(json_encode( $comment->getViewTrackingData() ))" raw="true"}"
{{if \IPS\Platform\Bridge::i()->featureIsEnabled( 'topic_summary' ) AND \IPS\Settings::i()->ips_topic_summary_enabled}}
data-post-score={expression="json_encode( $comment->post_score )" raw="true"} {{if $comment->post_force_in_summary}}data-post-force-in-summary="1"{{endif}}
{{endif}}
{{endif}}
{{if \IPS\Member::loggedIn()->getLayoutValue( 'forum_topic_view_firstpost' ) and $comment->isFirst()}}
data-first-post="true"
data-first-page="{{if isset( request.page ) and request.page > 1}}false{{else}}true{{endif}}"
{{endif}}
>
<div class='ipsEntry__post'>
<div class='ipsEntry__meta'>
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->$idField ) )}' class='ipsEntry__date' rel="nofollow">{$comment->dateLine()|raw}</a>
<!-- Traditional badges -->
<ul data-ips-hook="postBadges" class='ipsBadges'>
{{if ! $comment->isFirst() and $comment->author()->member_id AND $comment->author()->member_id == $item->author()->member_id}}
<li><span class="ipsBadge ipsBadge--author">{lang="author"}</span></li>
{{endif}}
{{if $comment->authorIsAnExpert()}}
<li>{template="expertBadge" group="topics" app="forums" params="$item, $comment, $viewerIsFollowingTheseExperts"}</li>
{{endif}}
{{if $comment->author()->hasHighlightedReplies()}}
<li><span class='ipsBadge ipsBadge--highlightedGroup'>{expression="\IPS\Member\Group::load( $comment->author()->member_group_id )->name" raw="true"}</span></li>
{{endif}}
{{if ( $comment->item()->isSolved() and $comment->item()->mapped('solved_comment_id') == $comment->pid )}}
<li><span class='ipsBadge ipsBadge--solution'><i class='fa-solid fa-check' aria-hidden="true"></i><span>{lang="this_is_a_solved_post"}</span></span></li>
{{endif}}
{{if $comment->isFeatured()}}
<li><span class='ipsBadge ipsBadge--positive'>{lang="this_is_a_featured_post"}</span></li>
{{endif}}
{{if $comment->isHighlighted() }}
<li><span class='ipsBadge ipsBadge--popular'>{lang="this_is_a_popular_post"}</span></li>
{{endif}}
</ul>
{$comment->menu()->linkHtml()|raw}
{{if \count( $item->commentMultimodActions() ) and !$comment->mapped('first')}}
<input type="checkbox" name="multimod[{$comment->$idField}]" value="1" data-role="moderation" data-actions="{{if $comment->canSplit()}}split merge{{endif}} {{if $comment->hidden() === -1 AND $comment->canUnhide()}}unhide{{elseif $comment->hidden() === 1 AND $comment->canUnhide()}}approve{{elseif $comment->canHide()}}hide{{endif}} {{if $comment->canDelete()}}delete{{endif}}" data-state='{{if $comment->tableStates()}}{$comment->tableStates()}{{endif}}' class="ipsInput ipsInput--toggle" id='mod-checkbox-{$comment->$idField}'>
{{endif}}
</div>
{{if $comment->hidden() !== 0}}
<div class='ipsEntry__hiddenMessage'>
{{if $comment->hidden() AND $comment->hidden() != -2}}
{$comment->hiddenBlurb()}
{{elseif $comment->hidden() == -2}}
{$comment->deletedBlurb()}
{{endif}}
</div>
{{endif}}
{{if member.modPermission('mod_see_warn') and $comment->warning}}
{template="commentWarned" group="global" app="core" params="$comment"}
{{endif}}
{{if $comment->showRecognized()}}
{template="commentRecognized" group="global" app="core" params="$comment"}
{{endif}}
<!-- Post content -->
<div data-ips-hook="postContent" class='ipsRichText ipsRichText--user' data-role='commentContent' data-controller='core.front.core.lightboxedImages'>
{{if \IPS\Member::loggedIn()->getLayoutValue( 'forum_topic_view_firstpost' ) and $comment->isFirst() and isset( request.page ) and request.page > 1}}
<div class="ipsEntry__truncate" data-ipsTruncate>
{{endif}}
{$comment->content()|raw}
{{if \IPS\Member::loggedIn()->getLayoutValue( 'forum_topic_view_firstpost' ) and $comment->isFirst() and isset( request.page ) and request.page > 1}}
</div>
{{endif}}
{{if $comment->editLine()}}
{$comment->editLine()|raw}
{{endif}}
</div>
{{if $comment->author()->signature AND trim( $comment->author()->signature )}}
{template="signature" group="global" app="core" params="$comment->author()"}
{{endif}}
</div>
{{if ( \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_enabled and $comment->hasReactionBar() ) || ( $comment->hidden() === 1 && ( $comment->canUnhide() || $comment->canDelete() ) ) || ( $comment->hidden() === 0 and $item->canComment() and $editorName ) || $comment->item()->canSolve() }}
<div class='ipsEntry__footer'>
<menu data-ips-hook="postFooterControls" class='ipsEntry__controls' data-role="commentControls" data-controller="core.front.helpful.helpful">
{{if $comment->hidden() === 1 && ( $comment->canUnhide() || $comment->canDelete() )}}
{{if $comment->canUnhide()}}
<li><a href='{$comment->url('unhide')->csrf()}' data-action='approveComment'><i class='fa-solid fa-check' aria-hidden="true"></i><span>{lang="approve"}</span></a></li>
{{endif}}
{{if $comment->canDelete()}}
<li><a href='{$comment->url('delete')->csrf()->setPage('page',\IPS\Request::i()->page)}' data-action='deleteComment' data-updateOnDelete="#commentCount"><i class='fa-solid fa-xmark' aria-hidden="true"></i><span>{lang="delete"}</span></a></li>
{{endif}}
{{if $comment->canEdit() || $comment->canSplit() || $comment->canHide()}}
<li>
<a href='#elControls_{$comment->$idField}_moderator_menu' id='elControls_{$comment->$idField}_moderator' data-ipsMenu data-ipsMenu-appendTo='#comment-{$comment->$idField}_wrap'><span>{lang="moderator_tools"}</span><i class='fa-solid fa-caret-down' aria-hidden="true"></i></a>
<ul data-ips-hook="postFooterControlsMenu" id='elControls_{$comment->$idField}_moderator_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
{{if $comment->canEdit()}}
{{if $comment->mapped('first') and $comment->item()->canEdit()}}
<li class='ipsMenu_item'><a href='{$comment->item()->url()->setQueryString( 'do', 'edit' )}'>{lang="edit"}</a></li>
{{else}}
<li class='ipsMenu_item'><a href='{$comment->url('edit')}' data-action='editComment'>{lang="edit"}</a></li>
{{endif}}
{{endif}}
{{if $comment->canSplit()}}
<li class='ipsMenu_item'><a href='{$comment->url('split')}' data-action='splitComment' data-ipsDialog data-ipsDialog-title="{lang="split_to_new" sprintf="\IPS\Member::loggedIn()->language()->addToStack( $item::$title )"}" data-ipsDialog-destructOnClose='true'>{lang="split"}</a></li>
{{endif}}
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Hideable' ) and $comment->canHide()}}
<li class='ipsMenu_item'><a href='{$comment->url('hide')->csrf()}' data-ipsDialog data-ipsDialog-title="{lang="hide"}" data-ipsDialog-destructOnClose='true'>{lang="hide"}</a></li>
{{endif}}
</ul>
</li>
{{endif}}
{{else}}
{{if $comment->hidden() === 0 and $item->canComment() and $editorName}}
<li data-ipsQuote-editor='{$editorName}' data-ipsQuote-target='#comment-{$comment->$idField}' class='ipsJS_show'>
<button class='ipsHide' data-action='multiQuoteComment' data-ipsTooltip data-ipsQuote-multiQuote data-mqId='mq{$comment->$idField}' aria-label='{lang="multiquote"}'><i class='fa-solid fa-plus'></i></button>
</li>
<li data-ipsQuote-editor='{$editorName}' data-ipsQuote-target='#comment-{$comment->$idField}' class='ipsJS_show'>
<a href='#' data-action='quoteComment' data-ipsQuote-singleQuote><i class="fa-solid fa-quote-left" aria-hidden="true"></i><span>{lang="quote"}</span></a>
</li>
{{endif}}
{{if ( $comment->item()->isSolved() and $comment->item()->mapped('solved_comment_id') == $comment->pid ) AND $comment->item()->canSolve()}}
<li><a href='{$item->url()->csrf()->setQueryString( array( 'do' => 'unsolve', 'answer' => $comment->pid ) )}' data-action="unsolveComment"><i class="fa-solid fa-xmark" aria-hidden="true"></i><span>{lang="unsolve_content"}</span></a></li>
{{endif}}
{{if $comment->item()->canSolve() AND ! $comment->item()->isSolved()}}
<li><a href='{$item->url()->csrf()->setQueryString( array( 'do' => 'solve', 'answer' => $comment->pid ) )}' data-action="solveComment"><i class="fa-solid fa-check" aria-hidden="true"></i><span>{lang="solve_content"}</span></a></li>
{{endif}}
{{if \IPS\Application::appIsEnabled('cloud')}}
<li>{template="spam" app="cloud" group="spam" params="$comment, FALSE"}</li>
{{endif}}
{{if ! $comment->mapped('first')}}
{template="helpfulButton" group="system" app="core" params="$comment, $item"}
{{endif}}
{{endif}}
<li class='ipsHide' data-role='commentLoading'>
<span class='ipsLoading ipsLoading--tiny'></span>
</li>
</menu>
{{if !( $comment->hidden() === 1 && ( $comment->canUnhide() || $comment->canDelete() ) ) and \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_enabled}}
{template="reputation" group="global" app="core" params="$comment"}
{{endif}}
</div>
{{endif}}
{template="sharemenu" group="global" app="core" params="$comment"}
</div>]]></template>
<template template_group="topics" template_name="postContainer" template_data="$item, $comment, $votes=array(), $otherClasses='', $viewerIsFollowingTheseExperts=[]" template_location="front" template_app="forums"><![CDATA[{{$idField = $comment::$databaseColumnId;}}
{{$itemClassSafe = str_replace( '\\', '_', mb_substr( $comment::$itemClass, 4 ) );}}
{{if $comment->isIgnored()}}
<div class='ipsEntry ipsEntry--ignored' id='elIgnoreComment_{$comment->$idField}' data-ignoreCommentID='elComment_{$comment->$idField}' data-ignoreUserID='{$comment->author()->member_id}'>
<i class="fa-solid fa-user-slash"></i> {lang="ignoring_content" sprintf="$comment->author()->name"} <a href='#elIgnoreComment_{$comment->$idField}_menu' data-ipsMenu data-ipsMenu-menuID='elIgnoreComment_{$comment->$idField}_menu' data-ipsMenu-appendTo='#elIgnoreComment_{$comment->$idField}' data-action="ignoreOptions" title='{lang="see_post_ignore_options"}'>{lang="options"} <i class='fa-solid fa-caret-down'></i></a>
<ul class='ipsMenu ipsHide' id='elIgnoreComment_{$comment->$idField}_menu'>
<li class='ipsMenu_item ipsJS_show' data-ipsMenuValue='showPost'><a href='#'>{lang="show_this_post"}</a></li>
<li class='ipsMenu_sep ipsJS_show'><hr></li>
<li class='ipsMenu_item' data-ipsMenuValue='stopIgnoring'><a href='{url="app=core&module=system&controller=ignore&do=remove&id={$comment->author()->member_id}" seoTemplate="ignore"}'>{lang="stop_ignoring_posts_by" sprintf="$comment->author()->name"}</a></li>
<li class='ipsMenu_item'><a href='{url="app=core&module=system&controller=ignore" seoTemplate="ignore"}'>{lang="change_ignore_preferences"}</a></li>
</ul>
</div>
{{endif}}
<div id='comment-{$comment->$idField}'></div>
<article
data-ips-hook="postWrapper"
id='elComment_{$comment->$idField}'
class="
ipsEntry js-ipsEntry {$otherClasses} ipsEntry--{{if member.getLayoutValue('forums_post') === 'modern'}}simple{{else}}post{{endif}} {$comment->ui('css')}
{{if ( settings.reputation_enabled and settings.reputation_highlight and $comment->reactionCount() >= settings.reputation_highlight ) OR $comment->isFeatured()}} ipsEntry--popular {{endif}}
{{if $comment->author()->hasHighlightedReplies()}} ipsEntry--highlighted {{endif}}
{{if $comment->isIgnored()}} ipsHide {{endif}}
{{if $comment->hidden() OR $item->hidden() === -2}} ipsModerated {{endif}}
{{if ( $item->isSolved() and $item->mapped('solved_comment_id') == $comment->pid )}} ipsEntry--solved {{endif}}
"
{{if $comment->author()->hasHighlightedReplies()}} data-membergroup="{$comment->author()->member_group_id}" {{endif}}
{$comment->ui( 'dataAttributes' )}
{{if $field = $item::$databaseColumnMap['first_comment_id'] and $item->$field == $comment->$idField}}data-ips-first-post{{endif}}
>
{{if \IPS\Member::loggedIn()->getLayoutValue('forums_post') === 'classic'}}
<!-- Author column -->
<aside data-ips-hook="topicAuthorColumn" class='ipsEntry__author-column'>
{{if $comment->author()->isOnline() AND ( !$comment->author()->isOnlineAnonymously() OR ( $comment->author()->isOnlineAnonymously() AND \IPS\Member::loggedIn()->isAdmin() ) )}}
<span class='ipsEntry__author-online' data-ipsTooltip title='{{if $comment->author()->isOnlineAnonymously()}}{lang="online_now_anon" sprintf="$comment->author()->name"}{{elseif $comment->author()->isOnline()}}{lang="online_now" sprintf="$comment->author()->name"}{{endif}}'></span>
{{endif}}
<div data-ips-hook="postUserPhoto" class='ipsAvatarStack'>
{template="userPhoto" app="core" group="global" params="$comment->author(), 'fluid', $comment->warningRef()"}
{{if $comment->author()->modShowBadge()}}
<!-- <span class="ipsAvatarStack__badge ipsAvatarStack__badge--moderator" data-ipsTooltip title='{lang="member_is_moderator" sprintf="$comment->author()->name"}'></span> -->
{{elseif $comment->author()->joinedRecently()}}
<span class="ipsAvatarStack__badge ipsAvatarStack__badge--new" data-ipsTooltip title='{lang="member_is_new_badge" sprintf="$comment->author()->name"}'></span>
{{endif}}
{{if !$comment->isAnonymous() and $comment->author()->canHaveAchievements() and \IPS\core\Achievements\Rank::show() and $rank = $comment->author()->rank()}}
{$rank->html( 'ipsAvatarStack__rank' )|raw}
{{endif}}
</div>
<h3 data-ips-hook="postUsername" class='ipsEntry__username'>
{template="userLink" group="global" app="core" params="$comment->author(), $comment->warningRef(), FALSE, $comment->isAnonymous()"}
{{if $comment->isAnonymous() and \IPS\Member::loggedIn()->modPermission('can_view_anonymous_posters')}}
<a data-ipsHover data-ipsHover-width="370" data-ipsHover-onClick href="{{if $comment->isFirst()}}{$comment->item()->url( 'reveal' )->csrf()}{{else}}{$comment->url( 'reveal' )->csrf()}{{endif}}" rel="nofollow"><span class="ipsAnonymous" data-ipsTooltip title="{lang="post_anonymously_reveal"}"></span></a>
{{endif}}
{{if $comment->author()->modShowBadge()}}
<span class="ipsEntry__author-moderator-badge ipsBadge ipsBadge--icon ipsBadge--soft" data-ipsTooltip title='{lang="member_is_moderator" sprintf="$comment->author()->name"}'>
<i class="fa-solid fa-shield-halved"></i>
</span>
{{endif}}
</h3>
{{if !$comment->isAnonymous()}}
<div data-ips-hook="postUserGroup" class='ipsEntry__group'>
{{if $comment->author()->modShowBadge()}}
<a href='{url="app=core&module=staffdirectory&controller=directory" seoTemplate="staffdirectory"}'>{expression="\IPS\Member\Group::load( $comment->author()->member_group_id )->formattedName" raw="true"}</a>
{{else}}
{expression="\IPS\Member\Group::load( $comment->author()->member_group_id )->formattedName" raw="true"}
{{endif}}
</div>
{{endif}}
{{if !$comment->isAnonymous() && \IPS\Member\Group::load( $comment->author()->member_group_id )->g_icon }}
<div data-ips-hook="postUserGroupImage" class='ipsEntry__group-image'>
{{if $comment->author()->modShowBadge()}}
<a href='{url="app=core&module=staffdirectory&controller=directory" seoTemplate="staffdirectory"}'>
<img src='{file="$comment->author()->group['g_icon']" extension="core_Theme"}' alt='' loading='lazy'>
</a>
{{else}}
<img src='{file="$comment->author()->group['g_icon']" extension="core_Theme"}' alt='' loading='lazy'>
{{endif}}
</div>
{{endif}}
{{if $comment->author()->member_id}}
<ul data-ips-hook="postUserStats" class='ipsEntry__authorStats ipsEntry__authorStats--minimal'>
<li data-i-el="posts">
{{if \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'members', 'front' ) ) }}
<a href='{url="app=core&module=members&controller=profile&id={$comment->author()->member_id}&do=content" seoTemplate="profile_content" seoTitle="$comment->author()->members_seo_name"}' rel="nofollow" title='{lang="post_pl"}' data-ipsTooltip>
<i class="fa-solid fa-comment"></i>
<span data-i-el="number">{number="$comment->author()->member_posts" format="short"}</span>
<span data-i-el="label">{lang="post_pl_lc"}</span>
</a>
{{else}}
<span>
<i class="fa-solid fa-comment"></i>
<span data-i-el="number">{number="$comment->author()->member_posts" format="short"}</span>
<span data-i-el="label">{lang="post_pl_lc"}</span>
</span>
{{endif}}
</li>
{{if isset( $comment->author_solved_count )}}
<li data-ips-hook="postUserSolutions" data-i-el="solutions">
{{if \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'members', 'front' ) ) }}
<a href='{url="app=core&module=members&controller=profile&id={$comment->author()->member_id}&do=solutions" seoTemplate="profile_solutions" seoTitle="$comment->author()->members_seo_name"}' rel="nofollow" title='{lang="solutions"}' data-ipsTooltip>
<i class="fa-solid fa-circle-check"></i>
<span data-i-el="number">{number="$comment->author_solved_count" format="short"}</span>
<span data-i-el="label">{lang="solutions"}</span>
</a>
{{else}}
<span>
<i class="fa-solid fa-circle-check"></i>
<span data-i-el="number">{number="$comment->author_solved_count" format="short"}</span>
<span data-i-el="label">{lang="solutions"}</span>
</span>
{{endif}}
</li>
{{endif}}
{{if $comment->author()->canHaveAchievements() and \IPS\core\Achievements\Badge::show() AND \IPS\core\Achievements\Badge::getStore()}}
<li data-ips-hook="postUserBadges" data-i-el="badges">
<a href="{url="app=core&module=members&controller=profile&id={$comment->author()->member_id}&do=badges" seoTemplate="profile_badges" seoTitle="$comment->author()->members_seo_name"}" data-action="badgeLog" title="{lang="badges"}">
<i class="fa-solid fa-award"></i>
<span data-i-el="number">{number="$comment->author()->badgeCount()" format="short"}</span>
<span data-i-el="label">{lang="badges"}</span>
</a>
</li>
{{endif}}
{{if settings.reputation_enabled and settings.reputation_show_profile}}
<li data-ips-hook="postUserReputation" data-i-el="reputation">
{{if member.group['gbw_view_reps']}}
<a href="{url="app=core&module=members&controller=profile&id={$comment->author()->member_id}&do=reputation" seoTemplate="profile_reputation" seoTitle="$comment->author()->members_seo_name"}" data-action="repLog" title="{lang="reputation_title"}" data-ipstooltip>
{{else}}
<span>
{{endif}}
<i class="fa-solid fa-heart"></i>
<span data-i-el="number">{number="$comment->author()->pp_reputation_points" format="short"}</span>
<span data-i-el="label">{lang="reputation_title"}</span>
{{if member.group['gbw_view_reps']}}
</a>
{{else}}
</span>
{{endif}}
</li>
{{endif}}
</ul>
<ul data-ips-hook="postUserCustomFields" class='ipsEntry__authorFields'>
{template="customFieldsDisplay" group="global" app="core" params="$comment->author()"}
</ul>
{{endif}}
{$comment->ui( 'authorPanel' )|raw}
</aside>
{{endif}}
{template="postHeader" group="topics" app="forums" params="$item, $comment, $idField, $viewerIsFollowingTheseExperts"}
{template="post" group="topics" app="forums" params="$item, $comment, $item::$formLangPrefix . 'comment', $item::$application, $item::$module, $itemClassSafe, $viewerIsFollowingTheseExperts"}
</article>]]></template>
<template template_group="topics" template_name="postHeader" template_data="$item, $comment, $idField, $viewerIsFollowingTheseExperts=[]" template_location="front" template_app="forums"><![CDATA[<aside data-ips-hook="topicAuthorColumn" class='ipsEntry__header'>
<div class='ipsEntry__header-align'>
<div class='ipsPhotoPanel'>
<!-- Avatar -->
<div class='ipsAvatarStack' data-ips-hook="postUserPhoto">
{template="userPhoto" app="core" group="global" params="$comment->author(), 'fluid', $comment->warningRef()"}
{{if !$comment->isAnonymous() and $comment->author()->canHaveAchievements() and \IPS\core\Achievements\Rank::show() and $rank = $comment->author()->rank()}}
{$rank->html( 'ipsAvatarStack__rank' )|raw}
{{endif}}
{{if $comment->author()->isOnline() AND ( !$comment->author()->isOnlineAnonymously() OR ( $comment->author()->isOnlineAnonymously() AND \IPS\Member::loggedIn()->isAdmin() ) )}}
<span class='ipsOnlineStatus' data-ipsTooltip title='{{if $comment->author()->isOnlineAnonymously()}}{lang="online_now_anon" sprintf="$comment->author()->name"}{{elseif $comment->author()->isOnline()}}{lang="online_now" sprintf="$comment->author()->name"}{{endif}}'></span>
{{endif}}
</div>
<!-- Username -->
<div class='ipsPhotoPanel__text'>
<h3 data-ips-hook="postUsername" class='ipsEntry__username'>
{template="userLink" group="global" app="core" params="$comment->author(), $comment->warningRef(), FALSE, $comment->isAnonymous()"}
{{if !$comment->isAnonymous()}}
<span class='ipsEntry__group'>{expression="\IPS\Member\Group::load( $comment->author()->member_group_id )->formattedName" raw="true"}</span>
{{endif}}
{{if $comment->isAnonymous() and \IPS\Member::loggedIn()->modPermission('can_view_anonymous_posters')}}
<a data-ipsHover data-ipsHover-width="370" data-ipsHover-onClick href="{{if $comment->isFirst()}}{$comment->item()->url( 'reveal' )->csrf()}{{else}}{$comment->url( 'reveal' )->csrf()}{{endif}}" rel="nofollow"><span class="ipsAnonymousIcon" data-ipsTooltip title="{lang="post_anonymously_reveal"}"></span></a>
{{endif}}
</h3>
<p class='ipsPhotoPanel__secondary'>
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->$idField ) )}' rel="nofollow">{$comment->dateLine()|raw}</a>
</p>
</div>
</div>
<!-- Minimal badges -->
<ul data-ips-hook="postBadgesSecondary" class='ipsBadges'>
{{if $comment->authorIsAnExpert()}}
<li>{template="expertBadge" group="topics" app="forums" params="$item, $comment, $viewerIsFollowingTheseExperts"}</li>
{{endif}}
{{if $comment->author()->hasHighlightedReplies()}}
<li><span class='ipsBadge ipsBadge--highlightedGroup'>{expression="\IPS\Member\Group::load( $comment->author()->member_group_id )->name" raw="true"}</span></li>
{{endif}}
{{if ( $comment->item()->isSolved() and $comment->item()->mapped('solved_comment_id') == $comment->pid )}}
<li><span class='ipsBadge ipsBadge--positive'><i class='fa-solid fa-check' aria-hidden="true"></i><span>{lang="this_is_a_solved_post"}</span></span></li>
{{endif}}
{{if $comment->isFeatured()}}
<li><span class='ipsBadge ipsBadge--positive'>{lang="this_is_a_featured_post"}</span></li>
{{endif}}
{{if $comment->isHighlighted() }}
<li><span class='ipsBadge ipsBadge--popular'>{lang="this_is_a_popular_post"}</span></li>
{{endif}}
</ul>
{{if \count( $item->commentMultimodActions() ) and !$comment->mapped('first')}}
<label class='ipsInput ipsInput--toggle ipsInput--pseudo' for='mod-checkbox-{$comment->$idField}'></label>
{{endif}}
{$comment->menu()|raw}
{{if $comment->author()->member_id}}
<!-- Expand mini profile -->
<button class='ipsEntry__topButton ipsEntry__topButton--profile' type='button' aria-controls='mini-profile-{$comment->$idField}' aria-expanded='false' data-ipscontrols aria-label="Author stats" data-ipstooltip><i class="fa-solid fa-chevron-down" aria-hidden="true"></i></button>
{{endif}}
{template="miniProfile" app="core" group="global" params="$comment, $comment->$idField"}
</div>
</aside>]]></template>
<template template_group="topics" template_name="topic" template_data="$topic, $comments, $votes=array(), $nextUnread=NULL, $pagination=NULL, $topicVotes=array(), $firstPost=null, $viewerIsFollowingTheseExperts=array()" template_location="front" template_app="forums"><![CDATA[{{$Traditional = \IPS\Member::loggedIn()->getLayoutValue( 'forums_post' ) !== 'modern';}}
{{$featureFirstPost = \IPS\Member::loggedIn()->getLayoutValue( 'forum_topic_view_firstpost' );}}
{{if $club = $topic->container()->club()}}
{{if settings.clubs and settings.clubs_header == 'full'}}
{template="header" app="core" group="clubs" params="$club, $topic->container()"}
{{endif}}
<div id='elClubContainer' class='i-display_contents'>
{{endif}}
<!-- Start #ipsTopicView -->
<div class='ipsBlockSpacer' id="ipsTopicView" data-ips-topic-ui="{{if \IPS\Member::loggedIn()->getLayoutValue( 'forums_post' ) === 'modern'}}minimal{{else}}traditional{{endif}}" data-ips-topic-first-page="{{if $topic->isFirstPage()}}true{{else}}false{{endif}}" data-ips-topic-comments="{{if request.show == 'helpful'}}helpful{{else}}all{{endif}}">
{template="assignmentHeader" app="core" group="global" params="$topic"}
<div class="ipsBox ipsPull">
<header class="ipsPageHeader">
<div class="ipsPageHeader__row">
<div data-ips-hook="header" class='ipsPageHeader__primary'>
<div class='ipsPageHeader__title'>
{{if $topic->canEdit()}}
<h1 data-ips-hook="titleEditable" data-controller="core.front.core.moderation">
<span data-role="editableTitle" title='{lang="click_hold_edit"}'>{$topic->title}</span>
</h1>
{{else}}
<h1 data-ips-hook="title">{$topic->title}</h1>
{{endif}}
<div data-ips-hook="badges" class='ipsBadges'>
{{foreach $topic->badges() as $badge}}{$badge|raw}{{endforeach}}
</div>
</div>
{{if \count( $topic->tags() ) OR ( $topic->canEdit() AND $topic::canTag( NULL, $topic->container() ) )}}
{template="tagsWithPrefix" group="global" app="core" params="$topic->tags(), $topic->prefix(), FALSE, FALSE, ( $topic->canEdit() AND ( \count( $topic->tags() ) OR $topic::canTag( NULL, $topic->container() ) ) ) ? $topic->url() : NULL"}
{{endif}}
{{if $featureFirstPost and \IPS\Platform\Bridge::i()->featureIsEnabled( 'realtime' )}}
<!-- Who's viewing, for featured post header -->
<div data-controller='cloud.front.realtime.whosViewing' data-location='{expression="\IPS\cloud\Realtime::i()->getLocationHash()"}'></div>
{{endif}}
</div>
{{if !$topic->isArchived() and !$topic->container()->password}}
<ul data-ips-hook="topicHeaderButtons" class='ipsButtons'>
{{if !$topic->container()->disable_sharelinks}}
<li>{template="shareButton" app="core" group="sharelinks" params="$topic"}</li>
{{endif}}
{{if \IPS\Application::appIsEnabled('cloud')}}
<li>{template="spam" app="cloud" group="spam" params="$topic"}</li>
{{endif}}
<li>{template="follow" app="core" group="global" params="'forums', 'topic', $topic->tid, $topic->followersCount()"}</li>
</ul>
{{endif}}
</div>
{$topic->postSummaryBlurb|raw}
{{if ! $featureFirstPost}}
<!-- PageHeader footer is only shown in traditional view -->
<div class="ipsPageHeader__row ipsPageHeader__row--footer">
<div class='ipsPageHeader__primary'>
<div class='ipsPhotoPanel ipsPhotoPanel--inline'>
{template="userPhoto" group="global" app="core" params="$topic->author(), 'fluid', $topic->warningRef()"}
<div data-ips-hook="topicHeaderMetaData" class='ipsPhotoPanel__text'>
<div class="ipsPhotoPanel__primary">{lang="byline_nodate" htmlsprintf="$topic->author()->link( $topic->warningRef(), NULL, $topic->isAnonymous() )"}</div>
<div class="ipsPhotoPanel__secondary">{datetime="$topic->start_date"} {lang="in"} <a href="{$topic->container()->url()}" class="i-font-weight_600">{$topic->container()->_formattedTitle|raw}</a></div>
</div>
</div>
</div>
{{if \IPS\Platform\Bridge::i()->featureIsEnabled( 'realtime' )}}
<div data-controller='cloud.front.realtime.whosViewing' data-location='{expression="\IPS\cloud\Realtime::i()->getLocationHash()"}'></div>
{{endif}}
</div>
{{endif}}
</header>
{{if $featureFirstPost and $firstPost}}
<!-- First post of modern view -->
{template="postContainer" group="topics" app="forums" params="$topic, $firstPost, $votes, 'ipsEntry--first-simple', $viewerIsFollowingTheseExperts"}
{{endif}}
</div>
{{if $featureFirstPost and $firstPost and ($topic->showSummaryOnDesktop() === 'post' OR $topic->showSummaryOnMobile())}}
{template="activity" group="topics" app="forums" params="$topic, 'post'"}
{{endif}}
{{if $topic->canSolve() AND ! $topic->isSolved() AND $topic->isNotModeratorButCanSolve()}}
<!-- Has this been solved? message -->
<div class='ipsMessage ipsMessage--general ipsPull' data-controller='forums.front.topic.solved'>
<i class="fa-regular fa-circle-question ipsMessage__icon"></i>
<div class='i-flex i-justify-content_space-between i-align-items_center i-flex-wrap_wrap i-gap_1'>
<div class='i-flex_11 i-basis_420'>
<h4 class='ipsMessage__title'>{lang="solved_did_it_tho_title" sprintf="\IPS\Member::loggedIn()->name"}</h4>
<div class='ipsRichText'>{lang="solved_did_it_tho_desc"}</div>
</div>
{{if member.members_bitoptions['no_solved_reenage']}}
<a href="#" data-action="mailSolvedReminders" class="ipsButton ipsButton--primary"><i class="fa-solid fa-envelope"></i><span>{lang="solved_reengage_on"}</span></a>
{{endif}}
</div>
</div>
{{endif}}
<!-- These can be hidden on traditional first page using <div data-ips-hide="traditional-first"> -->
{{if $featureFirstPost}}
{{if $topic->isSolved()}}
{template="topicSolutionMessage" group="topics" app="forums" params="$topic"}
{{elseif ( $mostHelpful = $topic->helpfulPosts(1) and $mostHelpful[0]['count'] >= \IPS\Settings::i()->forums_helpful_highlight)}}
{template="topicHelpfulMessage" group="topics" app="forums" params="$mostHelpful"}
{{endif}}
{{endif}}
<!-- Content messages -->
{template="contentItemMessages" group="global" app="core" params="$topic->getMessages(), $topic"}
{{if $topic->hidden() === 1 and $topic->canUnhide()}}
<!-- Pending approval -->
<div class="ipsMessage ipsMessage--warning ipsPull">
<div class='i-flex i-justify-content_space-between i-align-items_center i-flex-wrap_wrap i-gap_1'>
<div class='i-flex_11 i-basis_420'>
<h4 class='ipsMessage__title'>{lang="pending_approval"}</h4>
</div>
<ul class='ipsButtons'>
<li><a href="{$topic->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'unhide' ) )}" class="ipsButton ipsButton--primary" title='{lang="approve_title_topic"}'><i class="fa-solid fa-check"></i><span>{lang="approve"}</span></a></li>
{{if $topic->canDelete()}}
<li><a href='{$topic->url()->csrf()->setQueryString( array( 'do' => 'moderate', 'action' => 'delete' ) )}' data-confirm title='{lang="topic_delete_title"}' class='ipsButton ipsButton--inherit'><i class='fa-solid fa-xmark'></i><span>{lang="delete"}</span></a></li>
{{endif}}
</ul>
</div>
</div>
{{endif}}
{{if $topic->hidden() === -1}}
<!-- Hidden topic -->
<div class="ipsMessage ipsMessage--warning ipsPull">
{$topic->hiddenBlurb()}
</div>
{{endif}}
<div class='i-flex i-flex-wrap_wrap-reverse i-align-items_center i-gap_3'>
<!-- All replies / Helpful Replies: This isn't shown on the first page, due to data-ips-hide="traditional-first" -->
{{if $featureFirstPost and $topic::itemHasHelpful( $topic ) and ( $mostHelpful = $topic->helpfulPosts(1) and $mostHelpful[0]['count'] >= \IPS\Settings::i()->forums_helpful_highlight)}}
<ul class='ipsButtons ipsButtons--start' data-ips-hide="traditional-first">
<li>
<a href='{$topic->url()->setQueryString( 'show', 'all' )}' class="ipsButton ipsButton--small {{if request.show !== 'helpful'}}ipsButton--secondary{{endif}}" rel='nofollow'>
{{if request.show === 'helpful' and $topic->posts > 2}}{lang="helpful_all_n_replies" pluralize="$topic->posts - 1, $topic->posts - 1"}{{else}}{lang="helpful_all_replies"}{{endif}}
</a>
</li>
<li>
<a href='{$topic->url()->setQueryString( 'show', 'helpful' )}' class="ipsButton ipsButton--small {{if request.show == 'helpful'}}ipsButton--secondary{{endif}}" rel='nofollow' {{if request.show !== 'helpful' and $topic->helpfulsRepliesCount() > 1}}data-role="helpfulCount"{{endif}}>
{{if request.show !== 'helpful' and $topic->helpfulsRepliesCount() > 1}}{lang="helpful_only_n_helpful" pluralize="$topic->helpfulsRepliesCount()"}{{else}}{lang="helpful_only_helpful"}{{endif}}
</a>
</li>
</ul>
{{endif}}
<!-- Start new topic, Reply to topic: Shown on all views -->
<ul data-ips-hook="topicMainButtons" class="i-flex_11 ipsButtons ipsButtons--main">
<li>
{$topic->menu()|raw}
</li>
{{if $topic->container()->can('add')}}
<li>
<a href="{$topic->container()->url()->setQueryString( 'do', 'add' )}" rel="nofollow" class='ipsButton ipsButton--text' title='{lang="start_new_topic_desc"}'><i class="fa-regular fa-pen-to-square"></i><span>{lang="start_new_topic"}</span></a>
</li>
{{endif}}
{{if $topic->canComment()}}
<li data-controller='forums.front.topic.reply'>
<a href='#replyForm' rel="nofollow" class='ipsButton {{if $topic->locked()}}ipsButton--negative{{else}}ipsButton--primary{{endif}}' data-action='replyToTopic'><i class="fa-solid fa-reply"></i><span>{lang="reply_to_this_topic"}{{if $topic->locked()}} ({lang="locked"}){{endif}}</span></a>
</li>
{{endif}}
</ul>
</div>
{{if $poll = $topic->getPoll()}}
<div data-ips-hook="topicPoll" class='ipsBox ipsPull'>
{$poll|raw}
</div>
{{endif}}
{template="featuredComments" group="global" app="core" params="$topic->featuredComments(), $topic->url()->setQueryString( 'recommended', 'comments' ), 'recommended_posts', 'post_lc'"}
<div id='comments' data-controller='core.front.core.commentFeed,forums.front.topic.view, core.front.core.ignoredComments' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-baseURL='{$topic->url()}' {{if $topic->isLastPage()}}data-lastPage{{endif}} data-feedID='{$topic->feedId}' class='cTopic ipsBlockSpacer'>
<div data-ips-hook="topicPostFeed" id="elPostFeed" class="ipsEntries ipsPull ipsEntries--topic" data-role='commentFeed' data-controller='core.front.core.moderation' {{if $topic->topic_answered_pid}} data-topicAnswerID="{$topic->topic_answered_pid}"{{endif}}>
{{if ( \count( $topic->commentMultimodActions() ) && ( $topic->posts > 1 OR $topic->mapped('unapproved_comments') > 0 OR $topic->mapped('hidden_comments') > 0 ) ) || $pagination}}
<div class="ipsButtonBar ipsButtonBar--top">
{{if $pagination}}
<div class="ipsButtonBar__pagination">{$pagination|raw}</div>
{{endif}}
{{if \count( $topic->commentMultimodActions() )}}
<div class="ipsButtonBar__end">
<ul class="ipsDataFilters">
<li>
<a class="ipsJS_show ipsDataFilters__button" href="#elCheck_menu" id="elCheck" title='{lang="select_rows_tooltip"}' data-ipsTooltip data-ipsAutoCheck data-ipsAutoCheck-context="#elPostFeed" 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_menu">
<li class="ipsMenu_title">{lang="select_rows"}</li>
<li class="ipsMenu_item" data-ipsMenuValue="all"><a href="#">{lang="all"}</a></li>
<li class="ipsMenu_item" data-ipsMenuValue="none"><a href="#">{lang="none"}</a></li>
<li class="ipsMenu_sep"><hr></li>
<li class="ipsMenu_item" data-ipsMenuValue="hidden"><a href="#">{lang="hidden"}</a></li>
<li class="ipsMenu_item" data-ipsMenuValue="unhidden"><a href="#">{lang="unhidden"}</a></li>
<li class="ipsMenu_item" data-ipsMenuValue="unapproved"><a href="#">{lang="unapproved"}</a></li>
</ul>
</li>
</ul>
</div>
{{endif}}
</div>
{{endif}}
<form action="{$topic->url()->csrf()->setQueryString( 'do', 'multimodComment' )->setPage('page', (int) \IPS\Request::i()->page )}" method="post" data-ipsPageAction data-role='moderationTools'>
{{$postCount=0; $adShown=0; $timeLastRead = $topic->timeLastRead(); $lined = FALSE;}}
{{if \count( $comments )}}
{{foreach $topic->generateCommentMetaData( $comments, \IPS\Settings::i()->forums_mod_actions_anon ) as $comment}}
{{if (!$lined and $timeLastRead and $timeLastRead->getTimestamp() < $comment->mapped('date'))}}
{{if $lined = TRUE and $postCount}}
<div class='ipsUnreadBar'>
<span>{lang="topic_meta_unread"}</span>
</div>
{{endif}}
{{endif}}
{{$postCount++;}}
{template="postContainer" group="topics" app="forums" params="$topic, $comment, $votes, '', $viewerIsFollowingTheseExperts""}
{{$hasSolvedMessage = false;}}
{{$contentUnderPostOne = false;}}
{{if ( ! $featureFirstPost ) and $postCount == 1 and $topic->isFirstPage()}}
<!-- If this is the first post in the traditional UI, show some of the extras/messages below it -->
{{if $topic->isSolved()}}
{{$hasSolvedMessage = true;}}
<!-- Show the Solved message in favour of the Most Helpful message, if the topic is solved.. -->
{template="topicSolutionMessage" group="topics" app="forums" params="$topic"}
{{elseif ($mostHelpful = $topic->helpfulPosts(1) and $mostHelpful[0]['count'] >= \IPS\Settings::i()->forums_helpful_highlight)}}
{{$hasSolvedMessage = true;}}
<!-- Otherwise show the most helpful message if the criteria is met -->
{template="topicHelpfulMessage" group="topics" app="forums" params="$mostHelpful"}
{{endif}}
<!-- Show the All Replies / Most Helpful tabs -->
{{if $topic::itemHasHelpful( $topic ) and ($mostHelpful = $topic->helpfulPosts(1) and $mostHelpful[0]['count'] >= \IPS\Settings::i()->forums_helpful_highlight)}}
{{$contentUnderPostOne = true;}}
<ul class='ipsButtons ipsButtons--start i-padding_2'>
<li>
<a href='{$topic->url()->setQueryString( 'show', 'all' )}' class="ipsButton ipsButton--tiny {{if request.show !== 'helpful'}}ipsButton--positive{{endif}}" rel='nofollow'>
{{if request.show === 'helpful'}}{lang="helpful_all_n_replies" pluralize="$topic->posts - 1, $topic->posts - 1"}{{else}}{lang="helpful_all_replies"}{{endif}}
</a>
</li>
<li>
<a href='{$topic->url()->setQueryString( 'show', 'helpful' )}' class="ipsButton ipsButton--tiny {{if request.show == 'helpful'}}ipsButton--positive{{endif}}" rel='nofollow'>
{{if request.show !== 'helpful' and $topic->helpfulsRepliesCount() > 1}}{lang="helpful_only_n_helpful" pluralize="$topic->helpfulsRepliesCount()"}{{else}}{lang="helpful_only_helpful"}{{endif}}
</a>
</li>
</ul>
{{endif}}
{{endif}}
{{if ( isset( $comment->metaData['comment']['moderation'] ) OR isset( $comment->metaData['comment']['timeGap'] ) )}}
{{$contentUnderPostOne = true;}}
<ul class='ipsTopicMeta'>
{{if isset( $comment->metaData['comment']['moderation'] )}}
{{foreach $comment->metaData['comment']['moderation'] as $modAction}}
<li class="ipsTopicMeta__item ipsTopicMeta__item--moderation">
<span class='ipsTopicMeta__time i-color_soft'>{datetime="$modAction['row']['ctime']" short="true"}</span>
<span class='ipsTopicMeta__action'>{$modAction['blurb']}</span>
</li>
{{endforeach}}
{{endif}}
{{if isset( $comment->metaData['comment']['timeGap'] )}}
<li class="ipsTopicMeta__item ipsTopicMeta__item--time">
{$comment->metaData['comment']['timeGap']['blurb']}...
</li>
{{endif}}
</ul>
{{endif}}
{{if $advertisement = \IPS\core\Advertisement::loadByLocation( 'ad_topic_view', $postCount, $adShown )}}
{{$adShown++;}}
{$advertisement|raw}
{{endif}}
{{if ( !$featureFirstPost and $postCount == 1 and ( $topic->showSummaryOnDesktop() === 'post' OR $topic->showSummaryOnMobile() ) )}}
{template="activity" group="topics" app="forums" params="$topic, 'post'"}
{{endif}}
{{if $topic->isFirstPage() and $postCount == 1 and $hasSolvedMessage and ! $contentUnderPostOne}}
<!-- If no content, we need some margin -->
<div class="i-margin_2"></div>
{{endif}}
{{endforeach}}
{{else}}
<div class='ipsEmptyMessage'>{lang="no_posts_show"}{{if $topic->posts > 1}} - <a href='{$topic->url()->setQueryString( 'show', 'all' )}'>{lang="topic_show_all_replies"}</a>{{endif}}</div>
{{endif}}
{template="commentMultimod" app="core" group="global" params="$topic"}
</form>
{{if $pagination}}
<div class="ipsButtonBar ipsButtonBar--bottom">
<div class="ipsButtonBar__pagination">{$pagination|raw}</div>
</div>
{{endif}}
</div>
{{if $topic->isArchived()}}
<div class='ipsMessage ipsMessage--info'>
<h4 class='ipsMessage__title'>{lang="topic_is_archived"}</h4>
<p>{lang="topic_archived_desc"}</p>
</div>
{{endif}}
{{if ( $topic->commentForm() || $topic->locked() || \IPS\Member::loggedIn()->restrict_post || \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings'] || !\IPS\Member::loggedIn()->checkPostsPerDay()) && !$topic->isArchived()}}
<div id='replyForm' data-ips-hook="topicReplyForm" data-role='replyArea' class='cTopicPostArea ipsBox ipsPull {{if !$topic->canComment()}}cTopicPostArea_noSize{{endif}}' {{if \IPS\Application::appIsEnabled('cloud') AND \IPS\cloud\Application::featureIsEnabled( 'realtime' )}}data-controller='cloud.front.realtime.forumsReplyArea,cloud.front.realtime.whosTyping'{{endif}}>
{{if $topic->commentForm()}}
{{if $topic->locked()}}
<p class='ipsComposeArea_warning'><i class='fa-solid fa-circle-info'></i> {lang="topic_locked_can_comment"}</p>
{{elseif ( $topic->getPoll() and $topic->getPoll()->poll_only )}}
<p class='ipsComposeArea_warning'><i class='fa-solid fa-circle-info'></i> {lang="topic_poll_can_comment"}</p>
{{endif}}
{$topic->commentForm()|raw}
{{else}}
{{if $topic->locked()}}
{template="commentUnavailable" group="forms" location="front" app="core" params="'topic_locked_cannot_comment'"}
{{elseif \IPS\Member::loggedIn()->restrict_post}}
{template="commentUnavailable" group="forms" location="front" app="core" params="'restricted_cannot_comment', \IPS\Member::loggedIn()->warnings(5,NULL,'rpa'), \IPS\Member::loggedIn()->restrict_post"}
{{elseif \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings']}}
{template="commentUnavailable" group="forms" location="front" app="core" params="'unacknowledged_warning_cannot_post', \IPS\Member::loggedIn()->warnings( 1, FALSE )"}
{{elseif !\IPS\Member::loggedIn()->checkPostsPerDay()}}
{template="commentUnavailable" group="forms" location="front" app="core" params="'member_exceeded_posts_per_day'"}
{{endif}}
{{endif}}
</div>
{{endif}}
{{if !$topic->isArchived() and !$topic->container()->password}}
<div class='ipsPageActions ipsBox i-padding_2 ipsPull ipsResponsive_showPhone'>
{{if !$topic->container()->disable_sharelinks}}
{template="shareButton" app="core" group="sharelinks" params="$topic, 'verySmall', 'light'"}
{{endif}}
{{if \IPS\Application::appIsEnabled('cloud')}}
{template="spam" app="cloud" group="spam" params="$topic"}
{{endif}}
{template="follow" app="core" group="global" params="'forums', 'topic', $topic->tid, $topic->followersCount()"}
</div>
{{endif}}
</div>
<div class='ipsPager'>
<div class="ipsPager_prev">
{{if \IPS\forums\Forum::isSimpleView( $topic->container() )}}
<a href="{url="app=forums&module=forums&controller=index" seoTemplate="forums"}" title="{lang="go_back_to_forum"}" rel="parent">
<span class="ipsPager_type">{lang="go_back_to_forum"}</span>
</a>
{{else}}
<a href="{$topic->container()->url()}" title="{lang="go_to_forum" sprintf="$topic->container()->metaTitle()"}" rel="parent">
<span class="ipsPager_type">{lang="go_back_to_forum"}</span>
</a>
{{endif}}
</div>
{{if $nextUnread !== NULL}}
<div class='ipsPager_next'>
<a href="{$topic->url()->setQueryString( array( 'do' => 'nextUnread' ) )}" title='{lang="view_next_unread_title"}'>
<span class="ipsPager_type">{lang="view_next_unread"}</span>
</a>
</div>
{{endif}}
</div>
</div> <!-- End #ipsTopicView -->
{{if $topic->container()->club()}}
</div>
{{endif}}
]]></template>
<template template_group="topics" template_name="topicHelpfulMessage" template_data="$mostHelpful" template_location="front" template_app="forums"><![CDATA[{{if ( $mostHelpful[0]['comment']->hidden() == 0 OR ( \in_array( $mostHelpful[0]['comment']->hidden(), array( 1, -1 ) ) AND $mostHelpful[0]['comment']->canUnhide() ) )}}
<div data-role="mostHelpful">
<div class='ipsBox ipsBox--padding'>
<div class='ipsColumns i-align-items_center i-gap_3'>
<div class='ipsColumns__primary'>
<h4 class='ipsTitle ipsTitle--h5 ipsTitle--margin'>{lang="most_helpful_byline" htmlsprintf="$mostHelpful[0]['comment']->author()->name"}<span class='i-color_soft'>, {datetime="$mostHelpful[0]['comment']->mapped('date')"}</span></h4>
<div>
{$mostHelpful[0]['comment']->truncated()|raw}
</div>
</div>
<div class="ipsColumns__secondary">
<a href="{$mostHelpful[0]['comment']->url()}" rel="nofollow" class='ipsButton ipsButton--secondary ipsButton--small'><span>{lang="helpful_go_to_most_helpful"}</span><i class="fa-solid fa-arrow-right"></i></a>
</div>
</div>
</div>
</div>
{{endif}}]]></template>
<template template_group="topics" template_name="topicSolutionMessage" template_data="$topic" template_location="front" template_app="forums"><![CDATA[{{if $solvedComment = $topic->getSolution() AND ( $solvedComment->hidden() == 0 OR ( \in_array( $solvedComment->hidden(), array( 1, -1 ) ) AND $solvedComment->canUnhide() ) )}}
<div class='ipsMessage ipsMessage--success ipsPull'>
<div class='i-flex i-justify-content_space-between i-align-items_center i-flex-wrap_wrap i-gap_1'>
<div class='i-flex_11'>
<h4 class='ipsMessage__title'>{lang="solved_byline" htmlsprintf="$solvedComment->author()->name"}</h4>
<div class='i-color_soft'>{datetime="$solvedComment->mapped('date')"}</div>
</div>
<a href="{$topic->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $topic->topic_answered_pid ))}" rel="nofollow" class='ipsButton ipsButton--inherit'><span>{lang="solved_and_go"}</span><i class="fa-solid fa-arrow-right"></i></a>
</div>
</div>
{{endif}}]]></template>
<template template_group="widgets" template_name="forumStatistics" template_data="$stats, $layout='table', $isCarousel=false" template_location="front" template_app="forums"><![CDATA[<h3 class='ipsWidget__header'>{lang="block_forumStatistics"}</h3>
<div class="ipsWidget__content">
<ul class='ipsList ipsList--stats ipsList--stacked ipsList--border ipsList--fill'>
<li>
<strong class='ipsList__label'>{lang="total_topics"}</strong>
<span class='ipsList__value'>{number="$stats['total_topics']" format="short"}</span>
</li>
<li>
<strong class='ipsList__label'>{lang="total_posts"}</strong>
<span class='ipsList__value'>{number="$stats['total_posts']" format="short"}</span>
</li>
</ul>
</div>]]></template>
<template template_group="widgets" template_name="poll" template_data="$topic, $poll, $layout='table', $isCarousel=false" template_location="front" template_app="forums">{$poll|raw}
</template>
<template template_group="widgets" template_name="pollFormWidget" template_data="$url, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="forums"><![CDATA[<form accept-charset='utf-8' class="ipsForm {$class} ipsForm--poll-widget" action="{$url->setQueryString( 'do', 'widgetPoll' )}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
<input type="hidden" name="{$id}_submitted" value="1">
{{foreach $hiddenValues as $k => $v}}
<input type="hidden" name="{$k}" value="{$v}">
{{endforeach}}
{{foreach $elements as $collection}}
<ol class='ipsPollList ipsPollList--questions'>
{{$i = 0;}}
{{foreach $collection as $idx => $input}}
{{$i++;}}
<li class='ipsFieldRow ipsFieldRow--noLabel'>
<h4 class='i-font-weight_600'>{$i}. {$input->label}</h4>
{{if !$input->options['multiple']}}
{template="radio" app="core" location="global" group="forms" params="$input->name, $input->value, $input->required, $input->options['options'], $input->options['disabled'], '', $input->options['disabled']"}
{{else}}
{template="checkboxset" app="core" location="global" group="forms" params="$input->name, $input->value, $input->required, $input->options['options'], FALSE, NULL, $input->options['disabled'], $input->options['toggles'], NULL, NULL, 'all', array(), TRUE, isset( $input->options['descriptions'] ) ? $input->options['descriptions'] : NULL, FALSE, FALSE, $input->options['condense']"}
{{endif}}
{{if $input->error}}
<div class="ipsFieldRow__warning">{lang="$input->error"}</div>
{{endif}}
</li>
{{endforeach}}
</ol>
{{endforeach}}
<div class='ipsSubmitRow'>
<ul class="ipsButtons ipsButtons--fill">
{{foreach $actionButtons as $button}}
<li>{$button|raw}</li>
{{endforeach}}
<li>
<a class='ipsButton ipsButton--inherit' title='{lang="show_results_title"}' href="{$url->setQueryString('do', 'widgetPoll')->setQueryString( array( '_poll' => 'results', 'nullVote' => 1 ) )->csrf()}" {{if !settings.allow_result_view}}data-viewResults-confirm="{lang="warn_allow_result_view"}"{{endif}} data-action='viewResults'>
{lang="show_results"}
</a>
</li>
<li>
<a class='ipsButton ipsButton--inherit' title='{lang="show_results_title"}' href="{$url}">
{lang="poll_view_topic"}
</a>
</li>
</ul>
</div>
</form>]]></template>
<template template_group="widgets" template_name="pollWidget" template_data="$poll, $url, $layout='table', $isCarousel=false" template_location="front" template_app="forums"><![CDATA[{{if !isset( \IPS\Request::i()->fetchPoll )}}
<section data-controller='core.front.core.poll'>
{{endif}}
{{if $poll->canVote() and request._poll != 'results' and ( !$poll->getVote() or request._poll == 'form') and $pollForm = $poll->buildForm()}}
<h3 class='ipsWidget__header'>
<span>{$poll->poll_question}</span>
<span class='ipsWidget__header-secondary i-color_soft' data-ipsTooltip title='{lang="poll_num_votes" pluralize="$poll->votes"}'><i class='fa-regular fa-check-square'></i> {$poll->votes}</span>
</h3>
<div class='ipsWidget__content' data-role='pollContents'>
{$pollForm->customTemplate( array( \IPS\Theme::i()->getTemplate( 'widgets', 'forums', 'front' ), 'pollFormWidget' ), $url )|raw}
</div>
{{elseif ( $poll->canViewResults() and !$poll->canVote() ) or $poll->getVote() or ( request._poll == 'results' and settings.allow_result_view )}}
<h3 class='ipsWidget__header'>
<span>{$poll->poll_question}</span>
<span class='ipsWidget__header-secondary i-color_soft' data-ipsTooltip title='{lang="poll_num_votes" pluralize="$poll->votes"}'><i class='fa-regular fa-check-square'></i> {$poll->votes}</span>
</h3>
<div class='ipsWidget__content' data-role='pollContents'>
<i-data>
<ol class='ipsPollList ipsData'>
{{$i = 0;}}
{{foreach $poll->choices as $questionId => $question}}
{{$i++;}}
<li class='ipsData__item'>
<div>
<h3 class='ipsTitle ipsTitle--h6'>{$i}. {$question['question']}</h3>
<ul class='ipsPollList_choices i-grid i-gap_2 i-margin-top_3'>
{{foreach $question['choice'] as $k => $choice}}
<li>
<div class='i-font-weight_500 i-margin-bottom_1'>{$choice|raw}</div>
<progress class='ipsProgress' max="100" value='{{if array_sum( $question['votes'] ) > 0 }}{expression="\intval( ( $question['votes'][ $k ] / array_sum( $question['votes'] ) ) * 100 )"}{{else}}0{{endif}}' title='{{if array_sum( $question['votes'] ) > 0 }}{expression="\intval( ( $question['votes'][ $k ] / array_sum( $question['votes'] ) ) * 100 )"}{{else}}0{{endif}}%' data-ipstooltip></progress>
</li>
{{endforeach}}
</ul>
</div>
</li>
{{endforeach}}
</ol>
</i-data>
<div class='ipsSubmitRow'>
<ul class='ipsButtons ipsButtons--fill'>
{{if $poll->canVote()}}
<li>
<a href="{$url->setQueryString('do', 'widgetPoll')->setQueryString( '_poll', 'form' )}" title='{lang="show_vote_options"}' class='ipsButton ipsButton--inherit' data-action='viewResults'><i class='fa-solid fa-caret-left'></i><span>{lang="show_vote_options"}</span></a>
</li>
{{endif}}
<li>
<a class='ipsButton ipsButton--inherit' href="{$url}">{lang="poll_view_topic"}</a>
</li>
</ul>
{{if !member.member_id}}
<div class='i-margin-top_2 i-text-align_center'>
{lang="poll_guest" sprintf="\IPS\Http\Url::internal( 'app=core&module=system&controller=login', 'front', 'login' ), \IPS\Http\Url::internal( 'app=core&module=system&controller=register', 'front', 'register' )"}
</div>
{{endif}}
</div>
</div>
{{else}}
<h3 class='ipsWidget__header'>
<span>
{$poll->poll_question}
</span>
<span class='ipsWidget__header-secondary' data-ipsTooltip title='{lang="poll_num_votes" pluralize="$poll->votes"}'><i class='fa-regular fa-check-square'></i> {$poll->votes}</span>
</h3>
<div class='ipsWidget__padding ipsWidget__content' data-role='pollContents'>
{lang="no_permission_poll"}{{if !\IPS\Member::loggedIn()->member_id}} {lang="poll_guest" sprintf="\IPS\Http\Url::internal( 'app=core&module=system&controller=login', 'front', 'login' ), \IPS\Http\Url::internal( 'app=core&module=system&controller=register', 'front', 'register' )"}{{endif}}
</div>
{{endif}}
{{if !isset( \IPS\Request::i()->fetchPoll )}}
</section>
{{endif}}]]></template>
<template template_group="widgets" template_name="postFeed" template_data="$comments, $title, $layout='table', $isCarousel=false" template_location="front" template_app="forums"><![CDATA[{{if !empty( $comments ) }}
<header class='ipsWidget__header'>
<h3>{$title}</h3>
{{if $isCarousel}}
{{$carouselID = 'widget-topic-feed_' . mt_rand();}}
{template="carouselNavigation" group="global" app="core" params="$carouselID"}
{{endif}}
</header>
<div class='ipsWidget__content'>
<i-data>
<ul class='ipsData ipsData--{$layout} {{if $isCarousel}}ipsData--carousel{{endif}} ipsData--widget-forums-postFeed' {{if $isCarousel}}id='{$carouselID}' tabindex="0"{{endif}}>
{{foreach $comments as $comment}}
<li class='ipsData__item'>
<a href='{$comment->url()}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$comment->item()->title}</span></a>
{{if in_array($layout, array("wallpaper", "featured", "grid"))}}
<figure class='ipsData__image' data-show-on="wallpaper featured grid">
{{if $image = $comment->item()->primaryImage()}}
<img src="{$image->url}" alt="{$comment->item()->title}" loading="lazy">
{{else}}
<i></i>
{{endif}}
</figure>
{{else}}
<figure class='ipsData__icon' data-hide-on="wallpaper featured grid">
{template="userPhoto" app="core" group="global" params="$comment->author(), 'fluid'"}
</figure>
{{endif}}
<div class="ipsData__content">
<div class='ipsData__main'>
<div class='ipsData__title'>
<h4><a href="{$comment->url()}" title='{lang="view_this_topic" sprintf="$comment->item()->title"}'>{$comment->item()->title}</a></h4>
{{if $comment->item()->isSolved()}}
<div class='ipsBadges'>
<span class="ipsBadge ipsBadge--icon ipsBadge--positive" data-ipsTooltip title='{lang="this_is_solved"}'><i class='fa-solid fa-check'></i></span>
</div>
{{endif}}
</div>
<div class='ipsData__desc ipsRichText' data-controller='core.front.core.lightboxedImages'>{$comment->truncated()|raw}</div>
<p class='ipsData__meta'>{lang="byline_itemprop" htmlsprintf="$comment->author()->link( NULL, NULL, $comment->isAnonymous() )"} <a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->pid ) )}'>{$comment->dateLine()|raw}</a></p>
</div>
</div>
</li>
{{endforeach}}
</ul>
</i-data>
</div>
{{endif}}
]]></template>
<template template_group="widgets" template_name="topicFeed" template_data="$topics, $title, $layout='table', $isCarousel=false" template_location="front" template_app="forums"><![CDATA[{{if !empty( $topics ) }}
<header class='ipsWidget__header'>
<h3>{$title}</h3>
{{if $isCarousel}}
{{$carouselID = 'widget-topic-feed_' . mt_rand();}}
{template="carouselNavigation" group="global" app="core" params="$carouselID"}
{{endif}}
</header>
<div class='ipsWidget__content'>
<i-data>
<ul class="ipsData ipsData--{$layout} {{if $isCarousel}}ipsData--carousel{{endif}} ipsData--topic-feed-widget" {{if $isCarousel}}id='{$carouselID}' tabindex="0"{{endif}}>
{{foreach $topics as $topic}}
{template="topicFeedRow" group="widgets" app="forums" location="front" params="$topic, $layout"}
{{endforeach}}
</ul>
</i-data>
</div>
{{endif}}]]></template>
<template template_group="widgets" template_name="topicFeedRow" template_data="$topic, $layout='table', $isCarousel=false" template_location="front" template_app="forums"><![CDATA[<li data-ips-hook="row" class="ipsData__item {{if method_exists( $topic, 'tableClass' ) && $topic->tableClass()}}ipsData__item--{$topic->tableClass()}{{endif}} {{if $topic->hidden()}}ipsModerated{{endif}}">
<a href='{$topic->url( "getPrefComment" )}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$topic->mapped('title')}</span></a>
{{if in_array($layout, array("wallpaper", "featured", "grid"))}}
<figure class='ipsData__image' data-show-on="wallpaper featured grid">
{{if $image = $topic->primaryImage()}}
<img src="{$image->url}" alt="{$topic->mapped( 'title' )}" loading="lazy">
{{else}}
<i></i>
{{endif}}
</figure>
{{else}}
<figure class='ipsData__icon' data-hide-on="wallpaper featured grid">
{template="userPhoto" app="core" group="global" params="$topic->author(), 'fluid'"}
</figure>
{{endif}}
<div class='ipsData__content'>
<div class='ipsData__main'>
{{if \IPS\Request::i()->controller != 'forums'}}
<div class="ipsData__category" data-hide-on="minimal"><a href="{$topic->container()->url()}">{$topic->container()->_formattedTitle|raw}</a></div>
{{endif}}
<div class='ipsData__title'>
{{if $topic->prefix()}}
{template="prefix" group="global" app="core" params="$topic->prefix( TRUE ), $topic->prefix()"}
{{endif}}
<h4 data-ips-hook="title">
<a href='{$topic->url( "getPrefComment" )}' {{if $topic->tableHoverUrl AND $topic->canView()}}data-ipsHover data-ipsHover-target='{$topic->url()->setQueryString('preview', 1)}' data-ipsHover-timeout='1.5' {{endif}}>
{$topic->mapped('title')}
</a>
</h4>
<div data-ips-hook="badges" class="ipsBadges">
{{foreach $topic->badges() as $badge}}{$badge|raw}{{endforeach}}
</div>
{{if \in_array( $layout, array("list"))}}
{{if $topic->commentPageCount() > 1}}
{$topic->commentPagination( array(), 'miniPagination' )|raw}
{{endif}}
{{endif}}
</div>
<div class='ipsData__meta' data-hide-on="mini-grid">
{lang="byline_name_date" htmlsprintf="$topic->author()->link( NULL, NULL, $topic->isAnonymous() ), \IPS\DateTime::ts( $topic->mapped('date') )->html(FALSE)"}
</div>
{{if $layout === "featured"}}
<div class='ipsData__desc'>{$topic->truncated(TRUE)|raw}</div>
{{endif}}
</div>
<div class="ipsData__extra" data-hide-on="minimal">
<ul data-ips-hook="stats" class='ipsData__stats'>
{{foreach $topic->stats(FALSE) as $k => $v}}
<li {{if \in_array( $k, $topic->hotStats )}}class="ipsData__stats-hot" data-text='{lang="hot_item"}' data-ipsTooltip title='{lang="hot_item_desc"}'{{endif}} data-statType='{$k}' {{if $v === 0}}data-v="{$v}"{{endif}}>
<span class='ipsData__stats-icon' data-stat-value="{number='$v'}" aria-hidden="true" data-ipstooltip title='{number="$v" format="short"} {lang="{$k}" pluralize="$v" format="short"}'></span>
<span class='ipsData__stats-label'>{number="$v"} {lang="{$k}" pluralize="$v"}</span>
</li>
{{endforeach}}
</ul>
<div class="ipsData__last" data-ips-hook="latestUserPhoto">
{{if $topic->mapped('num_comments')}}
{template="userPhoto" app="core" group="global" params="$topic->lastCommenter(), 'fluid'"}
{{else}}
{template="userPhoto" app="core" group="global" params="$topic->author(), 'fluid'"}
{{endif}}
<div class="ipsData__last-text">
<div class="ipsData__last-primary">
{{if $topic->mapped('num_comments')}}
{$topic->lastCommenter()->link()|raw}
{{else}}
{$topic->author()->link( NULL, NULL, $topic->isAnonymous() )|raw}
{{endif}}
</div>
<div class="ipsData__last-secondary">
<a href='{$topic->url( 'getLastComment' )}' title='{lang="get_last_post"}'>
{{if $topic->mapped('last_comment')}}{datetime="$topic->mapped('last_comment')"}{{else}}{datetime="$topic->mapped('date')"}{{endif}}
</a>
</div>
</div>
</div>
</div>
</div>
</li>]]></template>
<css css_location="front" css_app="forums" css_attributes="" css_path="." css_name="forums.css"><![CDATA[/* Grid UI */
.ipsData--forum-grid{
}
.ipsData--forum-grid .ipsData__stats + .ipsData__last{
padding-top: 1em;
}
/*
----------------
- Category with feed
Used on the 'content view' forum layout
----------------
*/
.ipsCategoryWithFeed{
container: ipsCategoryWithFeed / inline-size;
}
.ipsCategoryWithFeed__item{
border-top: 6px solid var(--i-featured, var(--i-background_6));
}
.ipsData--forumFeedViewParent{
grid-template-columns: 1fr;
}
.ipsData--forumFeedViewParent .ipsData__stats{
font-weight: 550;
color: var(--i-color_root);
}
/* Large UI */
@container ipsCategoryWithFeed (min-width: 650.1px){
/* 2 column UI */
.ipsCategoryWithFeed__item{
display: grid;
grid-template-columns: clamp(280px, 33%, 350px) 1fr;
}
/* Photo, title, description */
.ipsCategoryWithFeed__meta{
border-inline-end: 1px solid var(--i-background_4);
}
.ipsData--forumFeedViewParent{
height: 100%;
}
/* Prepare the list for the following 2 changes */
.ipsData--forumFeedView{
--i-data--padding: 1.1em;
--i-data--cell-spacing: 1em;
--i-data--icon-width: 30px;
height: 100%;
display: flex;
flex-direction: column;
}
}
/* Small UI */
@container ipsCategoryWithFeed (max-width: 650px) {
/* Forum name and meta */
.ipsData.ipsData--forumFeedViewParent{
--i-data--padding: 1.2em;
--i-data--icon-ratio: 1;
}
.ipsData--forumFeedViewParent .ipsData__item{
flex-direction: row;
align-items: start;
}
.ipsData--forumFeedViewParent .ipsData__image{
flex: 0 0 clamp(60px, 17vw, 120px);
margin: 0;
}
/* Scrollable topic list */
.ipsData--forumFeedView {
--i-data--gap: 1.2em;
padding: 1em var(--i-data--gap);
display: flex;
gap: 1px;
overflow: auto;
scroll-snap-type: x mandatory;
scroll-padding: var(--i-data--gap);
scrollbar-width: thin;
scrollbar-color: color-mix(in srgb, var(--i-co) 20%, transparent) transparent;
}
.ipsData--forumFeedView .ipsData__item{
flex: 0 0 min(80vw, 400px);
border-width: 0;
scroll-snap-align: start;
outline: 1px solid var(--i-background_4);
}
.ipsData--forumFeedView .ipsData__item:first-child{
border-start-start-radius: min(var(--i-design-radius), 6px);
border-end-start-radius: min(var(--i-design-radius), 6px);
}
.ipsData--forumFeedView .ipsData__item:last-child{
border-start-end-radius: min(var(--i-design-radius), 6px);
border-end-end-radius: min(var(--i-design-radius), 6px);
}
.ipsData--forumFeedView .ipsData__icon{
align-self: center;
}
.ipsData--forumFeedView .ipsData__title{
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
/* Topic hover cards */
.cTopicHovercard .cTopicHovercard_container {
height: 200px;
overflow: auto;
}
/* Reactions in expanded view */
.ipsData--snippet-topic-list .ipsReactOverview--reactions a{
display: block; /* Necessary for alignment */
}
.ipsData--snippet-topic-list .ipsReactOverview--reactions img{
height: 1.3em;
display: block;
}
.ipsData--snippet-topic-list .ipsReactOverview--points{
display: flex;
align-items: center;
}
.ipsData--snippet-topic-list .ipsReactOverview--points p{
margin-inline-start: .6em;
}
/* Hide reaction overview if empty */
.ipsData__item--snippet .ipsReactOverview--none{
display: none;
}
/* Mini sidebar list */
.cForumMiniList_wrapper {
padding: .5em;
font-weight: 500;
}
.cForumMiniList :where(a){
display: flex;
align-items: center;
gap: .6em;
padding: .5em 1em;
color: var(--i-color_root);
border-radius: var(--i-design-radius);
}
:where(.cForumMiniList a:hover){
background-color: var(--i-background_2);
}
/* Active */
.cForumMiniList__selected {
background-color: var(--i-background_3);
}
/* Unread */
.cForumMiniList [data-ips-unread]{
color: var(--i-color_hard);
font-weight: 700;
}
/* Category titles */
.cForumMiniList [data-category] > a {
font-size: 1.3em;
font-weight: 600;
}
.cForumMiniList [data-category]:not(:first-child){
margin-top: 1em;
}
/* Indent sub-categories */
.cForumMiniList .cForumMiniList .cForumMiniList{
margin-inline-start: 1.5em;
}
.cForumMiniList__count {
font-size: .85em;
flex: 0 0 auto;
color: var(--i-color_soft);
margin-inline-start: auto;
}
.cForumMiniList .cForumMiniList__blob {
background: var(--i-featured, var(--i-background_6));
color: #fff;
flex: 0 0 auto;
font-size: 16px;
width: 1em;
height: 1em;
border-radius: 5px;
display: inline-grid;
place-items: center;
transform: scale(.5);
transition: .2s;
}
.cForumMiniList .cForumMiniList__blob [class*="fa-"] {
display: none;
font-size: .6em;
}
.cForumMiniList .cForumMiniList__selected > .cForumMiniList__blob {
opacity: 1;
transform: scale(1);
}
.cForumMiniList .cForumMiniList__selected > .cForumMiniList__blob [class*="fa-"] {
display: block;
}
/* Read: Make icon background subtle */
.cForumMiniList [data-ips-read] > .cForumMiniList__blob{
background-color: var(--i-background_6);
}
/* v5 todo: Audit this code */
/* BOTH */
@media screen and (max-width: 979px) {
.cForumMiniList_wrapper {
display: none;
}
.ipsDialog #elFluidFormFilters {
border: 0;
}
.ipsDialog .cForumMiniList_wrapper,
.cForumMiniList {
display: block !important;
}
}]]></css>
<css css_location="front" css_app="forums" css_attributes="" css_path="." css_name="topics.css">@media (max-width: 1150px){
.cTopicOverview{
flex-direction: column;
}
}
.cTopicOverview--row{
background-color: var(--i-box--ba-co);
background-clip: padding-box;
border-radius: var(--i-box--bo-ra);
border: 1px solid color-mix(in srgb, var(--i-co) 10%, transparent);
overflow: hidden;
margin: .5em;
}
.cTopicOverview__toggle {
display: block;
padding: .5em;
transition: 0.1s all ease-in-out;
}
.cTopicOverview__toggle i[class*=&quot; fa-&quot;] {
display: grid;
place-content: center;
height: 100%;
max-height: 80px;
transition: 0.2s all ease-in-out;
}
.cTopicOverview--expanded .cTopicOverview__toggle i[class*=&quot; fa-&quot;] {
transform: rotate(180deg);
}
.cTopicOverview__toggle:hover {
background: var(--i-background_2);
}
.cTopicOverview__toggle--row {
display: none;
}
.cTopicOverview__dataItemInner {
text-overflow: ellipsis;
overflow: hidden;
line-height: 1.2;
}
.cTopicOverview__preview {
position: relative;
overflow: hidden;
min-height: 90px;
}
.cTopicOverview__preview::after {
content: '';
pointer-events: none;
display: block;
position: absolute;
inset-inline-end: 0;
top: 0;
bottom: 0;
background-image: linear-gradient(to right, color-mix(in srgb, var(--i-box--ba-co) 0%, transparent) 0%, var(--i-box--ba-co) 100%);
width: 250px;
}
.cTopicOverview__preview .ipsUserPhoto--tiny {
max-width: 28px;
}
.cTopicOverview__previewInner {
position: absolute;
inset: 0;
}
@media screen and (max-width: 1150px) {
.cTopicOverview {
flex-direction: column;
}
.cTopicOverview__preview,
.cTopicOverview__toggle--afterStats {
display: none;
}
.cTopicOverview__toggle--row {
display: block;
}
}
/* Topic meta */
.ipsTopicMeta {
margin-bottom: 1em;
padding: .5em 1em;
display: grid;
gap: .5em;
color: var(--i-color_soft);
font-weight: 500;
font-size: .9em;
}
/* Automatic contrast against page background */
@supports (color: oklch(from var(--i) clamp(0, (.60 - l) * 1000, 1) c h)) and (color: oklch(from red l c h)){
.ipsTopicMeta:not(.ipsBox *){
color: oklch(from var(--i-body--ba-co) clamp(0, (.60 - l) * 1000, 1) c h);
}
}
.ipsBox .ipsTopicMeta{
margin: 0;
border-top: 1px solid var(--i-background_3);
background: var(--i-background_2)
}
.ipsTopicMeta a{
color: inherit;
}
@media (min-width: 768px){
.ipsEntry--post ~ .ipsTopicMeta {
padding-inline-start: var(--post-column--fl-ba, 240px);
}
}
.ipsTopicMeta__time {
margin-inline-end: var(--i-sp_2);
}
/* Hide certain elements depending on traditional, minimal and first page attributes */
#ipsTopicView[data-ips-topic-ui=&quot;traditional&quot;][data-ips-topic-first-page=&quot;true&quot;] [data-ips-hide=&quot;traditional-first&quot;],
#ipsTopicView[data-ips-topic-ui=&quot;minimal&quot;] [data-ips-hide=&quot;minimal&quot;],
#ipsTopicView[data-ips-topic-comments=&quot;helpful&quot;] .ipsTopicMeta{
display: none;
}
/* Improve alignment of assigned icon */
.ipsMessage--assigned .ipsMessage__icon{
top: calc(50% - .5em);
}</css>
</theme>