Version 5.0.6
This commit is contained in:
1 parent
a3a4a9ccbd
commit
b89858b2ff
1214 files changed
+92828
-14859
No files matched your search
@@ -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() )"} · <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()}}
|
||||
· {$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()"} · <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()}}
|
||||
· {$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() )"} · <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);
|
||||
|
||||
Reference in new issue
Block a user