Version 4.3.0

This commit is contained in:
Neo committed 2025-12-19 05:47:12 -08:00
1 parent 96997ddd8e
commit fe1acf984a
1349 files changed
+116159 -67711

No files matched your search

+3 -3
View File
@@ -19,7 +19,7 @@
</div>
</td>
</tr>]]></template_content_html><template_data>$comment, $email</template_data><template_content_plaintext><![CDATA[{$email->language->addToStack("x_commented_file", FALSE, array( 'sprintf' => array( $comment->author()->name ) ) )}: {$comment->item()->name} ({$comment->url()})
]]></template_content_plaintext></template><template><template_app>downloads</template_app><template_name>notification_new_file_version</template_name><template_content_html><![CDATA[
]]></template_content_plaintext><template_pinned>0</template_pinned></template><template><template_app>downloads</template_app><template_name>notification_new_file_version</template_name><template_content_html><![CDATA[
{{if $content->author()->member_id}}
{$email->language->addToStack("email_new_file_version", FALSE, array( 'sprintf' => array( $content->author()->url(), $content->author()->name, $content->indefiniteArticle( $email->language ) ) ) )} <a href='{$content->url()}'>{$content->mapped('title')}</a>
{{else}}
@@ -101,7 +101,7 @@
{$email->language->addToStack("go_to_this_x", FALSE, array( 'sprintf' => array( mb_strtolower( $email->language->addToStack( $content::$title, FALSE ) ) ) ) )}: {$content->url()}
-- {setting="board_name"}]]></template_content_plaintext></template><template><template_app>downloads</template_app><template_name>digests__item</template_name><template_content_html><![CDATA[<tr style='border-bottom: 1px solid #eeeeee'>
-- {setting="board_name"}]]></template_content_plaintext><template_pinned>0</template_pinned></template><template><template_app>downloads</template_app><template_name>digests__item</template_name><template_content_html><![CDATA[<tr style='border-bottom: 1px solid #eeeeee'>
<td dir='{dir}' width='120' align='center' valign='top'>
{{if $file->primary_screenshot_thumb}}
<img src='{$file->primary_screenshot_thumb}' style='border: 1px solid #000; vertical-align: middle;' width='100' height='100'>
@@ -135,4 +135,4 @@
</p>
</td>
</tr>]]></template_content_html><template_data>$file, $email</template_data><template_content_plaintext><![CDATA[{$email->language->addToStack("x_created_file_in", FALSE, array( 'sprintf' => array( $file->author()->name, $file->container()->_title ) ) )}: {$file->title} ({$file->url()})
]]></template_content_plaintext></template></emails>
]]></template_content_plaintext><template_pinned>0</template_pinned></template></emails>
+4
View File
@@ -33,6 +33,10 @@
"real": "app=downloads&module=downloads&controller=browse",
"verify": "\\IPS\\downloads\\Category"
},
"downloads_clubs": {
"friendly": "category/clubs",
"real": "app=downloads&module=downloads&controller=browse&id=clubs"
},
"downloads_categories": {
"friendly": "categories",
"real": "app=downloads&module=downloads&controller=browse&do=categories"
+4
View File
@@ -2,5 +2,9 @@
"Forums": {
"type": "C",
"class": "\\IPS\\forums\\Forum"
},
"Forum": {
"type": "C",
"class": "\\IPS\\forums\\modules\\admin\\forums\\forums"
}
}
+124 -8
View File
@@ -1,6 +1,118 @@
<?xml version="1.0" encoding="UTF-8"?>
<javascript app="downloads">
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.linkedScreenshots.js" javascript_type="controller" javascript_version="102002" javascript_position="1000050">/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/downloads" javascript_name="ips.downloads.browse.js" javascript_type="controller" javascript_version="103005" javascript_position="1000200">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
* ips.downloads.browse.js - Handles general browsing controller needs
*
* Author: Brandon Farber
*/
;( function($, _, undefined){
&quot;use strict&quot;;
ips.controller.register('downloads.front.downloads.browse', {
initialize: function () {
this.on( 'click', '[data-action=&quot;markCategoryRead&quot;]', this.markCategoryRead );
},
/**
* Marks all files in a category as read, triggering an event on the table
*
* @param {event} e Event object
* @returns {void}
*/
markCategoryRead: function (e) {
e.preventDefault();
var self = this;
ips.ui.alert.show( {
type: 'confirm',
icon: 'question',
message: ips.getString('markCategoryAsReadConfirm'),
subText: '',
callbacks: {
ok: function () {
var url = $( e.currentTarget ).attr('href');
ips.getAjax()( url, {
showLoading: true,
bypassRedirect: true
})
.done( function () {
// Trigger event on the table to hide unread markets
self.triggerOn( 'core.global.core.table', 'markTableRead' );
// Hide the link we've just clicked
ips.utils.anim.go( 'fadeOut', $( e.currentTarget ) );
ips.ui.flashMsg.show( ips.getString('categoryMarkedRead') );
})
.fail( function (jqXHR, textStatus, errorThrown) {
window.location = url;
});
}
}
});
}
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="admin" javascript_path="controllers/settings" javascript_name="ips.settings.settings.js" javascript_type="controller" javascript_version="103005" javascript_position="1000050">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
* ips.settings.settings.js
*
* Author: Stuart Silvester
*/
;( function($, _, undefined){
&quot;use strict&quot;;
ips.controller.register('downloads.admin.settings.settings', {
alertOpen: false,
initialize: function () {
this.on( 'uploadComplete', '[data-ipsUploader]', this.promptRebuildPreference );
this.on( 'fileDeleted', this.promptRebuildPreference );
},
promptRebuildPreference: function (e) {
if( this.alertOpen )
{
return;
}
this.alertOpen = true;
/* Show Rebuild Prompt */
ips.ui.alert.show({
type: 'confirm',
message: ips.getString('downloadsScreenshotsWatermark'),
subText: ips.getString('downloadsScreenshotsWatermarkBlurb'),
icon: 'question',
buttons: {
ok: ips.getString('downloadsScreenshotsWatermarkYes'),
cancel: ips.getString('downloadsScreenshotsWatermarkNo')
},
callbacks: {
ok: function(){
$('input[name=rebuildWatermarkScreenshots]').val( 1 );
this.alertOpen = false;
},
cancel: function(){
$('input[name=rebuildWatermarkScreenshots]').val( 0 );
this.alertOpen = false;
}
}
});
}
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.linkedScreenshots.js" javascript_type="controller" javascript_version="103005" javascript_position="1000100">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -72,7 +184,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="102002" javascript_position="1000050"><![CDATA[/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/submit" javascript_name="ips.submit.main.js" javascript_type="controller" javascript_version="103005" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -475,7 +587,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="102002" javascript_position="1000100"><![CDATA[/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.changeLog.js" javascript_type="controller" javascript_version="103005" javascript_position="1000150"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -596,7 +708,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="102002" javascript_position="1000100">/**
<file javascript_app="downloads" javascript_location="front" javascript_path="controllers/view" javascript_name="ips.view.download.js" javascript_type="controller" javascript_version="103005" javascript_position="1000150">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -681,8 +793,7 @@
* @returns {void}
*/
doDownload: function (e) {
this.scope.closest('.ipsDialog').trigger('closeDialog');
var that = this;
if ( $( e.currentTarget ).attr('data-wait') ) {
e.preventDefault();
@@ -706,6 +817,7 @@
if ( secondsRemaining === 0 ) {
clearInterval(interval);
window.location = $( e.currentTarget ).attr('href');
that.scope.closest('.ipsDialog').trigger('closeDialog');
}
}, 1000 );
})
@@ -713,13 +825,17 @@
window.location = $(e.currentTarget).attr('href');
})
}
else
{
this.scope.closest('.ipsDialog').trigger('closeDialog');
}
}
});
}(jQuery, _));</file>
<file javascript_app="downloads" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.submit.js" javascript_type="template" javascript_version="102002" javascript_position="1000150"><![CDATA[/* VIEW TEMPLATES */
<file javascript_app="downloads" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.submit.js" javascript_type="template" javascript_version="103005" javascript_position="1000050"><![CDATA[/* VIEW TEMPLATES */
ips.templates.set('downloads.submit.screenshot', " \
<div class='ipsGrid_span3 ipsAttach ipsImageAttach ipsPad_half ipsAreaBackground_light' id='{{id}}' data-role='file' data-fileid='{{id}}' data-fullsizeurl='{{imagesrc}}' data-thumbnailurl='{{thumbnail}}' data-isImage='1'>\
<div class='ipsGrid_span3 ipsAttach ipsImageAttach ipsPad_half ipsAreaBackground_light' id='{{id}}' data-role='file' data-fileid='{{id}}' data-fullsizeurl='{{imagesrc}}' data-thumbnailurl='{{thumbnail}}' data-fileType='image'>\
<ul class='ipsList_inline ipsImageAttach_controls'>\
<li><input type='radio' name='{{field_name}}_primary_screenshot' id='{{field_name}}_primary_screenshot_{{id}}' value='{{id}}' title='{{#lang}}makePrimaryScreenshot{{/lang}}' {{#default}}checked{{/default}}></li>\
<li class='ipsPos_right' data-role='deleteFileWrapper'>\
+31 -9
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="downloads" version="102002">
<app key="downloads" version="103005">
<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>
@@ -26,9 +26,15 @@
<word key="modlog__action_restorebackup" js="0"><![CDATA[Restored a previous version for a file: <a href='%s'>%s</a>]]></word>
<word key="modlog__action_visibilitybackup" js="0"><![CDATA[Toggled visibility for a previous version for a file: <a href='%s'>%s</a>]]></word>
<word key="modlog__action_deletebackup" js="0"><![CDATA[Deleted a previous version for a file: <a href='%s'>%s</a>]]></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>
<word key="editor__downloads_Downloads" js="0">File Downloads</word>
<word key="editorMedia_downloads_Files" js="0">File Downloads</word>
<word key="downloads_rebuilding_screenshots" js="0">Rebuilding Screenshot Watermarks</word>
<word key="member_restrictions__downloads_Downloads" js="0">Downloads</word>
<word key="restriction_no_downloads" js="0">Restricted from submitting files</word>
<word key="content_stats__downloads_Downloads" js="0">Downloads</word>
<word key="menu__downloads_downloads_categories" js="0">Categories</word>
<word key="subcategories" js="0">Subcategories</word>
<word key="cname" js="0">Name</word>
@@ -113,7 +119,7 @@
<word key="can_feature_downloads_file" js="0">Can feature files?</word>
<word key="can_unfeature_downloads_file" js="0">Can unfeature files?</word>
<word key="can_move_downloads_file" js="0">Can move files?</word>
<word key="can_move_downloads_file_desc" js="0">Will be able to move files only between the categories they have permission to moderate, not to any other category.</word>
<word key="can_move_downloads_file_desc" js="0">Will be able to move files only between the categories they can create new content within.</word>
<word key="can_lock_downloads_file" js="0">Can lock files?</word>
<word key="can_unlock_downloads_file" js="0">Can unlock files?</word>
<word key="can_reply_to_locked_downloads_file" js="0">Can comment on locked files?</word>
@@ -137,12 +143,10 @@
<word key="can_add_item_message_downloads_file" js="0">Can add messages to files?</word>
<word key="can_edit_item_message_downloads_file" js="0">Can edit messages on files?</word>
<word key="can_delete_item_message_downloads_file" js="0">Can delete messages on files?</word>
<word key="modperms__downloads_Files" js="0">Downloads</word>
<word key="can_make_purchasable" js="0">Can enable purchases on files?</word>
<word key="can_make_unpurchasable" js="0">Can disable purchases on files?</word>
<word key="menu__downloads_downloads_fields" js="0">Extra Fields</word>
<word key="r__fields" js="0">Extra Fields</word>
<word key="r__fields_manage" js="0">Can view extra fields?</word>
<word key="r__fields_add" js="0">Can create extra fields?</word>
<word key="r__fields_edit" js="0">Can edit extra fields?</word>
<word key="r__fields_delete" js="0">Can delete extra fields?</word>
<word key="cf_topic" js="0">Include field in topics?</word>
<word key="menu__downloads_downloads_settings" js="0">Settings</word>
<word key="acplogs__downloads_settings" js="0">Updated downloads settings</word>
@@ -154,8 +158,9 @@
<word key="idm_antileech" js="0">Prevent direct linking?</word>
<word key="idm_antileech_desc" js="0">If enabled, users will not be able to obtain a URL which directly downloads a file; users will always have to go through the file's page.</word>
<word key="idm_watermarkpath" js="0">Screenshot watermark</word>
<word key="idm_watermarkpath_desc" js="0"><![CDATA[The image provided will be overlaid on all screenshot images (for example, to show a copyright message). For best results, use a small image with a transparent background.<br><br><a href='{internal.app=downloads&module=downloads&controller=settings&do=rebuildWatermarks}'>Rebuild Existing Screenshots</a>]]></word>
<word key="idm_watermarkpath_desc" js="0">The image provided will be overlaid on all screenshot images (for example, to show a copyright message). For best results, use a small image with a transparent background.</word>
<word key="acplogs__downloads_recount_downloads" js="0">Recounted downloads for category: %s</word>
<word key="download_settings_saved_rebuilding" js="0">Saved. Your screenshots are rebuilding in the background.</word>
<word key="idm_view_approvers" js="0">Can view who approved files?</word>
<word key="idm_bypass_revision" js="0">Can manage versions?</word>
<word key="idm_view_downloads" js="0">Can view who has downloaded files?</word>
@@ -363,8 +368,15 @@
<word key="file__save" js="0">Save</word>
<word key="downloads_no_file" js="0">File not found</word>
<word key="download_teaser" js="0">Create an account or sign in to download this</word>
<word key="download_no_permission" js="0">Sorry, you aren't permitted to download this file.</word>
<word key="download_no_permission_guest" js="0">Sorry, you aren't permitted to download this file. However, you may be able to download if you sign in.</word>
<word key="downloads_file_info" js="0">Downloads</word>
<word key="sort_file_downloads" js="0">Most Downloaded</word>
<word key="club_node_downloads" js="0">Club Files</word>
<word key="file_imported_removed" js="0">The files have been imported and the original copies can now be removed from disk, if desired.</word>
<word key="disable_purchases" js="0">Disable Purchases</word>
<word key="enable_purchases" js="0">Enable Purchases</word>
<word key="purchasing_disabled" js="0">This file is not currently available for purchase.</word>
<word key="block_downloads_Overview" js="0">Downloads Overview</word>
<word key="total_disk_spaced" js="0">Total Diskspace Used</word>
<word key="total_files" js="0">Total Files</word>
@@ -390,6 +402,8 @@
<word key="member__downloads_Downloads" js="0">Downloads</word>
<word key="idm_block_submissions" js="0">Allowed to submit files?</word>
<word key="idm_block_submissions_desc" js="0">Each category has permissions for who can submit files within it. If this is disabled, the user will not be able to submit any files. If enabled, per-category settings will be honored.</word>
<word key="history_restrictions_downloads_1" js="0">disabled ability to submit files</word>
<word key="history_restrictions_downloads_0" js="0">restored ability to submit files</word>
<word key="downloads_stats" js="0">View Downloads Statistics</word>
<word key="submissions" js="0">{# [1:submission][?:submissions]}</word>
<word key="deleted_file" js="0">Deleted File</word>
@@ -407,6 +421,7 @@
<word key="number_of_downloads" js="0">Number of Downloads *</word>
<word key="downloads_bandwidth_used" js="0">Bandwidth Used *</word>
<word key="downloads_stat_of_total" js="0">%s (%d%% of total)</word>
<word key="downloads_stat_of_total_link" js="0">%s (%d%% of total) %s</word>
<word key="downloads_stat_average" js="0">%s (average for all users: %s)</word>
<word key="downloadS_stat_average_of_total" js="0">%d% of total; average for all users: %d</word>
<word key="download_stats_disclaimer" js="0">* This statistic comes from the download log which may be disabled on a per-category basis or set to be pruned periodically.</word>
@@ -481,7 +496,7 @@
<word key="choose_file_nexus_blurb" js="0">This file is available with one of the following packages. Please add one of the following packages to your cart to continue.</word>
<word key="choose_file_nexus_title" js="0">Choose A Package</word>
<word key="file_no_price_for_currency" js="0">This file is not currently available in your chosen currency.</word>
<word key="nexus_file_no_longer_available" js="0">This file is no longer available for download.</word>
<word key="nexus_file_no_longer_available" js="0">This file is no longer available for download, please contact the file author for further information.</word>
<word key="notifications__downloads_Files" js="0">Downloads</word>
<word key="notifications__new_file_version" js="0">A file I am following is updated with a new version</word>
<word key="email_new_file_version_plain" js="0">%s has uploaded a new version of %s,</word>
@@ -507,7 +522,14 @@
<word key="idm_show_most_downloaded" js="0">Show &quot;Most Downloaded&quot; box</word>
<word key="idm_highest_rated_categories" js="0">Categories</word>
<word key="idm_show_most_downloaded_categories" js="0">Categories</word>
<word key="downloads_forum_used" js="0"><![CDATA[This forum is used by the Downloads App to create topics on file submission and cannot be deleted.<br/>Please remove the association from category %s to proceed]]></word>
<word key="makePrimaryScreenshot" js="1">Make this the primary screenshot</word>
<word key="removeScreenshot" js="1">Remove this screenshot</word>
<word key="markCategoryAsReadConfirm" js="1">Are you sure you want to mark all files as read?</word>
<word key="categoryMarkedRead" js="1">The category has been marked as read</word>
<word key="downloadsScreenshotsWatermark" js="1">Rebuild Existing Screenshots?</word>
<word key="downloadsScreenshotsWatermarkBlurb" js="1">Rebuilding existing screenshots will update them with your new watermark image.</word>
<word key="downloadsScreenshotsWatermarkYes" js="1">Yes, Rebuild</word>
<word key="downloadsScreenshotsWatermarkNo" js="1">No</word>
</app>
</language>
+109 -50
View File
@@ -384,7 +384,9 @@
"clast_file_id": "0",
"clast_file_date": "0"
}
]
],
"comment": "",
"reporting": "count"
},
"downloads_cfields": {
"name": "downloads_cfields",
@@ -579,7 +581,9 @@
"cf_position"
]
}
}
},
"comment": "",
"reporting": "count"
},
"downloads_files": {
"name": "downloads_files",
@@ -1213,6 +1217,20 @@
"zerofill": false,
"auto_increment": false,
"binary": false
},
"file_purchasable": {
"name": "file_purchasable",
"type": "BIT",
"length": 1,
"decimals": null,
"values": null,
"allow_null": false,
"default": "1",
"comment": "",
"unsigned": false,
"zerofill": false,
"auto_increment": false,
"binary": false
}
},
"indexes": {
@@ -1326,7 +1344,9 @@
null
]
}
}
},
"comment": "",
"reporting": "count"
},
"downloads_files_records": {
"name": "downloads_files_records",
@@ -1444,18 +1464,18 @@
"zerofill": false
},
"record_size": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
"length": 20,
"name": "record_size",
"type": "BIGINT",
"length": 20,
"decimals": null,
"values": [],
"allow_null": false,
"default": "0",
"comment": "",
"unsigned": false,
"zerofill": false,
"auto_increment": false,
"binary": false
"values": [],
"zerofill": false
},
"record_backup": {
"allow_null": false,
@@ -1500,18 +1520,18 @@
"zerofill": false
},
"record_no_watermark": {
"allow_null": true,
"auto_increment": false,
"binary": false,
"comment": "If the record is for a screenshot, the URL to the un-watermarked version",
"decimals": null,
"default": null,
"length": 0,
"name": "record_no_watermark",
"type": "TEXT",
"length": null,
"decimals": null,
"values": [],
"allow_null": true,
"default": null,
"comment": "If the record is for a screenshot, the URL to the un-watermarked version",
"unsigned": false,
"zerofill": false,
"auto_increment": false,
"binary": false
"values": [],
"zerofill": false
}
},
"indexes": {
@@ -1548,11 +1568,11 @@
"record_realname": {
"type": "key",
"name": "record_realname",
"length": [
191
],
"columns": [
"record_realname"
],
"length": [
250
]
},
"record_type": {
@@ -1569,7 +1589,10 @@
"record_backup"
]
}
}
},
"collation": "utf8mb4_unicode_ci",
"comment": "",
"reporting": "count"
},
"downloads_comments": {
"name": "downloads_comments",
@@ -1762,24 +1785,28 @@
"comment_ip_address"
]
},
"comment_author": {
"type": "key",
"name": "comment_author",
"length": [
191
],
"columns": [
"comment_author"
]
},
"comment_approved": {
"type": "key",
"name": "comment_approved",
"length": [
null,
null
],
"columns": [
"comment_open"
"comment_open",
"comment_date"
]
},
"comment_mid": {
"type": "key",
"name": "comment_mid",
"columns": [
"comment_mid",
"comment_date"
],
"length": [
null,
null
]
}
},
@@ -2011,6 +2038,20 @@
"unsigned": false,
"values": [],
"zerofill": false
},
"review_author_response": {
"name": "review_author_response",
"type": "MEDIUMTEXT",
"length": null,
"decimals": null,
"values": null,
"allow_null": true,
"default": null,
"comment": "",
"unsigned": false,
"zerofill": false,
"auto_increment": false,
"binary": false
}
},
"indexes": {
@@ -2038,9 +2079,11 @@
"type": "key",
"name": "review_mid",
"columns": [
"review_mid"
"review_mid",
"review_date"
],
"length": [
null,
null
]
},
@@ -2058,13 +2101,17 @@
"type": "key",
"name": "review_approved",
"columns": [
"review_approved"
"review_approved",
"review_date"
],
"length": [
null,
null
]
}
}
},
"comment": "",
"reporting": "count"
},
"downloads_downloads": {
"name": "downloads_downloads",
@@ -2140,18 +2187,18 @@
"zerofill": false
},
"dsize": {
"allow_null": false,
"auto_increment": false,
"binary": false,
"comment": "",
"decimals": null,
"default": "0",
"length": 10,
"name": "dsize",
"type": "INT",
"unsigned": false,
"type": "BIGINT",
"length": 20,
"decimals": null,
"values": [],
"zerofill": false
"allow_null": false,
"default": "0",
"comment": "",
"unsigned": true,
"zerofill": false,
"auto_increment": false,
"binary": false
},
"dua": {
"allow_null": true,
@@ -2238,6 +2285,16 @@
"columns": [
"dmid"
]
},
"dip": {
"type": "key",
"name": "dip",
"columns": [
"dip"
],
"length": [
null
]
}
},
"collation": "utf8mb4_unicode_ci"
@@ -2407,7 +2464,9 @@
"b_fileid"
]
}
}
},
"comment": "",
"reporting": "count"
},
"downloads_ccontent": {
"name": "downloads_ccontent",
+24 -12
View File
@@ -1,50 +1,62 @@
[
{
"key": "idm_antileech",
"default": "1"
"default": "1",
"report": "full"
},
{
"key": "idm_featured_count",
"default": "4"
"default": "4",
"report": "full"
},
{
"key": "idm_highest_rated_categories",
"default": "0"
"default": "0",
"report": "bool"
},
{
"key": "idm_link_blacklist",
"default": ""
"default": "",
"report": "bool"
},
{
"key": "idm_newest_categories",
"default": "0"
"default": "0",
"report": "bool"
},
{
"key": "idm_rss",
"default": "1"
"default": "1",
"report": "full"
},
{
"key": "idm_show_featured",
"default": "1"
"default": "1",
"report": "full"
},
{
"key": "idm_show_highest_rated",
"default": "1"
"default": "1",
"report": "full"
},
{
"key": "idm_show_most_downloaded",
"default": "1"
"default": "1",
"report": "full"
},
{
"key": "idm_show_most_downloaded_categories",
"default": "0"
"default": "0",
"report": "bool"
},
{
"key": "idm_show_newest",
"default": "1"
"default": "1",
"report": "full"
},
{
"key": "idm_watermarkpath",
"default": ""
"default": "",
"report": "bool"
}
]
+251 -152
View File
@@ -1,23 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<theme name="Default" author_name="Invision Power Services, Inc" author_url="https://www.invisioncommunity.com">
<template template_group="browse" template_name="categories" template_data="" template_location="front" template_app="downloads"><![CDATA[{{if !\IPS\Request::i()->isAjax()}}
<div class="ipsPageHeader ipsPad_half ipsClearfix ipsSpacer_bottom" id='elDownloadersHeader' data-ipsSticky data-ipsSticky-disableIn='phone'>
<h1 class="ipsType_pageTitle">{lang="__app_downloads"} &nbsp;&nbsp;<a href='#elDownloadsCategories_menu' data-ipsMenu data-ipsMenu-appendTo='#elDownloadersHeader' id='elDownloadsCategories' class='ipsButton ipsButton_light ipsButton_small'><span class='ipsType_light'>{lang="downloads_category_select"}&nbsp;&nbsp;</span> {lang="all"} <i class='fa fa-caret-down'></i></a></h1>
{template="categoryMenu" group="browse" params="\IPS\downloads\Category::roots()"}
</div>
<div class='ipsBox'>
<template template_group="browse" template_name="categories" template_data="$clubsOnly=FALSE" template_location="front" template_app="downloads"><![CDATA[<div class="ipsPageHeader ipsClearfix ipsSpacer_bottom" id='elDownloadersHeader'>
<h1 class="ipsType_pageTitle">{lang="__app_downloads"}</h1>
</div>
{{if !$clubsOnly}}
<div class='ipsBox ipsSpacer_bottom'>
<h2 class='ipsType_sectionTitle ipsType_reset'>{lang="categories"}</h2>
{{endif}}
<ol class="ipsDataList ipsDataList_large">
{template="categoryRow" group="browse" params="NULL, NULL, \IPS\downloads\Category::roots()"}
</ol>
{{if !\IPS\Request::i()->isAjax()}}
</div>
{{endif}}
{{if settings.club_nodes_in_apps and $clubNodes = \IPS\downloads\Category::clubNodes()}}
<div class='ipsBox'>
<h2 class='ipsType_sectionTitle ipsType_reset'><a href="{url="app=downloads&module=downloads&controller=browse&id=clubs" seoTemplate="downloads_clubs"}">{lang="club_node_downloads"}</a></h2>
<ol class="ipsDataList ipsDataList_large">
{template="categoryRow" group="browse" params="NULL, NULL, $clubNodes"}
</ol>
</div>
{{endif}}]]></template>
<template template_group="browse" template_name="categoriesSidebar" template_data="$currentCategory=NULL" template_location="front" template_app="downloads"><![CDATA[{{if !$currentCategory or !$currentCategory->club()}}
{{$categories = $currentCategory ? $currentCategory->children() : \IPS\downloads\Category::roots();}}
{{if !\IPS\downloads\Category::theOnlyNode()}}
{{$clubNodes = $currentCategory ? array() : ( \IPS\Settings::i()->club_nodes_in_apps ? \IPS\downloads\Category::clubNodes() : array() );}}
{{if !\IPS\downloads\Category::theOnlyNode() or $clubNodes}}
<div id='elDownloadsCategoriesBlock' class='ipsWidget ipsWidget_vertical ipsBox'>
<h3 class='ipsType_sectionTitle ipsType_reset'>{{if $currentCategory}}{lang="subcategories"}{{else}}{lang="categories"}{{endif}}</h3>
<div class='ipsPad_half'>
@@ -46,6 +52,25 @@
</li>
{{endif}}
{{endforeach}}
{{if $clubNodes}}
<li>
<a href="{url="app=downloads&module=downloads&controller=browse&id=clubs" seoTemplate="downloads_clubs"}" class='ipsSideMenu_item ipsTruncate ipsTruncate_line'><span class='ipsBadge ipsBadge_style1 ipsPos_right cDownloadsCategoryCount'>{number="\IPS\downloads\Category::filesInClubNodes()"}</span><strong class='ipsType_normal'>{lang="club_node_downloads"}</strong></a>
<ul class="ipsSideMenu_list">
{{foreach $clubNodes as $idx => $subcategory}}
{{if $subcategory->open OR \IPS\Member::loggedIn()->isAdmin()}}
<li>
{{if $idx >= 5}}
<a href='{$category->url()}' class='ipsSideMenu_item'><span class='ipsType_light ipsType_small'>{lang="and_x_more" pluralize="count( $category->children() ) - 5"}</span></a>
{{break;}}
{{else}}
<a href="{$subcategory->url()}" class='ipsSideMenu_item ipsTruncate ipsTruncate_line'><strong class='ipsPos_right ipsType_small cDownloadsCategoryCount'>{number="\IPS\downloads\File::contentCount( $subcategory )"}</strong>{$subcategory->_title}</a>
{{endif}}
</li>
{{endif}}
{{endforeach}}
</ul>
</li>
{{endif}}
</ul>
<p class='ipsType_center'>
<a href='{url="app=downloads&module=downloads&controller=browse&do=categories" seoTemplate="downloads_categories"}' class=''>{lang="browse_categories_d"} &nbsp;<i class='fa fa-caret-right'></i></a>
@@ -78,24 +103,27 @@
</div>
{{endif}}
</div>
{template="categoryMenu" group="browse" params="$category->children()"}
{{if \IPS\downloads\Category::canOnAny('add') AND ( !$category OR $category->can('add') ) }}
<ul class="ipsToolList ipsToolList_horizontal ipsResponsive_hidePhone ipsClearfix ipsSpacer_both">
{template="categoryButtons" group="browse" params="\IPS\downloads\Category::canOnAny('add'), $category"}
</ul>
{{endif}}
<div data-controller='downloads.front.downloads.browse'>
{template="categoryMenu" group="browse" params="$category->children()"}
<div class='ipsBox cDownloadsCategoryTable'>
{$table|raw}
{{if \IPS\downloads\Category::canOnAny('add') AND ( !$category OR $category->can('add') ) }}
<ul class="ipsToolList ipsToolList_horizontal ipsResponsive_hidePhone ipsClearfix ipsSpacer_both">
{template="categoryButtons" group="browse" params="\IPS\downloads\Category::canOnAny('add'), $category"}
</ul>
{{endif}}
<div class='ipsBox cDownloadsCategoryTable'>
{$table|raw}
</div>
{{if \IPS\downloads\Category::canOnAny('add') AND ( !$category OR $category->can('add') ) }}
<ul class="ipsToolList ipsToolList_horizontal ipsResponsive_showPhone ipsResponsive_block ipsClearfix ipsSpacer_top">
{template="categoryButtons" group="browse" params="\IPS\downloads\Category::canOnAny('add'), $category"}
</ul>
{{endif}}
</div>
{{if \IPS\downloads\Category::canOnAny('add') AND ( !$category OR $category->can('add') ) }}
<ul class="ipsToolList ipsToolList_horizontal ipsResponsive_showPhone ipsResponsive_block ipsClearfix ipsSpacer_top">
{template="categoryButtons" group="browse" params="\IPS\downloads\Category::canOnAny('add'), $category"}
</ul>
{{endif}}
<div class='ipsResponsive_showPhone ipsResponsive_block ipsSpacer_top'>
{template="follow" app="core" group="global" params="'downloads', 'category', $category->_id, \IPS\downloads\File::containerFollowers( $category )->count( TRUE )"}
</div>
@@ -106,13 +134,27 @@
<template template_group="browse" template_name="categoryButtons" template_data="$canSubmitFiles, $currentCategory=NULL" template_location="front" template_app="downloads"><![CDATA[
{{if $canSubmitFiles AND ( !$currentCategory OR $currentCategory->can('add') ) }}
<li class='ipsToolList_primaryAction'>
{{if $currentCategory}}
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=downloads&module=downloads&controller=submit&category={$currentCategory->id}&do=submit" seoTemplate="downloads_submit"}">
{{if $currentCategory OR $currentCategory = \IPS\downloads\Category::theOnlyNode()}}
{{if \IPS\Member::loggedIn()->group['idm_bulk_submit']}}
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=downloads&module=downloads&controller=submit&category={$currentCategory->id}&_new=1" seoTemplate="downloads_submit"}" data-ipsDialog data-ipsDialog-title='{lang="submit_a_file"}' data-ipsDialog-size='narrow'>
{lang="submit_a_file"}
</a>
{{else}}
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=downloads&module=downloads&controller=submit&category={$currentCategory->id}&_new=1&do=submit" seoTemplate="downloads_submit"}">
{lang="submit_a_file"}
</a>
{{endif}}
{{else}}
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{{if $currentCategory}}{url="app=downloads&module=downloads&controller=submit&category={$currentCategory->id}&_new=1" seoTemplate="downloads_submit"}{{else}}{url="app=downloads&module=downloads&controller=submit&_new=1" seoTemplate="downloads_submit"}{{endif}}" data-ipsDialog data-ipsDialog-title='{lang="submit_a_file"}' data-ipsDialog-size='narrow'>
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=downloads&module=downloads&controller=submit&_new=1" seoTemplate="downloads_submit"}" data-ipsDialog data-ipsDialog-title='{lang="submit_a_file"}' data-ipsDialog-size='narrow'>
{lang="submit_a_file"}
</a>
{{endif}}
{lang="submit_a_file"}</a>
</li>
{{endif}}
{{if $currentCategory AND $currentCategory->last_file_id AND \IPS\Member::loggedIn()->member_id}}
<li>
<a href="{$currentCategory->url()->setQueryString( array( 'do' => 'markRead' ) )->csrf()}" title='{lang="mark_category_read_title"}' class='ipsButton ipsButton_medium ipsButton_fullWidth ipsButton_link' data-action='markCategoryRead'><i class="fa fa-check"></i> {lang="mark_category_read"}</a>
</li>
{{endif}}]]></template>
<template template_group="browse" template_name="categoryMenu" template_data="$categories" template_location="front" template_app="downloads"><![CDATA[<ul class='ipsMenu ipsMenu_auto ipsHide' id='elDownloadsCategories_menu'>
{{foreach $categories as $cat}}
@@ -126,15 +168,20 @@
]]></template>
<template template_group="browse" template_name="categoryRow" template_data="$table, $headers, $categories" 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="ipsDataItem ipsDataItem_responsivePhoto ipsClearfix">
<div class='ipsDataItem_icon'>
<span class='ipsItemStatus ipsItemStatus_large {{if !\IPS\downloads\File::containerUnread( $category )}}ipsItemStatus_read{{endif}}'>
<i class="fa fa-download"></i>
</span>
{{if $club}}
<img src="{{if $club->profile_photo}}{file="$club->profile_photo" extension="core_Clubs"}{{else}}{resource="default_club.png" app="core" location="global"}{{endif}}" class='ipsItemStatus ipsItemStatus_large {{if !\IPS\downloads\File::containerUnread( $category )}}ipsItemStatus_read{{endif}}'>
{{else}}
<span class='ipsItemStatus ipsItemStatus_large {{if !\IPS\downloads\File::containerUnread( $category )}}ipsItemStatus_read{{endif}}'>
<i class="fa fa-download"></i>
</span>
{{endif}}
</div>
<div class="ipsDataItem_main ipsPos_middle">
<h4 class="ipsDataItem_title ipsType_large">
<a href="{$category->url()}">{$category->_title}</a>
<a href="{$category->url()}">{{if $club}}{lang="club_node" sprintf="$club->name, $category->_title"}{{else}}{$category->_title}{{endif}}</a>
</h4>
{{if $category->hasChildren()}}
<ul class="ipsDataItem_subList ipsList_inline">
@@ -235,7 +282,7 @@
{{if !$file->isPaid() or in_array( 'downloads', explode( ',', settings.idm_nexus_display ) )}}
<li class='ipsType_normal'>
{{if $file->downloads}}
<i class='fa fa-arrow-circle-down'></i> {$file->downloads}
<i class='fa fa-arrow-circle-down'></i> {number="$file->downloads"}
{{else}}
<span class='ipsType_light'><i class='fa fa-arrow-circle-down'></i> 0</span>
{{endif}}
@@ -289,11 +336,13 @@
<h2 class='ipsType_sectionTitle ipsType_reset'>{lang="featured_downloads"}</h2>
<section id='elDownloadsFeatured'>
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-fullSizeItems data-ipsCarousel-slideshow data-ipsCarousel-shadows='false'>
<ul class='cDownloadsCarousel ipsClearfix' data-role="carouselItems">
{{foreach $featured as $file}}
{template="featuredFile" group="browse" app="downloads" params="$file"}
{{endforeach}}
</ul>
<div class='ipsCarousel_inner'>
<ul class='cDownloadsCarousel ipsClearfix' data-role="carouselItems">
{{foreach $featured as $file}}
{template="featuredFile" group="browse" app="downloads" params="$file"}
{{endforeach}}
</ul>
</div>
<span class='ipsCarousel_shadow ipsCarousel_shadowLeft'></span>
<span class='ipsCarousel_shadow ipsCarousel_shadowRight'></span>
<a href='#' class='ipsCarousel_nav ipsHide' data-action='prev'><i class='fa fa-chevron-left'></i></a>
@@ -308,7 +357,7 @@
{{if \IPS\downloads\Category::canOnAny('add')}}
{template="categoryButtons" group="browse" params="\IPS\downloads\Category::canOnAny('add')"}
{{endif}}
{{if \IPS\downloads\Category::theOnlyNode()}}
{{if \IPS\downloads\Category::theOnlyNode() and ( !\IPS\Settings::i()->club_nodes_in_apps or !\IPS\downloads\Category::clubNodes() )}}
<li><a class='ipsButton ipsButton_link ipsButton_medium ipsButton_fullWidth' href='{expression="\IPS\downloads\Category::theOnlyNode()->url()"}'>{lang="view_all_files"}</a></li>
{{endif}}
</ul>
@@ -319,11 +368,13 @@
<div class='ipsPad_half'>
{{if count( $new )}}
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-showDots>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $new as $idx => $file}}
{template="indexBlock" group="browse" params="$file"}
{{endforeach}}
</ul>
<div class='ipsCarousel_inner'>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $new as $idx => $file}}
{template="indexBlock" group="browse" params="$file"}
{{endforeach}}
</ul>
</div>
<span class='ipsCarousel_shadow ipsCarousel_shadowLeft'></span>
<span class='ipsCarousel_shadow ipsCarousel_shadowRight'></span>
<a href='#' class='ipsCarousel_nav ipsHide' data-action='prev'><i class='fa fa-chevron-left'></i></a>
@@ -342,11 +393,13 @@
<div class='ipsPad_half'>
{{if count( $rated )}}
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-showDots>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $rated as $idx => $file}}
{template="indexBlock" group="browse" params="$file"}
{{endforeach}}
</ul>
<div class='ipsCarousel_inner'>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $rated as $idx => $file}}
{template="indexBlock" group="browse" params="$file"}
{{endforeach}}
</ul>
</div>
<span class='ipsCarousel_shadow ipsCarousel_shadowLeft'></span>
<span class='ipsCarousel_shadow ipsCarousel_shadowRight'></span>
<a href='#' class='ipsCarousel_nav ipsHide' data-action='prev'><i class='fa fa-chevron-left'></i></a>
@@ -365,11 +418,13 @@
<div class='ipsPad_half'>
{{if count( $downloaded )}}
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-showDots>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $downloaded as $idx => $file}}
{template="indexBlock" group="browse" params="$file"}
{{endforeach}}
</ul>
<div class='ipsCarousel_inner'>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $downloaded as $idx => $file}}
{template="indexBlock" group="browse" params="$file"}
{{endforeach}}
</ul>
</div>
<span class='ipsCarousel_shadow ipsCarousel_shadowLeft'></span>
<span class='ipsCarousel_shadow ipsCarousel_shadowRight'></span>
<a href='#' class='ipsCarousel_nav ipsHide' data-action='prev'><i class='fa fa-chevron-left'></i></a>
@@ -396,7 +451,6 @@
{{if $file->unread()}}
<span class='ipsItemStatus ipsItemStatus_small' data-ipsTooltip title='{{if $file->unread() === -1}}{lang="new"}{{else}}{lang="updated"}{{endif}}'><i class="fa fa-circle"></i></span>&nbsp;
{{endif}}
<a href='{$file->url()}' title='{lang="view_this_file" sprintf="$file->name"}'>{$file->name}</a>
{{if $file->mapped('pinned') || $file->hidden() === -1 || $file->hidden() === 1}}
{{if $file->hidden() === -1}}
<span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$file->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span>
@@ -407,18 +461,19 @@
<span class="ipsBadge ipsBadge_small ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span>
{{endif}}
{{endif}}
<a href='{$file->url()}' title='{lang="view_this_file" sprintf="$file->name"}'>{$file->name}</a>
</h3>
<p class='ipsType_medium ipsType_reset ipsType_blendLinks ipsTruncate ipsTruncate_line'>{lang="byline_nodate" htmlsprintf="$file->author()->link()"}</p>
{{if $file->container()->bitoptions['reviews']}}
{template="rating" group="global" location="front" app="core" params="'medium', $file->rating, \IPS\Settings::i()->reviews_rating_out_of"}
{template="rating" group="global" location="front" app="core" params="'medium', $file->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of"}
{{endif}}
<p class='ipsType_medium ipsType_reset'>
{{if $file->isPaid() and in_array( 'purchases', explode( ',', settings.idm_nexus_display ) )}}
<span {{if !$file->purchaseCount()}}class='ipsType_light'{{endif}} title='{lang="x_purchases" pluralize="$file->purchaseCount()"}' data-ipsTooltip><i class='fa fa-shopping-cart'></i> {$file->purchaseCount()}</span>&nbsp;&nbsp;
{{endif}}
{{if !$file->isPaid() or in_array( 'downloads', explode( ',', settings.idm_nexus_display ) )}}
<span {{if !$file->downloads}}class='ipsType_light'{{endif}} title='{lang="x_downloads" pluralize="$file->downloads"}' data-ipsTooltip><i class='fa fa-arrow-circle-down'></i> {$file->downloads}</span>&nbsp;&nbsp;
<span {{if !$file->downloads}}class='ipsType_light'{{endif}} title='{lang="x_downloads" pluralize="$file->downloads"}' data-ipsTooltip><i class='fa fa-arrow-circle-down'></i> {number="$file->downloads"}</span>&nbsp;&nbsp;
{{endif}}
{{if $file->container()->bitoptions['comments']}}<span {{if !$file->comments}}class='ipsType_light'{{endif}} title='{lang="num_comments" pluralize="$file->comments"}' data-ipsTooltip><i class='fa fa-comment'></i> {$file->comments}</span>{{endif}}
@@ -518,7 +573,7 @@
</p>
{{if count( $file->tags() )}}
{template="tags" group="global" app="core" params="$file->tags()"}
{template="tags" group="global" app="core" params="$file->tags(), TRUE"}
{{endif}}
</div>
<div class='ipsDataItem_generic ipsDataItem_size8'>
@@ -536,7 +591,7 @@
{{endif}}
</p>
{{endif}}
<p class='ipsType_medium'><strong>{{if $file->updated == $file->submitted}}{lang="submitted"} {datetime="$file->submitted"}{{else}}{lang="updated"} {datetime="$file->updated"}{{endif}}</strong></p>
<p class='ipsType_medium'><strong>{{if $file->updated == $file->submitted}}{lang="submitted"} {datetime="$file->submitted" lowercase="true"}{{else}}{lang="updated"} {datetime="$file->updated" lowercase="true"}{{endif}}</strong></p>
</div>
{{if method_exists( $table, 'canModerate' ) AND $table->canModerate()}}
<div class='ipsDataItem_modCheck'>
@@ -564,6 +619,8 @@
<a href='{$v->url()}' target='_blank'>{$v->name}</a> <span class="ipsType_light">({lang="num_views_with_number" pluralize="$v->views"})</span>
{{elseif $k === 'most_downloaded_file'}}
<a href='{$v->url()}' target='_blank'>{$v->name}</a> <span class="ipsType_light">({lang="num_downloads" pluralize="$v->downloads"})</span>
{{elseif $k === 'total_files' OR $k === 'total_views' OR $k === 'total_downloads'}}
{number="$v"}
{{else}}
{$v}
{{endif}}
@@ -587,25 +644,25 @@
{template="rating" group="global" location="front" app="core" params="'large', $file->rating, \IPS\Settings::i()->reviews_rating_out_of"} &nbsp;&nbsp;
{{endif}}
<span class='ipsType_reset'>{{if !$file->downloads}}<span class='ipsType_light'>{{endif}}<i class='fa fa-arrow-circle-down'></i> {$file->downloads}{{if !$file->downloads}}</span>{{endif}} {{if $file->container()->bitoptions['comments']}}&nbsp;&nbsp;{{if !$file->comments}}<span class='ipsType_light'>{{endif}}<i class='fa fa-comment'></i> {$file->comments}{{endif}}{{if !$file->comments}}</span>{{endif}}</span>
<span class='ipsType_reset'>{{if !$file->downloads}}<span class='ipsType_light'>{{endif}}<i class='fa fa-arrow-circle-down'></i> {number="$file->downloads"}{{if !$file->downloads}}</span>{{endif}} {{if $file->container()->bitoptions['comments']}}&nbsp;&nbsp;{{if !$file->comments}}<span class='ipsType_light'>{{endif}}<i class='fa fa-comment'></i> {$file->comments}{{endif}}{{if !$file->comments}}</span>{{endif}}</span>
</div>
</div>
</div>]]></template>
<template template_group="global" template_name="embedFile" template_data="$item, $url, $image=NULL" template_location="front" template_app="downloads"><![CDATA[
<div data-embedInfo-maxSize='500' class='ipsRichEmbed'>
{template="embedHeader" group="embed" app="core" params="$item, \IPS\Member::loggedIn()->language()->addToStack( 'x_created_file_in', FALSE, array( 'sprintf' => array( $item->author()->name, $item->container()->_title ) ) ), $item->mapped('date')"}
{template="embedHeader" group="embed" app="core" params="$item, \IPS\Member::loggedIn()->language()->addToStack( 'x_created_file_in', FALSE, array( 'sprintf' => array( $item->author()->name, $item->container()->_title ) ) ), $item->mapped('date'), $url"}
{{if $item->primary_screenshot_thumb}}
<div class='ipsRichEmbed_masthead ipsRichEmbed_mastheadBg cFileEmbed ipsType_center'>
<a href='{$item->url()}' title='{$item->mapped('title')}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), \IPS\File::get( 'downloads_Screenshots', $item->primary_screenshot_thumb )->url )"}") '>
<a href='{$url}' title='{$item->mapped('title')}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), \IPS\File::get( 'downloads_Screenshots', $item->primary_screenshot_thumb )->url )"}") '>
<img src='{file="$item->primary_screenshot_thumb" extension="downloads_Screenshots"}' alt="{$item->mapped('title')}" class='ipsHide'>
</a>
</div>
{{else}}
<div class='cFileEmbed ipsNoThumb ipsNoThumb_video'>&nbsp;</div>
{{endif}}
<div class='ipsPad ipsClearfix'>
<div class='ipsPad_double ipsClearfix'>
<h3 class='ipsRichEmbed_itemTitle ipsTruncate ipsTruncate_line ipsType_blendLinks'>
<a href='{$item->url()}' title="{$item->mapped('title')}">{$item->mapped('title')}</a>
<a href='{$url}' title="{$item->mapped('title')}">{$item->mapped('title')}</a>
</h3>
{{if \IPS\Application::appIsEnabled( 'nexus' ) and settings.idm_nexus_on}}
<ul class='ipsList_inline ipsType_normal ipsSpacer_bottom ipsSpacer_half'>
@@ -660,13 +717,13 @@
</div>]]></template>
<template template_group="global" template_name="embedFileComment" template_data="$comment, $item, $url" template_location="front" template_app="downloads"><![CDATA[
<div data-embedInfo-maxSize='500' class='ipsRichEmbed'>
{template="embedHeader" group="embed" app="core" params="$comment, \IPS\Member::loggedIn()->language()->addToStack( 'x_commented_file', FALSE, array( 'sprintf' => array( $comment->author()->name ) ) ), $comment->mapped('date')"}
<div class='ipsPad'>
{template="embedHeader" group="embed" app="core" params="$comment, \IPS\Member::loggedIn()->language()->addToStack( 'x_commented_file', FALSE, array( 'sprintf' => array( $comment->author()->name ) ) ), $comment->mapped('date'), $url"}
<div class='ipsPad_double'>
<div class='ipsRichEmbed_originalItem ipsAreaBackground_reset ipsSpacer_bottom ipsType_blendLinks'>
<div>
{{if $item->primary_screenshot_thumb}}
<div class='ipsRichEmbed_masthead ipsRichEmbed_mastheadBg ipsRichEmbed_mastheadBg_small cFileEmbed ipsType_center'>
<a href='{$item->url()}' title='{$item->mapped('title')}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), \IPS\File::get( 'downloads_Screenshots', $item->primary_screenshot_thumb )->url )"}") '>
<a href='{$url}' title='{$item->mapped('title')}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), \IPS\File::get( 'downloads_Screenshots', $item->primary_screenshot_thumb )->url )"}") '>
<img src='{file="$item->primary_screenshot_thumb" extension="downloads_Screenshots"}' alt="{$item->mapped('title')}" class='ipsHide'>
</a>
</div>
@@ -683,7 +740,7 @@
{$comment->truncated(TRUE)|raw}
</div>
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and count( $comment->reactions() ) and settings.reputation_enabled}}
{{if settings.reputation_enabled and \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and count( $comment->reactions() )}}
<ul class='ipsList_inline ipsSpacer_top ipsSpacer_half'>
<li>
{template="reactionOverview" app="core" group="global" params="$comment, TRUE, 'small'"}
@@ -712,19 +769,19 @@
<li {{if !$item->purchaseCount()}}class='ipsType_light'{{endif}} title="{lang="x_purchases" pluralize="$item->purchaseCount()"}"><i class='fa fa-shopping-cart'></i> {$item->purchaseCount()}</li>
{{endif}}
{{if !$item->isPaid() or in_array( 'downloads', explode( ',', settings.idm_nexus_display ) )}}
<li {{if !$item->downloads}}class='ipsType_light'{{endif}} title="{lang="num_downloads" pluralize="$item->downloads"}"><i class='fa fa-arrow-circle-down'></i> {$item->downloads}</li>
<li {{if !$item->downloads}}class='ipsType_light'{{endif}} title="{lang="num_downloads" pluralize="$item->downloads"}"><i class='fa fa-arrow-circle-down'></i> {number="$item->downloads"}</li>
{{endif}}
</ul>
]]></template>
<template template_group="global" template_name="embedFileReview" template_data="$comment, $item, $url" template_location="front" template_app="downloads"><![CDATA[
<div data-embedInfo-maxSize='500' class='ipsRichEmbed'>
{template="embedHeader" group="embed" app="core" params="$comment, \IPS\Member::loggedIn()->language()->addToStack( 'x_reviewed_file', FALSE, array( 'sprintf' => array( $comment->author()->name ) ) ), $comment->mapped('date')"}
<div class='ipsPad'>
{template="embedHeader" group="embed" app="core" params="$comment, \IPS\Member::loggedIn()->language()->addToStack( 'x_reviewed_file', FALSE, array( 'sprintf' => array( $comment->author()->name ) ) ), $comment->mapped('date'), $url"}
<div class='ipsPad_double'>
<div class='ipsRichEmbed_originalItem ipsAreaBackground_reset ipsSpacer_bottom ipsType_blendLinks'>
<div>
{{if $item->primary_screenshot_thumb}}
<div class='ipsRichEmbed_masthead ipsRichEmbed_mastheadBg ipsRichEmbed_mastheadBg_small cFileEmbed ipsType_center'>
<a href='{$item->url()}' title='{$item->mapped('title')}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), \IPS\File::get( 'downloads_Screenshots', $item->primary_screenshot_thumb )->url )"}") '>
<a href='{$url}' title='{$item->mapped('title')}' style='background-image: url( "{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), \IPS\File::get( 'downloads_Screenshots', $item->primary_screenshot_thumb )->url )"}") '>
<img src='{file="$item->primary_screenshot_thumb" extension="downloads_Screenshots"}' alt="{$item->mapped('title')}" class='ipsHide'>
</a>
</div>
@@ -746,7 +803,7 @@
{$comment->truncated(TRUE)|raw}
</div>
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and count( $comment->reactions() ) and settings.reputation_enabled}}
{{if settings.reputation_enabled and \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and count( $comment->reactions() )}}
<ul class='ipsList_inline ipsSpacer_top ipsSpacer_half'>
<li>
{template="reactionOverview" app="core" group="global" params="$comment, TRUE, 'small'"}
@@ -755,7 +812,7 @@
{{endif}}
</div>
</div>]]></template>
<template template_group="global" template_name="link" template_data="$file" template_location="global" template_app="downloads"><![CDATA[<div class='ipsType_break ipsContained'><a href="{$file->url()}" class="ipsType_blendLinks" target="_blank" rel='noopener noreferrer'>{$file->name}</a></div>]]></template>
<template template_group="global" template_name="link" template_data="$file" template_location="global" template_app="downloads"><![CDATA[<div class='ipsType_break ipsContained'><a href="{$file->url()}" class="ipsType_blendLinks" 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;}}
@@ -857,7 +914,7 @@
<div class='ipsColumn ipsColumn_narrow'>
<a href='{$url}'>
{{if $screenshot}}
<img src='{file="$screenshot" extension="downloads_Screenshots"}' class='ipsImage ipsStream_image'>
{template="thumbImage" group="global" app="core" location="front" params="$screenshot, $indexData['index_title'], 'medium', '', 'view_this', NULL, 'downloads_Screenshots'"}
{{else}}
<div class='ipsNoThumb ipsNoThumb_file ipsThumb_medium'></div>
{{endif}}
@@ -870,7 +927,7 @@
{{endif}}
{{if trim( $indexData['index_content'] ) !== ''}}
<div class='ipsType_richText ipsType_break ipsType_medium' {{if !( \IPS\Dispatcher::i()->application->directory == 'core' and \IPS\Dispatcher::i()->module and \IPS\Dispatcher::i()->module->key == 'search' )}}data-ipsTruncate data-ipsTruncate-type='remove' data-ipsTruncate-size='3 lines' data-ipsTruncate-watch='false'{{else}}data-searchable data-findTerm{{endif}}>
{$indexData['index_content']|raw}
{expression="\IPS\Content\Search\Result::preDisplay( $indexData['index_content'] )" raw="true"}
</div>
{{endif}}
</div>
@@ -890,7 +947,7 @@
<div class='ipsColumn ipsColumn_medium'>
<a href='{$url}'>
{{if $screenshot}}
<img src='{file="$screenshot" extension="downloads_Screenshots"}' class='ipsImage ipsStream_image' alt='{lang="idm_screenshot_for" sprintf="$indexData['index_title']"}'>
{template="thumbImage" group="global" app="core" location="front" params="$screenshot, $indexData['index_title'], 'large', '', 'view_this', NULL, 'downloads_Screenshots'"}
{{else}}
<div class='ipsNoThumb ipsThumb_small'></div>
{{endif}}
@@ -905,7 +962,7 @@
{{if trim( $indexData['index_content'] ) !== ''}}
<div class='ipsSpacer_top ipsSpacer_half ipsType_richText ipsType_break ipsType_medium' {{if !( \IPS\Dispatcher::i()->application->directory == 'core' and \IPS\Dispatcher::i()->module and \IPS\Dispatcher::i()->module->key == 'search' )}}data-ipsTruncate data-ipsTruncate-type='remove' data-ipsTruncate-size='2 lines' data-ipsTruncate-watch='false'{{else}}data-searchable data-findTerm{{endif}}>
{$indexData['index_content']|raw}
{expression="\IPS\Content\Search\Result::preDisplay( $indexData['index_content'] )" raw="true"}
</div>
{{endif}}
@@ -940,11 +997,13 @@
<section data-controller='nexus.front.store.register'>
<div class='ipsBox ipsSpacer_bottom ipsPad_half'>
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-showDots data-role='productCarousel'>
<ul class='cNexusCarousel cNexusCategory_grid ipsClearfix' data-role="carouselItems">
{{foreach $products as $package}}
{template="packageBlock" app="nexus" group="store" params="$package, TRUE, TRUE, TRUE"}
{{endforeach}}
</ul>
<div class='ipsCarousel_inner'>
<ul class='cNexusCarousel cNexusCategory_grid ipsClearfix' data-role="carouselItems">
{{foreach $products as $package}}
{template="packageBlock" app="nexus" group="store" params="$package, TRUE, TRUE, TRUE"}
{{endforeach}}
</ul>
</div>
<span class='ipsCarousel_shadow ipsCarousel_shadowLeft'></span>
<span class='ipsCarousel_shadow ipsCarousel_shadowRight'></span>
<a href='#' class='ipsCarousel_nav ipsHide' data-action='prev'><i class='fa fa-chevron-left'></i></a>
@@ -1002,10 +1061,13 @@
</div>]]></template>
<template template_group="nexus" template_name="fileInfo" template_data="$file" template_location="front" template_app="downloads"></template>
<template template_group="nexus" template_name="filePurchaseInfo" template_data="$file" template_location="front" template_app="downloads"><![CDATA[{{if $file->container()->can( 'download' )}}
<a href='{{if settings.idm_antileech}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}' class='ipsButton ipsButton_medium ipsButton_primary' {{if $file->container()->message('disclaimer') or count( $file->files() ) > 1 or member.group['idm_wait_period']}}data-ipsDialog{{endif}}>{lang="download_now"}</a>
<a {{if $file->canView() }}href='{{if settings.idm_antileech}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}'{{endif}} class='ipsButton ipsButton_medium {{if $file->canView()}}ipsButton_primary{{else}}ipsButton_disabled{{endif}}' {{if $file->container()->message('disclaimer') or count( $file->files() ) > 1 or member.group['idm_wait_period']}}data-ipsDialog{{endif}}>{lang="download_now"}</a>
{{endif}}
{{if $file->container()->can( 'view' )}}
<a href='{$file->url()}' class='ipsButton ipsButton_medium ipsButton_alternate'>{lang="file_view_details"}</a>
<a {{if $file->canView() }}href='{$file->url()}'{{endif}} class='ipsButton ipsButton_medium {{if $file->canView()}}ipsButton_alternate{{else}}ipsButton_disabled{{endif}}'>{lang="file_view_details"}</a>
{{endif}}
{{if !$file->canView()}}
<p class='ipsType_light'>{lang="nexus_file_no_longer_available"}</p>
{{endif}}]]></template>
<template template_group="stats" template_name="downloadsTable" template_data="$select, $pagination, $members" template_location="admin" template_app="downloads"><![CDATA[
{{if trim( $pagination )}}
@@ -1040,11 +1102,12 @@
<div class="ipsPad_half ipsAreaBackground">
{lang="download_graph_disclaimer"}
</div>]]></template>
<template template_group="stats" template_name="information" template_data="$table" template_location="admin" template_app="downloads"><![CDATA[{$table|raw}
<br>
<div class="ipsPad_half ipsType_light">
<template template_group="stats" template_name="information" template_data="$member, $table" template_location="admin" template_app="downloads"><![CDATA[{$table|raw}
<div class="ipsPad_half ipsType_light ipsType_small">
{lang="download_stats_disclaimer"}
</div>]]></template>
<template template_group="stats" template_name="link" template_data="$member, $type, $lang" template_location="admin" template_app="downloads"><![CDATA[
&nbsp;&nbsp;<a href="{url="app=core&module=members&controller=members&do=editBlock&block=IPS\\downloads\\extensions\\core\\MemberACPProfileContentTab\\Downloads&id={$member->member_id}&chart={$type}"}" data-ipsDialog data-ipsDialog-title="{lang="$lang"}">({lang="$lang"})</a>]]></template>
<template template_group="stats" template_name="submittersTable" template_data="$select, $pagination, $members" template_location="admin" template_app="downloads"><![CDATA[
{{if trim( $pagination )}}
{$pagination|raw}
@@ -1096,7 +1159,7 @@
{{endif}}
<form accept-charset='utf-8' method="post" action="{$form->action}" enctype="multipart/form-data" id='elDownloadsSubmit' data-ipsForm>
<form accept-charset='utf-8' method="post" action="{$form->action}" enctype="multipart/form-data" id='elDownloadsSubmit' data-ipsForm data-ipsFormSubmit>
<input type="hidden" name="{$form->id}_submitted" value="1">
{{foreach $form->hiddenValues as $k => $v}}
<input type="hidden" name="{$k}" value="{$v}">
@@ -1139,13 +1202,14 @@
</div>]]></template>
<template template_group="submit" template_name="newVersion" template_data="$form, $versioning" template_location="front" template_app="downloads"><![CDATA[<div class='ipsPageHeader ipsSpacer_bottom'>
<h1 class='ipsType_pageTitle'>{lang="upload_new_version"}</h1>
{{if $versioning and !member.group['idm_bypass_revision']}}
<div class='ipsLayout_contentSection ipsType_textBlock ipsType_normal'>
{lang="new_version_versioning"}
</div>
<br>
{{endif}}
</div>
{{if $versioning and !member.group['idm_bypass_revision']}}
<div class='ipsLayout_contentSection ipsType_textBlock ipsType_normal'>
{lang="new_version_versioning"}
</div>
<br>
{{endif}}
{$form|raw}]]></template>
<template template_group="submit" template_name="submitForm" template_data="$form, $category, $terms, $bulk=0" template_location="front" template_app="downloads"><![CDATA[
{{$nonInfoFields = array('files', 'import_files', 'url_files', 'screenshots', 'url_screenshots');}}
@@ -1166,7 +1230,7 @@
{{endif}}
<form accept-charset='utf-8' method="post" action="{$form->action}" id='elDownloadsSubmit' enctype="multipart/form-data" {{if $category->bitoptions['allowss'] AND $category->bitoptions['reqss']}}data-screenshotsReq='1'{{endif}} {{if $bulk}}data-bulkUpload='1'{{endif}} data-ipsForm data-controller='downloads.front.submit.main'>
<form accept-charset='utf-8' method="post" action="{$form->action}" id='elDownloadsSubmit' enctype="multipart/form-data" {{if $category->bitoptions['allowss'] AND $category->bitoptions['reqss']}}data-screenshotsReq='1'{{endif}} {{if $bulk}}data-bulkUpload='1'{{endif}} data-ipsForm data-ipsFormSubmit data-controller='downloads.front.submit.main'>
<input type="hidden" name="{$form->id}_submitted" value="1">
{{foreach $form->hiddenValues as $k => $v}}
<input type="hidden" name="{$k}" value="{$v}">
@@ -1444,7 +1508,7 @@
{{endforeach}}
{{if $uploadField}}
<input type="hidden" name="MAX_FILE_SIZE" value="{$uploadField}">
<input type="hidden" name="plupload" value="{expression="md5( uniqid() )"}">
<input type="hidden" name="plupload" value="{expression="md5( mt_rand() )"}">
{{endif}}
<div class='ipsAreaBackground_light ipsPad'>
<h2 class='ipsType_sectionHead'>{lang="write_review"}</h2>
@@ -1462,13 +1526,15 @@
</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-{$file->id}' id='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-{$file->id}' id='comments'>
{template="featuredComments" group="global" app="core" params="$file->featuredComments(), $file->url()->setQueryString( 'tab', 'comments' )->setQueryString( 'recommended', 'comments' )"}
{template="commentMultimodHeader" app="core" group="global" params="$file, '#comments'"}
{{if $file->commentPageCount() > 1}}
{$file->commentPagination( array( 'tab' ) )|raw}
<br><br>
{{endif}}
{template="featuredComments" group="global" app="core" params="$file->featuredComments(), $file->url()->setQueryString( 'tab', 'comments' )->setQueryString( 'recommended', 'comments' )"}
<div data-role='commentFeed' data-controller='core.front.core.moderation'>
{{if count( $file->comments( NULL, NULL, 'date', 'asc', NULL, NULL, NULL, NULL, FALSE, isset( \IPS\Request::i()->showDeleted ) ) )}}
<form action="{$file->url()->csrf()->setQueryString( 'do', 'multimodComment' )}" method="post" data-ipsPageAction data-role='moderationTools'>
@@ -1492,7 +1558,7 @@
<hr class='ipsHr'>
{$file->commentPagination( array( 'tab' ) )|raw}
{{endif}}
{{if $file->commentForm() || $file->locked() || \IPS\Member::loggedin()->restrict_post || \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings']}}
{{if $file->commentForm() || $file->locked() || \IPS\Member::loggedin()->restrict_post || \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings'] || !\IPS\Member::loggedIn()->checkPostsPerDay()}}
<div class='ipsAreaBackground ipsPad ipsSpacer_top' data-role='replyArea'>
{{if $file->commentForm()}}
{{if $file->locked()}}
@@ -1506,6 +1572,8 @@
{template="commentUnavailable" group="forms" location="front" app="core" params="'restricted_cannot_comment', \IPS\Member::loggedIn()->warnings(5,NULL,'rpa'), \IPS\Member::loggedIn()->restrict_post"}
{{elseif \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings']}}
{template="commentUnavailable" group="forms" location="front" app="core" params="'unacknowledged_warning_cannot_post', \IPS\Member::loggedIn()->warnings( 1, FALSE )"}
{{elseif !\IPS\Member::loggedIn()->checkPostsPerDay()}}
{template="commentUnavailable" group="forms" location="front" app="core" params="'member_exceeded_posts_per_day'"}
{{endif}}
{{endif}}
</div>
@@ -1520,7 +1588,16 @@
</div>]]></template>
<template template_group="view" template_name="downloadButton" template_data="$file" template_location="front" template_app="downloads"><![CDATA[
<li>
<a href='{{if settings.idm_antileech}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}' class='ipsButton ipsButton_fullWidth ipsButton_large ipsButton_important' {{if $file->container()->message('disclaimer') or count( $file->files() ) > 1 or member.group['idm_wait_period']}}data-ipsDialog{{endif}}>{lang="download_now"}</a>
{{if !$file->canDownload()}}
{{if !\IPS\Member::loggedIn()->member_id}}
<span class="ipsType_light ipsType_blendLinks ipsResponsive_hidePhone ipsResponsive_inline"><i class="fa fa-info-circle"></i> {lang="download_no_permission_guest"}</span>
<a href='{url="app=core&module=system&controller=login" seoTemplate="login"}' class='ipsButton ipsButton_light ipsButton_medium ipsButton_fullWidth ipsSpacer_top'>{lang="sign_in_short"}</a>
{{else}}
<span class="ipsType_light ipsType_blendLinks ipsResponsive_hidePhone ipsResponsive_inline"><i class="fa fa-info-circle"></i> {lang="download_no_permission"}</span>
{{endif}}
{{else}}
<a href='{{if settings.idm_antileech}}{$file->url('download')->csrf()}{{else}}{$file->url('download')}{{endif}}' class='ipsButton ipsButton_fullWidth ipsButton_large ipsButton_important' {{if $file->container()->message('disclaimer') or count( $file->files() ) > 1 or member.group['idm_wait_period']}}data-ipsDialog{{endif}}>{lang="download_now"}</a>
{{endif}}
</li>
]]></template>
<template template_group="view" template_name="downloadSidebar" template_data="$file" template_location="front" template_app="downloads"></template>
@@ -1617,7 +1694,8 @@
{{endforeach}}
</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-{$file->id}-reviews' id='reviews'>
<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-{$file->id}-reviews' id='reviews'>
{{if $file->reviewForm()}}
{{if $file->locked()}}
<strong class='ipsType_warning'><i class='fa fa-info-circle'></i> {lang="item_locked_can_review"}</strong>
@@ -1645,6 +1723,7 @@
{{if count( $file->reviews( NULL, NULL, NULL, 'desc', NULL, NULL, NULL, NULL, isset( \IPS\Request::i()->showDeleted ) ) )}}
{{if !$file->hasReviewed()}}<hr class='ipsHr'>{{endif}}
<div class="ipsClearfix ipsSpacer_bottom">
{template="commentMultimodHeader" app="core" group="global" params="$file, '#reviews', 'review'"}
{{if $file->reviewPageCount() > 1}}
<div class="ipsPos_left ipsResponsive_noFloat">
{$file->reviewPagination( array( 'tab', 'sort' ) )|raw}
@@ -1712,6 +1791,9 @@
{{elseif $file->hidden() === -2}}
<span><span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$file->deletedBlurb()}'><i class='fa fa-trash'></i></span></span>
{{endif}}
{{if $file->mapped('pinned')}}
<span><span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span></span>
{{endif}}
{{if $file->mapped('featured')}}
<span><span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span></span>
{{endif}}
@@ -1750,28 +1832,30 @@
</div>
<hr class='ipsHr ipsResponsive_hidePhone'>
<div class='ipsPhotoPanel ipsPhotoPanel_tiny ipsClearfix ipsSpacer_bottom'>
{template="userPhoto" app="core" group="global" params="$file->author(), 'tiny', $file->warningRef()"}
<div>
<p class='ipsType_reset ipsType_large ipsType_blendLinks'>
{lang="byline_nodate_itemprop" htmlsprintf="$file->author()->link( $file->warningRef() )"}{{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()"}{{endif}}
</p>
{{if $file->author()->member_id OR $file->canChangeAuthor()}}
<ul class='ipsList_inline'>
{{if $file->author()->member_id}}
<li><a href='{url="app=core&module=members&controller=profile&id={$file->author()->member_id}&do=content&type=downloads_file" base="front" seoTitles="$file->author()->members_seo_name" seoTemplate="profile_content"}'>{lang="find_users_files"}</a></li>
<div class='ipsBox_alt'>
<div class='ipsPhotoPanel ipsPhotoPanel_tiny ipsClearfix ipsSpacer_bottom'>
{template="userPhoto" app="core" group="global" params="$file->author(), 'tiny', $file->warningRef()"}
<div>
<p class='ipsType_reset ipsType_large ipsType_blendLinks'>
{lang="byline_nodate_itemprop" htmlsprintf="$file->author()->link( $file->warningRef() )"}{{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()"}{{endif}}
</p>
{{if $file->author()->member_id OR $file->canChangeAuthor()}}
<ul class='ipsList_inline'>
{{if $file->author()->member_id}}
<li><a href='{url="app=core&module=members&controller=profile&id={$file->author()->member_id}&do=content&type=downloads_file" base="front" seoTitles="$file->author()->members_seo_name" seoTemplate="profile_content"}'>{lang="find_users_files"}</a></li>
{{endif}}
{{if $file->canChangeAuthor()}}
<li><a href='{$file->url()->setQueryString( array( 'do' => 'changeAuthor' ) )}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title="{lang="change_author_d"}" title='{lang="change_author_title"}'>{lang="change_author_d"}</a></li>
{{endif}}
</ul>
{{endif}}
{{if $file->canChangeAuthor()}}
<li><a href='{$file->url()->setQueryString( array( 'do' => 'changeAuthor' ) )}' data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title="{lang="change_author_d"}" title='{lang="change_author_title"}'>{lang="change_author_d"}</a></li>
{{endif}}
</ul>
{{endif}}
</div>
</div>
</div>
</div>
{{if count( $file->tags() ) OR ( $file->canEdit() AND $file::canTag( NULL, $file->container() ) )}}
{template="tags" group="global" app="core" params="$file->tags(), FALSE, FALSE, ( $file->canEdit() AND $file::canTag( NULL, $file->container() ) ) ? $file->url() : NULL"}
{{endif}}
{{if count( $file->tags() ) OR ( $file->canEdit() AND $file::canTag( NULL, $file->container() ) )}}
{template="tags" group="global" app="core" params="$file->tags(), FALSE, FALSE, ( $file->canEdit() AND $file::canTag( NULL, $file->container() ) ) ? $file->url() : NULL"}
{{endif}}
</div>
</div>
</div>
@@ -1797,16 +1881,18 @@
<h2 class='ipsType_sectionTitle ipsType_reset ipsHide'>{lang="screenshots_ct" pluralize="$file->screenshots()->getInnerIterator()->count( true )"}</h2>
<div class='ipsPad ipsAreaBackground'>
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-showDots>
<ul class='cDownloadsCarousel ipsClearfix' data-role="carouselItems">
{{$fullScreenshots = iterator_to_array( $file->screenshots() );}}
{{foreach $file->screenshots( 1 ) as $id => $screenshot}}
<li class='ipsCarousel_item ipsAreaBackground_reset ipsPad_half'>
<span style="background-image: url( '{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), $screenshot->url )"}' )" class="ipsThumb ipsThumb_medium ipsThumb_bg ipsCursor_pointer" data-ipsLightbox data-ipsLightbox-group="download_{$file->id}" data-fullURL="{$fullScreenshots[ $id ]->url}">
<img src="{$screenshot->url}" alt="">
</span>
</li>
{{endforeach}}
</ul>
<div class='ipsCarousel_inner'>
<ul class='cDownloadsCarousel ipsClearfix' data-role="carouselItems">
{{$fullScreenshots = iterator_to_array( $file->screenshots() );}}
{{foreach $file->screenshots( 1 ) as $id => $screenshot}}
<li class='ipsCarousel_item ipsAreaBackground_reset ipsPad_half'>
<span style="background-image: url( '{expression="str_replace( array( '(', ')' ), array( '\(', '\)' ), $screenshot->url )"}' )" class="ipsThumb ipsThumb_medium ipsThumb_bg ipsCursor_pointer" data-ipsLightbox data-ipsLightbox-group="download_{$file->id}" data-fullURL="{$fullScreenshots[ $id ]->url}">
<img src="{$screenshot->url}" alt="">
</span>
</li>
{{endforeach}}
</ul>
</div>
<span class='ipsCarousel_shadow ipsCarousel_shadowLeft'></span>
<span class='ipsCarousel_shadow ipsCarousel_shadowRight'></span>
<a href='#' class='ipsCarousel_nav ipsHide' data-action='prev'><i class='fa fa-chevron-left'></i></a>
@@ -1846,7 +1932,7 @@
</section>
{{endif}}
{{if ( $file->canEdit() or $file->canPin() or $file->canUnpin() or $file->canFeature() or $file->canUnfeature() or $file->canHide() or $file->canUnhide() or $file->canMove() or $file->canLock() or $file->canUnlock() or $file->canDelete() ) or ( $file->hidden() == -2 AND \IPS\Member::loggedIn()->modPermission('can_manage_deleted_content') ) || ( \IPS\IPS::classUsesTrait( $file, 'IPS\Content\Reactable' ) and settings.reputation_enabled )}}
{{if ( $file->canEdit() or $file->canPin() or $file->canUnpin() or $file->canFeature() or $file->canUnfeature() or $file->canHide() or $file->canUnhide() or $file->canMove() or $file->canLock() or $file->canUnlock() or $file->canDelete() or $file->canEnablePurchases() or $file->canDisablePurchases() ) or ( $file->hidden() == -2 AND \IPS\Member::loggedIn()->modPermission('can_manage_deleted_content') ) || ( \IPS\IPS::classUsesTrait( $file, 'IPS\Content\Reactable' ) and settings.reputation_enabled )}}
<div class='ipsItemControls'>
{{if \IPS\IPS::classUsesTrait( $file, 'IPS\Content\Reactable' ) and settings.reputation_enabled}}
{template="reputation" app="core" group="global" params="$file"}
@@ -1899,6 +1985,12 @@
{{if $file->canOnMessage( 'add' )}}
<li class='ipsMenu_item'><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'messageForm' ) )}' data-ipsDialog data-ipsDialog-title='{lang="add_message"}'>{lang='add_message'}</a></li>
{{endif}}
{{if $file->isPurchasable() AND $file->canDisablePurchases()}}
<li class='ipsMenu_item'><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'purchaseStatus', 'value' => 0 ) )}' data-confirm>{lang="disable_purchases"}</a></li>
{{endif}}
{{if !$file->isPurchasable() AND $file->canEnablePurchases()}}
<li class='ipsMenu_item'><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'purchaseStatus', 'value' => 1 ) )}' data-confirm>{lang="enable_purchases"}</a></li>
{{endif}}
{{if \IPS\Member::loggedIn()->modPermission('can_view_moderation_log')}}
<li class='ipsMenu_sep'><hr></li>
<li class="ipsMenu_item"><a href='{$file->url()->csrf()->setQueryString( array( 'do' => 'modLog' ) )}' data-ipsDialog data-ipsDialog-title='{lang="moderation_history"}'>{lang="moderation_history"}</a></li>
@@ -1908,7 +2000,7 @@
</li>
{{endif}}
{{if $file->canReport()}}
{{if $file->canReportOrRevoke() === TRUE}}
<li>
<a href='{$file->url('report')}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_file"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}" title="{lang="report_file"}" class='ipsButton ipsButton_link ipsButton_verySmall ipsButton_fullWidth'>{lang="report_file"}</a>
</li>
@@ -1928,7 +2020,11 @@
{template="downloadButton" group="view" app="downloads" params="$file"}
{{endif}}
<li class='ipsToolList_primaryAction'>
<a href='{$file->url('buy')->csrf()}' class='ipsButton ipsButton_fullWidth ipsButton_large ipsButton_important'><i class='fa fa-shopping-cart'></i> &nbsp;{lang="buy_now"}{{if $price = $file->price()}} - {$price|raw}{{endif}}</a>
{{if !$file->isPurchasable( FALSE )}}
<span class="ipsType_light ipsType_blendLinks ipsResponsive_hidePhone ipsResponsive_inline"><i class="fa fa-info-circle"></i> {lang="purchasing_disabled"}</span>
{{else}}
<a href='{$file->url('buy')->csrf()}' class='ipsButton ipsButton_fullWidth ipsButton_large ipsButton_important'><i class='fa fa-shopping-cart'></i> &nbsp;{lang="buy_now"}{{if $price = $file->price()}} - {$price|raw}{{endif}}</a>
{{endif}}
</li>
{{else}}
{{if $file->canDownload() or !$file->downloadTeaser()}}
@@ -2014,6 +2110,7 @@
<div class='ipsResponsive_showPhone ipsResponsive_block ipsSpacer_top'>
{template="promote" app="core" group="global" params="$file"}
</div>
</ul>
</div>
</aside>
</div>
@@ -2091,7 +2188,7 @@
{template="userPhoto" app="core" group="global" params="$comment->author(), 'mini', $comment->warningRef()"}
<div>
<p class='ipsPos_right ipsType_reset'>
{{if $comment->canReport()}}
{{if $comment->canReportOrRevoke() === TRUE}}
<a href='{$comment->url('report')}' data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}" data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a> &middot;
{{endif}}
@@ -2118,7 +2215,7 @@
</div>
<div class='ipsPad ipsClearfix'>
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_highlight and $comment->reactionCount() >= settings.reputation_highlight and settings.reputation_enabled}}
{{if settings.reputation_enabled and \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_highlight and $comment->reactionCount() >= settings.reputation_highlight}}
<strong class='ipsComment_popularFlag' data-ipsTooltip title='{lang="this_is_a_popular_comment"}'><i class='fa fa-star'></i></strong>
{{endif}}
<div class='ipsType_break ipsContained'><a href="{$comment->url()}" class='ipsDataItem_title ipsTruncate ipsTruncate_line'>{$comment->item()->name}</a></div>
@@ -2176,7 +2273,7 @@
{template="userPhoto" app="core" group="global" params="$comment->author(), 'mini', $comment->warningRef()"}
<div>
<p class='ipsPos_right ipsType_reset'>
{{if $comment->canReport()}}
{{if $comment->canReportOrRevoke() === TRUE}}
<a href='{$comment->url('report')}' data-ipsDialog data-ipsDialog-remoteSubmit data-ipsDialog-size='medium' data-ipsDialog-flashMessage='{lang="report_submit_success"}' data-ipsDialog-title="{lang="report"}" data-action='reportComment' title='{lang="report_content"}'>{lang="report"}</a> &middot;
{{endif}}
@@ -2203,7 +2300,7 @@
</div>
<div class='ipsPad'>
{{if \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_highlight and $comment->reputation() >= settings.reputation_highlight and settings.reputation_enabled}}
{{if settings.reputation_enabled and \IPS\IPS::classUsesTrait( $comment, 'IPS\Content\Reactable' ) and settings.reputation_highlight and $comment->reputation() >= settings.reputation_highlight}}
<strong class='ipsComment_popularFlag' data-ipsTooltip title='{lang="this_is_a_popular_comment"}'><i class='fa fa-star'></i></strong>
{{endif}}
<div class='ipsType_break ipsContained'><a href="{$comment->url()}" class='ipsDataItem_title ipsTruncate ipsTruncate_line'>{$comment->item()->name}</a></div>
@@ -2272,7 +2369,7 @@
<strong class='ipsType_small ipsType_uppercase'>{lang="latest_file"}</strong><br>
<div class='ipsType_break ipsContained'><a href="{$latestFile->url()}" title='{lang="view_this_file" sprintf="$latestFile->name"}' class='ipsTruncate ipsTruncate_line'>{$latestFile->name}</a></div>
<span class='ipsType_light ipsType_medium'>{lang="byline_nodate" htmlsprintf="$latestFile->author()->link()"}</span>
<p class='ipsType_medium ipsType_reset'>{{if !$latestFile->downloads}}<span class='ipsType_light'>{{endif}}<i class='fa fa-arrow-circle-down'></i> {$latestFile->downloads}{{if !$latestFile->downloads}}</span>{{endif}} {{if $latestFile->container()->bitoptions['comments']}}&nbsp;&nbsp;{{if !$latestFile->comments}}<span class='ipsType_light'>{{endif}}<i class='fa fa-comment'></i> {$latestFile->comments}{{endif}}{{if !$latestFile->comments}}</span>{{endif}}</p>
<p class='ipsType_medium ipsType_reset'>{{if !$latestFile->downloads}}<span class='ipsType_light'>{{endif}}<i class='fa fa-arrow-circle-down'></i> {number="$latestFile->downloads"}{{if !$latestFile->downloads}}</span>{{endif}} {{if $latestFile->container()->bitoptions['comments']}}&nbsp;&nbsp;{{if !$latestFile->comments}}<span class='ipsType_light'>{{endif}}<i class='fa fa-comment'></i> {$latestFile->comments}{{endif}}{{if !$latestFile->comments}}</span>{{endif}}</p>
</div>
</div>
{{endif}}
@@ -2305,7 +2402,7 @@
<span class='ipsType_minorHeading'>{lang="latest_file"}</span><br>
<div class='ipsType_break ipsContained'><a href="{$latestFile->url()}" title='{lang="view_this_file" sprintf="$latestFile->name"}' class='ipsTruncate ipsTruncate_line'>{$latestFile->name}</a></div>
<span class='ipsType_light ipsType_medium'>{lang="byline_nodate" htmlsprintf="$latestFile->author()->link()"}</span>
<p class='ipsType_medium ipsType_reset'>{{if !$latestFile->downloads}}<span class='ipsType_light'>{{endif}}<i class='fa fa-arrow-circle-down'></i> {$latestFile->downloads}{{if !$latestFile->downloads}}</span>{{endif}} {{if $latestFile->container()->bitoptions['comments']}}&nbsp;&nbsp;{{if !$latestFile->comments}}<span class='ipsType_light'>{{endif}}<i class='fa fa-comment'></i> {$latestFile->comments}{{endif}}{{if !$latestFile->comments}}</span>{{endif}}</p>
<p class='ipsType_medium ipsType_reset'>{{if !$latestFile->downloads}}<span class='ipsType_light'>{{endif}}<i class='fa fa-arrow-circle-down'></i> {number="$latestFile->downloads"}{{if !$latestFile->downloads}}</span>{{endif}} {{if $latestFile->container()->bitoptions['comments']}}&nbsp;&nbsp;{{if !$latestFile->comments}}<span class='ipsType_light'>{{endif}}<i class='fa fa-comment'></i> {$latestFile->comments}{{endif}}{{if !$latestFile->comments}}</span>{{endif}}</p>
</div>
</div>
{{endif}}
@@ -2330,11 +2427,13 @@
{{if count( $files )}}
<div class='ipsPad'>
<div class='ipsCarousel ipsClearfix' data-ipsCarousel data-ipsCarousel-showDots>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $files as $idx => $file}}
{template="indexBlock" group="browse" app="downloads" params="$file"}
{{endforeach}}
</ul>
<div class='ipsCarousel_inner'>
<ul class='cDownloadsCarousel' data-role="carouselItems">
{{foreach $files as $idx => $file}}
{template="indexBlock" group="browse" app="downloads" params="$file"}
{{endforeach}}
</ul>
</div>
<span class='ipsCarousel_shadow ipsCarousel_shadowLeft'></span>
<span class='ipsCarousel_shadow ipsCarousel_shadowRight'></span>
<a href='#' class='ipsCarousel_nav ipsHide' data-action='prev'><i class='fa fa-chevron-left'></i></a>
@@ -2374,7 +2473,7 @@
<span {{if !$file->purchaseCount()}}class='ipsType_light'{{endif}} title='{lang="idm_purchases"}' data-ipsTooltip><i class='fa fa-shopping-cart'></i> {$file->purchaseCount()}</span>&nbsp;&nbsp;
{{endif}}
{{if !$file->isPaid() or in_array( 'downloads', explode( ',', settings.idm_nexus_display ) )}}
<span {{if !$file->downloads}}class='ipsType_light'{{endif}} title='{lang="downloads"}' data-ipsTooltip><i class='fa fa-arrow-circle-down'></i> {$file->downloads}</span>&nbsp;&nbsp;
<span {{if !$file->downloads}}class='ipsType_light'{{endif}} title='{lang="downloads"}' data-ipsTooltip><i class='fa fa-arrow-circle-down'></i> {number="$file->downloads"}</span>&nbsp;&nbsp;
{{endif}}
{{if $file->container()->bitoptions['comments']}}<span {{if !$file->comments}}class='ipsType_light'{{endif}} title='{lang="total_comments"}' data-ipsTooltip><i class='fa fa-comment'></i> {$file->comments}</span>{{endif}}
@@ -2449,7 +2548,7 @@
</div>
</section>
{{else}}
<div class='ipsGrid ipsGrid_collapsePhone ipsWidget_columns'>
<div class='ipsGrid ipsGrid_collapsePhone ipsWidget_columns ipsPad'>
<div class='ipsGrid_span3'>
<h4 class='ipsType_sectionHead ipsType_normal'>{lang="week"}</h4>
@@ -2600,7 +2699,7 @@
</div>
</section>
{{else}}
<div class='ipsGrid ipsGrid_collapsePhone ipsWidget_columns'>
<div class='ipsGrid ipsGrid_collapsePhone ipsWidget_columns ipsPad'>
<div class='ipsGrid_span3'>
<h4 class='ipsType_sectionHead ipsType_normal'>{lang="week"}</h4>
@@ -2778,10 +2877,10 @@
padding: 5px 5px;
}
html[dir="ltr"] #elDownloadStatsLatest > div:not( .ipsNoThumb ) {
html[dir="ltr"] #elDownloadStatsLatest > .ipsWidget_latestItem {
margin-left: 85px;
}
html[dir="rtl"] #elDownloadStatsLatest > div:not( .ipsNoThumb ) {
html[dir="rtl"] #elDownloadStatsLatest > .ipsWidget_latestItem {
margin-right: 85px;
}
+52 -1
View File
@@ -192,5 +192,56 @@
"101117": "4.2.0 Beta 8",
"102000": "4.2.0",
"102001": "4.2.0",
"102002": "4.2.0"
"102002": "4.2.0",
"102003": "4.2.0",
"102004": "4.2.1",
"102005": "4.2.2 Beta 1",
"102006": "4.2.2 Beta 2",
"102007": "4.2.2",
"102008": "4.2.2",
"102009": "4.2.2",
"102010": "4.2.3 Beta 1",
"102011": "4.2.3",
"102012": "4.2.3",
"102013": "4.2.3",
"102014": "4.2.4 Beta 1",
"102015": "4.2.4 Beta 2",
"102016": "4.2.4",
"102017": "4.2.4",
"102018": "4.2.4",
"102019": "4.2.4",
"102020": "4.2.4",
"102021": "4.2.5 Beta 1",
"102022": "4.2.5 Beta 2",
"102023": "4.2.5 Beta 3",
"102024": "4.2.5",
"102025": "4.2.5",
"102026": "4.2.5",
"102027": "4.2.5",
"102028": "4.2.5",
"102029": "4.2.5",
"102030": "4.2.6 Beta 1",
"102031": "4.2.6 Beta 1",
"102032": "4.2.6 Beta 2",
"102033": "4.2.6 Beta 3",
"102034": "4.2.6",
"102035": "4.2.6",
"102036": "4.2.6",
"102037": "4.2.7 Beta 1",
"102038": "4.2.7 Beta 2",
"102039": "4.2.7 Beta 3",
"102040": "4.2.7 Beta 4",
"102041": "4.2.7 Beta 5",
"102042": "4.2.7",
"102043": "4.2.7",
"102044": "4.2.7",
"102045": "4.2.7",
"102046": "4.2.7",
"102047": "4.2.8",
"102048": "4.2.8",
"103000": "4.3.0 Beta 1",
"103002": "4.3.0 Beta 2",
"103003": "4.3.0 Beta 3",
"103004": "4.3.0 Beta 4",
"103005": "4.3.0"
}