TYPO3 v15 dev-main snapshot ()

This commit is contained in:
2026-08-10 22:31:18 +02:00
commit 1da5e665e7
73 changed files with 8040 additions and 0 deletions
+146
View File
@@ -0,0 +1,146 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" datatype="plaintext" original="EXT:filelist/Resources/Private/Language/locallang.xlf" date="2015-08-21T11:45:35Z" product-name="filelist">
<header/>
<body>
<trans-unit id="search">
<source>Search "%s" in %s</source>
</trans-unit>
<trans-unit id="live_search.file_provider.filter_label">
<source>Files</source>
</trans-unit>
<trans-unit id="live_search.file_provider.type_label">
<source>File</source>
</trans-unit>
<trans-unit id="live_search.file_provider.show_in_list">
<source>Show in file list</source>
</trans-unit>
<trans-unit id="live_search.file_provider.property.location">
<source>Location</source>
</trans-unit>
<trans-unit id="live_search.file_provider.property.size">
<source>Size</source>
</trans-unit>
<trans-unit id="live_search.file_provider.property.modified">
<source>Last modified</source>
</trans-unit>
<trans-unit id="search.reset">
<source>Reset search</source>
</trans-unit>
<trans-unit id="flashmessage.no_results">
<source>No results found</source>
</trans-unit>
<trans-unit id="flashmessage.no_results.message">
<source>This folder does not contain any files for "%s"</source>
</trans-unit>
<trans-unit id="flashmessage.no_items">
<source>This folder is empty</source>
</trans-unit>
<trans-unit id="flashmessage.no_items.message">
<source>Drag files here to upload them</source>
</trans-unit>
<trans-unit id="file_upload.php.pagetitle">
<source>Upload files</source>
</trans-unit>
<trans-unit id="file_upload.php.submit">
<source>Upload files</source>
</trans-unit>
<trans-unit id="file_upload.php.files">
<source>files</source>
</trans-unit>
<trans-unit id="file_rename.exists.title">
<source>File exists already</source>
</trans-unit>
<trans-unit id="file_rename.exists.description">
<source>You want to rename the file "{0}" to "{1}", but the file "{1}" already exists. How do you want to proceed?</source>
</trans-unit>
<trans-unit id="file_rename.actions.cancel">
<source>Cancel</source>
</trans-unit>
<trans-unit id="file_rename.actions.rename">
<source>Rename with unique name</source>
</trans-unit>
<trans-unit id="file_rename.actions.override">
<source>Overwrite</source>
</trans-unit>
<trans-unit id="file_rename.php.pagetitle">
<source>Rename</source>
</trans-unit>
<trans-unit id="file_rename.php.submit">
<source>Rename</source>
<note from="developer">This label is not used since TYPO3 v9.</note>
</trans-unit>
<trans-unit id="file_rename.php.label.target.file">
<source>New file name</source>
</trans-unit>
<trans-unit id="file_rename.php.label.target.folder">
<source>New folder name</source>
</trans-unit>
<trans-unit id="file_replace.title">
<source>Replace file "%s"</source>
</trans-unit>
<trans-unit id="file_replace.intro">
<source>You're about to replace the file "%s".</source>
</trans-unit>
<trans-unit id="file_replace.new_file.label">
<source>Select new file</source>
</trans-unit>
<trans-unit id="file_replace.keepFilename.label">
<source>Keep current filename "%s"?</source>
</trans-unit>
<trans-unit id="file_replace.button.replace">
<source>Replace</source>
</trans-unit>
<trans-unit id="file_edit.php.pagetitle">
<source>Edit</source>
</trans-unit>
<trans-unit id="file_edit.php.submit">
<source>Save</source>
</trans-unit>
<trans-unit id="file_edit.php.saveAndClose">
<source>Save and Close</source>
</trans-unit>
<trans-unit id="file_edit.php.coundNot">
<source>This filetype cannot be edited.&lt;br /&gt;The file must have an extension like:&lt;br /&gt;&lt;br
/&gt; &lt;b&gt;%s&lt;/b&gt;
</source>
</trans-unit>
<trans-unit id="file_newfolder.php.pagetitle">
<source>New file or folder</source>
</trans-unit>
<trans-unit id="file_newfolder.php.label_newfolder">
<source>Folder</source>
</trans-unit>
<trans-unit id="file_newfolder.php.submit">
<source>Create folders</source>
</trans-unit>
<trans-unit id="file_newfolder.php.folders">
<source>folders</source>
</trans-unit>
<trans-unit id="file_newfolder.php.newfile_submit">
<source>Create file</source>
</trans-unit>
<trans-unit id="file_newfolder.php.newfile">
<source>Create new textfile</source>
</trans-unit>
<trans-unit id="file_newfolder.php.label_newfile">
<source>File name</source>
</trans-unit>
<trans-unit id="file_newfolder.php.number_of_folders">
<source>Number of folders</source>
</trans-unit>
<trans-unit id="download">
<source>Download</source>
</trans-unit>
<trans-unit id="actions.new_folder">
<source>New Folder</source>
</trans-unit>
<trans-unit id="actions.new_file">
<source>New File</source>
</trans-unit>
<trans-unit id="translations">
<source>Translations</source>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" datatype="plaintext" original="EXT:filelist/Resources/Private/Language/locallang_mod_file_list.xlf" date="2011-10-17T20:22:34Z" product-name="lang">
<header/>
<body>
<trans-unit id="clipBoard">
<source>Show clipboard</source>
</trans-unit>
<trans-unit id="clip_paste">
<source>Paste in clipboard content</source>
</trans-unit>
<trans-unit id="clip_pasteInto">
<source>Paste into: Clipboard content is inserted into this folder</source>
</trans-unit>
<trans-unit id="editMarked">
<source>Edit Metadata</source>
</trans-unit>
<trans-unit id="editColumns">
<source>Edit specific Metadata</source>
</trans-unit>
<trans-unit id="deleteMarked">
<source>Delete marked items</source>
</trans-unit>
<trans-unit id="clip_selectMarked">
<source>Transfer to clipboard</source>
</trans-unit>
<trans-unit id="clip_deleteMarked">
<source>Remove from clipboard</source>
</trans-unit>
<trans-unit id="deleteMarkedWarning">
<source>Are you sure you want to delete all marked items from this folder?</source>
</trans-unit>
<trans-unit id="c_name">
<source>Name</source>
</trans-unit>
<trans-unit id="c_size">
<source>Size</source>
</trans-unit>
<trans-unit id="c_record_type">
<source>Type</source>
</trans-unit>
<trans-unit id="c_rw">
<source>RW</source>
</trans-unit>
<trans-unit id="files">
<source>files</source>
</trans-unit>
<trans-unit id="temp">
<source>Temporary files</source>
</trans-unit>
<trans-unit id="read">
<source>R</source>
</trans-unit>
<trans-unit id="recycler">
<source>Recycler</source>
</trans-unit>
<trans-unit id="write">
<source>W</source>
</trans-unit>
<trans-unit id="storageNotBrowsableTitle">
<source>Access denied.</source>
</trans-unit>
<trans-unit id="storageNotBrowsableMessage">
<source>You are trying to access a folder in a storage that is not browsable.</source>
</trans-unit>
<trans-unit id="missingFolderPermissionsTitle">
<source>Missing folder permissions</source>
</trans-unit>
<trans-unit id="missingFolderPermissionsMessage">
<source>You have no access to the folder "%s".</source>
</trans-unit>
<trans-unit id="localStorageOfflineTitle">
<source>Base folder for local storage missing or not allowed</source>
</trans-unit>
<trans-unit id="localStorageOfflineMessage">
<source>Verify that the base folder for the storage "%s" exists and is allowed to be accessed.</source>
</trans-unit>
<trans-unit id="folderNotFoundTitle">
<source>Folder not found.</source>
</trans-unit>
<trans-unit id="folderNotFoundMessage">
<source>The folder "%s" cannot be accessed. Trying to use parent folder(s).</source>
</trans-unit>
<trans-unit id="translateMetadata">
<source>Translate metadata</source>
</trans-unit>
<trans-unit id="createMetadataForLanguage">
<source>Create metadata of this file for %s</source>
</trans-unit>
<trans-unit id="editMetadataForLanguage">
<source>Edit metadata of this file for %s</source>
</trans-unit>
<trans-unit id="paramError">
<source>Parameter Error</source>
</trans-unit>
<trans-unit id="targetNoDir">
<source>Target was not a directory!</source>
</trans-unit>
<trans-unit id="reloadMetadata">
<source>Reload Metadata</source>
</trans-unit>
<trans-unit id="rangeIndicator">
<source>Media %1$d - %2$d</source>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" datatype="plaintext" original="EXT:filelist/Resources/Private/Language/locallang_transfer_handler.xlf" date="2023-02-24T00:00:00Z" product-name="cms">
<header/>
<body>
<trans-unit id="message.transfer_resource.title">
<source>Transfer Resource</source>
</trans-unit>
<trans-unit id="message.transfer_resource.text">
<source>Transfer "%s" to "%s"?</source>
</trans-unit>
<trans-unit id="message.transfer_resources.title">
<source>Transfer Resources</source>
</trans-unit>
<trans-unit id="message.transfer_resources.text">
<source>Transfer %d resources to "%s"?</source>
</trans-unit>
<trans-unit id="message.button.cancel">
<source>Cancel</source>
</trans-unit>
<trans-unit id="message.button.copy">
<source>Copy</source>
</trans-unit>
<trans-unit id="message.button.move">
<source>Move</source>
</trans-unit>
</body>
</file>
</xliff>
+17
View File
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" datatype="plaintext" original="EXT:filelist/Resources/Private/Language/module.xlf" date="2026-11-10T13:37:37Z" product-name="filelist">
<header/>
<body>
<trans-unit id="short_description">
<source>Listing of media resources in registered storages</source>
</trans-unit>
<trans-unit id="description">
<source>This is the media administration system. Through this module you can upload, copy, move and delete files on the system.</source>
</trans-unit>
<trans-unit id="title">
<source>Media</source>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,51 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:if condition="{paginator.numberOfPages} > 1">
<nav aria-labelledby="filelist-pagination">
<ul class="pagination mb-0">
<li class="page-item">
<span id="filelist-pagination" class="page-link">
<f:translate key="rangeIndicator" domain="filelist.mod_file_list" arguments="{0: firstElement, 1: lastElement}" />
<span class="visually-hidden">, <f:translate key="pageIndicator" domain="core.mod_web_list" arguments="{0: currentPage, 1: totalPages}"/></span>
</span>
</li>
<f:comment><!--First page and previous page--></f:comment>
<f:if condition="{currentPage} > 1">
<f:then>
<li class="page-item"><a class="page-link" href="{currentUrl}&currentPage=1" aria-label="{f:translate(key: 'first', domain: 'core.common')}" title="{f:translate(key: 'first', domain: 'core.common')}"><core:icon identifier="actions-view-paging-first"/></a></li>
<li class="page-item"><a class="page-link" href="{currentUrl}&currentPage={currentPage -1}" aria-label="{f:translate(key: 'previous', domain: 'core.common')}" title="{f:translate(key: 'previous', domain: 'core.common')}"><core:icon identifier="actions-view-paging-previous" /></a></li>
</f:then>
<f:else>
<li class="page-item disabled" aria-hidden="true"><span class="page-link"><core:icon identifier="actions-view-paging-first" /></span></li>
<li class="page-item disabled" aria-hidden="true"><span class="page-link"><core:icon identifier="actions-view-paging-previous" /></span></li>
</f:else>
</f:if>
<f:variable name="pageInput">
<input type="number" autocomplete="off" name="currentPage" min="1" max="{totalPages}" value="{currentPage}" size="3" class="t3js-filelist-paging form-control form-control-sm paginator-input" />
<span aria-hidden="true">
</f:variable>
<li class="page-item">
<span class="page-link">
<f:format.raw><f:translate key="pageIndicator" domain="core.mod_web_list" arguments="{0: pageInput, 1: totalPages}"/></f:format.raw></span>
</span>
</li>
<f:comment><!--Next page and last page--></f:comment>
<f:if condition="{currentPage} < {totalPages}">
<f:then>
<li class="page-item"><a class="page-link" href="{currentUrl}&currentPage={currentPage + 1}" aria-label="{f:translate(key: 'next', domain: 'core.common')}" title="{f:translate(key: 'next', domain: 'core.common')}"><core:icon identifier="actions-view-paging-next" /></a></li>
<li class="page-item"><a class="page-link" href="{currentUrl}&currentPage={totalPages}" aria-label="{f:translate(key: 'last', domain: 'core.common')}" title="{f:translate(key: 'last', domain: 'core.common')}"><core:icon identifier="actions-view-paging-last" /></a></li>
</f:then>
<f:else>
<li class="page-item disabled" aria-hidden="true"><span class="page-link"><core:icon identifier="actions-view-paging-next" /></span></li>
<li class="page-item disabled" aria-hidden="true"><span class="page-link"><core:icon identifier="actions-view-paging-last" /></span></li>
</f:else>
</f:if>
<li class="page-item"><a class="page-link" href="{currentUrl}&currentPage={currentPage}" aria-label="{f:translate(key: 'reload', domain: 'core.common')}" title="{f:translate(key: 'reload', domain: 'core.common')}"><core:icon identifier="actions-refresh" /></a></li>
</ul>
</nav>
</f:if>
</html>
@@ -0,0 +1,27 @@
<html
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="ElementBrowserWithNavigation" />
<f:section name="Navigation">
<typo3-backend-component-filestorage-browser
active-folder="{f:if(condition: selectedFolder, then: selectedFolder.combinedIdentifier, else: '') -> f:format.htmlentities()}"
>
</typo3-backend-component-filestorage-browser>
</f:section>
<f:section name="Content">
<f:if condition="{selectedFolder}">
<h4 class="text-truncate mb-4">
<core:iconForResource resource="{selectedFolder}" />
{selectedFolder.storage.name}: {selectedFolder.identifier}
</h4>
</f:if>
<f:flashMessages queueIdentifier="core.template.flashMessages"/>
<f:format.raw>{content}</f:format.raw>
</f:section>
</html>
@@ -0,0 +1,42 @@
<html
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="ElementBrowserWithNavigation" />
<f:section name="Navigation">
<typo3-backend-component-filestorage-browser
active-folder="{f:if(condition: selectedFolder, then: selectedFolder.combinedIdentifier, else: '') -> f:format.htmlentities()}"
>
</typo3-backend-component-filestorage-browser>
</f:section>
<f:section name="Content">
<f:if condition="{selectedFolder}">
<h4 class="text-truncate mb-4">
<core:iconForResource resource="{selectedFolder}" />
{selectedFolder.storage.name}: {selectedFolder.identifier}
</h4>
</f:if>
<f:flashMessages queueIdentifier="core.template.flashMessages"/>
<f:if condition="{selectedFolder}">
<div
data-filelist-element="true"
data-filelist-type="folder"
data-filelist-identifier="{selectedFolder.combinedIdentifier}"
>
<button title="{selectedFolder.storage.name}" class="btn btn-default" data-filelist-action="primary">
<core:iconForResource resource="{selectedFolder}" />
<f:variable name="folderLabel" value="{f:if(condition: '{selectedFolder.name} !== \'\'', then: '{selectedFolder.name}', else: '{selectedFolder.storage.name}')}" />
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_browse_links.xlf:linkTo" arguments="{0: '/{folderLabel}'}">{selectedFolder.storage.name}: {selectedFolder.identifier}</f:translate>
</button>
</div>
</f:if>
<f:format.raw>{content}</f:format.raw>
</f:section>
</html>
@@ -0,0 +1,34 @@
<html
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="ElementBrowserWithNavigation" />
<f:section name="Navigation">
<typo3-backend-component-filestorage-browser
active-folder="{f:if(condition: selectedFolder, then: selectedFolder.combinedIdentifier, else: '') -> f:format.htmlentities()}"
>
</typo3-backend-component-filestorage-browser>
</f:section>
<f:section name="Content">
<f:if condition="{dragUploader}">
<div class="t3js-drag-uploader" data-target-folder="{selectedFolder.combinedIdentifier}" data-progress-container="#typo3-filelist"
data-dropzone-trigger=".t3js-drag-uploader-trigger" data-dropzone-target=".element-browser-body"
data-file-deny-pattern="{dragUploader.fileDenyPattern}" data-max-file-size="{dragUploader.maxFileSize}"
data-default-action="{dragUploader.defaultDuplicationBehaviourAction}" data-manual-table
></div>
</f:if>
<f:if condition="{selectedFolder}">
<h4 class="text-truncate mb-4">
<core:iconForResource resource="{selectedFolder}" />
{selectedFolder.storage.name}: {selectedFolder.identifier}
</h4>
</f:if>
<f:flashMessages queueIdentifier="core.template.flashMessages"/>
<f:format.raw>{content}</f:format.raw>
</f:section>
</html>
@@ -0,0 +1,18 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="Module" />
<f:section name="Content">
<form action="{moduleUrlTceFile}" method="post" id="EditFileController" name="editform">
<h1><f:translate key="LLL:EXT:filelist/Resources/Private/Language/locallang.xlf:file_edit.php.pagetitle" /> {fileName}</h1>
<f:format.raw>{hookContent}</f:format.raw>
<f:format.raw>{form}</f:format.raw>
</form>
</f:section>
</html>
@@ -0,0 +1,168 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="Module" />
<f:section name="Content">
<f:comment><!-- identifier initializes tree state --></f:comment>
<div class="filelist-main" data-filelist-current-identifier="{currentIdentifier -> f:format.htmlspecialchars()}">
<f:if condition="{folderIdentifier}">
<f:render section="headline" arguments="{_all}" />
<f:render section="content" arguments="{_all}" />
</f:if>
</div>
<f:if condition="{dragUploader}">
<div class="t3js-drag-uploader" data-target-folder="{folderIdentifier}" data-progress-container="#typo3-filelist"
data-dropzone-trigger=".t3js-drag-uploader-trigger" data-dropzone-target=".t3js-module-body h1:first-child"
data-file-deny-pattern="{dragUploader.fileDenyPattern}" data-max-file-size="{dragUploader.maxFileSize}"
data-default-action="{dragUploader.defaultDuplicationBehaviourAction}" data-reload-url="{listUrl}"
></div>
</f:if>
</f:section>
<f:section name="headline">
<h1>
<f:if condition="{searchTerm}">
<f:then>
<f:translate key="LLL:EXT:filelist/Resources/Private/Language/locallang.xlf:search" arguments="{0: searchTerm, 1: headline}" />
</f:then>
<f:else>
{headline}
</f:else>
</f:if>
</h1>
</f:section>
<f:section name="content">
<form method="post" name="fileListForm" action="{listUrl}">
<input type="hidden" name="cmd"/>
<f:if condition="{searchTerm} || {totalItems}">
<div class="form-row">
<div class="form-group">
<div class="input-group">
<input
type="search"
autocomplete="off"
id="filelist-searchterm"
name="searchTerm"
class="form-control"
value="{searchTerm}"
placeholder="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.enterSearchString')}"
/>
<label for="filelist-searchterm" class="visually-hidden">
<f:translate id="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.label.searchString"/>
</label>
<input type="hidden" name="currentPage" value="0" />
<button type="submit" class="btn btn-default" name="search">
<f:translate id="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.title.search"/>
</button>
</div>
</div>
</div>
</f:if>
<f:if condition="!{totalItems}">
<div class="t3-filelist-info-container">
<f:if condition="{searchTerm}">
<f:then>
<core:icon identifier="actions-question" size="large" />
<h5 class="mt-2">
{f:translate(key: 'LLL:EXT:filelist/Resources/Private/Language/locallang.xlf:flashmessage.no_results')}
</h5>
<p>
<f:translate key="LLL:EXT:filelist/Resources/Private/Language/locallang.xlf:flashmessage.no_results.message" arguments="{0: searchTerm}"/>
</p>
<button type="submit" class="btn btn-info" name="searchTerm" value="">
<f:translate key="LLL:EXT:filelist/Resources/Private/Language/locallang.xlf:search.reset" />
</button>
</f:then>
<f:else>
<core:icon identifier="apps-pagetree-folder-contains" size="large" />
<h5 class="mt-2">
{f:translate(key: 'LLL:EXT:filelist/Resources/Private/Language/locallang.xlf:flashmessage.no_items')}
</h5>
<p>
<f:translate key="LLL:EXT:filelist/Resources/Private/Language/locallang.xlf:flashmessage.no_items.message" arguments="{0: searchTerm}"/>
</p>
</f:else>
</f:if>
</div>
</f:if>
<div class="t3-filelist-container {f:if(condition: '!{totalItems}', then: 'hidden')}">
<f:if condition="{listHtml}">
<div class="multi-record-selection-actions-wrapper">
<div class="t3js-multi-record-selection-actions row row-cols-auto gx-2 align-items-center hidden">
<div class="col">
<strong><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.selection"/></strong>
</div>
<f:if condition="{editActionConfiguration}">
<div class="col">
<div class="btn-group">
<button type="button" class="btn btn-default btn-sm" disabled="disabled" data-multi-record-selection-action="edit" data-multi-record-selection-action-config="{editActionConfiguration -> f:format.raw()}">
<span title="{f:translate(key: 'LLL:EXT:filelist/Resources/Private/Language/locallang_mod_file_list.xlf:editMarked')}">
<core:icon identifier="actions-open" size="small" /> <f:translate key="LLL:EXT:filelist/Resources/Private/Language/locallang_mod_file_list.xlf:editMarked" />
</span>
</button>
<f:if condition="{editColumnsActionConfiguration}">
<button type="button" class="btn btn-default btn-sm" disabled="disabled" data-multi-record-selection-action="edit" data-multi-record-selection-action-config="{editColumnsActionConfiguration -> f:format.raw()}">
<span title="{f:translate(key: 'LLL:EXT:filelist/Resources/Private/Language/locallang_mod_file_list.xlf:editColumns')}">
<core:icon identifier="actions-open" size="small" /> <f:translate key="LLL:EXT:filelist/Resources/Private/Language/locallang_mod_file_list.xlf:editColumns" />
</span>
</button>
</f:if>
</div>
</div>
</f:if>
<f:if condition="{downloadActionConfiguration}">
<div class="col">
<button type="button" class="btn btn-default btn-sm" data-multi-record-selection-action="download" data-multi-record-selection-action-config="{downloadActionConfiguration -> f:format.raw()}">
<span title="{f:translate(key: 'LLL:EXT:filelist/Resources/Private/Language/locallang.xlf:download')}">
<core:icon identifier="actions-download" size="small" /> <f:translate key="LLL:EXT:filelist/Resources/Private/Language/locallang.xlf:download" />
</span>
</button>
</div>
</f:if>
<f:if condition="{showClipboardPanel} && {enableClipBoard.mode} != 'normal'">
<div class="col">
<div class="btn-group">
<button type="button" class="btn btn-default btn-sm" {f:if(condition: '{enableClipBoard.mode} == normal', then: 'disabled')} data-multi-record-selection-action="copyMarked">
<span title="{f:translate(key: 'LLL:EXT:filelist/Resources/Private/Language/locallang_mod_file_list.xlf:clip_selectMarked')}">
<core:icon identifier="actions-edit-copy" size="small" /> <f:translate key="LLL:EXT:filelist/Resources/Private/Language/locallang_mod_file_list.xlf:clip_selectMarked" />
</span>
</button>
<button type="button" class="btn btn-default btn-sm" {f:if(condition: '{enableClipBoard.mode} == normal', then: 'disabled')} data-multi-record-selection-action="removeMarked">
<span title="{f:translate(key: 'LLL:EXT:filelist/Resources/Private/Language/locallang_mod_file_list.xlf:clip_deleteMarked')}">
<core:icon identifier="actions-minus" size="small" /> <f:translate key="LLL:EXT:filelist/Resources/Private/Language/locallang_mod_file_list.xlf:clip_deleteMarked" />
</span>
</button>
</div>
</div>
</f:if>
<div class="col">
<button type="button" class="btn btn-default btn-sm" data-multi-record-selection-action="delete" data-multi-record-selection-action-config="{deleteActionConfiguration -> f:format.raw()}">
<span title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.delete')}">
<core:icon identifier="actions-edit-delete" size="small" /> <f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:cm.delete" />
</span>
</button>
</div>
</div>
</div>
</f:if>
{listHtml -> f:format.raw() -> f:if(condition: totalItems)}
</div>
</form>
<f:if condition="{listHtml}">
<f:if condition="{showClipboardPanel}">
<hr class="spacer">
<typo3-backend-clipboard-panel return-url="{listUrl}" table="_FILE"></typo3-backend-clipboard-panel>
</f:if>
</f:if>
</f:section>
</html>
@@ -0,0 +1,26 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<div class="table-fit">
<table class="table table-striped table-hover" id="typo3-filelist" data-mode="{mode}">
<thead>
{tableHeader -> f:format.raw()}
</thead>
<tbody data-multi-record-selection-row-selection="true">
{tableBody -> f:format.raw()}
</tbody>
</table>
</div>
<f:render partial="Pagination" arguments="{
paginator:paginator,
pagination:pagination,
currentPage:currentPage,
totalPages:totalPages,
currentUrl:currentUrl,
firstElement:firstElement,
lastElement:lastElement
}" />
</html>
@@ -0,0 +1,86 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<div class="resource-tiles-container">
<div class="resource-tiles my-3">
<f:for each="{resources}" as="resource">
<f:render section="ResourceTile" arguments="{resource: resource, displayThumbs: displayThumbs, displayCheckbox: displayCheckbox, defaultLanguageAccess: defaultLanguageAccess}" />
</f:for>
</div>
</div>
<f:render partial="Pagination" arguments="{
paginator:paginator,
pagination:pagination,
currentPage:currentPage,
totalPages:totalPages,
currentUrl:currentUrl,
firstElement:firstElement,
lastElement:lastElement
}" />
<f:section name="ResourceTile">
<div
class="resource-tile{f:if(condition: resource.isSelected, then: ' selected')}"
aria-labelledby="resource-tile-label-{resource.uid}"
data-filelist-element="true"
data-filelist-type="{resource.type}"
data-filelist-identifier="{resource.identifier}"
data-filelist-name="{resource.name}"
data-filelist-icon="{resource.iconIdentifier}"
data-filelist-preview="{f:if(condition: resource.preview, then: 'true', else: 'false')}"
data-filelist-uid="{resource.uid}"
data-filelist-meta-uid="{resource.metaDataUid}"
data-filelist-url="{resource.publicUrl}"
data-filelist-mime-type="{resource.mimeType}"
data-filelist-selectable="{f:if(condition: resource.isSelectable, then: 'true', else: 'false')}"
data-filelist-selected="{f:if(condition: resource.isSelected, then: 'true', else: 'false')}"
data-multi-record-selection-element="true"
{f:if(condition: defaultLanguageAccess, then: 'data-default-language-access="true"')}
draggable="{resource.canMove ? 'true' : 'false'}"
>
<button type="button" title="{resource.name}" data-filelist-action="primary">
<span class="resource-tile-label" id="resource-tile-label-{resource.uid}">{resource.name}</span>
<span class="resource-tile-preview" role="presentation">
<span class="resource-tile-preview-content">
<f:if condition="{displayThumbs} && {resource.preview}">
<f:then>
<span class="resource-tile-image">
<f:image image="{resource.preview}" maxHeight="115" maxWidth="166" additionalAttributes="{draggable: 'false'}" loading="lazy" alt="" />
</span>
</f:then>
<f:else>
<span class="resource-tile-icon">
{resource.iconLarge -> f:format.raw()}
</span>
</f:else>
</f:if>
</span>
</span>
<span class="resource-tile-nameplate">
<f:if condition="{resource.missing}">
<span class="resource-tile-nameplate-badge">
<span class="badge badge-danger"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:warning.file_missing" /></span><br>
</span>
</f:if>
<span class="resource-tile-nameplate-label">{resource.name}</span>
<span class="resource-tile-nameplate-activity">{resource.updatedAt -> f:format.date()}</span>
</span>
</button>
<f:if condition="{resource.isSelectable} && {resource.checkboxConfig} && {displayCheckbox}">
<span class="resource-tile-checkbox" role="checkbox" aria-label="{resource.name}">
<div class="form-check">
<input
class="form-check-input {resource.checkboxConfig.class}"
type="checkbox"
name="{resource.checkboxConfig.name}"
value="{resource.checkboxConfig.value}"
{f:if(condition: resource.checkboxConfig.checked, then: 'checked')}
>
</div>
</span>
</f:if>
</div>
</f:section>
</html>
@@ -0,0 +1,25 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="LinkBrowser" />
<f:section name="Navigation">
<typo3-backend-component-filestorage-browser
active-folder="{f:if(condition: selectedFolder, then: selectedFolder.combinedIdentifier, else: '') -> f:format.htmlentities()}"
>
</typo3-backend-component-filestorage-browser>
</f:section>
<f:section name="Content">
<f:if condition="{selectedFolder}">
<h4 class="text-truncate mb-4">
<core:iconForResource resource="{selectedFolder}" />
{selectedFolder.storage.name}: {selectedFolder.identifier}
</h4>
</f:if>
<f:format.raw>{content}</f:format.raw>
</f:section>
</html>
@@ -0,0 +1,41 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="LinkBrowser" />
<f:section name="Navigation">
<typo3-backend-component-filestorage-browser
tree-actions="{treeActions -> f:format.json()}"
active-folder="{f:if(condition: selectedFolder, then: selectedFolder.combinedIdentifier, else: '') -> f:format.htmlentities()}"
>
</typo3-backend-component-filestorage-browser>
</f:section>
<f:section name="Content">
<f:if condition="{selectedFolder}">
<h4 class="text-truncate mb-4">
<core:iconForResource resource="{selectedFolder}" />
<f:render section="LinkWrap" contentAs="linkText" arguments="{_all}">
{selectedFolder.storage.name}: {selectedFolder.identifier}
</f:render>
</h4>
</f:if>
<f:format.raw>{content}</f:format.raw>
</f:section>
<f:section name="LinkWrap">
<f:if condition="{selectedFolderLink}">
<f:then>
<a href="#" class="element-browser-link" data-linkbrowser-link="{selectedFolderLink}">
{linkText -> f:format.raw()}
</a>
</f:then>
<f:else>
{linkText -> f:format.raw()}
</f:else>
</f:if>
</f:section>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 350 B

