Version 5.0.0 beta 4

This commit is contained in:
Neo committed 2025-12-19 16:57:00 -08:00
1 parent e86153356a
commit 2f24f9de48
276 files changed
+8614 -6044

No files matched your search

+11 -21
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<javascript app="forums">
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.flow.js" javascript_type="controller" javascript_version="5000029" javascript_position="1000100"><![CDATA[/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.flow.js" javascript_type="controller" javascript_version="5000030" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -272,7 +272,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.forumList.js" javascript_type="controller" javascript_version="5000029" javascript_position="1000100"><![CDATA[/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.forumList.js" javascript_type="controller" javascript_version="5000030" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -340,7 +340,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.forumPage.js" javascript_type="controller" javascript_version="5000029" javascript_position="1000100"><![CDATA[/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.forumPage.js" javascript_type="controller" javascript_version="5000030" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -397,7 +397,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.hovercard.js" javascript_type="controller" javascript_version="5000029" javascript_position="1000100">/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/forum" javascript_name="ips.forum.hovercard.js" javascript_type="controller" javascript_version="5000030" javascript_position="1000100">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -447,7 +447,7 @@
}
});
}(jQuery, _));</file>
<file javascript_app="forums" javascript_location="admin" javascript_path="controllers/settings" javascript_name="ips.settings.archiveRules.js" javascript_type="controller" javascript_version="5000029" javascript_position="1000050"><![CDATA[/**
<file javascript_app="forums" javascript_location="admin" javascript_path="controllers/settings" javascript_name="ips.settings.archiveRules.js" javascript_type="controller" javascript_version="5000030" javascript_position="1000050"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -512,7 +512,7 @@
});
}(jQuery, _));
]]></file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.activity.js" javascript_type="controller" javascript_version="5000029" javascript_position="1000050">/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.activity.js" javascript_type="controller" javascript_version="5000030" javascript_position="1000050">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -530,21 +530,11 @@
},
toggleOverview: function (e) {
e.preventDefault();
if( this.scope.hasClass('cTopicOverview--expanded') ){
this.scope.find('[data-role=&quot;preview&quot;]').removeClass('ipsHide');
this.scope.find('[data-role=&quot;overview&quot;]').addClass('ipsHide');
this.scope.removeClass('cTopicOverview--expanded');
} else {
this.scope.find('[data-role=&quot;preview&quot;]').addClass('ipsHide');
this.scope.find('[data-role=&quot;overview&quot;]').removeClass('ipsHide');
this.scope.addClass('cTopicOverview--expanded');
}
this.scope.toggleClass('cTopicOverview--expanded');
}
});
}(jQuery, _));</file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.answers.js" javascript_type="controller" javascript_version="5000029" javascript_position="1000050"><![CDATA[/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.answers.js" javascript_type="controller" javascript_version="5000030" javascript_position="1000050"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -684,7 +674,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.reply.js" javascript_type="controller" javascript_version="5000029" javascript_position="1000050">/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.reply.js" javascript_type="controller" javascript_version="5000030" javascript_position="1000050">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -713,7 +703,7 @@
}
});
}(jQuery, _));</file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.solved.js" javascript_type="controller" javascript_version="5000029" javascript_position="1000050"><![CDATA[/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.solved.js" javascript_type="controller" javascript_version="5000030" javascript_position="1000050"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -751,7 +741,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.view.js" javascript_type="controller" javascript_version="5000029" javascript_position="1000050">/**
<file javascript_app="forums" javascript_location="front" javascript_path="controllers/topic" javascript_name="ips.topic.view.js" javascript_type="controller" javascript_version="5000030" javascript_position="1000050">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="forums" version="5000029">
<app key="forums" version="5000030">
<word key="__app_forums" js="0">Forums</word>
<word key="frontnavigation_forums" js="0">Forums</word>
<word key="__indefart_post" js="0">a post in a topic</word>
+265 -233
View File
@@ -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*=&quot; fa-&quot;] {
/* 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*=&quot; fa-&quot;] {
.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=&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{
#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>
+2 -1
View File
@@ -277,5 +277,6 @@
"5000026": "5.0.0 Beta 1",
"5000027": "5.0.0 Beta 2",
"5000028": "5.0.0 Beta 2",
"5000029": "5.0.0 Beta 3"
"5000029": "5.0.0 Beta 3",
"5000030": "5.0.0 Beta 4"
}