|
|
|
@@ -29,7 +29,7 @@
|
|
|
|
|
</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">
|
|
|
|
|
<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 i-margin-block_block">
|
|
|
|
|
{{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>
|
|
|
|
@@ -912,9 +912,9 @@
|
|
|
|
|
{{endif}}
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ipsData__last-secondary">
|
|
|
|
|
<a href='{$row->url( 'getLastComment' )}' title='{lang="get_last_post"}'>
|
|
|
|
|
{{if ! \IPS\Output::i()->reduceLinks()}}<a href='{$row->url( 'getLastComment' )}' title='{lang="get_last_post"}'>{{endif}}
|
|
|
|
|
{{if $row->mapped('last_comment')}}{datetime="$row->mapped('last_comment')"}{{else}}{datetime="$row->mapped('date')"}{{endif}}
|
|
|
|
|
</a>
|
|
|
|
|
{{if ! \IPS\Output::i()->reduceLinks()}}</a>{{endif}}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
@@ -1334,11 +1334,6 @@
|
|
|
|
|
{{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}}
|
|
|
|
@@ -1557,11 +1552,6 @@
|
|
|
|
|
{{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}}
|
|
|
|
@@ -1601,11 +1591,6 @@
|
|
|
|
|
</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">
|
|
|
|
@@ -1624,6 +1609,11 @@
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<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>
|
|
|
|
|
</div>
|
|
|
|
|
</li>
|
|
|
|
@@ -2612,144 +2602,118 @@
|
|
|
|
|
{{$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}}>
|
|
|
|
|
<div class="ipsWidget cTopicOverviewContainer">
|
|
|
|
|
<div class="cTopicOverview cTopicOverview--sidebar 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}}>
|
|
|
|
|
<div class="ipsBox ipsPull cTopicOverviewContainer {{if $topic->showSummaryOnDesktop() != 'post'}}ipsResponsive_hideDesktop{{endif}} {{if ! $topic->showSummaryOnMobile()}}ipsResponsive_hidePhone{{endif}}">
|
|
|
|
|
<div class="cTopicOverview cTopicOverview--main" {{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>
|
|
|
|
|
<div class="cTopicOverview__content">
|
|
|
|
|
<ul class='cTopicOverview__item cTopicOverview__item--stats'>
|
|
|
|
|
{{if $topic->posts > 1}}
|
|
|
|
|
<li>
|
|
|
|
|
<span class="i-color_soft i-font-weight_500">{lang="replies"}</span>
|
|
|
|
|
<span class="i-color_hard i-font-weight_700 i-font-size_3">{number="$topic->posts-1" format="short"}</span>
|
|
|
|
|
</li>
|
|
|
|
|
{{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>
|
|
|
|
|
<li>
|
|
|
|
|
<span class="i-color_soft i-font-weight_500">{lang="views"}</span>
|
|
|
|
|
<span class="i-color_hard i-font-weight_700 i-font-size_3">{number="$topic->views" format="short"}</span>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<span class="i-color_soft i-font-weight_500">{lang="topicactivity_created"}</span>
|
|
|
|
|
<span class="i-color_hard i-font-weight_700 i-font-size_3">{datetime="$topic->start_date" short="true"}</span>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<span class="i-color_soft i-font-weight_500">{lang="last_reply"}</span>
|
|
|
|
|
<span class="i-color_hard i-font-weight_700 i-font-size_3">{datetime="$topic->last_post" short="true"}</span>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
{{if $members}}
|
|
|
|
|
<div class='cTopicOverview__item cTopicOverview__item--topPosters'>
|
|
|
|
|
<h4 class='cTopicOverview__title'>{lang="topicactivity_topposters"}</h4>
|
|
|
|
|
<ul class='cTopicOverview__dataList'>
|
|
|
|
|
{{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 i-color_hard'><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>
|
|
|
|
|
{{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'>
|
|
|
|
|
{{endif}}
|
|
|
|
|
{{if $busy}}
|
|
|
|
|
<div class='cTopicOverview__item cTopicOverview__item--popularDays'>
|
|
|
|
|
<h4 class='cTopicOverview__title'>{lang="topicactivity_populardays"}</h4>
|
|
|
|
|
<ul class='cTopicOverview__dataList'>
|
|
|
|
|
{{foreach $busy as $row}}
|
|
|
|
|
<li>
|
|
|
|
|
<a href="{$topic->shareableUrl( $row['commentId'] )}" rel="nofollow" class='cTopicOverview__dataItem i-grid i-color_soft'>
|
|
|
|
|
<span class='i-font-weight_bold i-color_hard'>{$row['date']->dayAndShortMonth()} {$row['date']->format('Y')}</span>
|
|
|
|
|
<span>{lang="topicactivity_number_posts" pluralize="$row['count']"}</span>
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
{{endforeach}}
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
{{endif}}
|
|
|
|
|
{{if $reacted}}
|
|
|
|
|
<div class='cTopicOverview__item cTopicOverview__item--popularPosts'>
|
|
|
|
|
<h4 class='cTopicOverview__title'>{lang="topicactivity_popularposts"}</h4>
|
|
|
|
|
<ul class='cTopicOverview__dataList'>
|
|
|
|
|
{{foreach $reacted as $data}}
|
|
|
|
|
<li>
|
|
|
|
|
<div class='ipsPhotoPanel ipsPhotoPanel--tiny'>
|
|
|
|
|
<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 i-color_hard'>{$data['comment']->author()->name}</h5>
|
|
|
|
|
<p class='ipsPhotoPanel__secondary'>
|
|
|
|
|
<a href="{$data['comment']->url()}" rel="nofollow">{datetime="$data['comment']->mapped('date')"}</a>
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<p class='i-margin-top_2 ipsRichText ipsTruncate_3'>
|
|
|
|
|
{$data['comment']->truncated(true, 200)}
|
|
|
|
|
</p>
|
|
|
|
|
</li>
|
|
|
|
|
{{endforeach}}
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
{{endif}}
|
|
|
|
|
{{if $helpful}}
|
|
|
|
|
<div class='cTopicOverview__item cTopicOverview__item--helpfulPosts'>
|
|
|
|
|
<h4 class='cTopicOverview__title'>{lang="topicactivity_helpfulposts"}</h4>
|
|
|
|
|
<ul class='cTopicOverview__dataList'>
|
|
|
|
|
{{foreach $helpful as $data}}
|
|
|
|
|
<li>
|
|
|
|
|
<div class='ipsPhotoPanel ipsPhotoPanel--tiny'>
|
|
|
|
|
<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 i-color_hard">{$data['comment']->author()->name}</h5>
|
|
|
|
|
<p class="ipsPhotoPanel__secondary">
|
|
|
|
|
<a href="{$data['comment']->shareableUrl()}" rel="nofollow">{datetime="$data['comment']->mapped('date')"}</a>
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<p class='i-margin-top_2 ipsRichText ipsTruncate_3'>
|
|
|
|
|
{$data['comment']->truncated(true, 200)}
|
|
|
|
|
</p>
|
|
|
|
|
</li>
|
|
|
|
|
{{endforeach}}
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
{{endif}}
|
|
|
|
|
{{if $images}}
|
|
|
|
|
<div class='cTopicOverview__item cTopicOverview__item--images'>
|
|
|
|
|
<h4 class='cTopicOverview__title'>{lang="topicactivity_images"}</h4>
|
|
|
|
|
<ul class='cTopicOverview__imageGrid' data-controller='core.front.core.lightboxedImages'>
|
|
|
|
|
{{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'>
|
|
|
|
@@ -2760,19 +2724,13 @@
|
|
|
|
|
{{endforeach}}
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
{{endif}}
|
|
|
|
|
</div>
|
|
|
|
|
{{if $hasAnyContent}}
|
|
|
|
|
<button type="button" data-action='toggleOverview' class='cTopicOverview__toggle'><span class="ipsInvisible">{lang="topicactivity_expand"}</span><i class='fa-solid fa-chevron-down'></i></button>
|
|
|
|
|
{{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>
|
|
|
|
|
</div>]]></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>
|
|
|
|
@@ -2801,7 +2759,7 @@ data-first-page="{{if isset( request.page ) and request.page > 1}}false{{else}}t
|
|
|
|
|
>
|
|
|
|
|
<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>
|
|
|
|
|
{{if ! \IPS\Output::i()->reduceLinks()}}<a href='{$comment->shareableUrl()}' class='ipsEntry__date' rel="nofollow">{{endif}}{$comment->dateLine()|raw}{{if ! \IPS\Output::i()->reduceLinks()}}</a>{{endif}}
|
|
|
|
|
<!-- 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}}
|
|
|
|
@@ -2930,7 +2888,9 @@ data-first-page="{{if isset( request.page ) and request.page > 1}}false{{else}}t
|
|
|
|
|
{{endif}}
|
|
|
|
|
</div>
|
|
|
|
|
{{endif}}
|
|
|
|
|
{{if ! \IPS\Output::i()->reduceLinks()}}
|
|
|
|
|
{template="sharemenu" group="global" app="core" params="$comment"}
|
|
|
|
|
{{endif}}
|
|
|
|
|
</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 ) );}}
|
|
|
|
@@ -2945,6 +2905,7 @@ data-first-page="{{if isset( request.page ) and request.page > 1}}false{{else}}t
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
{{endif}}
|
|
|
|
|
<a id='findComment-{$comment->$idField}'></a>
|
|
|
|
|
<div id='comment-{$comment->$idField}'></div>
|
|
|
|
|
<article
|
|
|
|
|
data-ips-hook="postWrapper"
|
|
|
|
@@ -3107,7 +3068,7 @@ data-first-page="{{if isset( request.page ) and request.page > 1}}false{{else}}t
|
|
|
|
|
{{endif}}
|
|
|
|
|
</h3>
|
|
|
|
|
<p class='ipsPhotoPanel__secondary'>
|
|
|
|
|
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->$idField ) )}' rel="nofollow">{$comment->dateLine()|raw}</a>
|
|
|
|
|
{{if ! \IPS\Output::i()->reduceLinks()}}<a href='{$comment->shareableUrl()}' rel="nofollow">{{endif}}{$comment->dateLine()|raw}{{if ! \IPS\Output::i()->reduceLinks()}}</a>{{endif}}
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
@@ -3761,7 +3722,7 @@ data-first-page="{{if isset( request.page ) and request.page > 1}}false{{else}}t
|
|
|
|
|
<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>
|
|
|
|
|
<div class="ipsData__category"><a href="{$topic->container()->url()}">{$topic->container()->_formattedTitle|raw}</a></div>
|
|
|
|
|
{{endif}}
|
|
|
|
|
<div class='ipsData__title'>
|
|
|
|
|
{{if $topic->prefix()}}
|
|
|
|
@@ -3788,7 +3749,7 @@ data-first-page="{{if isset( request.page ) and request.page > 1}}false{{else}}t
|
|
|
|
|
<div class='ipsData__desc'>{$topic->truncated(TRUE)|raw}</div>
|
|
|
|
|
{{endif}}
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ipsData__extra" data-hide-on="minimal">
|
|
|
|
|
<div class="ipsData__extra">
|
|
|
|
|
<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}}>
|
|
|
|
@@ -3797,6 +3758,19 @@ data-first-page="{{if isset( request.page ) and request.page > 1}}false{{else}}t
|
|
|
|
|
</li>
|
|
|
|
|
{{endforeach}}
|
|
|
|
|
</ul>
|
|
|
|
|
<div class="ipsData__last ipsData__last--author" data-ips-hook="latestAuthorPhoto">
|
|
|
|
|
{template="userPhoto" app="core" group="global" params="$topic->author(), 'fluid'"}
|
|
|
|
|
<div class="ipsData__last-text">
|
|
|
|
|
<div class="ipsData__last-primary">
|
|
|
|
|
{$topic->author()->link( NULL, NULL, $topic->isAnonymous() )|raw}
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ipsData__last-secondary">
|
|
|
|
|
<a href='{$topic->url( 'getLastComment' )}' title='{lang="get_last_post"}'>
|
|
|
|
|
{datetime="$topic->mapped('date')"}
|
|
|
|
|
</a>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ipsData__last" data-ips-hook="latestUserPhoto">
|
|
|
|
|
{{if $topic->mapped('num_comments')}}
|
|
|
|
|
{template="userPhoto" app="core" group="global" params="$topic->lastCommenter(), 'fluid'"}
|
|
|
|
@@ -4077,36 +4051,88 @@ data-first-page="{{if isset( request.page ) and request.page > 1}}false{{else}}t
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}]]></css>
|
|
|
|
|
<css css_location="front" css_app="forums" css_attributes="" css_path="." css_name="topics.css">@media (max-width: 1150px){
|
|
|
|
|
.cTopicOverview{
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
<css css_location="front" css_app="forums" css_attributes="" css_path="." css_name="topics.css"><![CDATA[.cTopicOverviewContainer{
|
|
|
|
|
container-type: inline-size;
|
|
|
|
|
container-name: cTopicOverview;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cTopicOverviewContainer.ipsBox{
|
|
|
|
|
margin: 1em 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Separate items by a border */
|
|
|
|
|
.cTopicOverview,
|
|
|
|
|
.cTopicOverview__content{
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
gap: 1px;
|
|
|
|
|
flex: 9999 1 auto;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cTopicOverview > *,
|
|
|
|
|
.cTopicOverview__item{
|
|
|
|
|
outline: 1px solid var(--i-background_3);
|
|
|
|
|
}
|
|
|
|
|
.cTopicOverview__item{
|
|
|
|
|
padding: 1.5em;
|
|
|
|
|
flex: 1 1 max(300px, 40%);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Inlined collapsed state */
|
|
|
|
|
.cTopicOverview--main:not(.cTopicOverview--expanded) .cTopicOverview__content{
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
}
|
|
|
|
|
.cTopicOverview--main:not(.cTopicOverview--expanded) .cTopicOverview__item{
|
|
|
|
|
flex: 1 0 auto;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@container cTopicOverview (min-width: 500px){
|
|
|
|
|
.cTopicOverview--main:not(.cTopicOverview--expanded) .cTopicOverview__content{
|
|
|
|
|
flex-wrap: nowrap;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
mask-image: linear-gradient(to left, transparent, #000 300px);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.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*=" fa-"] {
|
|
|
|
|
/* Vertical UI when small */
|
|
|
|
|
@container cTopicOverview (max-width: 750px){
|
|
|
|
|
.cTopicOverview{
|
|
|
|
|
display: grid;
|
|
|
|
|
place-content: center;
|
|
|
|
|
height: 100%;
|
|
|
|
|
max-height: 80px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Hide certain items when collapsed */
|
|
|
|
|
.cTopicOverview--main:not(.cTopicOverview--expanded) :is(.cTopicOverview__item--popularPosts, .cTopicOverview__item--helpfulPosts, .cTopicOverview__item--images){
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
/* Hide all items except for stats on small screens */
|
|
|
|
|
@container cTopicOverview (max-width: 499px){
|
|
|
|
|
.cTopicOverview--main:not(.cTopicOverview--expanded) .cTopicOverview__item:not(.cTopicOverview__item--stats){
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Titles */
|
|
|
|
|
.cTopicOverview__title{
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
margin-bottom: 1em;
|
|
|
|
|
font-size: 1.2em;
|
|
|
|
|
color: var(--i-color_hard);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Toggle button */
|
|
|
|
|
.cTopicOverview__toggle {
|
|
|
|
|
flex: 1 0 auto;
|
|
|
|
|
padding: .5em;
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cTopicOverview__toggle i[class*=" fa-"] {
|
|
|
|
|
transition: 0.2s all ease-in-out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cTopicOverview--expanded .cTopicOverview__toggle i[class*=" fa-"] {
|
|
|
|
|
.cTopicOverview--expanded .cTopicOverview__toggle i[class*=" fa-"] {
|
|
|
|
|
transform: rotate(180deg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -4114,56 +4140,62 @@ data-first-page="{{if isset( request.page ) and request.page > 1}}false{{else}}t
|
|
|
|
|
background: var(--i-background_2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cTopicOverview__toggle--row {
|
|
|
|
|
/* Hide toggle button in sidebar since it's always expanded */
|
|
|
|
|
.ipsLayout__secondary-column .cTopicOverview__toggle{
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cTopicOverview__dataItemInner {
|
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
line-height: 1.2;
|
|
|
|
|
/* Stats */
|
|
|
|
|
.cTopicOverview__item--stats{
|
|
|
|
|
display: flex;
|
|
|
|
|
gap: 1em 2em;
|
|
|
|
|
text-align: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cTopicOverview__preview {
|
|
|
|
|
position: relative;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
min-height: 90px;
|
|
|
|
|
.cTopicOverview--expanded .cTopicOverview__item--stats{
|
|
|
|
|
flex: 1 1 100%;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cTopicOverview__item--stats > li{
|
|
|
|
|
flex: 1 0 auto;
|
|
|
|
|
display: grid;
|
|
|
|
|
place-content: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Data lists */
|
|
|
|
|
.cTopicOverview__dataList{
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
gap: 2em;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.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__dataList > *{
|
|
|
|
|
flex: 1 1 170px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cTopicOverview__previewInner {
|
|
|
|
|
position: absolute;
|
|
|
|
|
inset: 0;
|
|
|
|
|
/* 2 columns in sidebar */
|
|
|
|
|
:is(.cTopicOverview__item--topPosters, .cTopicOverview__item--popularDays) .cTopicOverview__dataList > *{
|
|
|
|
|
flex-basis: max(120px, 40%);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Smaller gap on collapsed */
|
|
|
|
|
.cTopicOverview--main:not(.cTopicOverview--expanded) .cTopicOverview__item--topPosters .cTopicOverview__dataList{
|
|
|
|
|
gap: 1em;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cTopicOverview--main:not(.cTopicOverview--expanded) .cTopicOverview__dataList > *{
|
|
|
|
|
flex: 0 0 auto;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Minimal photo panels in collapsed view */
|
|
|
|
|
.cTopicOverview--main:not(.cTopicOverview--expanded) .ipsPhotoPanel__text{
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@media screen and (max-width: 1150px) {
|
|
|
|
|
.cTopicOverview {
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cTopicOverview__preview,
|
|
|
|
|
.cTopicOverview__toggle--afterStats {
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cTopicOverview__toggle--row {
|
|
|
|
|
display: block;
|
|
|
|
|
}
|
|
|
|
|
.cTopicOverview__imageGrid{
|
|
|
|
|
display: grid;
|
|
|
|
|
grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
|
|
|
|
|
gap: 15px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -4207,14 +4239,14 @@ data-first-page="{{if isset( request.page ) and request.page > 1}}false{{else}}t
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Hide certain elements depending on traditional, minimal and first page attributes */
|
|
|
|
|
#ipsTopicView[data-ips-topic-ui="traditional"][data-ips-topic-first-page="true"] [data-ips-hide="traditional-first"],
|
|
|
|
|
#ipsTopicView[data-ips-topic-ui="minimal"] [data-ips-hide="minimal"],
|
|
|
|
|
#ipsTopicView[data-ips-topic-comments="helpful"] .ipsTopicMeta{
|
|
|
|
|
#ipsTopicView[data-ips-topic-ui="traditional"][data-ips-topic-first-page="true"] [data-ips-hide="traditional-first"],
|
|
|
|
|
#ipsTopicView[data-ips-topic-ui="minimal"] [data-ips-hide="minimal"],
|
|
|
|
|
#ipsTopicView[data-ips-topic-comments="helpful"] .ipsTopicMeta{
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Improve alignment of assigned icon */
|
|
|
|
|
.ipsMessage--assigned .ipsMessage__icon{
|
|
|
|
|
top: calc(50% - .5em);
|
|
|
|
|
}</css>
|
|
|
|
|
}]]></css>
|
|
|
|
|
</theme>
|