Version 5.0.6

This commit is contained in:
Neo committed 2025-12-19 18:55:49 -08:00
1 parent a3a4a9ccbd
commit b89858b2ff
1214 files changed
+92828 -14859

No files matched your search

+142 -221
View File
@@ -9,7 +9,7 @@
<h2 class='ipsBox__header'>{lang="categories"}</h2>
<i-data>
<ol class="ipsData {{if $layout === 'grid'}}ipsData--grid{{else}}ipsData--table ipsData--category{{endif}} ipsData--download-category" data-ips-hook="categories">
{template="categoryRow" group="browse" params="NULL, NULL, \IPS\downloads\Category::roots()"}
{template="categoryRow" group="browse" params="NULL, NULL, \IPS\downloads\Category::roots(), $layout"}
</ol>
</i-data>
</div>
@@ -19,7 +19,7 @@
<h2 class='ipsBox__header'><a href="{url="app=downloads&module=downloads&controller=browse&id=clubs" seoTemplate="downloads_clubs"}">{lang="club_node_downloads"}</a></h2>
<i-data>
<ol class="ipsData {{if $layout === 'grid'}}ipsData--grid{{else}}ipsData--table ipsData--category{{endif}} ipsData--download-category" data-ips-hook="clubNodes">
{template="categoryRow" group="browse" params="NULL, NULL, $clubNodes"}
{template="categoryRow" group="browse" params="NULL, NULL, $clubNodes, $layout"}
</ol>
</i-data>
</div>
@@ -181,43 +181,57 @@
{{endforeach}}
</ul>
]]></template>
<template template_group="browse" template_name="categoryRow" template_data="$table, $headers, $categories" template_location="front" template_app="downloads"><![CDATA[{{foreach $categories as $category}}
<template template_group="browse" template_name="categoryRow" template_data="$table, $headers, $categories, $layout='table'" template_location="front" template_app="downloads"><![CDATA[{{foreach $categories as $category}}
{{if $category->can('view') AND ( $category->open OR \IPS\Member::loggedIn()->isAdmin() )}}
{{$club = $category->club();}}
<li class="ipsData__item {$category->ui( 'css' )}" {{if !\IPS\downloads\File::containerUnread( $category )}}data-ips-read{{else}}data-ips-unread{{endif}} {$category->ui( 'dataAttributes' )}>
<a href="{$category->url()}" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{{if $club}}{lang="club_node" sprintf="$club->name, $category->_title"}{{else}}{$category->_title}{{endif}}</span></a>
<figure class='ipsData__image'>
{{if $category->card_image}}
<img src='{file="$category->card_image" extension="downloads_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>
{{else}}
<i></i>
{{endif}}
{{else}}
{{if $layout==="table"}}
{{if $icon = $category->getIcon()}}
{$icon|raw}
{{else}}
<i></i>
<span class='ipsIcon ipsIcon--fa' aria-hidden="true"><i class="fa-ips"></i></span>
{{endif}}
{{else}}
{{if $category->card_image}}
<img src='{file="$category->card_image" extension="downloads_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>
{{else}}
<span class='ipsIcon ipsIcon--fa' aria-hidden="true"><i class="fa-ips"></i></span>
{{endif}}
{{else}}
{{if $icon = $category->getIcon()}}
{$icon|raw}
{{else}}
<span class='ipsIcon ipsIcon--fa' aria-hidden="true"><i class="fa-ips"></i></span>
{{endif}}
{{endif}}
{{endif}}
</figure>
<div class="ipsData__content">
<div class="ipsData__main">
<div class='ipsData__title'>
<h4>
<a href="{$category->url()}">{{if $club}}{lang="club_node" sprintf="$club->name, $category->_title"}{{else}}{$category->_title}{{endif}}</a>
</h4>
{{if \IPS\downloads\File::containerUnread( $category )}}
<span class="ipsIndicator" title='{lang="unread"}' data-ipstooltip></span>
{{endif}}
<h4><a href="{$category->url()}">{$category->_title}</a></h4>
</div>
{{if $club}}<div class="ipsData__club"><a href="{$club->url()}">{$club->name}</a></div>{{endif}}
{{if $category->description}}
<div class="ipsData__desc">
{template="richText" group="global" app="core" location="global" params="$category->description, array('')"}
@@ -421,7 +435,7 @@
<div data-ips-hook="header" class='ipsPageHeader__primary'>
<h1 data-ips-hook="title" class='ipsPageHeader__title'>{lang="downloads"}</h1>
</div>
<ul data-ips-hook="buttons" data-ips-hook="buttons" class='ipsButtons ipsButtons--main'>
<ul data-ips-hook="buttons" class='ipsButtons ipsButtons--main'>
{{if !\IPS\downloads\Category::theOnlyNode()}}
<li class='ipsResponsive_showPhone'>
<a href='#elDownloadsCategories_menu' data-ipsMenu id='elDownloadsCategories' class='ipsButton ipsButton--inherit'><span>{lang="downloads_category_select"}</span><span>{lang="all"}</span><i class='fa-solid fa-caret-down'></i></a>
@@ -979,7 +993,6 @@
{{endif}}
</div>
</div>]]></template>
<template template_group="global" template_name="link" template_data="$file" template_location="global" template_app="downloads"><![CDATA[<div data-ips-hook="link" class=''><a data-ips-hook="url" href="{$file->url( "getPrefComment" )}" class="i-color_inherit" target="_blank" rel='noopener'>{$file->name}</a></div>]]></template>
<template template_group="global" template_name="manageFollowRow" template_data="$table, $headers, $rows, $includeFirstCommentInCommentCount=TRUE" template_location="front" template_app="downloads"><![CDATA[{{if \count( $rows )}}
{{foreach $rows as $row}}
{{$idField = $row::$databaseColumnId;}}
@@ -1203,6 +1216,7 @@
<table class="ipsTable ipsTable_zebra">
<thead>
<tr>
<th width="60"></th>
<th>{lang="member"}</th>
<th>{lang="downloads"}</th>
</tr>
@@ -1211,7 +1225,8 @@
{{foreach $select as $row}}
{{$member = \IPS\Member::constructFromData( $members[ $row['dmid'] ] );}}
<tr>
<td>{template="userPhoto" app="core" group="global" params="$member"} {$member->name}</td>
<td>{template="userPhoto" app="core" group="global" params="$member"}</td>
<td>{$member->name}</td>
<td><a href='{url="app=downloads&module=stats&controller=member&do=downloads&id={$member->member_id}&tab=downloads&&type%5Bd74394%5D=Table"}'>{$row['downloads']}</a></td>
</tr>
{{endforeach}}
@@ -1238,6 +1253,7 @@
<table class="ipsTable ipsTable_zebra">
<thead>
<tr>
<th width="60"></th>
<th>{lang="member"}</th>
<th>{lang="files"}</th>
</tr>
@@ -1250,7 +1266,8 @@
{{$member = new \IPS\Member;}}
{{endif}}
<tr>
<td>{template="userPhoto" app="core" group="global" params="$member"} {$member->link()|raw}</td>
<td>{template="userPhoto" app="core" group="global" params="$member"}</td>
<td>{$member->link()|raw}</td>
<td>
{{if $member->member_id}}
<a href='{$member->url()->setQueryString( array( 'do' => 'content', 'type' => 'downloads_file' ) )}' target='_blank' rel='noopener'>{$row['files']}</a>
@@ -1611,7 +1628,7 @@
</ul>
</div>
</form>]]></template>
<template template_group="view" template_name="comments" template_data="$file" template_location="front" template_app="downloads"><![CDATA[<div data-controller='core.front.core.commentFeed, core.front.core.ignoredComments' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-commentsType='comments' data-baseURL='{$file->url()}' {{if $file->isLastPage()}}data-lastPage{{endif}} data-feedID='{$file->feedId}' id='comments' class='ipsEntries ipsEntries--comments ipsEntries--download-comments'>
<template template_group="view" template_name="comments" template_data="$file" template_location="front" template_app="downloads"><![CDATA[<div data-controller='core.front.core.commentFeed, core.front.core.ignoredComments' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-commentsType='comments' data-baseURL='{$file->url()}' {{if $file->isLastPage()}}data-lastPage{{endif}} data-feedID='{$file->feedId}' id='comments' class='ipsEntries ipsEntries--comments ipsEntries--download-comments' data-follow-area-id="file-{$file->id}">
{template="featuredComments" group="global" app="core" params="$file->featuredComments(), $file->url()->setQueryString( 'tab', 'comments' )->setQueryString( 'recommended', 'comments' )"}
{{if $file->commentPageCount() > 1}}
@@ -1763,7 +1780,7 @@
{{$data = $files->data();}}
<li class='ipsData__item'>
<div class='ipsData__main'>
<h4 class='ipsData__title'><span class=''>{{if $data['record_realname']}}{$data['record_realname']}{{else}}{{$pathBits = array_filter( explode( '/', \IPS\Http\Url::external( $data['record_location'] )->data[ \IPS\Http\Url::COMPONENT_PATH ] ) );}}{expression="\count( $pathBits ) ? array_pop( $pathBits ) : $data['record_location']"}{{endif}}</span></h4>
<h4 {{if $fileObject->canEdit()}}data-controller="core.front.core.moderation"{{endif}} class='ipsData__title'><span {{if $fileObject->canEdit()}}data-role="editableTitle" data-params='{"do":"ajaxEditLinkRecordRealName","record_id":{$data['record_id']}}' title='{lang="click_hold_edit"}'{{endif}} class=''>{{if $data['record_realname']}}{$data['record_realname']}{{else}}{{$pathBits = array_filter( explode( '/', \IPS\Http\Url::external( $data['record_location'] )->data[ \IPS\Http\Url::COMPONENT_PATH ] ) );}}{expression="\count( $pathBits ) ? array_pop( $pathBits ) : $data['record_location']"}{{endif}}</span></h4>
{{if $data['record_size']}}<p class='ipsData__meta'>{filesize="$data['record_size']"}</p>{{endif}}
</div>
<div>
@@ -1975,7 +1992,7 @@
</ul>
</div>]]></template>
<template template_group="view" template_name="reviews" template_data="$file" template_location="front" template_app="downloads"><![CDATA[
<div data-controller='core.front.core.commentFeed' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-commentsType='reviews' data-baseURL='{$file->url()}' {{if $file->isLastPage('reviews')}}data-lastPage{{endif}} data-feedID='{$file->reviewFeedId}' id='reviews' class='ipsEntries ipsEntries--reviews ipsEntries--download-reviews'>
<div data-controller='core.front.core.commentFeed' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-commentsType='reviews' data-baseURL='{$file->url()}' {{if $file->isLastPage('reviews')}}data-lastPage{{endif}} data-feedID='{$file->reviewFeedId}' id='reviews' class='ipsEntries ipsEntries--reviews ipsEntries--download-reviews' data-follow-area-id="file-{$file->id}">
{{if $file->reviewForm()}}
{{if $file->locked()}}
<strong class='i-color_warning'><i class='fa-solid fa-circle-info'></i> {lang="item_locked_can_review"}</strong>
@@ -2052,7 +2069,7 @@
<div id='elClubContainer'>
{{endif}}
<div class='ipsBlockSpacer'>
<div class='ipsBlockSpacer' data-ips-hook="main">
<div class='ipsBox ipsPull'>
<header class='ipsPageHeader'>
<div class="ipsPageHeader__row">
@@ -2103,7 +2120,7 @@
<div class="ipsPageHeader__primary">
<div class='ipsPhotoPanel ipsPhotoPanel--inline'>
{template="userPhoto" app="core" group="global" params="$file->author(), 'tiny', $file->warningRef()"}
<div class='ipsPhotoPanel__text'>
<div class='ipsPhotoPanel__text' data-ips-hook="author">
<p class="ipsPhotoPanel__primary">
{lang="byline_nodate_itemprop" htmlsprintf="$file->author()->link( $file->warningRef(), NULL, $file->isAnonymous() )"}{{if member.group['idm_view_approvers'] and $file->approver}} {lang="file_approved_by" sprintf="\IPS\Member::load( $file->approver )->name" htmlsprintf="\IPS\DateTime::ts( $file->approvedon )->html( false )"}{{endif}}
{{if $file->isAnonymous() and \IPS\Member::loggedIn()->modPermission('can_view_anonymous_posters')}}
@@ -2166,18 +2183,17 @@
<section class='i-basis_100p'>
<h2 class='ipsBox__header ipsHide'>{lang="screenshots_ct" pluralize="$file->screenshots()->getInnerIterator()->count()"}</h2>
<div class=''>
<ul class='ipsCarousel ipsCarousel--images ipsCarousel--downloads-file-screenshots' id='downloads-file-screenshots' tabindex="0">
<ul class='ipsCarousel ipsCarousel--padding ipsCarousel--images ipsCarousel--downloads-file-screenshots' id='downloads-file-screenshots' tabindex="0">
{{$fullScreenshots = iterator_to_array( $file->screenshots() );}}
{{foreach $file->screenshots( 1 ) as $id => $screenshot}}
<li>
{{ $dimensions = $screenshot->getImageDimensions(); }}
<a href="{$fullScreenshots[ $id ]->url}" class="ipsThumb" data-ipsLightbox data-ipsLightbox-group="download_{$file->id}">
<img src="{$screenshot->url}" alt="" width='{expression="$dimensions[0]"}' height='{expression="$dimensions[1]"}' loading="lazy">
<img src="{$screenshot->url}" alt="">
</a>
</li>
{{endforeach}}
</ul>
{template="carouselNavigation" group="global" app="core" params="'downloads-file-screenshots'"}
{template="carouselNavigation" group="global" app="core" params="'downloads-file-screenshots', 'i-margin-bottom_2'"}
</div>
</section>
{{endif}}
@@ -2390,7 +2406,7 @@
<div class='ipsPageActions ipsBox i-padding_2 ipsPull ipsResponsive_showPhone'>
{template="notify" app="downloads" group="view" params="$file"}
{{if \count( $file->shareLinks() )}}
{template="shareButton" app="core" group="sharelinks" params="$file, 'verySmall', 'light'"}
{template="shareButton" app="core" group="sharelinks" params="$file"}
{{endif}}
{{if \IPS\Application::appIsEnabled('cloud')}}
{template="spam" app="cloud" group="spam" params="$file"}
@@ -2430,203 +2446,111 @@
</div>
{{endif}}]]></template>
<template template_group="widgets" template_name="downloadsCommentFeed" template_data="$comments, $title, $layout='table', $isCarousel=false" template_location="front" template_app="downloads"><![CDATA[{{if !empty( $comments ) }}
<h3 class='ipsWidget__header'>{$title}</h3>
{{if isset($orientation) and $orientation == 'vertical'}}
<div class='ipsWidget__content'>
<i-data>
<ul class='ipsData ipsData--table ipsData--downloads-comment-feed'>
{{foreach $comments as $comment}}
<li class='ipsData__item'>
<a href="{$comment->url()}" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$comment->item()->name}</span></a>
<div class='ipsData__icon'>
{template="userPhoto" group="global" app="core" params="$comment->author(), 'fluid'"}
</div>
<div class='ipsData__main'>
<h4 class='ipsData__title'><a href="{$comment->url()}">{$comment->item()->name}</a></h4>
<div class='ipsData__meta'>{lang="byline_nodate" htmlsprintf="$comment->author()->link( NULL, NULL, $comment->isAnonymous() )"} &middot; <a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}' class='i-color_inherit'>{$comment->dateLine()|raw}</a></div>
<div class='ipsData__desc ipsRichText i-margin-top_2 ipsTruncate_4'>
{$comment->truncated( true )|raw}
</div>
</div>
</li>
{{endforeach}}
</ul>
</i-data>
</div>
{{else}}
<div class='ipsWidget__content'>
{{foreach $comments as $comment}}
<section class='ipsEntry ipsEntry--simple'>
<div class='ipsEntry__content'>
<header class='ipsEntry__header'>
<div class='ipsEntry__header-align'>
<div class='ipsPhotoPanel'>
{template="userPhoto" app="core" group="global" params="$comment->author(), 'mini', $comment->warningRef()"}
<div class='ipsPhotoPanel__text'>
<h3 class='ipsPhotoPanel__primary i-color_hard'>
{template="userLink" app="core" group="global" params="$comment->author(), $comment->warningRef(), NULL, $comment->isAnonymous()"}
</h3>
<p class='ipsPhotoPanel__secondary'>
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}' class='i-color_inherit'>{$comment->dateLine()|raw}</a>
{{if $comment->editLine()}}
({lang="edited_lc"})
{{endif}}
{{if $comment->hidden()}}
&middot; {$comment->hiddenBlurb()}
{{endif}}
</p>
</div>
</div>
</div>
</header>
<div class='ipsEntry__post'>
{{if member.modPermission('mod_see_warn') and $comment->warning}}
{template="commentWarned" group="global" app="core" params="$comment"}
{{endif}}
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and $comment->isHighlighted()}}
<ul class='ipsBadges'>
<li><span class='ipsBadge ipsBadge--popular'>{lang="this_is_a_popular_comment"}</span></li>
</ul>
{{endif}}
<div class='i-margin-bottom_2 i-font-weight_500 i-font-size_2'><a href="{$comment->url()}" class='i-color_hard'>{$comment->item()->name}</a></div>
<div data-role='commentContent' class='ipsRichText ' data-controller='core.front.core.lightboxedImages'>
{{if $comment->hidden() === 1 && $comment->author()->member_id == \IPS\Member::loggedIn()->member_id}}
<strong class='i-color_warning'><i class='fa-solid fa-circle-info'></i> {lang="comment_awaiting_approval"}</strong>
{{endif}}
{$comment->content()|raw}
{{if $comment->editLine()}}
{$comment->editLine()|raw}
{{endif}}
</div>
</div>
<div class='ipsEntry__footer'>
<menu class='ipsEntry__controls' data-role="commentControls">
{{if $comment->canReportOrRevoke() === TRUE}}
<li><a href='{$comment->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"}"{{endif}} data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a></li>
{{endif}}
</menu>
{{if $comment->hidden() !== 1 && \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_enabled}}
{template="reputation" group="global" app="core" params="$comment"}
{{endif}}
</div>
</div>
</section>
{{endforeach}}
</div>
{{endif}}
{{endif}}
]]></template>
<template template_group="widgets" template_name="downloadsReviewFeed" template_data="$comments, $title, $layout='table', $isCarousel=false" template_location="front" template_app="downloads"><![CDATA[{{if !empty( $comments ) }}
<h3 class='ipsWidget__header'>{$title}</h3>
{{if isset($orientation) and $orientation == 'vertical'}}
<div class='ipsWidget__content'>
<i-data>
<ul class='ipsData ipsData--table ipsData--downloads-review-feed'>
{{foreach $comments as $comment}}
<li class='ipsData__item'>
<a href="{$comment->url()}" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$comment->item()->name}</span></a>
<div class='ipsData__icon'>
{template="userPhoto" group="global" app="core" params="$comment->author(), 'fluid'"}
</div>
<div class='ipsData__main'>
<h4 class='ipsData__title'><a href="{$comment->url()}">{$comment->item()->name}</a></h4>
<div class='ipsData__meta'>{lang="byline_nodate" htmlsprintf="$comment->author()->link()"} &middot; <a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findReview', 'review' => $comment->id ) )}'>{$comment->dateLine()|raw}</a></div>
{template="rating" group="global" location="front" app="core" params="'small', $comment->rating, \IPS\Settings::i()->reviews_rating_out_of"}
<div class='ipsData__desc ipsRichText i-margin-top_2 ipsTruncate_4'>
{$comment->truncated( true )|raw}
</div>
</div>
</li>
{{endforeach}}
</ul>
</i-data>
</div>
{{else}}
<div class='ipsWidget__content'>
<ul>
<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-downloads-commentFeed' {{if $isCarousel}}id='{$carouselID}' tabindex="0"{{endif}}>
{{foreach $comments as $comment}}
<li class='ipsEntry ipsEntry--simple'>
<div class='ipsEntry__header'>
<div class="ipsEntry__header-align">
<div class="ipsPhotoPanel">
{template="userPhoto" app="core" group="global" params="$comment->author(), 'mini', $comment->warningRef()"}
<div class="ipsPhotoPanel__text">
<h3 class='ipsPhotoPanel__primary'>
<strong>{template="userLink" app="core" group="global" params="$comment->author(), $comment->warningRef()"}</strong>
{template="reputationBadge" group="global" app="core" params="$comment->author()"}
</h3>
<p class='ipsPhotoPanel__secondary'>
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findReview', 'review' => $comment->id ) )}' class='i-color_inherit'>{$comment->dateLine()|raw}</a>
{{if $comment->editLine()}}
({lang="edited_lc"})
{{endif}}
{{if $comment->hidden()}}
&middot; {$comment->hiddenBlurb()}
{{endif}}
</p>
</div>
<li class='ipsData__item'>
<a href='{$comment->url()}' class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$comment->item()->mapped('title')}</span></a>
{{if in_array($layout, array("wallpaper", "featured", "grid"))}}
<figure class='ipsData__image'>
{{if $image = $comment->item()->primaryImage()}}
<img src="{$image->url}" alt="{$comment->item()->mapped('title')}" loading="lazy">
{{else}}
<i></i>
{{endif}}
</figure>
{{else}}
<figure class='ipsData__icon'>
{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_file" sprintf="$comment->item()->mapped('title')"}'>{$comment->item()->mapped('title')}</a></h4>
</div>
<div class='ipsData__desc ipsRichText' data-controller='core.front.core.lightboxedImages'>{$comment->truncated()|raw}</div>
<p class='ipsData__meta'>{lang="byline" htmlsprintf="$comment->author()->link( NULL, NULL, $comment->isAnonymous() )"} &middot; <a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}'>{$comment->dateLine()|raw}</a></p>
</div>
</div>
<div class='ipsEntry__post'>
{{if member.modPermission('mod_see_warn') and $comment->warning}}
{template="commentWarned" group="global" app="core" params="$comment"}
{{endif}}
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and $comment->isHighlighted()}}
<strong class='ipsEntry__popularFlag' data-ipsTooltip title='{lang="this_is_a_popular_comment"}'><i class='fa-solid fa-star'></i></strong>
{{endif}}
<div class=''><a href="{$comment->url()}" class='ipsData__title ipsTruncate_1'>{$comment->item()->name}</a></div>
<div data-role='commentContent' class='ipsRichText ' data-controller='core.front.core.lightboxedImages'>
{{if $comment->hidden() === 1 && $comment->author()->member_id == \IPS\Member::loggedIn()->member_id}}
<strong class='i-color_warning'><i class='fa-solid fa-circle-info'></i> {lang="comment_awaiting_approval"}</strong>
{{endif}}
{$comment->content()|raw}
{{if $comment->editLine()}}
{$comment->editLine()|raw}
{{endif}}
</div>
</div>
<div class='ipsEntry__footer'>
<menu class='ipsEntry__controls' data-role="commentControls">
{{if $comment->canReportOrRevoke() === TRUE}}
<li><a href='{$comment->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"}"{{endif}} data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a></li>
{{endif}}
{{if ! \IPS\Output::i()->reduceLinks()}}
<li><a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findReview', 'review' => $comment->id ) )}' data-ipsMenu data-ipsMenu-closeOnClick='false' id='elShareComment_{$comment->id}'>{lang="share_this_comment"}</a></li>
{{endif}}
</menu>
{{if $comment->hidden() !== 1 && \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_enabled}}
{template="reputation" group="global" app="core" params="$comment"}
{{endif}}
</div>
</li>
{{endforeach}}
</ul>
</div>
{{endif}}
</i-data>
</div>
{{endif}}
]]></template>
<template template_group="widgets" template_name="downloadsReviewFeed" template_data="$reviews, $title, $layout='table', $isCarousel=false" template_location="front" template_app="downloads"><![CDATA[<header class='ipsWidget__header'>
<h3>{$title}</h3>
{{if $isCarousel}}
{{$carouselID = 'widget-downloads-reviews_' . mt_rand();}}
{template="carouselNavigation" group="global" app="core" params="$carouselID"}
{{endif}}
</header>
<div class='ipsWidget__content'>
{{if !empty( $reviews ) }}
<i-data>
<ul class='ipsData ipsData--{$layout} {{if $isCarousel}}ipsData--carousel{{endif}} ipsData--widget-downloads-reviews' {{if $isCarousel}}id='{$carouselID}' tabindex="0"{{endif}}>
{{foreach $reviews as $review}}
<li class='ipsData__item'>
<a href="{$review->item()->url( "getPrefComment" )}" class="ipsLinkPanel" aria-hidden="true" tabindex="-1"><span>{$review->item()->mapped('title')}</span></a>
{{if \in_array( $layout, array("grid", "wallpaper", "featured"))}}
<figure class="ipsData__image">
{{if $image = $review->item()->primaryImage()}}
<img src="{$image->url}" alt="{$review->item()->mapped('title')}" loading="lazy">
{{else}}
<i></i>
{{endif}}
</figure>
{{else}}
<div class='ipsData__icon'>
{template="userPhoto" app="core" group="global" params="$review->author(), 'fluid'"}
</div>
{{endif}}
<div class='ipsData__content'>
<div class='ipsData__main'>
<h4 class='ipsData__title'>
<a href="{$review->item()->url( "getPrefComment" )}" title='{lang="view_this_file" sprintf="$review->item()->mapped('title')"}'>{$review->item()->mapped('title')}</a>
{template="rating" group="global" location="front" app="core" params="'small', $review->rating, \IPS\Settings::i()->reviews_rating_out_of"}
</h4>
<p class='ipsData__meta'>
{lang="byline_nodate" htmlsprintf="$review->author()->link()"}, <time datetime='{datetime="$review->mapped('date' )" norelative="true"}'>{datetime="$review->mapped('date')" norelative="true"}</time>
</p>
<p class='ipsData__desc'>{$review->truncated()|raw}</p>
</div>
</div>
</li>
{{endforeach}}
</ul>
</i-data>
{{else}}
<p class='ipsEmptyMessage'>{lang="no_recent_reviews"}</p>
{{endif}}
</div>]]></template>
<template template_group="widgets" template_name="downloadStats" template_data="$stats, $latestFile, $layout='table', $isCarousel=false" template_location="front" template_app="downloads"><![CDATA[<h3 class='ipsWidget__header'>{lang="block_downloadStats"}</h3>
<div class='ipsWidget__content'>
<ul class='ipsList ipsList--stats ipsList--stats ipsList--stacked ipsList--border ipsList--fill'>
<li>
<span class='ipsList__value'>{number="$stats['totalFiles']"}</span><br>
<span class='ipsList__value'>{number="$stats['totalFiles']"}</span>
<span class='ipsList__label'>{lang="total_files_front"}</span>
</li>
{{if $stats['totalComments']}}
<li>
<span class='ipsList__value'>{number="$stats['totalComments']"}</span><br>
<span class='ipsList__value'>{number="$stats['totalComments']"}</span>
<span class='ipsList__label'>{lang="total_comments"}</span>
</li>
{{endif}}
{{if $stats['totalReviews']}}
<li>
<span class='ipsList__value'>{number="$stats['totalReviews']"}</span><br>
<span class='ipsList__value'>{number="$stats['totalReviews']"}</span>
<span class='ipsList__label'>{lang="total_reviews"}</span>
</li>
{{endif}}
@@ -2876,15 +2800,6 @@
--icon: "\f019";
}
/* Add padding to screenshot carousel */
.ipsCarousel--downloads-file-screenshots{
--i-carousel--pa: 2em;
--i-column-gap: 1em;
}
.ipsCarousel--downloads-file-screenshots + .ipsCarouselNav{
margin-bottom: 1em;
}
.cFilePrice {
color: var(--i-color_secondary);
text-transform: uppercase;
@@ -2920,6 +2835,12 @@
#elURLFiles, #elImportFiles, #elURLScreenshots {
position: relative;
}
/* Rename title */
[data-controller="downloads.front.view.download"] .ipsData__title [data-role="editableTitle"]:hover{
background: var(--i-background_selected);
color: var(--i-color_hard);
}]]></css>
<css css_location="front" css_app="downloads" css_attributes="" css_path="." css_name="embed.css">.cFilePrice {
color: var(--i-color_secondary);