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

+10 -11
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<javascript app="downloads">
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/downloads" javascript_name="ips.downloads.browse.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000200">/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/downloads" javascript_name="ips.downloads.browse.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000200">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -59,7 +59,7 @@
}
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/pending" javascript_name="ips.pending.buttons.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000250">/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/pending" javascript_name="ips.pending.buttons.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000250">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -87,7 +87,7 @@
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="admin" javascript_path="controllers/settings" javascript_name="ips.settings.settings.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000050">/**
<file javascript_app="downloads" javascript_location="admin" javascript_path="controllers/settings" javascript_name="ips.settings.settings.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000050">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -140,7 +140,7 @@
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.linkedScreenshots.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000100">/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.linkedScreenshots.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000100">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -211,7 +211,7 @@
}
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.main.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000100"><![CDATA[/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.main.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -648,7 +648,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.changeLog.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000150"><![CDATA[/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.changeLog.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000150"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -770,7 +770,7 @@
});
}(jQuery, _));]]></file>
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.download.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000150">/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.download.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000150">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -898,7 +898,7 @@
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.subscribe.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000150">/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.subscribe.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000150">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -961,7 +961,7 @@
}
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.submit.js" javascript_type="template" javascript_version="5000049" javascript_position="1000050"><![CDATA[/* VIEW TEMPLATES */
<file javascript_app="downloads" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.submit.js" javascript_type="template" javascript_version="5000074" javascript_position="1000050"><![CDATA[/* VIEW TEMPLATES */
ips.templates.set('downloads.submit.screenshot', " \
<div class='ipsUploader__row ipsUploader__row--image ipsAttach {{#done}}ipsAttach_done{{/done}}' id='{{id}}' data-role='file' data-fileid='{{id}}' data-filesize='{{sizeRaw}}' data-fullsizeurl='{{imagesrc}}' data-thumbnailurl='{{thumbnail}}' data-fileType='image'>\
<div class='ipsUploader__rowPreview' data-role='preview'>\
@@ -1030,8 +1030,7 @@ mustache
Debug.js
app.js</order>
<order app="global" path="/dev/js//library//jquery">jquery.js
jquery-migrate.js
jquery.transform.js</order>
jquery-migrate.js</order>
<order app="global" path="/dev/js//library//linkify">linkify.min.js
linkify-jquery.min.js</order>
</javascript>
+6 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="downloads" version="5000049">
<app key="downloads" version="5000074">
<word key="__app_downloads" js="0">Downloads</word>
<word key="frontnavigation_downloads" js="0">Downloads</word>
<word key="__indefart_downloads_file_comment" js="0">a comment on a file</word>
@@ -43,6 +43,7 @@
<word key="modlog__action_purchasestatus_stats" js="0">Toggled purchase status of a file</word>
<word key="modlog__action_newversion_reject_stats" js="0">Rejected a new version of a file</word>
<word key="modlog__action_newversion_approved_stats" js="0">Approved a new version of a file</word>
<word key="modlog__linkedfile_edit_title" js="0"><![CDATA[Renamed <a href='%s'>%s</a> from %s]]></word>
<word key="mark_category_read" js="0">Mark category read</word>
<word key="mark_category_read_title" js="0">Mark this category as read</word>
<word key="editor__downloads_Categories" js="0">Download Categories</word>
@@ -196,6 +197,10 @@
<word key="downloads_field_paid" js="0">Purchase Required?</word>
<word key="downloads_field_paid_desc" js="0">If enabled, this field's contents will only be shown to members's who have purchased the file. This setting has no effect on free files.</word>
<word key="ccfields_sg" js="0">Field</word>
<word key="perm_cfield_perm__view" js="0">View Field Content</word>
<word key="perm_cfield_perm__edit" js="0">Edit Field Content</word>
<word key="perm_cfield_perm__add" js="0">Add Content to Field</word>
<word key="perm_cfield_perm__label" js="0">Groups</word>
<word key="menu__downloads_downloads_settings" js="0">Settings</word>
<word key="acplogs__downloads_settings" js="0">Updated downloads settings</word>
<word key="group__downloads_Downloads" js="0">Downloads</word>
+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);
+33 -1
View File
@@ -267,6 +267,13 @@
"107785": "4.7.19",
"107786": "4.7.19",
"107787": "4.7.19",
"107795": "4.7.20 Beta 1",
"107796": "4.7.20 Beta 2",
"107797": "4.7.20 Beta 3",
"107798": "4.7.20 Beta 4",
"107799": "4.7.20 Beta 5",
"107800": "4.7.20",
"107801": "4.7.20",
"500001": "5.0.0 Alpha 1",
"500002": "5.0.0 Alpha 2",
"5000003": "5.0.0 Alpha 3",
@@ -315,5 +322,30 @@
"5000046": "5.0.0 Beta 14",
"5000047": "5.0.0 Beta 14.1",
"5000048": "5.0.0 Beta 14.2",
"5000049": "5.0.0"
"5000049": "5.0.0",
"5000050": "5.0.0",
"5000051": "5.0.0",
"5000052": "5.0.1",
"5000053": "5.0.1",
"5000054": "5.0.2",
"5000055": "5.0.2",
"5000056": "5.0.2",
"5000057": "5.0.3",
"5000058": "5.0.3",
"5000059": "5.0.3",
"5000060": "5.0.3",
"5000061": "5.0.4 Beta 1",
"5000062": "5.0.4 Beta 1",
"5000063": "5.0.4 Beta 1",
"5000064": "5.0.4 Beta 2",
"5000065": "5.0.4 Beta 3",
"5000066": "5.0.4",
"5000067": "5.0.5 Beta 1",
"5000068": "5.0.5 Beta 2",
"5000069": "5.0.5",
"5000070": "5.0.6 Beta 1",
"5000071": "5.0.6 Beta 2",
"5000072": "5.0.6 Beta 3",
"5000073": "5.0.6 Beta 4",
"5000074": "5.0.6"
}