TYPO3 v15 dev-main snapshot ()
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
<p>
|
||||
{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:cms_description',
|
||||
arguments: '{
|
||||
0: "© {typo3Info.copyrightYear}",
|
||||
1: "Kasper Skårhøj."
|
||||
}') -> f:format.raw()}
|
||||
</p>
|
||||
<p>
|
||||
{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_login.xlf:extension.trademark',
|
||||
arguments: '{
|
||||
0: "<a href=\"{trademarkUrl}\" target=\"_blank\" rel=\"noreferrer\">",
|
||||
1: "</a>"
|
||||
}') -> f:format.raw()}
|
||||
</p>
|
||||
@@ -0,0 +1,10 @@
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h3 class="card-title">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:coredevs" />
|
||||
</h3>
|
||||
<p class="card-text">
|
||||
{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:coredevs_detail') -> f:format.raw()}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,10 @@
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h3 class="card-title">
|
||||
{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:community_credits')}
|
||||
</h3>
|
||||
<p class="card-text">
|
||||
{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:information_detail') -> f:format.raw()}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,13 @@
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h3 class="card-title">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:donation_header" />
|
||||
</h3>
|
||||
<p class="card-text">
|
||||
{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:donation_message') -> f:format.raw()}
|
||||
</p>
|
||||
<a href="{donationUrl}" class="btn btn-default" title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:donation_button')}" target="_blank" rel="noreferrer">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:donation_button" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,38 @@
|
||||
<f:if condition="{loadedExtensions}">
|
||||
<h2>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:extension_authors" />
|
||||
</h2>
|
||||
<p>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:extension_list_info" />
|
||||
</p>
|
||||
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped table-hover table-vertical-top">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:extension" /></th>
|
||||
<th><f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:extension_author" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<f:for each="{loadedExtensions}" as="loadedExtension">
|
||||
<tr>
|
||||
<td>
|
||||
{loadedExtension.title} ({loadedExtension.key})
|
||||
</td>
|
||||
<td>
|
||||
<f:if condition="{loadedExtension.authors}">
|
||||
<f:for each="{loadedExtension.authors}" as="extensionAuthor" iteration="i">
|
||||
{extensionAuthor.name} <f:if condition="{extensionAuthor.email}">({extensionAuthor.email})</f:if>
|
||||
<f:if condition="{i.isLast} == false">
|
||||
<br>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</f:if>
|
||||
</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</f:if>
|
||||
@@ -0,0 +1,139 @@
|
||||
<h2>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:external_libraries" />
|
||||
</h2>
|
||||
<p>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:external_thanks" />
|
||||
</p>
|
||||
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:external_libraries.table.column.name" /></th>
|
||||
<th><f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:external_libraries.table.column.website" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Composer</td>
|
||||
<td><a href="https://getcomposer.org" target="_blank" rel="noreferrer">getcomposer.org</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bootstrap</td>
|
||||
<td><a href="https://getbootstrap.com" target="_blank" rel="noreferrer">getbootstrap.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Doctrine Project (DBAL Component and Instantiator)</td>
|
||||
<td><a href="https://www.doctrine-project.org/projects/dbal.html" target="_blank" rel="noreferrer">doctrine-project.org</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Symfony Framework Component: Config</td>
|
||||
<td><a href="https://symfony.com/doc/current/components/config.html" target="_blank" rel="noreferrer">symfony.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Symfony Framework Component: Console</td>
|
||||
<td><a href="https://symfony.com/doc/current/components/console.html" target="_blank" rel="noreferrer">symfony.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Symfony Framework Component: DependencyInjection</td>
|
||||
<td><a href="https://symfony.com/doc/current/components/dependency_injection.html" target="_blank" rel="noreferrer">symfony.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Symfony Framework Component: ExpressionLanguage</td>
|
||||
<td><a href="https://symfony.com/doc/current/components/expression_language.html" target="_blank" rel="noreferrer">symfony.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Symfony Framework Component: Finder</td>
|
||||
<td><a href="https://symfony.com/doc/current/components/finder.html" target="_blank" rel="noreferrer">symfony.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Symfony Framework Component: Mailer</td>
|
||||
<td><a href="https://symfony.com/doc/current/components/mailer.html" target="_blank" rel="noreferrer">symfony.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Symfony Framework Component: Mime</td>
|
||||
<td><a href="https://symfony.com/doc/current/components/mime.html" target="_blank" rel="noreferrer">symfony.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Symfony Framework Component: PropertyAccess</td>
|
||||
<td><a href="https://symfony.com/doc/current/components/property_access.html" target="_blank" rel="noreferrer">symfony.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Symfony Framework Component: PropertyInfo</td>
|
||||
<td><a href="https://symfony.com/doc/current/components/property_info.html" target="_blank" rel="noreferrer">symfony.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Symfony Framework Component: Routing</td>
|
||||
<td><a href="https://symfony.com/doc/current/components/routing.html" target="_blank" rel="noreferrer">symfony.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Symfony Framework Component: YAML</td>
|
||||
<td><a href="https://symfony.com/doc/current/components/yaml.html" target="_blank" rel="noreferrer">symfony.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Lit</td>
|
||||
<td><a href="https://lit.dev/" target="_blank" rel="noreferrer">lit.dev</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Guzzle PHP</td>
|
||||
<td><a href="http://guzzlephp.org" target="_blank" rel="noreferrer">guzzlephp.org</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CKEditor</td>
|
||||
<td><a href="https://ckeditor.com" target="_blank" rel="noreferrer">ckeditor.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>chart.js</td>
|
||||
<td><a href="https://www.chartjs.org/" target="_blank" rel="noreferrer">chartjs.org</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>luxon</td>
|
||||
<td><a href="https://moment.github.io/luxon/" target="_blank" rel="noreferrer">moment.github.io/luxon</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Autosize</td>
|
||||
<td><a href="https://www.jacklmoore.com/autosize/" target="_blank" rel="noreferrer">jacklmoore.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cropper.js</td>
|
||||
<td><a href="https://fengyuanchen.github.io/cropperjs/" target="_blank" rel="noreferrer">fengyuanchen.github.io</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>flatpickr</td>
|
||||
<td><a href="https://flatpickr.js.org/" target="_blank" rel="noreferrer">flatpickr.js.org</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tablesort</td>
|
||||
<td><a href="http://tristen.ca/tablesort/demo/" target="_blank" rel="noreferrer">tristen.ca</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Alwan Color Picker</td>
|
||||
<td><a href="https://sefianecho.github.io/alwan/" target="_blank" rel="noreferrer">sefianecho.github.io/</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tab Override</td>
|
||||
<td><a href="https://wjbryant.github.io/taboverride/" target="_blank" rel="noreferrer">wjbryant.github.io</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Neos (Form component)</td>
|
||||
<td><a href="https://www.neos.io" target="_blank" rel="noreferrer">neos.io</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>FineDiff</td>
|
||||
<td><a href="https://github.com/lolli42/FineDiff" target="_blank" rel="noreferrer">github.com</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IDNA Convert</td>
|
||||
<td><a href="https://idnaconv.net" target="_blank" rel="noreferrer">idnaconv.net</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CodeMirror</td>
|
||||
<td><a href="https://codemirror.net" target="_blank" rel="noreferrer">codemirror.net</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SelectPure</td>
|
||||
<td><a href="https://github.com/dudyn5ky1/select-pure" target="_blank" rel="noreferrer">github.com</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -0,0 +1,9 @@
|
||||
<img
|
||||
src="{f:uri.resource(path: 'EXT:core/Resources/Public/Images/typo3_light_dark.svg')}"
|
||||
width="150"
|
||||
alt="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:typo3_logo')}"
|
||||
/>
|
||||
<h1>
|
||||
TYPO3 CMS {typo3Version.version}<br>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:introtext" />
|
||||
</h1>
|
||||
@@ -0,0 +1,76 @@
|
||||
<h2>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:modules.headline" />
|
||||
</h2>
|
||||
<p>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:modules.introtext" />
|
||||
</p>
|
||||
<f:for each="{modules}" as="mainModule">
|
||||
<f:if condition="{mainModule.subModules}">
|
||||
<f:if condition="{mainModule.title}">
|
||||
<h3><f:translate key="{mainModule.title}">{mainModule.title}</f:translate></h3>
|
||||
</f:if>
|
||||
<section class="card-container">
|
||||
<f:for each="{mainModule.subModules}" as="subModule">
|
||||
<div class="card card-size-small">
|
||||
<div class="card-header">
|
||||
<div class="card-icon">
|
||||
<core:icon identifier="{subModule.iconIdentifier}" size="large" />
|
||||
</div>
|
||||
<f:if condition="{subModule.title} || {subModule.shortDescription}">
|
||||
<div class="card-header-body">
|
||||
<f:if condition="{subModule.title}">
|
||||
<h4 class="card-title">
|
||||
<f:translate key="{subModule.title}">{subModule.title}</f:translate>
|
||||
</h4>
|
||||
</f:if>
|
||||
<f:if condition="{subModule.shortDescription}">
|
||||
<span class="card-subtitle">
|
||||
<f:translate key="{subModule.shortDescription}">{subModule.shortDescription}</f:translate>
|
||||
</span>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
<f:if condition="{subModule.description}">
|
||||
<div class="card-body">
|
||||
<p class="card-text">
|
||||
<f:sanitize.html>
|
||||
<f:translate key="{subModule.description}">{subModule.description}</f:translate>
|
||||
</f:sanitize.html>
|
||||
</p>
|
||||
</div>
|
||||
</f:if>
|
||||
<div class="card-footer">
|
||||
<f:if condition="{subModule.appearance.dependsOnSubmodules} && !{subModule.subModules}">
|
||||
<f:then>
|
||||
<p class="text-variant">
|
||||
<f:if condition="{subModule.title}">
|
||||
<f:then>
|
||||
<f:variable name="submoduleTitle"><f:translate key="{subModule.title}">{subModule.title}</f:translate></f:variable>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:noSubModulesWithTitle" arguments="{0: submoduleTitle}" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:noSubModules" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
</p>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:variable name="submoduleTitle"><f:translate key="{subModule.title}">{subModule.title}</f:translate></f:variable>
|
||||
<a
|
||||
href="#"
|
||||
data-dispatch-action="TYPO3.ModuleMenu.showModule"
|
||||
data-dispatch-args-list="{subModule.identifier}"
|
||||
class="btn btn-default"
|
||||
aria-label="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:submoduleOverview.openModuleWithTitle', arguments: {0: submoduleTitle})}"
|
||||
>
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/Modules/about.xlf:link.openModule" />
|
||||
</a>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</f:for>
|
||||
</section>
|
||||
</f:if>
|
||||
</f:for>
|
||||
@@ -0,0 +1,88 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<nav
|
||||
class="modulemenu"
|
||||
data-role="modulemenu"
|
||||
id="modulemenu"
|
||||
data-modulemenu
|
||||
aria-label="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:modulemenu.label')}"
|
||||
data-modules-information="{modulesInformation}"
|
||||
>
|
||||
<f:if condition="{modules}">
|
||||
<f:render section="Menubar" arguments="{modules: modules}" />
|
||||
</f:if>
|
||||
</nav>
|
||||
|
||||
<f:section name="Menubar">
|
||||
<ul
|
||||
role="menubar"
|
||||
aria-orientation="vertical"
|
||||
aria-label="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang.xlf:modulemenu.label')}"
|
||||
class="modulemenu-group-container"
|
||||
>
|
||||
<f:for each="{modules}" as="module" iteration="iterator">
|
||||
<li
|
||||
role="presentation"
|
||||
data-modulemenu-level="1"
|
||||
{f:if(condition: module.subModules, then: 'class="modulemenu-group modulemenu-group-{f:if(condition: module.collapsed, then: \'collapsed\', else: \'expanded\')}"')}
|
||||
>
|
||||
<f:render section="Button" arguments="{module: module, showChildren: module.subModules, tabIndex: '{f:if(condition: iterator.isFirst, then: \'0\', else: \'-1\')}'}" />
|
||||
<f:if condition="{module.subModules}">
|
||||
<f:render section="Menu" arguments="{modules: module.subModules, parent: module}" />
|
||||
</f:if>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Menu">
|
||||
<ul
|
||||
id="modulemenu-group-{parent.identifier}"
|
||||
role="menu"
|
||||
aria-orientation="vertical"
|
||||
<f:if condition="{parent.title}">
|
||||
aria-label="{f:translate(key: parent.title, default: parent.title)}"
|
||||
</f:if>
|
||||
class="modulemenu-group-container collapse {f:if(condition: '{parent}', then: '{f:if(condition: parent.collapsed, else: \'show\')}')}"
|
||||
>
|
||||
<f:for each="{modules}" as="module">
|
||||
<li role="presentation" data-modulemenu-level="2">
|
||||
<f:render section="Button" arguments="{module: module, tabIndex: '-1'}" />
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Button">
|
||||
<f:variable name="moduleTitle" value="" />
|
||||
<f:if condition="{module.title}">
|
||||
<f:variable name="moduleTitle" value="{f:translate(key: module.title, default: module.title)}" />
|
||||
</f:if>
|
||||
<{f:if(condition: module.shouldBeLinked, then: 'a', else: 'button')}
|
||||
<f:if condition="{module.shouldBeLinked}">
|
||||
<f:then>
|
||||
href="{f:be.uri(route: module.identifier)}"
|
||||
data-moduleroute-identifier="{module.identifier}"
|
||||
</f:then>
|
||||
<f:else>
|
||||
type="button"
|
||||
</f:else>
|
||||
</f:if>
|
||||
role="menuitem"
|
||||
title="{moduleTitle}"
|
||||
class="modulemenu-action"
|
||||
tabindex="{tabIndex}"
|
||||
data-modulemenu-identifier="{module.identifier}"
|
||||
data-modulemenu-collapsible="{f:if(condition: showChildren, then: 'true', else: 'false')}"
|
||||
{f:if(condition: showChildren, then: 'aria-controls="modulemenu-group-{module.identifier}" aria-haspopup="menu" aria-expanded="{f:if(condition: module.collapsed, then: \'false\', else: \'true\')}"')}
|
||||
>
|
||||
<span class="modulemenu-icon" aria-hidden="true"><core:icon size="medium" identifier="{module.iconIdentifier}" alternativeMarkupIdentifier="inline" /></span>
|
||||
<span class="modulemenu-name">{moduleTitle}</span>
|
||||
<span class="modulemenu-indicator" aria-hidden="true"></span>
|
||||
</{f:if(condition: module.shouldBeLinked, then: 'a', else: 'button')}>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,69 @@
|
||||
<html
|
||||
xmlns:be="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
|
||||
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:asset.module identifier="@typo3/backend/element/sidebar-toggle-element.js" />
|
||||
<div class="scaffold-topbar t3js-scaffold-topbar" data-topbar-identifier="topbar">
|
||||
<div class="topbar t3js-topbar">
|
||||
<typo3-backend-sidebar-toggle
|
||||
class="topbar-button topbar-button-modulemenu"
|
||||
label-collapse="{f:translate(key: 'toolbarItems.sidebarCollapse', domain: 'backend.toolbar')}"
|
||||
label-expand="{f:translate(key: 'toolbarItems.sidebarExpand', domain: 'backend.toolbar')}"
|
||||
{f:if(condition: '!{sidebar.accessible}', then: 'disabled')}
|
||||
></typo3-backend-sidebar-toggle>
|
||||
<div class="topbar-site-container">
|
||||
<a class="topbar-site" href="./" target="_top" title="{siteName} - {applicationVersion}">
|
||||
<span class="topbar-site-logo">
|
||||
<img src="{logoUrl}" width="{logoWidth}" height="{logoHeight}" alt="" aria-hidden="true" />
|
||||
</span>
|
||||
<span class="topbar-site-title">
|
||||
<span class="topbar-site-name">{siteName}</span>
|
||||
<span class="topbar-site-version">{applicationVersion}</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<button
|
||||
class="topbar-button topbar-button-toolbar t3js-topbar-button-toolbar"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.toolbarOpenClose')}"
|
||||
aria-label="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.toolbarOpenClose')}"
|
||||
>
|
||||
<core:icon identifier="actions-cog" alternativeMarkupIdentifier="inline" />
|
||||
</button>
|
||||
<button
|
||||
class="topbar-button topbar-button-search t3js-topbar-button-search"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.searchbarOpenClose')}"
|
||||
aria-label="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_toolbar.xlf:toolbarItems.searchbarOpenClose')}"
|
||||
aria-haspopup="dialog"
|
||||
>
|
||||
<core:icon identifier="actions-search" alternativeMarkupIdentifier="inline" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="scaffold-toolbar t3js-scaffold-toolbar" data-toolbar-identifier="toolbar">
|
||||
<div class="toolbar">
|
||||
<ul class="toolbar-list" data-typo3-role="typo3-module-menu">
|
||||
<f:for each="{toolbarItems}" as="toolbarItem" iteration="iterator">
|
||||
<li {be:toolbar.attributes(class: toolbarItem) -> f:format.raw()}>
|
||||
<be:toolbar.ifHasDropdown class="{toolbarItem}">
|
||||
<f:then>
|
||||
<button type="button" class="toolbar-item-link dropdown-toggle dropdown-toggle-no-chevron" data-bs-target="toolbar-menu-{iterator.cycle}" data-bs-toggle="dropdown" data-bs-offset="0,0">
|
||||
{toolbarItem.item -> f:format.raw()}
|
||||
</button>
|
||||
<div id="toolbar-menu-{iterator.cycle}" class="dropdown-menu" role="menu">
|
||||
{toolbarItem.dropdown -> f:format.raw()}
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
{toolbarItem.item -> f:format.raw()}
|
||||
</f:else>
|
||||
</be:toolbar.ifHasDropdown>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,57 @@
|
||||
<div class="module-loading-indicator"></div>
|
||||
<div class="module-docheader module-docheader-navigation t3js-module-docheader-navigation">
|
||||
<f:be.pageRenderer includeJavaScriptModules="{0: '@typo3/backend/viewport/content-navigation-toggle.js'}" />
|
||||
<div class="module-docheader-column">
|
||||
<typo3-backend-content-navigation-toggle
|
||||
class="btn btn-sm btn-icon btn-default btn-borderless"
|
||||
action="expand"
|
||||
hidden
|
||||
>
|
||||
</typo3-backend-content-navigation-toggle>
|
||||
</div>
|
||||
<div class="module-docheader-column module-docheader-column-breadcrumb">
|
||||
<f:if condition="{docHeader.breadcrumb}">
|
||||
<f:be.pageRenderer includeJavaScriptModules="{0: '@typo3/backend/element/breadcrumb.js'}" />
|
||||
<typo3-breadcrumb
|
||||
label='{f:translate(key: "LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:breadcrumb")}'
|
||||
nodes='{docHeader.breadcrumb -> f:format.json()}'
|
||||
></typo3-breadcrumb>
|
||||
</f:if>
|
||||
</div>
|
||||
<div class="module-docheader-column">
|
||||
<f:if condition="{docHeader.languageSelector}">
|
||||
<f:format.raw>{docHeader.languageSelector}</f:format.raw>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
<f:if condition="{docHeader.buttons.left -> f:count()} > 0 || {docHeader.buttons.right -> f:count()} > 0">
|
||||
<div class="module-docheader module-docheader-buttons t3js-module-docheader-buttons">
|
||||
<div class="module-docheader-column module-docheader-column-grow">
|
||||
<f:render section="buttonbar" arguments="{buttons:docHeader.buttons.left}" />
|
||||
</div>
|
||||
<div class="module-docheader-column">
|
||||
<f:render section="buttonbar" arguments="{buttons:docHeader.buttons.right}" />
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
|
||||
<f:section name="buttonbar">
|
||||
<f:if condition="{buttons -> f:count()} > 0">
|
||||
<div class="btn-toolbar" role="toolbar" aria-label="">
|
||||
<f:for each="{buttons}" as="buttonGroup">
|
||||
<f:if condition="{buttonGroup -> f:count()} > 1">
|
||||
<f:then>
|
||||
<div class="btn-group" role="group" aria-label="">
|
||||
<f:for each="{buttonGroup}" as="button">
|
||||
{button -> f:format.raw()}
|
||||
</f:for>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
{buttonGroup.0 -> f:format.raw()}
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</div>
|
||||
</f:if>
|
||||
</f:section>
|
||||
@@ -0,0 +1,6 @@
|
||||
<p>
|
||||
<f:if condition="{normalizedParams.remoteAddress}">
|
||||
This password reset request originated from the IP address <strong>{normalizedParams.remoteAddress}</strong>.
|
||||
</f:if>
|
||||
If you have not requested a password reset and have concerns about this email, please let your administrator know.
|
||||
</p>
|
||||
@@ -0,0 +1,2 @@
|
||||
<f:if condition="{normalizedParams.remoteAddress}">This password reset request originated from the IP address "{normalizedParams.remoteAddress}".</f:if>
|
||||
If you have not requested a password reset and have concerns about this email, please let your administrator know.
|
||||
@@ -0,0 +1,8 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
<f:translate id="LLL:EXT:core/Resources/Private/Language/locallang_wizards.xlf:imwizard.image-manipulation" />
|
||||
: <f:if condition="{image.properties.title}"><f:then>{image.properties.title} — {image.name}</f:then><f:else>{image.name}</f:else></f:if>
|
||||
({image.properties.width} × {image.properties.height})
|
||||
</html>
|
||||
@@ -0,0 +1,53 @@
|
||||
<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:if condition="{loginNewsItems}">
|
||||
<section class="typo3-login-news" aria-labelledby="loginNewsHeader">
|
||||
<h2 id="loginNewsHeader" class="visually-hidden">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.news.header" />
|
||||
</h2>
|
||||
<f:if condition="{loginNewsItems -> f:count()} > 1">
|
||||
<f:then>
|
||||
<div class="carousel slide typo3-login-carousel t3js-login-news-carousel" id="loginNews" data-bs-ride="false">
|
||||
<button class="left typo3-login-carousel-control" data-bs-target="#loginNews" data-bs-slide="prev">
|
||||
<core:icon identifier="actions-chevron-start" size="small" />
|
||||
<span class="visually-hidden"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.news.previous"/></span>
|
||||
</button>
|
||||
<button type="button" class="right typo3-login-carousel-control" data-bs-target="#loginNews" data-bs-slide="next">
|
||||
<core:icon identifier="actions-chevron-end" size="small" />
|
||||
<span class="visually-hidden"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.news.next"/></span>
|
||||
</button>
|
||||
<div class="carousel-inner carousel-inner--overflowing-bottom" aria-live="polite">
|
||||
<f:for each="{loginNewsItems}" as="item" iteration="loginNewsIterator">
|
||||
<div role="group" aria-labelledby="loginNewsItem-{item.uid}" class="carousel-item{f:if(condition: loginNewsIterator.isFirst,then: ' active')}">
|
||||
<f:render section="Item" arguments="{item: item}"/>
|
||||
</div>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div class="carousel typo3-login-carousel">
|
||||
<div class="carousel-inner carousel-inner--overflowing-bottom">
|
||||
<f:render section="Item" arguments="{item:'{loginNewsItems.0}'}"/>
|
||||
</div>
|
||||
</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</section>
|
||||
</f:if>
|
||||
|
||||
<f:section name="Item">
|
||||
<p id="loginNewsItem-{item.uid}" class="typo3-login-news-heading">{item.header}</p>
|
||||
{item.content -> f:transform.html() -> f:sanitize.html()}
|
||||
<f:if condition="{item.date}">
|
||||
<p class="text-variant">
|
||||
<span class="visually-hidden"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang.xlf:login.news.date"/></span>{item.date}
|
||||
</p>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,8 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
<f:be.infobox title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_mfa.xlf:setup.instructions')}" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}">
|
||||
<f:format.nl2br>{provider.setupInstructions -> f:translate(key: provider.setupInstructions, default: provider.setupInstructions)}</f:format.nl2br>
|
||||
</f:be.infobox>
|
||||
</html>
|
||||
@@ -0,0 +1,12 @@
|
||||
<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:switch expression="{item.stateIcon}">
|
||||
<f:case value="-1"><core:icon identifier="status-dialog-ok" /></f:case>
|
||||
<f:case value="1"><core:icon identifier="status-dialog-notification" /></f:case>
|
||||
<f:case value="2"><core:icon identifier="status-dialog-warning" /></f:case>
|
||||
<f:case value="3"><core:icon identifier="status-dialog-error" /></f:case>
|
||||
</f:switch>
|
||||
</html>
|
||||
@@ -0,0 +1,60 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<div class="tab-wrapper">
|
||||
<ul class="nav nav-tabs" role="tablist" id="tabs-{id}" data-store-last-tab="{storeLastActiveTab}">
|
||||
<f:for each="{items}" as="item" iteration="iteration">
|
||||
<f:if condition="{item.content}">
|
||||
<li role="presentation" class="nav-item">
|
||||
<button
|
||||
type="button"
|
||||
class="nav-link {f:if(condition: '{iteration.cycle} == {defaultTabIndex}', then: ' active')}"
|
||||
title="{item.linkTitle}"
|
||||
data-typo3-tab="#{id}-{iteration.cycle}"
|
||||
aria-controls="{id}-{iteration.cycle}"
|
||||
role="tab"
|
||||
>
|
||||
<f:if condition="{item.icon}">
|
||||
<f:format.raw>{item.icon}</f:format.raw>
|
||||
</f:if>
|
||||
{item.label}
|
||||
<f:if condition="{item.requiredIcon}">
|
||||
<f:format.raw>{item.requiredIcon}</f:format.raw>
|
||||
</f:if>
|
||||
<f:if condition="{item.stateIcon}">
|
||||
<f:render partial="ModuleTemplate/StateIcon" arguments="{item: item}" />
|
||||
</f:if>
|
||||
</button>
|
||||
</li>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<f:for each="{items}" as="item" iteration="iteration">
|
||||
<f:if condition="{item.content}">
|
||||
<div role="tabpanel" class="tab-pane{f:if(condition: '{iteration.cycle} == {defaultTabIndex}', then: ' active')}" id="{id}-{iteration.cycle}">
|
||||
<h2 class="visually-hidden">{item.label}</h2>
|
||||
<f:if condition="{item.description}">
|
||||
<div class="form-section">
|
||||
<p><f:format.nl2br>{item.description}</f:format.nl2br></p>
|
||||
</div>
|
||||
</f:if>
|
||||
<f:if condition="{wrapContent}">
|
||||
<f:then>
|
||||
<div class="form-section">
|
||||
<f:format.raw>{item.content}</f:format.raw>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:format.raw>{item.content}</f:format.raw>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,26 @@
|
||||
<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"
|
||||
>
|
||||
|
||||
<div class="multi-record-selection-actions-wrapper">
|
||||
<div class="row row-cols-auto align-items-center gx-2 t3js-multi-record-selection-actions hidden">
|
||||
<div class="col">
|
||||
<strong><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.selection"/></strong>
|
||||
</div>
|
||||
<div class="col">
|
||||
<f:for each="{actions}" as="action">
|
||||
<button class="btn btn-default btn-sm"
|
||||
data-multi-record-selection-action="{action.name}"
|
||||
data-multi-record-selection-action-config='{action.configuration -> f:format.raw()}'
|
||||
>
|
||||
{action.icon -> f:format.raw()}
|
||||
<span class="text">{action.label}</span>
|
||||
</button>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,6 @@
|
||||
<div class="t3-page-ce-actions t3js-page-new-ce">
|
||||
<typo3-backend-new-content-element-wizard-button class="btn btn-default btn-sm" url="{url}" subject="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:newContentElement')}">
|
||||
<core:icon identifier="actions-plus" />
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:createNewContent" />
|
||||
</typo3-backend-new-content-element-wizard-button>
|
||||
</div>
|
||||
@@ -0,0 +1,20 @@
|
||||
<div class="t3-grid-container{f:if(condition: grid.context.backendLayout.identifierCleaned, then: ' t3-grid-container-{grid.context.backendLayout.identifierCleaned}')}">
|
||||
<div class="t3-grid-container-inner">
|
||||
<table class="t3-page-columns t3-grid-table t3js-page-columns">
|
||||
<f:if condition="{gridColumns}">
|
||||
<colgroup>
|
||||
<f:for each="{gridColumns}" as="tmpColumn">
|
||||
<col span="1" style="width: calc(100% / {gridColumns -> f:count()})">
|
||||
</f:for>
|
||||
</colgroup>
|
||||
</f:if>
|
||||
<f:for each="{grid.rows}" as="row">
|
||||
<tr>
|
||||
<f:for each="{row.columns}" as="column">
|
||||
<f:render partial="PageLayout/Grid/Column" arguments="{_all}" />
|
||||
</f:for>
|
||||
</tr>
|
||||
</f:for>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,50 @@
|
||||
<f:comment>
|
||||
Styling requires the colpos to be set to the string 'unused'. To preserve type safety in the
|
||||
controller, the string is only used in the template by setting the below "colpos" variable.
|
||||
</f:comment>
|
||||
<f:variable name="colpos" value="{f:if(condition: column.unused, then: 'unused', else: column.columnNumber)}"/>
|
||||
|
||||
<f:if condition="{languageColumns}">
|
||||
<f:then>
|
||||
<f:comment><!-- Language comparison view --></f:comment>
|
||||
<f:variable name="columnIdentifier" value="columnIdentifier_language-{column.context.siteLanguage.languageId}_column-{colpos}" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:comment><!-- Grid / Column view --></f:comment>
|
||||
<f:variable name="columnIdentifier" value="columnIdentifier_column-{colpos}" />
|
||||
</f:else>
|
||||
</f:if>
|
||||
<f:variable name="columnClasses">
|
||||
t3js-page-column t3-grid-cell t3-page-column
|
||||
{f:if(condition: column.identifierCleaned, then: 't3-grid-cell-{column.identifierCleaned}')}
|
||||
{f:if(condition: column.unassigned, then: 't3-grid-cell-unassigned')}
|
||||
{f:if(condition: '!{column.active} && !{column.unused}', then: 't3-grid-cell-restricted')}
|
||||
{f:if(condition: '!{column.active} && {hideRestrictedColumns} && !{column.unused}', then: 't3-grid-cell-hidden')}
|
||||
</f:variable>
|
||||
<td
|
||||
valign="top"
|
||||
colspan="{column.colSpan}"
|
||||
rowspan="{column.rowSpan}"
|
||||
data-colpos="{colpos}"
|
||||
data-language-uid="{column.context.siteLanguage.languageId}"
|
||||
class="{columnClasses -> f:spaceless()}"
|
||||
role="group" aria-labelledby="{columnIdentifier}"
|
||||
>
|
||||
<f:alias map="{columnHeaderLevel: 2}">
|
||||
<f:render partial="PageLayout/Grid/ColumnHeader" arguments="{_all}" />
|
||||
</f:alias>
|
||||
<f:if condition="{column.active} || {column.unused}">
|
||||
<div data-colpos="{colpos}" data-language-uid="{column.context.siteLanguage.languageId}" class="t3-page-ce-wrapper">
|
||||
<f:for each="{column.items}" as="item">
|
||||
<f:render partial="PageLayout/Record" arguments="{_all}" />
|
||||
</f:for>
|
||||
</div>
|
||||
</f:if>
|
||||
<f:if condition="{column.unassigned}">
|
||||
<f:be.infobox
|
||||
title="{f:translate(domain: 'backend.layout', key: 'emptyColPos')}"
|
||||
message="{f:translate(domain: 'backend.layout', key: 'emptyColPos.message')}"
|
||||
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::WARNING')}"
|
||||
/>
|
||||
</f:if>
|
||||
</td>
|
||||
@@ -0,0 +1,49 @@
|
||||
{columnHeaderLevel -> f:or(alternative: 2) -> f:variable(name: 'columnHeaderLevel')}
|
||||
|
||||
<div class="t3-page-column-header">
|
||||
<f:if condition="{column.active}">
|
||||
<f:then>
|
||||
<div class="t3-page-column-header-icons">
|
||||
<f:if condition="{allowEditContent} && {column.editUrl}">
|
||||
<a
|
||||
class="btn btn-link"
|
||||
href="{column.editUrl}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:editColumn')}"
|
||||
>
|
||||
<core:icon identifier="actions-document-open" />
|
||||
<span class="visually-hidden">{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:editColumn')}</span>
|
||||
</a>
|
||||
</f:if>
|
||||
</div>
|
||||
<h{columnHeaderLevel} id="{columnIdentifier}" class="t3-page-column-title">
|
||||
{column.title}
|
||||
<f:if condition="{context.pageContext.pageRecord.pid} !== 0 && {column.slideMode.value} !== 'none'">
|
||||
<f:if condition="!({column.slideMode.value} === 'slide' && {column.items})">
|
||||
<span class="badge badge-info" title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:slideModeInfo.{column.slideMode.value}')}">
|
||||
<f:switch expression="{column.slideMode.value}">
|
||||
<f:case value="slide">{core:icon(identifier: 'actions-search', size: 'small')}{core:icon(identifier: 'actions-sort-amount-up', size: 'small')}</f:case>
|
||||
<f:case value="collect">{core:icon(identifier: 'actions-cart', size: 'small')}{core:icon(identifier: 'actions-sort-amount-down', size: 'small')}</f:case>
|
||||
<f:case value="collectReverse">{core:icon(identifier: 'actions-cart', size: 'small')}{core:icon(identifier: 'actions-sort-amount-up', size: 'small')}</f:case>
|
||||
</f:switch>
|
||||
</span>
|
||||
</f:if>
|
||||
</f:if>
|
||||
</h{columnHeaderLevel}>
|
||||
</f:then>
|
||||
<f:else if="{column.unused}">
|
||||
<span id="{columnIdentifier}"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:unusedColPos"/></span>
|
||||
</f:else>
|
||||
<f:else if="{column.unassigned}">
|
||||
<span id="{columnIdentifier}">{column.titleUnassigned}</span>
|
||||
</f:else>
|
||||
<f:else>
|
||||
<span id="{columnIdentifier}">{column.titleInaccessible}</span>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
<f:if condition="{allowEditContent} && {column.contentEditable} && {column.context.allowNewContent} && {column.active}">
|
||||
<div class="t3-page-ce t3js-page-ce" data-page="{column.context.pageId}">
|
||||
<f:render partial="PageLayout/ActionControls" arguments="{column: column, allowEditContent: allowEditContent, url: column.newContentUrl}" />
|
||||
<div class="t3-page-ce-dropzone t3js-page-ce-dropzone-available" hidden></div>
|
||||
</div>
|
||||
</f:if>
|
||||
@@ -0,0 +1,149 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
xmlns:be="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
|
||||
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<div class="t3-grid-container{f:if(condition: context.backendLayout.identifierCleaned, then: ' t3-grid-container-{context.backendLayout.identifierCleaned}')}" data-multi-languages="{f:if(condition: context.multiLanguages, then: '1', else: '0')}">
|
||||
<div class="t3-grid-container-inner">
|
||||
<table class="t3-page-columns t3-grid-table t3js-page-columns">
|
||||
<tr>
|
||||
<f:for each="{languageColumns}" as="languageColumn">
|
||||
<td valign="top"
|
||||
class="t3-page-column t3-page-column-lang-name"
|
||||
data-language-uid="{languageColumn.context.siteLanguage.languageId}"
|
||||
data-language-title="{languageColumn.context.siteLanguage.title}"
|
||||
data-flag-identifier="{languageColumn.context.siteLanguage.flagIdentifier}"
|
||||
>
|
||||
<typo3-backend-editable-page-title
|
||||
pageTitle="{languageColumn.context.localizedPageTitle}"
|
||||
pageId="{context.pageId}"
|
||||
localizedPageId="{languageColumn.pageRecordUid}"
|
||||
{languageColumn.allowEditPage ? 'editable' : ''}
|
||||
>
|
||||
{languageColumn.context.localizedPageTitle}
|
||||
</typo3-backend-editable-page-title>
|
||||
<div>
|
||||
<core:iconForRecord table="pages" row="{languageColumn.pageRecord}" />
|
||||
<core:icon identifier="{languageColumn.context.siteLanguage.flagIdentifier}" />
|
||||
{languageColumn.context.siteLanguage.title}
|
||||
<f:if condition="{languageColumn.context.languageMode}">
|
||||
<span class="badge badge-{languageColumn.context.languageModeLabelClass}">{languageColumn.context.languageMode}</span>
|
||||
</f:if>
|
||||
<f:if condition="{languageColumn.translationData.hasElementsWithWorkspaceDeletePlaceholders}">
|
||||
<span class="badge badge-warning"
|
||||
data-bs-content="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:languageContainsWorkspaceDeletePlaceholderRecords')}"
|
||||
data-bs-toggle="popover"
|
||||
data-bs-placement="auto"
|
||||
data-bs-trigger="hover focus"
|
||||
>
|
||||
!
|
||||
</span>
|
||||
</f:if>
|
||||
</div>
|
||||
<div class="mt-2">
|
||||
<f:if condition="{languageColumn.allowViewPage}">
|
||||
<button class="btn btn-default btn-sm" {f:if(condition: languageColumn.previewUrlAttributes, then: '{languageColumn.previewUrlAttributes -> f:format.raw()}', else: 'disabled="true"')} title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.showPage')}">
|
||||
<core:icon identifier="actions-view" />
|
||||
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.showPage" />
|
||||
</button>
|
||||
</f:if>
|
||||
<f:if condition="{languageColumn.allowEditPage}">
|
||||
<typo3-backend-contextual-record-edit-trigger
|
||||
url="{languageColumn.pageEditUrl}"
|
||||
edit-url="{languageColumn.fullPageEditUrl}"
|
||||
class="btn btn-default btn-sm"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:editPageProperties')}"
|
||||
>
|
||||
<core:icon identifier="actions-open" />
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:editPageProperties" />
|
||||
</typo3-backend-contextual-record-edit-trigger>
|
||||
</f:if>
|
||||
<f:if condition="{allowEditContent} && {languageColumn.context.siteLanguage.languageId} && {languageColumn.translationData.untranslatedRecordUids}">
|
||||
<typo3-backend-localization-button
|
||||
class="btn btn-default btn-sm"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:newPageContent_translate')}"
|
||||
record-type="pages"
|
||||
record-uid="{context.pageId}"
|
||||
target-language="{languageColumn.context.siteLanguage.languageId}"
|
||||
>
|
||||
<core:icon identifier="actions-localize" />
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:localize.wizard.button.translate" />
|
||||
</typo3-backend-localization-button>
|
||||
</f:if>
|
||||
</div>
|
||||
</td>
|
||||
</f:for>
|
||||
</tr>
|
||||
<f:if condition="{context.multiLanguages}">
|
||||
<f:then>
|
||||
<f:variable name="grid" value="{languageColumns.0.grid}" />
|
||||
<f:for each="{context.drawingConfiguration.activeColumns}" as="columnNumber">
|
||||
<tr>
|
||||
<f:for each="{languageColumns}" as="languageColumn">
|
||||
<f:variable name="column" value="{be:languageColumn(languageColumn: languageColumn, columnNumber: columnNumber)}" />
|
||||
<td valign="top"
|
||||
data-colpos="{column.columnNumber}" data-language-uid="{column.context.siteLanguage.languageId}"
|
||||
class="t3-grid-cell t3-page-column t3js-page-column {f:if(condition: column.identifierCleaned, then: 't3-grid-cell-{column.identifierCleaned}')}">
|
||||
<f:alias map="{columnHeaderLevel: 3}">
|
||||
<f:render partial="PageLayout/Grid/ColumnHeader" arguments="{_all}" />
|
||||
</f:alias>
|
||||
</td>
|
||||
</f:for>
|
||||
</tr>
|
||||
<f:variable name="column" value="{be:languageColumn(languageColumn: languageColumns.0, columnNumber: columnNumber)}" />
|
||||
<f:for each="{column.items}" as="gridItem" iteration="itemIterator">
|
||||
<tr>
|
||||
<td class="t3-grid-cell t3js-page-column {f:if(condition: column.identifierCleaned, then: 't3-grid-cell-{column.identifierCleaned}')}" valign="top" data-colpos="{column.columnNumber}">
|
||||
<f:variable name="column" value="{be:languageColumn(languageColumn: languageColumns.0, columnNumber: columnNumber)}" />
|
||||
<f:variable name="item" value="{gridItem}" />
|
||||
<f:render partial="PageLayout/Record" arguments="{_all}" />
|
||||
</td>
|
||||
<f:for each="{languageColumns}" as="languageColumn">
|
||||
<f:if condition="{languageColumn.context.siteLanguage.languageId} > 0">
|
||||
<f:variable name="column" value="{be:languageColumn(languageColumn: languageColumn, columnNumber: columnNumber)}" />
|
||||
<td class="t3-grid-cell t3js-page-column {f:if(condition: column.identifierCleaned, then: 't3-grid-cell-{column.identifierCleaned}')}" valign="top" data-colpos="{column.columnNumber}">
|
||||
<f:variable name="languageId" value="{languageColumn.context.siteLanguage.languageId}" />
|
||||
<f:if condition="{languageColumn.translationData.mode} == 'connected'">
|
||||
<f:then>
|
||||
<f:if condition="{gridItem.translations.{languageId}}">
|
||||
<f:variable name="item" value="{gridItem.translations.{languageId}}" />
|
||||
<f:render partial="PageLayout/Record" arguments="{_all}" />
|
||||
</f:if>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:if condition="{itemIterator.isFirst}">
|
||||
<f:variable name="languageColumnNonConnected">{languageColumns.{languageId}}</f:variable>
|
||||
<f:variable name="column" value="{be:languageColumn(languageColumn: languageColumnNonConnected, columnNumber: columnNumber)}" />
|
||||
<f:for each="{column.items}" as="item">
|
||||
<f:render partial="PageLayout/Record" arguments="{_all}" />
|
||||
</f:for>
|
||||
</f:if>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</td>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</tr>
|
||||
</f:for>
|
||||
</f:for>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:for each="{context.drawingConfiguration.activeColumns}" as="columnNumber">
|
||||
<tr>
|
||||
<f:for each="{languageColumns}" as="languageColumn">
|
||||
<f:if condition="{languageColumn.grid.columns}">
|
||||
<f:variable name="grid" value="{languageColumn.grid}" />
|
||||
<f:variable name="column" value="{be:languageColumn(languageColumn: languageColumn, columnNumber: columnNumber)}" />
|
||||
<f:render partial="PageLayout/Grid/Column" arguments="{_all}" />
|
||||
</f:if>
|
||||
</f:for>
|
||||
</tr>
|
||||
</f:for>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</html>
|
||||
@@ -0,0 +1,36 @@
|
||||
{f:if(condition: '{item.disabled} && {item.context.drawingConfiguration.showHidden} == 0', then: 'height: 0; display: none;') -> f:variable(name: 'style')}
|
||||
<div
|
||||
role="group"
|
||||
aria-labelledby="element-{item.table}-{item.record.uid}-label"
|
||||
class="t3-page-ce {item.wrapperClassName} t3js-page-ce t3js-page-ce-sortable"
|
||||
id="element-{item.table}-{item.record.uid}"
|
||||
data-table="{item.table}"
|
||||
data-uid="{item.record.uid}"
|
||||
data-language-uid="{item.record.languageId}"
|
||||
data-move-element-url="{f:be.uri(route: 'move_element', parameters: '{uid: item.record.uid, originalPid: item.record.pid, expandPage: item.record.pid, returnUrl: context.returnUrl}')}"
|
||||
style="{style}"
|
||||
>
|
||||
<span id="element-{item.table}-{item.record.uid}-label" class="visually-hidden">id={item.record.uid} - <f:if condition="{item.record.header}">{item.record.header} - </f:if>{item.contentTypeLabel}</span>
|
||||
<div class="t3-page-ce-element t3-page-ce-dragitem">
|
||||
<f:render partial="PageLayout/Record/{item.record.CType}/Header" arguments="{_all}" optional="1">
|
||||
<f:render partial="PageLayout/RecordDefault/Header" arguments="{_all}" />
|
||||
</f:render>
|
||||
<f:spaceless>
|
||||
<div class="t3-page-ce-body">
|
||||
<f:render partial="PageLayout/RecordDefault/Preview" arguments="{_all}" />
|
||||
</div>
|
||||
</f:spaceless>
|
||||
<f:render partial="PageLayout/Record/{item.record.CType}/Footer" arguments="{_all}" optional="1">
|
||||
<f:render partial="PageLayout/RecordDefault/Footer" arguments="{_all}" />
|
||||
</f:render>
|
||||
<f:if condition="{item.inconsistentLanguage}">
|
||||
<div class="t3-page-ce-footer">
|
||||
<span class="badge badge-warning">{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.inconsistentLanguageWarning')}</span>
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
<f:if condition="{allowEditContent} && {item.column.contentEditable} && {column.context.allowNewContent} && {column.active}">
|
||||
<f:render partial="PageLayout/ActionControls" arguments="{item: item, column: column, allowEditContent: allowEditContent, url: item.newContentAfterUrl}" />
|
||||
</f:if>
|
||||
<div class="t3-page-ce-dropzone t3js-page-ce-dropzone-available" hidden></div>
|
||||
</div>
|
||||
@@ -0,0 +1,7 @@
|
||||
<f:if condition="{item.footerInfo}">
|
||||
<div class="t3-page-ce-footer">
|
||||
<div class="t3-page-ce-info">
|
||||
{item.footerInfo -> f:format.raw()}
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
@@ -0,0 +1,60 @@
|
||||
<div class="t3-page-ce-header t3js-page-ce-header" {f:if(condition: '{allowEditContent} && {item.dragAndDropAllowed}', then: 'draggable="true"')}>
|
||||
<div class="t3-page-ce-header-left">
|
||||
{item.icons -> f:format.raw()}
|
||||
<f:if condition="{item.siteLanguage.flagIdentifier}">
|
||||
<span class="t3-page-ce-header-icon-flag t3js-flag">
|
||||
<span class="visually-hidden">{item.siteLanguage.title}</span>
|
||||
<core:icon identifier="{item.siteLanguage.flagIdentifier}" title="{item.siteLanguage.title}" />
|
||||
</span>
|
||||
</f:if>
|
||||
</div>
|
||||
<div class="t3-page-ce-header-title">
|
||||
{item.contentTypeLabel}
|
||||
</div>
|
||||
<div class="t3-page-ce-header-right">
|
||||
<f:if condition="{item.editable} && {allowEditContent}">
|
||||
<div class="btn-toolbar">
|
||||
<div class="btn-group btn-group-sm">
|
||||
<typo3-backend-contextual-record-edit-trigger
|
||||
url="{item.contextualEditUrl}"
|
||||
edit-url="{item.editUrl}"
|
||||
class="btn btn-sm btn-default btn-borderless"
|
||||
title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:edit')}"
|
||||
>
|
||||
<core:icon identifier="actions-open" />
|
||||
</typo3-backend-contextual-record-edit-trigger>
|
||||
<f:if condition="{item.visibilityToggling}">
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-default btn-borderless"
|
||||
data-action="content-element-visibility-toggle"
|
||||
title="{item.visibilityToggleTitle}">
|
||||
<typo3-backend-icon identifier="actions-edit-{item.visibilityToggleIconName}" size="small"></typo3-backend-icon>
|
||||
</button>
|
||||
</f:if>
|
||||
<f:if condition="{item.delible}">
|
||||
<a class="btn btn-default btn-borderless t3js-modal-trigger"
|
||||
href="{item.deleteUrl}"
|
||||
data-severity="warning"
|
||||
data-title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:label.confirm.delete_record.title')}"
|
||||
data-content="{item.deleteMessage}"
|
||||
data-button-close-text="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel')}"
|
||||
data-button-ok-text="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:delete')}"
|
||||
title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_layout.xlf:deleteItem')}">
|
||||
<core:icon identifier="actions-edit-delete" size="small" />
|
||||
</a>
|
||||
</f:if>
|
||||
<button type="button"
|
||||
aria-haspopup="true"
|
||||
aria-controls="contentMenu0"
|
||||
aria-label="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.contextMenu.open')}"
|
||||
class="btn btn-sm btn-default btn-borderless"
|
||||
data-contextmenu-trigger="click"
|
||||
data-contextmenu-table="{item.table}"
|
||||
data-contextmenu-uid="{item.record.uid}">
|
||||
<core:icon identifier="actions-menu-alternative" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,3 @@
|
||||
<f:render partial="PageLayout/Record/{item.record.CType}/Preview" arguments="{_all}" optional="1">
|
||||
{item.preview -> f:format.raw()}
|
||||
</f:render>
|
||||
@@ -0,0 +1,30 @@
|
||||
<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"
|
||||
>
|
||||
<div class="diff">
|
||||
<f:for each="{differences}" as="differencesItem" key="key">
|
||||
<div class="diff-item">
|
||||
<div class="diff-item-title">
|
||||
{differencesItem.title}
|
||||
</div>
|
||||
<div class="diff-item-result"><f:spaceless>
|
||||
<f:format.raw>{differencesItem.result}</f:format.raw>
|
||||
</f:spaceless></div>
|
||||
<f:if condition="{differences -> f:count()} > 1">
|
||||
<div class="diff-item-button col-control nowrap">
|
||||
<f:if condition="{differencesItem.rollbackUrl}">
|
||||
<div class="btn-group">
|
||||
<a href="{differencesItem.rollbackUrl}" class="btn btn-default">
|
||||
<core:icon identifier="actions-edit-undo" />
|
||||
{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:revertField')}
|
||||
</a>
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:for>
|
||||
</div>
|
||||
</html>
|
||||
@@ -0,0 +1,129 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
xmlns:be="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
|
||||
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<h2>{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:changes')}</h2>
|
||||
|
||||
<f:groupedFor each="{history}" as="historyEntries" groupBy="day" groupKey="day">
|
||||
<h3>{day}</h3>
|
||||
<div class="table-fit">
|
||||
<table class="table table-striped table-hover table-vertical-top">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-time">{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:time')}</th>
|
||||
<th colspan="2">{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:user')}</th>
|
||||
<th colspan="2">{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:column.recordTitle')}</th>
|
||||
<th class="col-action">{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:column.action')}</th>
|
||||
<th class="col-differences">{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:differences')}</th>
|
||||
<th class="col-control nowrap"><span class="visually-hidden">{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels._CONTROL_')}</span></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<f:for each="{historyEntries}" as="historyRow">
|
||||
<tr>
|
||||
<td class="col-time">
|
||||
<f:format.date format="H:i:s">{historyRow.timestamp}</f:format.date>
|
||||
</td>
|
||||
<td class="col-avatar">
|
||||
<f:if condition="{historyRow.backendUserUid}">
|
||||
<be:avatar backendUser="{historyRow.backendUserUid}" showIcon="true" />
|
||||
</f:if>
|
||||
</td>
|
||||
<td class="col-username">
|
||||
<f:if condition="{historyRow.backendUserUid}">
|
||||
<f:then>
|
||||
<f:if condition="{historyRow.backendUserRealName}">
|
||||
<f:then>
|
||||
{historyRow.backendUserRealName}
|
||||
<div class="text-variant">({f:if(condition: historyRow.backendUserName, then: historyRow.backendUserName, else: '{f:translate(key: \'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:userNotFound\')}')})</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
{f:if(condition: historyRow.backendUserName, then: historyRow.backendUserName, else: '{f:translate(key: \'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:userNotFound\')}')}
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:then>
|
||||
<f:else>
|
||||
{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:externalChange')}
|
||||
</f:else>
|
||||
</f:if>
|
||||
<f:if condition="{historyRow.originalBackendUserUid}">
|
||||
<div>({f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:viaUser')} {f:if(condition: historyRow.originalBackendUserName, then: historyRow.originalBackendUserName, else: '{f:translate(key: \'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:userNotFound\')}')})</div>
|
||||
</f:if>
|
||||
<f:if condition="{isUserInWorkspace} && {historyRow.isChangedInWorkspace}">
|
||||
<br>
|
||||
<span class="text-variant">
|
||||
{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:workspace')}
|
||||
</span>
|
||||
</f:if>
|
||||
</td>
|
||||
<td class="col-icon nowrap">
|
||||
<span title="id={historyRow.recordUid}">
|
||||
<core:iconForRecord table="{historyRow.recordTable}" row="{historyRow}" alternativeMarkupIdentifier="inline" />
|
||||
</span>
|
||||
</td>
|
||||
<td class="col-recordtitle">
|
||||
{historyRow.title} ({historyRow.recordTable}:{historyRow.recordUid})
|
||||
</td>
|
||||
<td class="col-action">
|
||||
<f:variable name="actionTypeClass">
|
||||
<f:switch expression="{historyRow.actiontype}">
|
||||
<f:case value="1">success</f:case>
|
||||
<f:case value="2">warning</f:case>
|
||||
<f:case value="3">primary</f:case>
|
||||
<f:case value="4">danger</f:case>
|
||||
<f:case value="7">info</f:case>
|
||||
<f:defaultCase>secondary</f:defaultCase>
|
||||
</f:switch>
|
||||
</f:variable>
|
||||
<span class="badge badge-{actionTypeClass -> f:spaceless()}">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:historyRow.actiontype.{historyRow.actiontype}" />
|
||||
</span>
|
||||
</td>
|
||||
<td class="col-differences">
|
||||
<f:if condition="{historyRow.fieldNames}">
|
||||
{historyRow.fieldNames}
|
||||
</f:if>
|
||||
<f:if condition="{historyRow.differences}">
|
||||
<f:render partial="RecordHistory/Diff" arguments="{differences: historyRow.differences}"/>
|
||||
</f:if>
|
||||
</td>
|
||||
<td class="col-control nowrap">
|
||||
<div class="btn-group">
|
||||
<f:if condition="{0:recordTable,1:recordUid} !== {0:historyRow.recordTable,1:historyRow.recordUid}">
|
||||
<a
|
||||
href="{historyRow.elementUrl}"
|
||||
title="{f:translate(id: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:linkRecordHistory')}"
|
||||
class="btn btn-default"
|
||||
>
|
||||
<core:icon identifier="actions-filter" />
|
||||
</a>
|
||||
</f:if>
|
||||
<f:if condition="{isUserInWorkspace} !== true || {historyRow.isChangedInWorkspace}">
|
||||
<f:if condition="{editLock}">
|
||||
<f:then>
|
||||
<button class="btn btn-default disabled" title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:editLockIsActive')}">
|
||||
<core:icon identifier="actions-document-history-open" />
|
||||
</button>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<a class="btn btn-default" href="{historyRow.diffUrl}" title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:sumUpChanges')}">
|
||||
<core:icon identifier="actions-document-history-open" />
|
||||
</a>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:if>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</f:for>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</f:groupedFor>
|
||||
|
||||
<f:be.infobox state="{f:constant(name: '\TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}">{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:differenceMsg') -> f:format.raw()}</f:be.infobox>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,44 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
<h2>{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:mergedDifferences')}</h2>
|
||||
|
||||
<f:if condition="{revertAllUrl}">
|
||||
<f:then>
|
||||
<p><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:mergedDifferences.description" /></p>
|
||||
|
||||
<div class="diff-group">
|
||||
<f:for each="{multipleDiff}" as="historyRow">
|
||||
<h3>{historyRow.title}</h3>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<f:if condition="{historyRow.insertDelete} || {historyRow.fieldNames} || {historyRow.differences -> f:count()}">
|
||||
<div class="diff-group">
|
||||
<f:if condition="{historyRow.insertDelete} == 'delete'">
|
||||
<p><strong>{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:rollback.plannedAction.delete')}</strong></p>
|
||||
</f:if>
|
||||
<f:if condition="{historyRow.insertDelete} == 'insert'">
|
||||
<p><strong>{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:rollback.plannedAction.insert')}</strong></p>
|
||||
</f:if>
|
||||
<f:if condition="{historyRow.fieldNames}">
|
||||
<p>{historyRow.fieldNames}</p>
|
||||
</f:if>
|
||||
<f:if condition="{historyRow.differences}">
|
||||
<f:render partial="RecordHistory/Diff" arguments="{differences: historyRow.differences}"/>
|
||||
</f:if>
|
||||
</div>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{historyRow.revertRecordUrl}" class="btn btn-default">{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:revertRecord')}</a>
|
||||
</f:for>
|
||||
</div>
|
||||
<a href="{revertAllUrl}" class="btn btn-default">{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:revertAll')}</a>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<p>{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:noDifferences')}</p>
|
||||
</f:else>
|
||||
</f:if>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,39 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
<div id="element-history-settings" class="container-settings">
|
||||
<form action="{settingsFormUrl}" name="recordHistorySettingsForm" method="post">
|
||||
<div class="form-row-md">
|
||||
<div class="form-group">
|
||||
<label class="form-label" for="maxSteps"><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:maxSteps" /></label>
|
||||
<select class="form-select" id="maxSteps" name="settings[maxSteps]" data-global-event="change" data-action-submit="$form">
|
||||
<option value="10" {f:if(condition: '{moduleSettings.maxSteps} == 10', then :'selected')}>10</option>
|
||||
<option value="20" {f:if(condition: '{moduleSettings.maxSteps} == 20', then :'selected')}>20</option>
|
||||
<option value="50" {f:if(condition: '{moduleSettings.maxSteps} == 50', then :'selected')}>50</option>
|
||||
<option value="100" {f:if(condition: '{moduleSettings.maxSteps} == 100', then :'selected')}>100</option>
|
||||
<option value="999" {f:if(condition: '{moduleSettings.maxSteps} == 999', then :'selected')}><f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:maxSteps_all" /></option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-check form-switch form-check-size-input">
|
||||
<input type="hidden" value="0" name="settings[showDiff]" />
|
||||
<input type="checkbox" id="showDiff" value="1" name="settings[showDiff]" data-global-event="change" data-action-submit="$form" class="form-check-input" {f:if(condition: '{moduleSettings.showDiff}', then: 'checked')} />
|
||||
<label class="form-check-label" for="showDiff">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:showDiff" />
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="form-check form-switch form-check-size-input">
|
||||
<input type="hidden" value="0" name="settings[showSubElements]" />
|
||||
<input type="checkbox" id="showSubElements" value="1" name="settings[showSubElements]" data-global-event="change" data-action-submit="$form" class="form-check-input" {f:if(condition: '{moduleSettings.showSubElements}', then: 'checked')} />
|
||||
<label class="form-check-label" for="showSubElements">
|
||||
<f:translate key="LLL:EXT:backend/Resources/Private/Language/locallang_show_rechis.xlf:showSubElements" />
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</html>
|
||||
@@ -0,0 +1,33 @@
|
||||
<f:if condition="{site.invalidSets}">
|
||||
<f:variable name="renderMode">{f:if(condition: '{renderMode} == "infobox"', then: 'infobox', else: 'alert')}</f:variable>
|
||||
|
||||
<f:render section="{renderMode}" arguments="{
|
||||
site: site,
|
||||
title: '{f:translate(key: \'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:error.site.invalidSetDependencies\')}'
|
||||
}"/>
|
||||
</f:if>
|
||||
|
||||
<f:section name="infobox">
|
||||
<f:be.infobox state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::ERROR')}" title="{title}">
|
||||
<ul class="alert-message">
|
||||
<f:for each="{site.invalidSets}" as="invalidSet">
|
||||
<li><f:translate key="{invalidSet.error.label}" arguments="{0: invalidSet.name, 1: invalidSet.context}"/></li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:be.infobox>
|
||||
</f:section>
|
||||
|
||||
<f:section name="alert">
|
||||
<div class="alert alert-danger mt-2">
|
||||
<div class="alert-inner">
|
||||
<div class="alert-content">
|
||||
<div class="alert-title">{title}</div>
|
||||
<ul class="alert-message">
|
||||
<f:for each="{site.invalidSets}" as="invalidSet">
|
||||
<li><f:translate key="{invalidSet.error.label}" arguments="{0: invalidSet.name, 1: invalidSet.context}"/></li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
@@ -0,0 +1,5 @@
|
||||
<span class="toolbar-item-icon" title="{f:translate(key: title, default: title)}" aria-hidden="true">{icon -> f:format.raw()}</span>
|
||||
<span class="toolbar-item-title">{f:translate(key: title) -> f:format.raw()}</span>
|
||||
<f:if condition="{name}">
|
||||
<span class="toolbar-item-name">{name -> f:format.raw()}</span>
|
||||
</f:if>
|
||||
Reference in New Issue
Block a user