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
@@ -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>