@@ -0,0 +1,13 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import{MessageUtility as u}from"@typo3/backend/utility/message-utility.js";import f from"@typo3/backend/element-browser.js";import a from"@typo3/core/event/regular-event.js";import m from"@typo3/backend/icons.js";import{FileListActionSelector as g,FileListActionUtility as h,FileListActionEvent as r}from"@typo3/filelist/file-list-actions.js";import y from"@typo3/backend/info-window.js";import w from"@typo3/core/ajax/ajax-request.js";class l{constructor(){this.importSelection=e=>{e.preventDefault();const t=e.target,n=e.detail.checkboxes;if(!n.length)return;const o=[];n.forEach(i=>{if(i.checked){const s=i.closest(g.elementSelector),c=h.getResourceForElement(s);c.type==="file"&&c.uid&&o.unshift(c)}}),o.length&&(m.getIcon("spinner-circle",m.sizes.small,null,null,m.markupIdentifiers.inline).then(i=>{t.classList.add("disabled"),t.innerHTML=i}),l.handleNext(o),new a("message",i=>{if(!u.verifyOrigin(i.origin))throw"Denied message sent by "+i.origin;i.data.actionName==="typo3:foreignRelation:inserted"&&(o.length>0?l.handleNext(o):f.focusOpenerAndClose())}).bindTo(window))},new a(r.primary,e=>{e.preventDefault();const t=e.detail;t.originalAction=r.primary,t.action=r.select,document.dispatchEvent(new CustomEvent(r.select,{detail:t}))}).bindTo(document),new a(r.select,e=>{e.preventDefault();const t=e.detail,n=t.resources[0];n.type==="file"&&l.insertElement(n.name,n.uid,t.originalAction===r.primary),n.type==="folder"&&this.loadContent(n)}).bindTo(document),new a(r.show,e=>{e.preventDefault();const n=e.detail.resources[0];y.showItem("_"+n.type.toUpperCase(),n.identifier)}).bindTo(document),new a("multiRecordSelection:action:import",this.importSelection).bindTo(document)}static insertElement(e,t,n){return f.insertElement("sys_file",String(t),e,String(t),n)}static handleNext(e){if(e.length>0){const t=e.pop();l.insertElement(t.name,Number(t.uid))}}async loadContent(e){if(e.type!=="folder")return;const t=document.location.href+"&contentOnly=1&expandFolder="+e.identifier,o=await(await new w(t).get()).resolve(),i=document.querySelector(".element-browser-main-content .element-browser-body");i.innerHTML=o;const s=document.querySelector("typo3-backend-component-filestorage-browser-tree");if(s){const c=encodeURIComponent(e.identifier),d=s.nodes.find(p=>p.identifier===c);d&&(await s.expandNodeParents(d),s.selectNode(d,!1))}}}var b=new l;export{b as default};
@@ -0,0 +1,13 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import l from"@typo3/backend/element-browser.js";import r from"@typo3/core/event/regular-event.js";import{FileListActionSelector as a,FileListActionUtility as d,FileListActionEvent as o}from"@typo3/filelist/file-list-actions.js";import u from"@typo3/backend/info-window.js";class c{constructor(){this.importSelection=e=>{e.preventDefault();const t=e.detail.checkboxes;if(!t.length)return;const i=[];t.forEach(n=>{if(n.checked){const m=n.closest(a.elementSelector),s=d.getResourceForElement(m);s.type==="folder"&&s.identifier&&i.unshift(s)}}),i.length&&(i.forEach(function(n){c.insertElement(n.identifier)}),l.focusOpenerAndClose())},new r(o.primary,e=>{e.preventDefault();const t=e.detail;t.originalAction=o.primary,t.action=o.select,document.dispatchEvent(new CustomEvent(o.select,{detail:t}))}).bindTo(document),new r(o.select,e=>{e.preventDefault();const t=e.detail,i=t.resources[0];i.type==="folder"&&c.insertElement(i.identifier,t.originalAction===o.primary)}).bindTo(document),new r(o.show,e=>{e.preventDefault();const i=e.detail.resources[0];u.showItem("_"+i.type.toUpperCase(),i.identifier)}).bindTo(document),new r("multiRecordSelection:action:import",this.importSelection).bindTo(document)}static insertElement(e,t){return l.insertElement("",e,e,e,t)}}var f=new c;export{f as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1,13 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import{SeverityEnum as c}from"@typo3/backend/enum/severity.js";import m from"@typo3/core/event/regular-event.js";import f from"@typo3/core/document-service.js";import p from"@typo3/backend/modal.js";import o from"~labels/backend.alt_doc";class u{constructor(){f.ready().then(()=>{new m("click",(i,e)=>{i.preventDefault();let t=e.dataset.redirectUrl;t=encodeURIComponent(t||top.list_frame.document.location.pathname+top.list_frame.document.location.search);const d=e.dataset.filelistDeleteIdentifier,r=e.dataset.filelistDeleteType,n=e.dataset.filelistDeleteUrl+"&data[delete][0][data]="+encodeURIComponent(d)+"&data[delete][0][redirect]="+t;if(e.dataset.filelistDeleteCheck){const l=p.confirm(e.dataset.title,e.dataset.content,c.warning,[{text:o.get("buttons.confirm.delete_file.no"),active:!0,btnClass:"btn-default",name:"no"},{text:r==="delete_folder"?o.get("buttons.confirm.delete_folder.yes"):o.get("buttons.confirm.delete_file.yes"),btnClass:"btn-warning",name:"yes"}]);l.addEventListener("button.clicked",s=>{const a=s.target.name;a==="no"?l.hideModal():a==="yes"&&(l.hideModal(),top.list_frame.location.href=n)})}else top.list_frame.location.href=n}).delegateTo(document,'[data-filelist-delete="true"]')})}}var b=new u;export{b as default};
@@ -0,0 +1,13 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import r from"@typo3/core/event/regular-event.js";var a;(function(t){t.primary="typo3:filelist:resource:action:primary",t.primaryContextmenu="typo3:filelist:resource:action:primaryContextmenu",t.show="typo3:filelist:resource:action:show",t.rename="typo3:filelist:resource:action:rename",t.replace="typo3:filelist:resource:action:replace",t.select="typo3:filelist:resource:action:select",t.download="typo3:filelist:resource:action:download",t.updateOnlineMedia="typo3:filelist:resource:action:updateOnlineMedia"})(a||(a={}));var n;(function(t){t.elementSelector="[data-filelist-element]",t.actionSelector="[data-filelist-action]"})(n||(n={}));class o{static createResourceFromContextDataset(e){return{type:e.filecontextType,identifier:e.filecontextIdentifier,name:e.filecontextName,hasPreview:!1,uid:e.filecontextUid?parseInt(e.filecontextUid,10):null,metaUid:e.filecontextMetaUid?parseInt(e.filecontextMetaUid,10):null,url:e.filecontextUid?e.url:null,createdAt:e.filecontextCreatedAt?parseInt(e.filecontextCreatedAt,10):null,size:e.filecontextSize?parseInt(e.filecontextSize,10):null}}static getResourceForElement(e){return{type:e.dataset.filelistType,identifier:e.dataset.filelistIdentifier,name:e.dataset.filelistName,hasPreview:"filelistPreview"in e.dataset&&e.dataset.filelistPreview.trim()==="true",uid:e.dataset.filelistUid?parseInt(e.dataset.filelistUid,10):null,metaUid:e.dataset.filelistMetaUid?parseInt(e.dataset.filelistMetaUid,10):null,url:e.dataset.filelistUrl?e.dataset.filelistUrl:null,createdAt:e.dataset.filelistCreatedAt?parseInt(e.dataset.filelistCreatedAt,10):null,size:e.dataset.filelistSize?parseInt(e.dataset.filelistSize,10):null}}}class d{constructor(){new r("contextmenu",(e,l)=>{e.preventDefault(),e.stopImmediatePropagation();const i=this.getActionDetail(e,l);switch(i.action){case"primary":document.dispatchEvent(new CustomEvent(a.primaryContextmenu,{detail:i}));break;default:break}}).delegateTo(document,n.actionSelector),new r("click",(e,l)=>{e.preventDefault();const i=this.getActionDetail(e,l);switch(i.action){case"primary":document.dispatchEvent(new CustomEvent(a.primary,{detail:i}));break;case"show":document.dispatchEvent(new CustomEvent(a.show,{detail:i}));break;case"select":document.dispatchEvent(new CustomEvent(a.select,{detail:i}));break;case"rename":document.dispatchEvent(new CustomEvent(a.rename,{detail:i}));break;case"replace":document.dispatchEvent(new CustomEvent(a.replace,{detail:i}));break;case"download":document.dispatchEvent(new CustomEvent(a.download,{detail:i}));break;case"updateOnlineMedia":document.dispatchEvent(new CustomEvent(a.updateOnlineMedia,{detail:i}));break;default:break}}).delegateTo(document,n.actionSelector)}getActionDetail(e,l){const i=l.dataset.filelistAction,s=l.closest(n.elementSelector),c=o.getResourceForElement(s);return{event:e,trigger:l,action:i,resources:[c],url:l.dataset.filelistActionUrl??null,originalAction:null}}}var u=new d;export{a as FileListActionEvent,n as FileListActionSelector,o as FileListActionUtility,u as default};
@@ -0,0 +1,13 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import i from"@typo3/core/event/regular-event.js";import{MultiRecordSelectionSelectors as v}from"@typo3/backend/multi-record-selection.js";import{FileListActionSelector as l,FileListActionUtility as n}from"@typo3/filelist/file-list-actions.js";import{DataTransferTypes as f}from"@typo3/backend/enum/data-transfer-types.js";var c;(function(m){m.transfer="typo3:filelist:resource:dragdrop:transfer"})(c||(c={}));class w{constructor(){this.previewSize=32;const t=l.elementSelector+'[draggable="true"]';new i("dragstart",(e,r)=>{const s=[];let d="",u="";const g=document.querySelectorAll(v.checkboxSelector+":checked");if(g.length)g.forEach(a=>{if(a.checked){const o=a.closest(l.elementSelector);o.dataset.filelistDragdropTransferItem="true";const h=n.getResourceForElement(o);s.push(h),u=o.dataset.filelistName,d=o.dataset.filelistIcon}});else{const a=r.closest(l.elementSelector);a.dataset.filelistDragdropTransferItem="true";const o=n.getResourceForElement(a);s.push(o),u=a.dataset.filelistName,d=a.dataset.filelistIcon}e.dataTransfer.effectAllowed="move",e.dataTransfer.setData(f.falResources,JSON.stringify(s));const p={tooltipIconIdentifier:s.length>1?"apps-clipboard-images":d,tooltipLabel:s.length>1?this.getPreviewLabel(s):u,thumbnails:this.getPreviewItems(s)};e.dataTransfer.setData(f.dragTooltip,JSON.stringify(p))}).delegateTo(document,t),new i("dragover",(e,r)=>{const s=n.getResourceForElement(r);this.isDropAllowedOnResoruce(s)&&(e.dataTransfer.dropEffect="move",e.preventDefault(),r.classList.add("success"))},{capture:!0}).delegateTo(document,t),new i("drop",(e,r)=>{const s={action:"transfer",resources:JSON.parse(e.dataTransfer.getData(f.falResources)??"{}"),target:n.getResourceForElement(r)};top.document.dispatchEvent(new CustomEvent(c.transfer,{detail:s}))},{capture:!0,passive:!0}).delegateTo(document,t),new i("dragend",()=>{this.reset()},{capture:!0,passive:!0}).delegateTo(document,t),new i("dragleave",(e,r)=>{r.classList.remove("success")},{capture:!0,passive:!0}).delegateTo(document,t)}getPreviewItems(t){return t.filter(e=>e.hasPreview).map(e=>{const r=new URL(top.TYPO3.settings.Resource.thumbnailUrl,window.origin);return r.searchParams.set("identifier",e.uid.toString(10)),{src:r.toString(),width:this.previewSize,height:this.previewSize}})}getPreviewLabel(t){const e=t.filter(s=>s.hasPreview),r=t.length-e.length;return r>0?(e.length>0?"+":"")+r.toString():""}reset(){document.querySelectorAll(l.elementSelector).forEach(t=>{delete t.dataset.filelistDragdropTransferItem,t.classList.remove("success")})}isDropAllowedOnResoruce(t){return!("filelistDragdropTransferItem"in document.querySelector(l.elementSelector+'[data-filelist-identifier="'+t.identifier+'"]').dataset)&&t.type==="folder"}}var S=new w;export{c as FileListDragDropEvent,S as default};
@@ -0,0 +1,13 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import g from"@typo3/core/event/regular-event.js";import{html as h}from"lit";import{FileListActionEvent as w}from"@typo3/filelist/file-list-actions.js";import l from"@typo3/backend/modal.js";import y from"@typo3/core/ajax/ajax-request.js";import d from"@typo3/backend/notification.js";import s from"@typo3/backend/viewport.js";import n from"~labels/core.core";class C{constructor(){new g(w.rename,o=>{const a=o.detail.resources[0],c=l.advanced({title:n.get("file_rename.title"),type:l.types.default,size:l.sizes.small,content:this.composeEditForm(a),buttons:[{text:n.get("file_rename.button.cancel"),btnClass:"btn-default",name:"cancel",trigger:()=>{c.hideModal()}},{text:n.get("file_rename.button.rename"),btnClass:"btn-primary",name:"rename",trigger:()=>{c.querySelector("form")?.requestSubmit()}}],callback:function(i){const f=i.querySelector("form");f.addEventListener("submit",t=>{t.preventDefault();const p=new FormData(t.target),u=Object.fromEntries(p).name.toString();a.name!==u&&new y(TYPO3.settings.ajaxUrls.resource_rename).post({identifier:a.identifier,resourceName:u}).then(async b=>{const r=await b.resolve();if(r.status.length>0&&r.status.forEach(e=>{r.success?d.success(e.title,e.message):d.error(e.title,e.message)}),r.resource?.type==="folder"){const e=s.ContentContainer.getUrl();new URL(e,window.location.origin).searchParams.get("id")===r.origin.identifier?s.ContentContainer.setUrl(e+"&id="+r.resource.identifier):s.ContentContainer.refresh()}else s.ContentContainer.refresh();top.document.dispatchEvent(new CustomEvent("typo3:filestoragetree:refresh")),i.hideModal()})}),i.addEventListener("typo3-modal-shown",()=>{const t=f.querySelector("input");t!==null&&(t.focus(),t.setSelectionRange(0,a.name.lastIndexOf(".")))})}})}).bindTo(document)}composeEditForm(o){const m=o?.type==="folder"?n.get("folder_rename.label"):n.get("file_rename.label");return h`<form><label class=form-label for=rename_target>${m}</label> <input id=rename_target name=name class=form-control value=${o.name} required></form>`}}var v=new C;export{v as default};
@@ -0,0 +1,13 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import{html as l,nothing as h}from"lit";import{until as v}from"lit/directives/until.js";import p from"@typo3/core/event/regular-event.js";import{FileListActionEvent as y}from"@typo3/filelist/file-list-actions.js";import n from"@typo3/backend/modal.js";import f from"@typo3/core/ajax/ajax-request.js";import"@typo3/core/ajax/ajax-response.js";import u from"@typo3/backend/notification.js";import k from"@typo3/backend/viewport.js";import{FormatUtility as w}from"@typo3/backend/utility/format-utility.js";import{ThumbnailSize as _}from"@typo3/backend/element/thumbnail-element.js";import{topLevelModuleImport as $}from"@typo3/backend/utility/top-level-module-import.js";import a from"~labels/filelist.messages";import F from"~labels/core.common";import L from"~labels/core.core";import b from"~labels/filelist.mod_file_list";class q{constructor(){new p(y.replace,e=>{const t=e.detail.resources[0],m=n.advanced({title:a.get("file_replace.title",[t.name]),type:n.types.default,size:n.sizes.small,content:l`${v(this.loadEditor(t.identifier),l`<typo3-backend-spinner></typo3-backend-spinner>`)}`,buttons:[{text:F.get("cancel"),btnClass:"btn-default",name:"cancel",trigger:()=>{m.hideModal()}},{text:a.get("file_replace.button.replace"),btnClass:"btn-primary",name:"rename",trigger:()=>{m.querySelector("form")?.requestSubmit()}}],callback:function(o){new p("submit",c=>{c.preventDefault();const d=new FormData(c.target);d.set("uid",t.uid.toString()),new f(TYPO3.settings.ajaxUrls.resource_replace).post(d).then(async g=>{const s=await g.resolve();s.status.length>0&&s.status.forEach(r=>{s.success?u.success(r.title,r.message):u.error(r.title,r.message)}),k.ContentContainer.refresh(),o.hideModal()})}).delegateTo(o,"form")}})}).bindTo(document)}async loadEditor(e){const t=await(await new f(TYPO3.settings.ajaxUrls.resource_gather).withQueryArguments({identifier:e}).get()).resolve();return await $("@typo3/backend/element/datetime-element.js"),this.composeEditForm(t)}composeEditForm(e){const i=new URL(top.TYPO3.settings.Resource.thumbnailUrl,window.origin);return i.searchParams.set("identifier",e.uid.toString(10)),l`<div class=file-replace-dialog>${a.get("file_replace.intro",[e.name])}<div class=file-replace-dialog-summary>${e.hasPreview?l`<div class=file-replace-dialog-summary-thumbnail><typo3-backend-thumbnail url=${i} size=${_.large} width=96 keepaspectratio></typo3-backend-thumbnail></div>`:h}<div class=file-replace-dialog-summary-info><dl><dt>${b.get("c_name")}</dt><dd>${e.name}</dd><dt>${b.get("c_size")}</dt><dd>${w.fileSizeAsString(e.size)}</dd><dt>${L.get("labels.crdate")}</dt><dd><typo3-backend-datetime format=datetime datetime=${e.createdAt}></typo3-backend-datetime></dd></dl></div></div><form><div class=form-group><label class=form-label for=file_replace>${a.get("file_replace.new_file.label")}</label> <input id=file_replace type=file class=form-control name=replace_1></div><div class=form-check><input type=checkbox value=1 id=keepFilename name=keepFilename class=form-check-input checked> <label class=form-check-label for=keepFilename>${a.get("file_replace.keepFilename.label",[e.name])}</label></div></form></div>`}}var x=new q;export{x as default};
@@ -0,0 +1,13 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import{SeverityEnum as g}from"@typo3/backend/enum/severity.js";import d from"@typo3/backend/modal.js";import p from"@typo3/core/ajax/ajax-request.js";import u from"@typo3/core/event/regular-event.js";import h from"@typo3/backend/notification.js";import l from"@typo3/backend/viewport.js";import r from"~labels/filelist.transfer_handler";import{FileListDragDropEvent as v}from"@typo3/filelist/file-list-dragdrop.js";var c;(function(m){m.move="move",m.copy="copy"})(c||(c={}));class y{constructor(){new u(v.transfer,n=>{const e=n.detail,a=e.target,o=e.resources;let i,t;if(e.resources.length===1){const f=e.resources[0];i=r.get("message.transfer_resource.title"),t=r.get("message.transfer_resource.text",[f.name,a.name])}else i=r.get("message.transfer_resources.title"),t=r.get("message.transfer_resources.text",[o.length,a.name]);const s=d.confirm(i,t,g.notice,[{text:r.get("message.button.cancel"),active:!0,btnClass:"btn-default",name:"cancel",trigger:()=>{s.hideModal()}},{text:r.get("message.button.copy"),btnClass:"btn-primary",name:"copy",trigger:()=>{this.transfer(c.copy,o,a),s.hideModal()}},{text:r.get("message.button.move"),btnClass:"btn-primary",name:"move",trigger:()=>{this.transfer(c.move,o,a),s.hideModal()}}])}).bindTo(top.document)}transfer(n,e,a){const o=[];e.forEach(t=>{const s={data:t.identifier,target:a.identifier};o.push(s)});const i={data:{[n]:o}};new p(top.TYPO3.settings.ajaxUrls.file_process).post(i).then(async t=>{const s=await t.resolve();this.handleMessages(s.messages??[]),l.ContentContainer.refresh(),top.document.dispatchEvent(new CustomEvent("typo3:filestoragetree:refresh"))}).catch(async t=>{const s=await t.resolve();this.handleMessages(s.messages??[]),l.ContentContainer.refresh(),top.document.dispatchEvent(new CustomEvent("typo3:filestoragetree:refresh"))})}handleMessages(n){n.forEach(e=>{h.showMessage(e.title||"",e.message||"",e.severity)})}}var b=new y;export{b as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1,13 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import m from"@typo3/backend/link-browser.js";import c from"@typo3/core/event/regular-event.js";import{FileListActionEvent as r}from"@typo3/filelist/file-list-actions.js";import d from"@typo3/core/ajax/ajax-request.js";import p from"@typo3/backend/info-window.js";import u from"@typo3/backend/notification.js";class w{constructor(){new c(r.primary,e=>{e.preventDefault();const n=e.detail;n.action=r.select,document.dispatchEvent(new CustomEvent(r.select,{detail:n}))}).bindTo(document),new c(r.select,e=>{e.preventDefault();const t=e.detail.resources[0];t.type==="file"&&this.insertLink(t),t.type==="folder"&&this.loadContent(t)}).bindTo(document),new c(r.show,e=>{e.preventDefault();const t=e.detail.resources[0];p.showItem("_"+t.type.toUpperCase(),t.identifier)}).bindTo(document)}insertLink(e){new d(TYPO3.settings.ajaxUrls.link_resource).post({identifier:e.identifier}).then(async t=>{const o=await t.resolve();o.status.forEach(i=>{u.showMessage(i.title,i.message,i.severity)}),o.success&&m.finalizeFunction(o.link)})}async loadContent(e){if(e.type!=="folder")return;const n=document.location.href+"&contentOnly=1&expandFolder="+e.identifier,o=await(await new d(n).get()).resolve(),i=document.querySelector(".element-browser-main-content .element-browser-body");i.innerHTML=o;const s=document.querySelector("typo3-backend-component-filestorage-browser-tree");if(s){const l=encodeURIComponent(e.identifier),a=s.nodes.find(f=>f.identifier===l);a&&(await s.expandNodeParents(a),s.selectNode(a,!1))}}}var y=new w;export{y as default};
@@ -0,0 +1,13 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import a from"@typo3/backend/link-browser.js";import o from"@typo3/core/event/regular-event.js";import{FileListActionEvent as n}from"@typo3/filelist/file-list-actions.js";import l from"@typo3/backend/info-window.js";import c from"@typo3/core/ajax/ajax-request.js";import d from"@typo3/backend/notification.js";class u{constructor(){new o("click",(e,t)=>{e.preventDefault(),a.finalizeFunction(t.dataset.linkbrowserLink)}).delegateTo(document,"[data-linkbrowser-link]"),new o(n.primary,e=>{e.preventDefault();const t=e.detail;t.action=n.select,document.dispatchEvent(new CustomEvent(n.select,{detail:t}))}).bindTo(document),new o(n.select,e=>{e.preventDefault();const i=e.detail.resources[0];i.type==="folder"&&this.insertLink(i)}).bindTo(document),new o(n.show,e=>{e.preventDefault();const i=e.detail.resources[0];l.showItem("_"+i.type.toUpperCase(),i.identifier)}).bindTo(document)}insertLink(e){new c(TYPO3.settings.ajaxUrls.link_resource).post({identifier:e.identifier}).then(async i=>{const r=await i.resolve();r.status.forEach(s=>{d.showMessage(s.title,s.message,s.severity)}),r.success&&a.finalizeFunction(r.link)})}}var f=new u;export{f as default};
@@ -0,0 +1,13 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import{SeverityEnum as g}from"@typo3/backend/enum/severity.js";import v from"@typo3/core/ajax/ajax-request.js";import b from"@typo3/backend/modal.js";import h from"@typo3/core/document-service.js";import n from"~labels/filelist.messages";class x{constructor(){h.ready().then(()=>{this.initialize()})}initialize(){const e=document.querySelector(".t3js-submit-file-rename");e!==null&&e.addEventListener("click",this.checkForDuplicate)}checkForDuplicate(e){e.preventDefault();const t=e.currentTarget.form,a=t.querySelector('input[name="data[rename][0][target]"]'),i=t.querySelector('input[name="data[rename][0][destination]"]'),r=t.querySelector('input[name="data[rename][0][conflictMode]"]'),l={fileName:a.value};i!==null&&(l.fileTarget=i.value),new v(TYPO3.settings.ajaxUrls.file_exists).withQueryArguments(l).get({cache:"no-cache"}).then(async u=>{const d=typeof(await u.resolve()).uid<"u",o=a.dataset.original,s=a.value;if(d&&o!==s){const f=n.get("file_rename.exists.description",{0:o,1:s}),c=b.confirm(n.get("file_rename.exists.title"),f,g.warning,[{active:!0,btnClass:"btn-default",name:"cancel",text:n.get("file_rename.actions.cancel")},{btnClass:"btn-primary",name:"rename",text:n.get("file_rename.actions.rename")},{btnClass:"btn-default",name:"replace",text:n.get("file_rename.actions.override")}]);c.addEventListener("button.clicked",p=>{const m=p.target;m.name!=="cancel"&&(r!==null&&(r.value=m.name),t.submit()),c.hideModal()})}else t.submit()})}}var y=new x;export{y as default};
@@ -0,0 +1,13 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import s from"@typo3/core/event/regular-event.js";import f from"@typo3/core/ajax/ajax-request.js";import{FileListActionEvent as n}from"@typo3/filelist/file-list-actions.js";import m from"@typo3/backend/info-window.js";class p{constructor(){new s(n.primary,e=>{e.preventDefault();const t=e.detail;t.action=n.select,document.dispatchEvent(new CustomEvent(n.select,{detail:t}))}).bindTo(document),new s(n.select,e=>{e.preventDefault();const o=e.detail.resources[0];o.type==="folder"&&this.loadContent(o)}).bindTo(document),new s(n.show,e=>{e.preventDefault();const o=e.detail.resources[0];m.showItem("_"+o.type.toUpperCase(),o.identifier)}).bindTo(document)}async loadContent(e){if(e.type!=="folder")return;const t=document.location.href+"&contentOnly=1&expandFolder="+e.identifier,c=await(await new f(t).get()).resolve(),d=document.querySelector(".element-browser-main-content .element-browser-body");d.innerHTML=c;const r=document.querySelector("typo3-backend-component-filestorage-browser-tree");if(r){const a=encodeURIComponent(e.identifier),i=r.nodes.find(l=>l.identifier===a);i&&(await r.expandNodeParents(i),r.selectNode(i,!1))}}}var u=new p;export{u as default};