TYPO3 v15 dev-main snapshot ()

This commit is contained in:
2026-08-10 22:31:41 +02:00
commit 621587f02d
50 changed files with 4650 additions and 0 deletions
@@ -0,0 +1,18 @@
<?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:tstemplate/Resources/Private/Language/Modules/active.xlf" date="2026-11-10T13:37:37Z" product-name="active">
<header/>
<body>
<trans-unit id="title">
<source>Active TypoScript</source>
</trans-unit>
<!-- intentionally left blank, not utilized (for now) -->
<trans-unit id="short_description">
<source/>
</trans-unit>
<trans-unit id="description">
<source/>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,18 @@
<?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:tstemplate/Resources/Private/Language/Modules/analyzer.xlf" date="2026-11-10T13:37:37Z" product-name="analyzer">
<header/>
<body>
<trans-unit id="title">
<source>Included TypoScript</source>
</trans-unit>
<!-- intentionally left blank, not utilized (for now) -->
<trans-unit id="short_description">
<source/>
</trans-unit>
<trans-unit id="description">
<source/>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,18 @@
<?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:tstemplate/Resources/Private/Language/Modules/constanteditor.xlf" date="2026-11-10T13:37:37Z" product-name="constanteditor">
<header/>
<body>
<trans-unit id="title">
<source>Constant Editor</source>
</trans-unit>
<!-- intentionally left blank, not utilized (for now) -->
<trans-unit id="short_description">
<source/>
</trans-unit>
<trans-unit id="description">
<source/>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,18 @@
<?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:tstemplate/Resources/Private/Language/Modules/infomodify.xlf" date="2026-11-10T13:37:37Z" product-name="infomodify">
<header/>
<body>
<trans-unit id="title">
<source>Edit TypoScript Record</source>
</trans-unit>
<!-- intentionally left blank, not utilized (for now) -->
<trans-unit id="short_description">
<source/>
</trans-unit>
<trans-unit id="description">
<source/>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,18 @@
<?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:tstemplate/Resources/Private/Language/Modules/recordsoverview.xlf" date="2026-11-10T13:37:37Z" product-name="recordsoverview">
<header/>
<body>
<trans-unit id="title">
<source>TypoScript Overview</source>
</trans-unit>
<!-- intentionally left blank, not utilized (for now) -->
<trans-unit id="short_description">
<source/>
</trans-unit>
<trans-unit id="description">
<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:tstemplate/Resources/Private/Language/Modules/ts.xlf" date="2026-11-10T13:37:37Z" product-name="ts">
<header/>
<body>
<trans-unit id="short_description">
<source>TypoScript tools</source>
</trans-unit>
<trans-unit id="description">
<source>Here you manage the TypoScript records which are in charge of the look of your website on the frontend. The module provides specialized features like a TypoScript tree, a constant editor and raw editing facilities.</source>
</trans-unit>
<trans-unit id="title">
<source>TypoScript</source>
</trans-unit>
</body>
</file>
</xliff>
+41
View File
@@ -0,0 +1,41 @@
<?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:tstemplate/Resources/Private/Language/locallang.xlf" date="2011-10-17T20:22:37Z" product-name="tstemplate">
<header/>
<body>
<trans-unit id="noRecordFound.infobox.title">
<source>No TypoScript record on the current page</source>
</trans-unit>
<trans-unit id="noRecordFound.infobox.message">
<source>You need to create a TypoScript record in order to edit your configuration.</source>
</trans-unit>
<trans-unit id="noRecordFound.goToClosestRecord.description">
<source>The closest TypoScript record is located on page '%s' (uid %s).</source>
</trans-unit>
<trans-unit id="noRecordFound.goToClosestRecord.link.title">
<source>Select this TypoScript record</source>
</trans-unit>
<trans-unit id="noRecordFound.createRootTypoScriptRecord.headline">
<source>Root TypoScript record</source>
</trans-unit>
<trans-unit id="noRecordFound.createRootTypoScriptRecord.description">
<source>Choose this option if you want this page to be the root of a new site.</source>
</trans-unit>
<trans-unit id="noRecordFound.createRootTypoScriptRecord.link.title">
<source>Create a root TypoScript record</source>
</trans-unit>
<trans-unit id="noRecordFound.createRootTypoScriptRecord.title.placeholder">
<source>NEW SITE</source>
</trans-unit>
<trans-unit id="noRecordFound.createAdditionalTypoScriptRecord.headline">
<source>Additional TypoScript record</source>
</trans-unit>
<trans-unit id="noRecordFound.createAdditionalTypoScriptRecord.description">
<source>An additional TypoScript record allows you to enter TypoScript values that will affect only this page and subpages.</source>
</trans-unit>
<trans-unit id="noRecordFound.createAdditionalTypoScriptRecord.link.title">
<source>Create an additional TypoScript record</source>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,100 @@
<?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:tstemplate/Resources/Private/Language/locallang_active.xlf" date="2011-10-17T20:22:37Z" product-name="tstemplate">
<header/>
<body>
<trans-unit id="submodule.title">
<source>Active TypoScript</source>
</trans-unit>
<trans-unit id="submodule.titleWithRecord">
<source>Active TypoScript for record "%s"</source>
</trans-unit>
<trans-unit id="submodule.description">
<source>Overview of the current TypoScript configuration of the system, divided into constants and setup parts. Optionally, the constant values can be displayed directly in the setup. A targeted search for values and TypoScript names is possible. The list of results can also be filtered according to TypoScript conditions.</source>
</trans-unit>
<trans-unit id="infobox.message.noTypoScriptFound">
<source>No TypoScript found.</source>
</trans-unit>
<trans-unit id="options.displayComments">
<source>Display comments</source>
</trans-unit>
<trans-unit id="options.displayConstantSubstitutions">
<source>Substitute constants in setup</source>
</trans-unit>
<trans-unit id="options.selectedRecord">
<source>Selected record</source>
</trans-unit>
<trans-unit id="options.sortAlphabetically">
<source>Sort keys alphabetically</source>
</trans-unit>
<trans-unit id="sectionHeadline.constants">
<source>Constants</source>
</trans-unit>
<trans-unit id="sectionHeadline.setup">
<source>Setup</source>
</trans-unit>
<trans-unit id="panel.header.conditions">
<source>Conditions</source>
</trans-unit>
<trans-unit id="panel.header.configuration">
<source>Configuration</source>
</trans-unit>
<trans-unit id="panel.info.conditionActiveCount.multiple">
<source>%s active conditions</source>
</trans-unit>
<trans-unit id="panel.info.conditionActiveCount.single">
<source>%s active condition</source>
</trans-unit>
<trans-unit id="panel.info.conditionWithConstant">
<source>Constant usage: [%s]</source>
</trans-unit>
<trans-unit id="tree.valueWithConstant">
<source>Constant usage: %s</source>
</trans-unit>
<!-- Edit action -->
<trans-unit id="editAction.submodule.title">
<source>Edit single property</source>
</trans-unit>
<trans-unit id="editAction.submodule.titleWithTemplate">
<source>Edit single property in TypoScript record "%s"</source>
</trans-unit>
<trans-unit id="editAction.infobox.title.noTypoScriptTemplateOnCurrentPage">
<source>No TypoScript record on the current page</source>
</trans-unit>
<trans-unit id="editAction.infobox.message.noTypoScriptTemplateOnCurrentPage">
<source>You cannot edit properties and values if there is no current TypoScript record in which the configuration can be stored. Please create an extension TypoScript record in "Edit TypoScript Record" first.</source>
</trans-unit>
<trans-unit id="editAction.addProperty.headline">
<source>Add or override child property</source>
</trans-unit>
<trans-unit id="editAction.addProperty.btn">
<source>Add</source>
</trans-unit>
<trans-unit id="editAction.editProperty.headline">
<source>Edit current value</source>
</trans-unit>
<trans-unit id="editAction.editProperty.btn">
<source>Update</source>
</trans-unit>
<trans-unit id="editAction.clearObject.headline">
<source>Clear the object</source>
</trans-unit>
<trans-unit id="editAction.clearObject.infotextWithProperty">
<source>The object will be cleared via the statement:</source>
</trans-unit>
<trans-unit id="editAction.clearObject.btn">
<source>Clear now</source>
</trans-unit>
<!-- Update action -->
<trans-unit id="updateAction.lineAdded">
<source>Line added to current TypoScript record</source>
</trans-unit>
<trans-unit id="updateAction.lineNotAdded">
<source>No line added to current TypoScript record</source>
</trans-unit>
<trans-unit id="updateAction.noSpaces">
<source>You must enter a property with characters "a-z", "A-Z", "0-9", or ".". Dots will be quoted. No spaces or special chars.</source>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,119 @@
<?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:tstemplate/Resources/Private/Language/locallang_analyzer.xlf" date="2011-10-17T20:22:37Z" product-name="tstemplate">
<header/>
<body>
<trans-unit id="submodule.title">
<source>Included TypoScript</source>
</trans-unit>
<trans-unit id="submodule.titleWithRecord">
<source>Included TypoScript for record "%s"</source>
</trans-unit>
<trans-unit id="submodule.description">
<source>Overview of the included TypoScript and include order for the current page.</source>
</trans-unit>
<trans-unit id="infobox.message.noTypoScriptFound">
<source>No TypoScript found.</source>
</trans-unit>
<trans-unit id="options.selectedRecord">
<source>Selected record</source>
</trans-unit>
<trans-unit id="sectionHeadline.constants">
<source>Constants</source>
</trans-unit>
<trans-unit id="sectionHeadline.setup">
<source>Setup</source>
</trans-unit>
<trans-unit id="panel.header.syntaxErrors">
<source>Syntax scanner warnings</source>
</trans-unit>
<trans-unit id="panel.header.configuration">
<source>Configuration</source>
</trans-unit>
<trans-unit id="panel.info.syntaxErrorCount.single">
<source>%s syntax warning</source>
</trans-unit>
<trans-unit id="panel.info.syntaxErrorCount.multiple">
<source>%s syntax warnings</source>
</trans-unit>
<trans-unit id="syntaxError.sourceCode">
<source>Show affected code snippet</source>
</trans-unit>
<trans-unit id="syntaxError.type.line.invalid">
<source>Invalid line in "%1$s", line number "%2$s"</source>
</trans-unit>
<trans-unit id="syntaxError.type.brace.excess">
<source>Brace in excess in "%1$s", line number "%2$s"</source>
</trans-unit>
<trans-unit id="syntaxError.type.brace.missing">
<source>Brace missing in "%1$s", line number "%2$s"</source>
</trans-unit>
<trans-unit id="syntaxError.type.import.empty">
<source>Import does not find a file in "%1$s", line number "%2$s"</source>
</trans-unit>
<trans-unit id="tree.child.btn.sourceCode">
<source>Show code</source>
</trans-unit>
<trans-unit id="tree.child.btn.sourceCodeWithResolvedIncludes">
<source>Show code including possible includes/imports</source>
</trans-unit>
<trans-unit id="tree.child.setting.clear">
<source>Clear</source>
</trans-unit>
<trans-unit id="tree.child.setting.root">
<source>Root</source>
</trans-unit>
<trans-unit id="tree.child.sysTemplateRecord">
<source>TypoScript record (page UID %s)</source>
</trans-unit>
<trans-unit id="tree.child.type.AtImport">
<source>Included via "@import"</source>
</trans-unit>
<trans-unit id="tree.child.type.Condition">
<source>Condition (then)</source>
</trans-unit>
<trans-unit id="tree.child.type.ConditionElse">
<source>Condition (else)</source>
</trans-unit>
<trans-unit id="tree.child.type.ConditionStop">
<source>Condition (end)</source>
</trans-unit>
<trans-unit id="tree.child.type.DefaultTypoScript">
<source>Included via "$GLOBALS"</source>
</trans-unit>
<trans-unit id="tree.child.type.DefaultTypoScriptMagicKey">
<source>Included via "$GLOBALS"</source>
</trans-unit>
<trans-unit id="tree.child.type.DefaultTypoScriptMagicKey_formlabel">
<source>Default content rendering</source>
</trans-unit>
<trans-unit id="tree.child.type.ExtensionStatic">
<source>TypoScript set (loaded automatically)</source>
</trans-unit>
<trans-unit id="tree.child.type.File">
<source>Part of a TypoScript set</source>
</trans-unit>
<trans-unit id="tree.child.type.IncludeStaticFileDatabase">
<source>TypoScript set</source>
</trans-unit>
<trans-unit id="tree.child.type.IncludeStaticFileFile">
<source>TypoScript set (included via file)</source>
</trans-unit>
<trans-unit id="tree.child.type.Root">
<source>Root</source>
</trans-unit>
<trans-unit id="tree.child.type.Segment">
<source>Code segment</source>
</trans-unit>
<trans-unit id="tree.child.type.Site">
<source>Site</source>
</trans-unit>
<trans-unit id="tree.child.type.SiteTemplate">
<source>Site configuration</source>
</trans-unit>
<trans-unit id="tree.child.type.SysTemplate">
<source>TypoScript record</source>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,26 @@
<?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:tstemplate/Resources/Private/Language/locallang_ceditor.xlf" date="2011-10-17T20:22:37Z" product-name="tstemplate">
<header/>
<body>
<trans-unit id="submodule.title">
<source>Constant Editor</source>
</trans-unit>
<trans-unit id="submodule.titleWithRecord">
<source>Constant Editor for TypoScript record "%s"</source>
</trans-unit>
<trans-unit id="submodule.description">
<source>Overwrite constants and save them to the selected TypoScript record on the current page. Only options that have been made available for editing in the constant editor are shown below. In addition, more constants can exist in the system.</source>
</trans-unit>
<trans-unit id="options.selectedCategory">
<source>Selected category</source>
</trans-unit>
<trans-unit id="options.selectedRecord">
<source>Selected record</source>
</trans-unit>
<trans-unit id="infobox.message.noConstants">
<source>There are no editable constants available for the Constant Editor.</source>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,56 @@
<?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:tstemplate/Resources/Private/Language/locallang_info.xlf" date="2011-10-17T20:22:37Z" product-name="tstemplate">
<header/>
<body>
<trans-unit id="submodule.title">
<source>Edit TypoScript record</source>
</trans-unit>
<trans-unit id="submodule.titleWithRecord">
<source>Edit TypoScript record "%s"</source>
</trans-unit>
<trans-unit id="submodule.description">
<source>Modify the content of the selected TypoScript record of the current page. Modifications can be made either for configurations like TypoScript constants and setup or basics like the title and description of the TypoScript record itself.</source>
</trans-unit>
<trans-unit id="options.selectedRecord">
<source>Selected record</source>
</trans-unit>
<trans-unit id="table.column.constants">
<source>Constants</source>
</trans-unit>
<trans-unit id="table.column.description">
<source>Description</source>
</trans-unit>
<trans-unit id="table.column.lines">
<source>%s lines</source>
</trans-unit>
<trans-unit id="table.column.setup">
<source>Setup</source>
</trans-unit>
<trans-unit id="table.column.title">
<source>Title</source>
</trans-unit>
<trans-unit id="btn.editSiteConfiguration">
<source>Edit site configuration</source>
</trans-unit>
<trans-unit id="btn.editSiteSettings">
<source>Edit site settings</source>
</trans-unit>
<trans-unit id="btn.editTypoScriptRecord">
<source>Edit the whole TypoScript record</source>
</trans-unit>
<trans-unit id="infoTypoScriptRecordFromSite.title">
<source>TypoScript settings have been implicitly generated from site sets includes</source>
</trans-unit>
<trans-unit id="infoTypoScriptRecordFromSite.message">
<source>The site configuration '%s' has one or more dependencies on site sets. The sets can be configured in the 'Sites » Setup' backend module. The TypoScript definitions can be edited on the file system.</source>
</trans-unit>
<trans-unit id="noConstantsButSiteSettings.title">
<source>Site Settings available</source>
</trans-unit>
<trans-unit id="noConstantsButSiteSettings.message">
<source>Edit site settings via the 'Sites » Setup' backend module.</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:tstemplate/Resources/Private/Language/locallang_overview.xlf" date="2023-01-22T19:53:00Z" product-name="tstemplate">
<header/>
<body>
<trans-unit id="typoscriptRecords.title">
<source>TypoScript Overview</source>
</trans-unit>
<trans-unit id="typoscriptRecords.description">
<source>Global overview of all pages with active TypoScript definitions (database records and site sets).</source>
</trans-unit>
<trans-unit id="typoscriptRecords.noRecordsFound">
<source>No TypoScript definitions found.</source>
</trans-unit>
<trans-unit id="typoscriptRecords.table.column.pageTitle">
<source>Page title</source>
</trans-unit>
<trans-unit id="typoscriptRecords.table.column.typoscriptRecords">
<source>TypoScript definitions</source>
</trans-unit>
<trans-unit id="typoscriptRecords.table.column.site">
<source>Site set</source>
</trans-unit>
<trans-unit id="typoscriptRecords.table.column.root">
<source>Marked as root</source>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,87 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
xmlns:backend="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:if condition="{conditions}">
<div class="panel panel-default">
<h3 class="panel-heading" role="tab" id="typoscript-active-{type}-conditions-heading">
<div class="panel-heading-row">
<button
class="panel-button collapsed"
type="button"
data-bs-toggle="collapse"
data-bs-target="#typoscript-active-{type}-conditions-body"
aria-controls="typoscript-active-{type}-conditions-body"
aria-expanded="false"
>
<div class="panel-title">
<strong><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:panel.header.conditions"/></strong>
</div>
<f:if condition="{conditionActiveCount}">
<div class="panel-badge">
<span class="badge badge-info">
<f:translate
key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:panel.info.conditionActiveCount.{f:if(condition: '{conditionActiveCount} > 1', then:'multiple', else: 'single')}"
arguments="{0: conditionActiveCount}"
/>
</span>
</div>
</f:if>
<span class="caret"></span>
</button>
</div>
</h3>
<div
class="panel-collapse collapse"
id="typoscript-active-{type}-conditions-body"
aria-labelledby="typoscript-active-{type}-conditions-heading"
role="tabpanel"
data-persist-collapse-state="true"
>
<div class="panel-body">
<form action="{f:be.uri(route: 'typoscript_active', parameters: '{id: pageUid}')}" method="post">
<f:for each="{conditions}" as="condition">
<input type="hidden" name="{type}Conditions[{condition.hash}]" value="0" />
<div class="form-check form-switch">
<input
type="checkbox"
class="form-check-input"
name="{type}Conditions[{condition.hash}]"
id="{type}Condition{condition.hash}"
value="1"
{f:if(condition: condition.active, then:'checked="checked"')}
data-global-event="change"
data-action-submit="$form"
data-value-selector="input[name='{type}Conditions[{condition.hash}]']"
/>
<label class="form-check-label" for="{type}Condition{condition.hash}">
<f:if condition="{displayConstantSubstitutions} && {condition.originalValue}">
<f:then>
<span class="font-monospace">[{condition.value}]</span>
<span class="diff-inline">
<f:format.raw>
<f:translate
key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:panel.info.conditionWithConstant"
arguments="{
0: '{backend:typoScript.fineDiff(from: condition.originalValue, to: condition.value)}'
}"
/>
</f:format.raw>
</span>
</f:then>
<f:else>
<span class="font-monospace">[{condition.value}]</span>
</f:else>
</f:if>
</label>
</div>
</f:for>
</form>
</div>
</div>
</div>
</f:if>
</html>
@@ -0,0 +1,122 @@
<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="form-row-md">
<f:if condition="{f:count(subject: allTemplatesOnPage)} > 1">
<div class="form-group">
<form action="{f:be.uri(route: 'typoscript_active', parameters: '{id: pageUid}')}" method="post">
<label class="form-label" for="selectedTemplate">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:options.selectedRecord" />
</label>
<select
name="selectedTemplate"
id="selectedTemplate"
class="form-select"
data-global-event="change"
data-action-navigate="$data=~s/$value/"
data-action-submit="$form"
>
<f:for each="{allTemplatesOnPage}" as="template">
<option
value="{template.uid}"
{f:if(condition:'{selectedTemplateUid} == {template.uid}', then:'selected="selected"')}
>
{template.title}
</option>
</f:for>
</select>
</form>
</div>
</f:if>
<div class="form-group">
<form action="#">
<label for="searchValue" class="form-label">
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.label.searchString" />
</label>
<div class="input-group">
<input
type="search"
autocomplete="off"
class="form-control t3js-collapse-search-term"
name="searchValue"
id="searchValue"
data-persist-collapse-search-key="collapse-search-term-typoscript-active"
value=""
minlength="3"
/>
</div>
</form>
</div>
<div class="form-group">
<div class="form-row-md">
<div class="form-group">
<form action="{f:be.uri(route: 'typoscript_active', parameters: '{id: pageUid}')}" method="post">
<div class="form-check form-switch form-check-size-input">
<input type="hidden" name="displayConstantSubstitutions" value="0" />
<input
type="checkbox"
class="form-check-input"
name="displayConstantSubstitutions"
id="displayConstantSubstitutions"
value="1"
{f:if(condition: displayConstantSubstitutions, then:'checked="checked"')}
data-global-event="change"
data-action-submit="$form"
data-value-selector="input[name='displayConstantSubstitutions']"
/>
<label class="form-check-label" for="displayConstantSubstitutions">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:options.displayConstantSubstitutions" />
</label>
</div>
</form>
</div>
<div class="form-group">
<form action="{f:be.uri(route: 'typoscript_active', parameters: '{id: pageUid}')}" method="post">
<div class="form-check form-switch form-check-size-input">
<input type="hidden" name="displayComments" value="0" />
<input
type="checkbox"
class="form-check-input"
name="displayComments"
id="displayComments"
value="1"
{f:if(condition: displayComments, then:'checked="checked"')}
data-global-event="change"
data-action-submit="$form"
data-value-selector="input[name='displayComments']"
/>
<label class="form-check-label" for="displayComments">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:options.displayComments" />
</label>
</div>
</form>
</div>
<div class="form-group">
<form action="{f:be.uri(route: 'typoscript_active', parameters: '{id: pageUid}')}" method="post">
<div class="form-check form-switch form-check-size-input">
<input type="hidden" name="sortAlphabetically" value="0" />
<input
type="checkbox"
class="form-check-input"
name="sortAlphabetically"
id="sortAlphabetically"
value="1"
{f:if(condition: sortAlphabetically, then:'checked="checked"')}
data-global-event="change"
data-action-submit="$form"
data-value-selector="input[name='sortAlphabetically']"
/>
<label class="form-check-label" for="sortAlphabetically">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:options.sortAlphabetically" />
</label>
</div>
</form>
</div>
</div>
</div>
</div>
</html>
@@ -0,0 +1,83 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
xmlns:backend="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:for each="{tree.nextChild}" as="child">
<f:if condition="{displayComments} && {child.comments}">
<li class="loose">
<div class="treelist-comment">
<f:for each="{child.comments}" as="comment" iteration="iterator">
<div><f:format.nl2br>{comment}</f:format.nl2br></div>
</f:for>
</div>
</li>
</f:if>
<f:if condition="{displayConstantSubstitutions} && {child.originalValueTokenStream}">
<li class="loose">
<span class="diff-inline">
<f:format.raw>
<f:variable name="trimmedValueTokenStream"><f:format.trim>{child.originalValueTokenStream}</f:format.trim></f:variable>
<f:translate
key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:tree.valueWithConstant"
arguments="{
0: '{backend:typoScript.fineDiff(from: trimmedValueTokenStream, to: child.value)}'
}"
/>
</f:format.raw>
</span>
</li>
</f:if>
<li>
<f:if condition="{child.children}">
<typo3-backend-tree-node-toggle
class="treelist-control collapsed"
data-bs-toggle="collapse"
data-bs-target="#collapse-list-{child.identifier}"
aria-expanded="false">
</typo3-backend-tree-node-toggle>
</f:if>
<span class="treelist-group treelist-group-monospace">
<span class="treelist-label">
<a href="{editUri}&nodeIdentifier={child.identifier}">{child.name}</a>
</span>
<f:if condition="!{child.valueNull}">
<span class="treelist-operator">=</span>
<span class="treelist-value">{child.value}</span>
</f:if>
<f:if condition="{child.referenceSourceStream}">
<span class="treelist-operator">=<</span>
<span class="treelist-value">{child.referenceSourceStream}</span>
</f:if>
</span>
<f:if condition="{child.children}">
<div
class="treelist-collapse collapse"
data-persist-collapse-state="true"
data-persist-collapse-state-suffix="typoscript-active-{type}"
data-persist-collapse-state-not-if-search="true"
data-persist-collapse-state-if-state="shown"
id="collapse-list-{child.identifier}"
>
<ul class="treelist">
<f:render
partial="ActiveTree"
arguments="{
type: type,
tree: child,
pageUid: pageUid,
displayConstantSubstitutions: displayConstantSubstitutions,
displayComments: displayComments,
editUri: editUri
}"
/>
</ul>
</div>
</f:if>
</li>
</f:for>
</html>
@@ -0,0 +1,68 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<div class="panel panel-default">
<h3 class="panel-heading" role="tab" id="typoscript-active-{type}-ast-heading">
<div class="panel-heading-row">
<button
class="panel-button collapsed"
type="button"
data-bs-toggle="collapse"
data-bs-target="#typoscript-active-{type}-ast-body"
aria-controls="typoscript-active-{type}-ast-body"
aria-expanded="false"
id="panel-tree-heading-{type}"
>
<div class="panel-title">
<strong><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:panel.header.configuration"/></strong>
</div>
<div class="panel-badge">
<span class="badge badge-success hidden t3js-collapse-states-search-numberOfSearchMatches"></span>
</div>
<span class="caret"></span>
</button>
</div>
</h3>
<div
class="panel-collapse collapse"
id="typoscript-active-{type}-ast-body"
aria-labelledby="typoscript-active-{type}-ast-heading"
role="tabpanel"
data-persist-collapse-state="true"
data-persist-collapse-state-if-state="shown"
>
<div class="panel-body t3js-collapse-states-search-tree">
<form action="{f:be.uri(route: 'typoscript_active', parameters: '{id: pageUid}')}" method="post">
<ul class="treelist">
<f:comment>
Variable {editUri} is a performance optimization hack: The ActiveTree template is called
recursive for each node and then creates an "edit" link in each. This is expensive with
many nodes. With client side expand/collapse, we always render the entire tree in fluid,
with a bigger tree we're easily creating the link thousands of times. The hack below
creates the link once, the usage then adds the child parameter.
Ugly but effective in this case. Don't do this at home, kids.
</f:comment>
<f:variable
name="editUri"
value="{f:be.uri(route: 'typoscript_active.edit', parameters: '{id: pageUid, type: type}')}"
/>
<f:render
partial="ActiveTree"
arguments="{
type: type,
tree: tree,
pageUid: pageUid,
displayConstantSubstitutions: displayConstantSubstitutions,
displayComments: displayComments,
editUri: editUri
}"
/>
</ul>
</form>
</div>
</div>
</div>
</html>
@@ -0,0 +1,36 @@
<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="{f:count(subject: allTemplatesOnPage)} > 1">
<div class="form-row">
<div class="form-group">
<form action="{f:be.uri(route: 'web_typoscript_analyzer', parameters: '{id: pageUid}')}" method="post">
<label class="form-label" for="selectedTemplate">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:options.selectedRecord" />
</label>
<select
name="selectedTemplate"
id="selectedTemplate"
class="form-select"
data-global-event="change"
data-action-navigate="$data=~s/$value/"
data-action-submit="$form"
>
<f:for each="{allTemplatesOnPage}" as="template">
<option
value="{template.uid}"
{f:if(condition:'{selectedTemplateUid} == {template.uid}', then:'selected="selected"')}
>
{template.title}
</option>
</f:for>
</select>
</form>
</div>
</div>
</f:if>
</html>
@@ -0,0 +1,70 @@
<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="{errors}">
<div class="panel panel-default">
<h3 class="panel-heading" role="tab" id="template-analyzer-{type}-errors-heading">
<div class="panel-heading-row">
<button
class="panel-button collapsed"
type="button"
data-bs-toggle="collapse"
data-bs-target="#template-analyzer-{type}-errors-body"
aria-controls="template-analyzer-{type}-errors-body"
aria-expanded="false"
>
<div class="panel-title">
<strong><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:panel.header.syntaxErrors"/></strong>
</div>
<div class="panel-badge">
<span class="badge badge-warning">
<f:translate
key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:panel.info.syntaxErrorCount.{f:if(condition: '{errorCount} > 1', then:'multiple', else: 'single')}"
arguments="{0: errorCount}"
/>
</span>
</div>
<span class="caret"></span>
</button>
</div>
</h3>
<div
class="panel-collapse collapse"
id="template-analyzer-{type}-errors-body"
aria-labelledby="template-analyzer-{type}-errors-heading"
role="tabpanel"
data-persist-collapse-state="true"
>
<div class="panel-body">
<f:for each="{errors}" as="error">
<div class="row justify-content-between">
<div class="col">
<f:translate
key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:syntaxError.type.{error.type}"
arguments="{0: error.include.name, 1: '{error.lineNumber + 1}'}"
/>
</div>
<div class="col col-auto text-end">
<div class="btn-group">
<f:be.link
route="web_typoscript_analyzer.source"
parameters="{id: pageUid, includeType: type, identifier: error.include.identifier}"
additionalAttributes="{'data-modal-title': error.include.name}"
class="btn btn-default btn-sm t3js-typoscript-analyzer-modal"
title="{f:translate(key: 'LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:syntaxError.sourceCode')}"
>
<core:icon identifier="actions-variable" />
</f:be.link>
</div>
</div>
</div>
</f:for>
</div>
</div>
</div>
</f:if>
</html>
@@ -0,0 +1,126 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
xmlns:ts="http://typo3.org/ns/TYPO3/CMS/Tstemplate/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:asset.module identifier="@typo3/backend/tree/tree-node-toggle.js"/>
<f:asset.module identifier="@typo3/backend/utility/collapse-state-persister.js"/>
<f:comment><!-- This is a template that calls itself recursive for sub nodes. --></f:comment>
<f:if condition="{tree.children}">
<f:for each="{tree.nextChild}" as="child">
<li>
<f:if condition="{child.children}">
<typo3-backend-tree-node-toggle
class="treelist-control treelist-control-collapsed"
data-bs-toggle="collapse"
data-bs-target="#collapse-list-{child.identifier}"
aria-expanded="false">
</typo3-backend-tree-node-toggle>
</f:if>
<div class="row justify-content-between">
<div class="col">
<div class="row row-cols-auto justify-content-md-between">
<div class="col col-12 col-lg-auto">
<span class="treelist-group treelist-group-monospace">
<span class="treelist-label">
<f:if condition="{child.type} == 'Segment'">
<f:then>
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:tree.child.type.Segment" />
</f:then>
<f:else if="{child.type} == 'DefaultTypoScriptMagicKey'">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:tree.child.type.DefaultTypoScriptMagicKey_formlabel" />
</f:else>
<f:else if="{child.type} == 'Condition'">
{child.lineStream}
</f:else>
<f:else if="{child.type} == 'ConditionElse'">
{child.lineStream}
</f:else>
<f:else if="{child.type} == 'ConditionStop'">
{child.lineStream}
</f:else>
<f:else>{child.name}</f:else>
</f:if>
</span>
</span>
</div>
<div class="col col-12 col-lg-auto text-md-end">
<f:comment><!-- Hand {child.type} over to f:translate and add locallang.xlf entries when Include classes stabilized. --></f:comment>
<f:if condition="{child.sysTemplateRecord}">
<f:then>
<span class="badge">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:tree.child.sysTemplateRecord" arguments="{0: '{child.pid}'}" />
</span>
</f:then>
<f:else if="{child.type} != 'Segment'">
<span class="badge">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:tree.child.type.{child.type}" />
</span>
</f:else>
</f:if>
<f:if condition="{child.root}">
<span class="badge badge-info">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:tree.child.setting.root" />
</span>
</f:if>
<f:if condition="{child.clear}">
<span class="badge badge-info">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:tree.child.setting.clear" />
</span>
</f:if>
</div>
</div>
</div>
<div class="col col-auto text-end">
<div class="btn-group tstemplate-tree-btn-group">
<f:be.link
route="web_typoscript_analyzer.source"
parameters="{id: pageUid, includeType: type, identifier: child.identifier}"
additionalAttributes="{'data-modal-title': child.name}"
class="btn btn-default btn-sm t3js-typoscript-analyzer-modal{f:if(condition:'!{child.lineStream}', then:' disabled')}"
title="{f:translate(key: 'LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:tree.child.btn.sourceCode')}"
>
<core:icon identifier="{f:if(condition:'{child.lineStream}', then:'actions-variable', else: 'empty-empty')}" />
</f:be.link>
<f:be.link
route="web_typoscript_analyzer.sourceWithIncludes"
parameters="{id: pageUid, includeType: type, identifier: child.identifier}"
additionalAttributes="{'data-modal-title': '{child.name} (with resolved includes)'}"
class="btn btn-default btn-sm t3js-typoscript-analyzer-modal{f:if(condition:'!{child.children}', then:' disabled')}"
title="{f:translate(key: 'LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:tree.child.btn.sourceCodeWithResolvedIncludes')}"
>
<core:icon identifier="{f:if(condition:'{child.children}', then:'actions-variable-select', else: 'empty-empty')}" />
</f:be.link>
</div>
</div>
</div>
<f:if condition="{child.children}">
<div
class="treelist-collapse collapse"
id="collapse-list-{child.identifier}"
data-persist-collapse-state="true"
data-persist-collapse-state-suffix="typoscript-include-{type}"
data-persist-collapse-state-if-state="shown"
>
<ul class="treelist">
<f:render
partial="AnalyzerTree"
arguments="{
type: type,
pageUid: pageUid,
tree: child
}"
/>
</ul>
</div>
</f:if>
</li>
</f:for>
</f:if>
</html>
@@ -0,0 +1,46 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<div class="panel panel-default">
<h3 class="panel-heading" role="tab" id="template-analyzer-{type}-tree-heading">
<div class="panel-heading-row">
<button
class="panel-button collapsed"
type="button"
data-bs-toggle="collapse"
data-bs-target="#template-analyzer-{type}-tree-body"
aria-controls="template-analyzer-{type}-tree-body"
aria-expanded="false"
>
<div class="panel-title">
<strong><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:panel.header.configuration"/></strong>
</div>
<span class="caret"></span>
</button>
</div>
</h3>
<div
class="panel-collapse collapse"
id="template-analyzer-{type}-tree-body"
data-persist-collapse-state="true"
role="tabpanel"
aria-labelledby="template-analyzer-{type}-tree-heading"
>
<div class="panel-body panel-body-overflow">
<ul class="treelist">
<f:render
partial="AnalyzerTree"
arguments="{
type: type,
pageUid: pageUid,
tree: tree
}"
/>
</ul>
</div>
</div>
</div>
</html>
@@ -0,0 +1,193 @@
<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"
>
<form action="{f:be.uri(route: 'web_typoscript_constanteditor', parameters: '{id: pageUid}')}" method="post" id="TypoScriptConstantEditorController">
<f:for each="{displayConstants}" as="mainCategory" key="mainCategoryKey">
<h2>{mainCategory.label}</h2>
<f:for each="{mainCategory.items}" as="constantItems">
<f:for each="{constantItems}" as="constantItem">
<fieldset class="form-section">
<div class="form-group">
<label class="form-label t3js-formengine-label">
<span>{constantItem.label}</span>
<code>[{constantItem.name}]</code>
</label>
<f:if condition="{constantItem.description}"><p>{constantItem.description}</p></f:if>
<f:if condition="{constantItem.typeHint}"><span class="text-variant">{constantItem.typeHint}</span></f:if>
<input
type="hidden"
name="check[{constantItem.name}]"
id="check-{constantItem.idName}"
value="checked"
checked
{f:if(condition: '!{constantItem.isInCurrentTemplate}', then: 'disabled')}
>
<div class="input-group userTS" id="userTS-{constantItem.idName}" style="{f:if(condition: constantItem.isInCurrentTemplate, else: 'display:none;')}">
<button
type="button"
class="btn btn-default t3js-toggle"
data-bs-toggle="undo"
rel="{constantItem.idName}"
title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.deleteTitle')}">
<core:icon identifier="actions-edit-undo" />
</button>
<f:switch expression="{constantItem.type}">
<f:case value="int+">
<input
class="form-control"
id="{constantItem.idName}"
type="number"
name="data[{constantItem.name}]"
value="{constantItem.value}"
{f:if(condition: '{constantItem.typeIntPlusMin} || {constantItem.typeIntPlusMin == 0}', then: 'min="{constantItem.typeIntPlusMin}"')}
{f:if(condition: constantItem.typeIntPlusMax, then: 'max="{constantItem.typeIntPlusMax}"')}
>
</f:case>
<f:case value="int">
<input
class="form-control"
id="{constantItem.idName}"
type="number"
name="data[{constantItem.name}]"
value="{constantItem.value}"
{f:if(condition: '{constantItem.typeIntMin} || {constantItem.typeIntMin == 0}', then: 'min="{constantItem.typeIntMin}"')}
{f:if(condition: '{constantItem.typeIntMax} || {constantItem.typeIntMax == 0}', then: 'max="{constantItem.typeIntMax}"')}
>
</f:case>
<f:case value="string">
<input
class="form-control"
id="{constantItem.idName}"
type="text"
name="data[{constantItem.name}]"
value="{constantItem.value}"
/>
</f:case>
<f:case value="color">
<typo3-backend-color-picker>
<input
class="form-control"
type="text"
id="{constantItem.idName}"
rel="{constantItem.idName}"
name="data[{constantItem.name}]"
value="{constantItem.value}"
/>
</typo3-backend-color-picker>
</f:case>
<f:case value="wrap">
<input
class="form-control form-control-adapt"
type="text"
id="{constantItem.idName}"
name="data[{constantItem.name}][left]"
value="{constantItem.wrapStart}"
/>
<span class="input-group-text input-group-icon">|</span>
<input
class="form-control form-control-adapt"
type="text"
name="data[{constantItem.name}][right]"
value="{constantItem.wrapEnd}"
/>
</f:case>
<f:case value="offset">
<f:for each="{constantItem.labelValueArray}" as="labelAndValue" iteration="iterator">
<span class="input-group-text input-group-icon">{labelAndValue.label}</span>
<input
type="text"
class="form-control form-control-adapt"
name="data[{constantItem.name}][{iterator.index}]"
value="{labelAndValue.value}"
/>
</f:for>
</f:case>
<f:case value="options">
<select
class="form-select"
id="{constantItem.idName}"
name="data[{constantItem.name}]"
>
<f:for each="{constantItem.labelValueArray}" as="labelAndValue">
<option value="{labelAndValue.value}" {f:if(condition: labelAndValue.selected, then: 'selected')}>
{labelAndValue.label}
</option>
</f:for>
</select>
</f:case>
<f:case value="boolean">
<input
type="hidden"
name="data[{constantItem.name}]"
value="0"
/>
<div class="input-group-text">
<div class="form-check form-check-type-toggle">
<input
type="checkbox"
name="data[{constantItem.name}]"
id="{constantItem.idName}"
class="form-check-input"
value="{constantItem.trueValue}"
{f:if(condition: '{constantItem.value} == {constantItem.trueValue}', then: 'checked')}
/>
</div>
</div>
</f:case>
<f:case value="comment">
<input
type="hidden"
name="data[{constantItem.name}]"
value="0"
/>
<div class="input-group-text">
<div class="form-check form-check-type-toggle">
<input
type="checkbox"
name="data[{constantItem.name}]"
id="{constantItem.idName}"
class="form-check-input mt-0"
value="1"
{f:if(condition: '!{constantItem.value}', then: 'checked')}
/>
</div>
</div>
</f:case>
<f:case value="user">
<input
type="hidden"
name="data[{constantItem.name}]"
value="0"
/>
{constantItem.html -> f:format.raw()}
</f:case>
</f:switch>
</div>
<div class="input-group defaultTS" id="defaultTS-{constantItem.idName}" style="{f:if(condition: constantItem.isInCurrentTemplate, then: 'display:none;')}">
<button type="button" class="btn btn-default t3js-toggle" data-bs-toggle="edit" rel="{constantItem.idName}">
<span title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.editTitle')}">
<core:icon identifier="actions-open" />
</span>
</button>
<f:if condition="{constantItem.type} == 'color'">
<f:then>
<typo3-backend-color-picker color="{constantItem.default_value}">
<input class="form-control" type="number" placeholder="{constantItem.default_value}" disabled readonly>
</typo3-backend-color-picker>
</f:then>
<f:else>
<input class="form-control" type="number" placeholder="{constantItem.default_value}" disabled readonly>
</f:else>
</f:if>
</div>
</div>
</fieldset>
</f:for>
</f:for>
</f:for>
</form>
</html>
@@ -0,0 +1,64 @@
<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="({f:count(subject: allTemplatesOnPage)} > 1) || ({f:count(subject: relevantCategories)} > 1)">
<div class="form-row">
<f:if condition="{f:count(subject: allTemplatesOnPage)} > 1">
<div class="form-group">
<form action="{f:be.uri(route: 'web_typoscript_constanteditor', parameters: '{id: pageUid}')}" method="post">
<label class="form-label" for="selectedTemplate">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_ceditor.xlf:options.selectedRecord" />
</label>
<select
name="selectedTemplate"
id="selectedTemplate"
class="form-select"
data-global-event="change"
data-action-navigate="$data=~s/$value/"
data-action-submit="$form"
>
<f:for each="{allTemplatesOnPage}" as="template">
<option
value="{template.uid}"
{f:if(condition:'{selectedTemplateUid} == {template.uid}', then:'selected="selected"')}
>
{template.title}
</option>
</f:for>
</select>
</form>
</div>
</f:if>
<f:if condition="{selectedTemplateUid} > 0 && {f:count(subject: relevantCategories)} > 1">
<div class="form-group">
<form action="{f:be.uri(route: 'web_typoscript_constanteditor', parameters: '{id: pageUid}')}" method="post">
<label class="form-label" for="selectedCategory">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_ceditor.xlf:options.selectedCategory" />
</label>
<select
name="selectedCategory"
id="selectedCategory"
class="form-select"
data-global-event="change"
data-action-navigate="$data=~s/$value/"
data-action-submit="$form"
>
<f:for each="{relevantCategories}" key="relevantCategoryKey" as="relevantCategory">
<option
value="{relevantCategoryKey}"
{f:if(condition:'{selectedCategory} == {relevantCategoryKey}', then:'selected="selected"')}
>
{relevantCategory.label} ({relevantCategory.usageCount})
</option>
</f:for>
</select>
</form>
</div>
</f:if>
</div>
</f:if>
</html>
@@ -0,0 +1,79 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
<f:be.infobox title="{f:translate(key: 'LLL:EXT:tstemplate/Resources/Private/Language/locallang.xlf:noRecordFound.infobox.title')}" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}">
<p>
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang.xlf:noRecordFound.infobox.message" />
</p>
<f:if condition="{previousPage}">
<p class="mt-4">
<f:translate
key="LLL:EXT:tstemplate/Resources/Private/Language/locallang.xlf:noRecordFound.goToClosestRecord.description"
arguments="{0: previousPage.title, 1: previousPage.uid}"
/>
</p>
<f:be.link
route="{moduleIdentifier}"
parameters="{id: previousPage.uid}"
class="btn btn-default"
>
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang.xlf:noRecordFound.goToClosestRecord.link.title" />
</f:be.link>
</f:if>
</f:be.infobox>
<div class="card-container">
<div class="card card-size-medium">
<div class="card-body">
<h2 class="card-title">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang.xlf:noRecordFound.createRootTypoScriptRecord.headline" />
</h2>
<div class="card-text">
<p>
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang.xlf:noRecordFound.createRootTypoScriptRecord.description" />
</p>
</div>
</div>
<div class="card-footer">
<form action="{f:be.uri(route: moduleIdentifier, parameters: '{id: pageUid}')}" method="post">
<input type="hidden" name="action" value="createNewWebsiteTemplate" />
<input
class="btn btn-default"
type="submit"
name="newWebsite"
value="{f:translate(key: 'LLL:EXT:tstemplate/Resources/Private/Language/locallang.xlf:noRecordFound.createRootTypoScriptRecord.link.title')}"
/>
</form>
</div>
</div>
<div class="card card-size-medium">
<div class="card-body">
<h2 class="card-title">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang.xlf:noRecordFound.createAdditionalTypoScriptRecord.headline" />
</h2>
<div class="card-text">
<p>
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang.xlf:noRecordFound.createAdditionalTypoScriptRecord.description" />
</p>
</div>
</div>
<div class="card-footer">
<form action="{f:be.uri(route: moduleIdentifier, parameters: '{id: pageUid}')}" method="post">
<input type="hidden" name="action" value="createExtensionTemplate" />
<input
class="btn btn-default"
type="submit"
name="createExtension"
value="{f:translate(key: 'LLL:EXT:tstemplate/Resources/Private/Language/locallang.xlf:noRecordFound.createAdditionalTypoScriptRecord.link.title')}"
/>
</form>
</div>
</div>
</div>
</html>
@@ -0,0 +1,107 @@
<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:layout name="Module"/>
<f:section name="Content">
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
<f:comment><!-- Heading --></f:comment>
<h1>
<f:if condition="{templateTitle}">
<f:then>
<f:translate
key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:editAction.submodule.titleWithTemplate"
arguments="{
0: '{templateTitle}'
}"
/>
</f:then>
<f:else>
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:editAction.submodule.title" />
</f:else>
</f:if>
</h1>
<f:comment><!-- Show "no template on this page" infobox, or render edit options --></f:comment>
<f:if condition="!{hasTemplate}">
<f:then>
<f:be.infobox
title="{f:translate(key: 'LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:editAction.infobox.title.noTypoScriptTemplateOnCurrentPage')}"
message="{f:translate(key: 'LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:editAction.infobox.message.noTypoScriptTemplateOnCurrentPage')}"
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
/>
</f:then>
<f:else>
<f:comment><!-- Edit property --></f:comment>
<form action="{f:be.uri(route: 'typoscript_active.update', parameters: '{id: pageUid}')}" method="post">
<input type="hidden" name="currentObjectPath" value="{currentObjectPath}" />
<input type="hidden" name="pageUid" value="{pageUid}" />
<input type="hidden" name="type" value="{type}" />
<h2><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:editAction.editProperty.headline" /></h2>
<div class="row row-cols-auto align-items-end g-1">
<div class="col mb-4">
<label class="visually-hidden">{currentObjectPath} =</label>
<div class="input-group">
<div class="input-group-text">{currentObjectPath} =</div>
<input class="form-control" type="text" name="value" value="{currentValue}" />
</div>
</div>
<div class="col mb-4">
<input
type="submit"
name="updateValue"
value="{f:translate(key:'LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:editAction.editProperty.btn')}"
class="btn btn-default"
/>
</div>
</div>
<h2><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:editAction.addProperty.headline" /></h2>
<div class="row row-cols-auto align-items-end g-1 mb-8">
<div class="col mb-4">
<label class="visually-hidden">{currentObjectPath}.</label>
<div class="input-group">
<div class="input-group-text">{currentObjectPath}.</div>
<input name="childName" type="text" class="form-control" />
</div>
</div>
<div class="col mb-4">
<div class="input-group">
<div class="input-group-text">=</div>
<input type="text" name="childValue" class="form-control" />
</div>
</div>
<div class="col mb-4">
<input
type="submit"
name="addChild"
value="{f:translate(key:'LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:editAction.addProperty.btn')}"
class="btn btn-default"
/>
</div>
</div>
<h2><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:editAction.clearObject.headline" /></h2>
<p>
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:editAction.clearObject.infotextWithProperty" />
<code>{currentObjectPath} ></code>
</p>
<input
type="submit"
name="clear"
value="{f:translate(key:'LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:editAction.clearObject.btn')}"
class="btn btn-default"
/>
</form>
</f:else>
</f:if>
</f:section>
</html>
@@ -0,0 +1,116 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="Module"/>
<f:section name="Before">
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
<f:asset.module identifier="@typo3/backend/tree/tree-node-toggle.js"/>
<f:asset.module identifier="@typo3/backend/utility/collapse-state-persister.js"/>
<f:asset.module identifier="@typo3/backend/utility/collapse-state-search.js"/>
<f:variable name="args" value="{0: 'web', 1: pageUid}" />
<typo3-immediate-action
action="TYPO3.Backend.Storage.ModuleStateStorage.update"
args="{args -> f:format.json() -> f:format.htmlspecialchars()}"
></typo3-immediate-action>
</f:section>
<f:section name="Content">
<h1>
<f:if condition="{templateTitle}">
<f:then>
<f:translate
key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:submodule.titleWithRecord"
arguments="{
0: '{templateTitle}'
}"
/>
</f:then>
<f:else>
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:submodule.title" />
</f:else>
</f:if>
</h1>
<p><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:submodule.description" /></p>
<f:comment><!-- General options --></f:comment>
<f:if condition="{constantAst.children} || {setupAst.children}">
<f:render
partial="ActiveOptions"
arguments="{
allTemplatesOnPage: allTemplatesOnPage,
pageUid: pageUid,
selectedTemplateUid: selectedTemplateUid,
displayConstantSubstitutions: displayConstantSubstitutions,
displayComments: displayComments,
sortAlphabetically: sortAlphabetically
}"
/>
</f:if>
<f:comment><!-- Constants: Conditions and tree --></f:comment>
<f:if condition="{constantAst.children}">
<h2><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:sectionHeadline.constants" /></h2>
<div class="panel-group">
<f:render
partial="ActiveConditions"
arguments="{
pageUid: pageUid,
type: 'constant',
conditions: constantConditions,
conditionActiveCount: constantConditionsActiveCount
}"
/>
<f:render
partial="ActiveTreePanel"
arguments="{
type: 'constant',
tree: constantAst,
pageUid: pageUid,
displayComments: displayComments
}"
/>
</div>
</f:if>
<f:comment><!-- Setup: Conditions and tree --></f:comment>
<f:if condition="{setupAst.children}">
<h2><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:sectionHeadline.setup" /></h2>
<div class="panel-group">
<f:render
partial="ActiveConditions"
arguments="{
pageUid: pageUid,
type: 'setup',
conditions: setupConditions,
conditionActiveCount: setupConditionsActiveCount,
displayConstantSubstitutions: displayConstantSubstitutions
}"
/>
<f:render
partial="ActiveTreePanel"
arguments="{
type: 'setup',
tree: setupAst,
pageUid: pageUid,
displayConstantSubstitutions: displayConstantSubstitutions,
displayComments: displayComments
}"
/>
</div>
</f:if>
<f:if condition="!{constantAst.children} && !{setupAst.children}">
<f:be.infobox
message="{f:translate(key: 'LLL:EXT:tstemplate/Resources/Private/Language/locallang_active.xlf:infobox.message.noTypoScriptFound')}"
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
/>
</f:if>
</f:section>
</html>
@@ -0,0 +1,104 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="Module"/>
<f:section name="Before">
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
<f:asset.module identifier="@typo3/tstemplate/template-analyzer.js"/>
<f:variable name="args" value="{0: 'web', 1: pageUid}" />
<typo3-immediate-action
action="TYPO3.Backend.Storage.ModuleStateStorage.update"
args="{args -> f:format.json() -> f:format.htmlspecialchars()}"
></typo3-immediate-action>
</f:section>
<f:section name="Content">
<h1>
<f:if condition="{templateTitle}">
<f:then>
<f:translate
key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:submodule.titleWithRecord"
arguments="{
0: '{templateTitle}'
}"
/>
</f:then>
<f:else>
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:submodule.title" />
</f:else>
</f:if>
</h1>
<p><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:submodule.description" /></p>
<f:comment><!-- General options --></f:comment>
<f:render
partial="AnalyzerOptions"
arguments="{
allTemplatesOnPage: allTemplatesOnPage,
pageUid: pageUid,
selectedTemplateUid: selectedTemplateUid
}"
/>
<f:comment><!-- Constants: Syntax errors, source and tree --></f:comment>
<f:if condition="{constantIncludeTree.children}">
<h2><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:sectionHeadline.constants" /></h2>
<div class="panel-group">
<f:render
partial="AnalyzerSyntaxErrors"
arguments="{
type: 'constants',
pageUid: pageUid,
errors: constantErrors,
errorCount: constantErrorCount
}"
/>
<f:render
partial="AnalyzerTreePanel"
arguments="{
type: 'constants',
tree: constantIncludeTree,
pageUid: pageUid
}"
/>
</div>
</f:if>
<f:comment><!-- Setup: Syntax errors, source and tree --></f:comment>
<f:if condition="{setupIncludeTree.children}">
<h2><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:sectionHeadline.setup" /></h2>
<div class="panel-group">
<f:render
partial="AnalyzerSyntaxErrors"
arguments="{
type: 'setup',
pageUid: pageUid,
errors: setupErrors,
errorCount: setupErrorCount
}"
/>
<f:render
partial="AnalyzerTreePanel"
arguments="{
type: 'setup',
tree: setupIncludeTree,
pageUid: pageUid
}"
/>
</div>
</f:if>
<f:if condition="!{constantIncludeTree.children} && !{setupIncludeTree.children}">
<f:be.infobox
message="{f:translate(key: 'LLL:EXT:tstemplate/Resources/Private/Language/locallang_analyzer.xlf:infobox.message.noTypoScriptFound')}"
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
/>
</f:if>
</f:section>
</html>
@@ -0,0 +1,86 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="Module"/>
<f:section name="Before">
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
<f:asset.module identifier="@typo3/backend/utility/collapse-state-persister.js"/>
<f:asset.module identifier="@typo3/tstemplate/constant-editor.js"/>
<f:variable name="args" value="{0: 'web', 1: pageUid}" />
<typo3-immediate-action
action="TYPO3.Backend.Storage.ModuleStateStorage.update"
args="{args -> f:format.json() -> f:format.htmlspecialchars()}"
></typo3-immediate-action>
</f:section>
<f:section name="Content">
<h1>
<f:if condition="{templateTitle}">
<f:then>
<f:translate
key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_ceditor.xlf:submodule.titleWithRecord"
arguments="{
0: '{templateTitle}'
}"
/>
</f:then>
<f:else>
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_ceditor.xlf:submodule.title" />
</f:else>
</f:if>
</h1>
<f:if condition="{selectedTemplateUid} > 0">
<p><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_ceditor.xlf:submodule.description" /></p>
</f:if>
<f:comment><!-- Options --></f:comment>
<f:render
partial="ConstantEditorOptions"
arguments="{
allTemplatesOnPage: allTemplatesOnPage,
pageUid: pageUid,
selectedTemplateUid: selectedTemplateUid,
relevantCategories: relevantCategories,
selectedCategory: selectedCategory
}"
/>
<f:if condition="{selectedTemplateUid} > 0">
<f:comment><!-- Main form --></f:comment>
<f:if condition="!{relevantCategories}">
<f:then>
<f:be.infobox message="{f:translate(key:'LLL:EXT:tstemplate/Resources/Private/Language/locallang_ceditor.xlf:infobox.message.noConstants')}" state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}" />
</f:then>
<f:else>
<f:render partial="ConstantEditorFields" arguments="{_all}" />
</f:else>
</f:if>
</f:if>
<f:if condition="{selectedTemplateUid} == -1">
<f:be.infobox
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
title="{f:translate(key: 'LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:noConstantsButSiteSettings.title')}"
>
<p>
<f:translate
key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:noConstantsButSiteSettings.message"
arguments="{
0: '{templateRecord.site.identifier}'
}"
/>
</p>
<f:variable name="returnUrl">{f:be.uri(route: 'web_typoscript_constanteditor', parameters: {id: pageUid})}</f:variable>
<f:be.link route="site_configuration.editSettings" parameters="{site: templateRecord.site.identifier, returnUrl: returnUrl}" class="btn btn-default">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:btn.editSiteSettings"/>
</f:be.link>
</f:be.infobox>
</f:if>
</f:section>
</html>
@@ -0,0 +1,24 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="Module"/>
<f:section name="Content">
<h1><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_ceditor.xlf:submodule.title" /></h1>
<p><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_ceditor.xlf:submodule.description" /></p>
<f:render
partial="NoRecordFound"
arguments="{
pageUid: pageUid,
previousPage: previousPage,
moduleIdentifier: moduleIdentifier
}"
/>
</f:section>
</html>
@@ -0,0 +1,189 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
xmlns:be="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="Module"/>
<f:section name="Before">
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
<f:asset.module identifier="@typo3/tstemplate/information-module.js"/>
<f:variable name="args" value="{0: 'web', 1: pageUid}" />
<typo3-immediate-action
action="TYPO3.Backend.Storage.ModuleStateStorage.update"
args="{args -> f:format.json() -> f:format.htmlspecialchars()}"
></typo3-immediate-action>
</f:section>
<f:section name="Content">
<h1>
<f:if condition="{templateRecord.title}">
<f:then>
<f:translate
key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:submodule.titleWithRecord"
arguments="{
0: '{templateRecord.title}'
}"
/>
</f:then>
<f:else>
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:submodule.title" />
</f:else>
</f:if>
</h1>
<p><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:submodule.description" /></p>
<f:if condition="{f:count(subject: allTemplatesOnPage)} > 1">
<div class="form-row">
<div class="form-group">
<form action="{f:be.uri(route: 'web_typoscript_infomodify', parameters: '{id: pageUid}')}" method="post">
<label class="form-label" for="selectedTemplate">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:options.selectedRecord" />
</label>
<select
name="selectedTemplate"
id="selectedTemplate"
class="form-select"
data-global-event="change"
data-action-navigate="$data=~s/$value/"
data-action-submit="$form"
>
<f:for each="{allTemplatesOnPage}" as="template">
<option
value="{template.uid}"
{f:if(condition:'{templateRecord.uid} == {template.uid}', then:'selected="selected"')}
>
<f:if condition="{template.type} == 'sys_template'">
{template.title}
</f:if>
<f:if condition="{template.type} == 'site'">
{template.site.configuration.websiteTitle}
</f:if>
</option>
</f:for>
</select>
</form>
</div>
</div>
</f:if>
<f:if condition="{templateRecord.type} == 'site'">
<f:be.infobox
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
title="{f:translate(key: 'LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:infoTypoScriptRecordFromSite.title')}"
>
<p>
<f:translate
key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:infoTypoScriptRecordFromSite.message"
arguments="{
0: '{templateRecord.site.identifier}'
}"
/>
</p>
<f:variable name="returnUrl">{f:be.uri(route: 'web_typoscript_infomodify', parameters: {id: pageUid})}</f:variable>
<f:be.link route="site_configuration.edit" parameters="{site: templateRecord.site.identifier, returnUrl: returnUrl}" class="btn btn-default">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:btn.editSiteConfiguration"/>
</f:be.link>
<f:be.link route="site_configuration.editSettings" parameters="{site: templateRecord.site.identifier, returnUrl: returnUrl}" class="btn btn-default">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:btn.editSiteSettings"/>
</f:be.link>
</f:be.infobox>
</f:if>
<div class="table-fit">
<table class="table table-striped table-hover">
<tbody>
<tr>
<td class="text-nowrap">
<f:if condition="{templateRecord.type} == 'sys_template'">
<be:link.editRecord
table="sys_template"
uid="{templateRecord.uid}"
fields="title"
class="btn d-block text-start btn-default"
>
<core:icon identifier="actions-open" /> <f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:table.column.title" />
</be:link.editRecord>
</f:if>
<f:if condition="{templateRecord.type} == 'site'">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:table.column.title" />
</f:if>
</td>
<td width="90%">{templateRecord.title}</td>
</tr>
<tr>
<td class="text-nowrap">
<f:if condition="{templateRecord.type} == 'sys_template'">
<be:link.editRecord
table="sys_template"
uid="{templateRecord.uid}"
fields="description"
class="btn d-block text-start btn-default"
>
<core:icon identifier="actions-open" /> <f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:table.column.description" />
</be:link.editRecord>
</f:if>
<f:if condition="{templateRecord.type} == 'site'">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:table.column.description" />
</f:if>
</td>
<td width="90%">{templateRecord.description}</td>
</tr>
<tr>
<td class="text-nowrap">
<f:if condition="{templateRecord.type} == 'sys_template'">
<be:link.editRecord
table="sys_template"
uid="{templateRecord.uid}"
fields="constants"
class="btn d-block text-start btn-default"
>
<core:icon identifier="actions-open" /> <f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:table.column.constants" />
</be:link.editRecord>
</f:if>
<f:if condition="{templateRecord.type} == 'site'">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:table.column.constants" />
</f:if>
</td>
<td width="90%"><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:table.column.lines" arguments="{0: numberOfConstantsLines}" /></td>
</tr>
<tr>
<td class="text-nowrap">
<f:if condition="{templateRecord.type} == 'sys_template'">
<be:link.editRecord
table="sys_template"
uid="{templateRecord.uid}"
fields="config"
class="btn d-block text-start btn-default"
>
<core:icon identifier="actions-open" /> <f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:table.column.setup" />
</be:link.editRecord>
</f:if>
<f:if condition="{templateRecord.type} == 'site'">
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:table.column.setup" />
</f:if>
</td>
<td width="90%"><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:table.column.lines" arguments="{0: numberOfSetupLines}" /></td>
</tr>
</tbody>
</table>
</div>
<f:if condition="{templateRecord.type} == 'sys_template'">
<be:link.editRecord
table="sys_template"
uid="{templateRecord.uid}"
class="btn btn-default"
>
<core:icon identifier="actions-document-open" />
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:btn.editTypoScriptRecord"/>
</be:link.editRecord>
</f:if>
</f:section>
</html>
@@ -0,0 +1,24 @@
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true"
>
<f:layout name="Module"/>
<f:section name="Content">
<h1><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:submodule.title" /></h1>
<p><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_info.xlf:submodule.description" /></p>
<f:render
partial="NoRecordFound"
arguments="{
pageUid: pageUid,
previousPage: previousPage,
moduleIdentifier: moduleIdentifier
}"
/>
</f:section>
</html>
@@ -0,0 +1,137 @@
<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:layout name="Module"/>
<f:section name="Content">
<f:asset.module identifier="@typo3/backend/context-menu.js"/>
<f:asset.module identifier="@typo3/backend/element/immediate-action-element.js"/>
<h1>
<f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_overview.xlf:typoscriptRecords.title" />
</h1>
<p><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_overview.xlf:typoscriptRecords.description" /></p>
<f:if condition="{pageTree}">
<f:then>
<div class="table-fit">
<table class="table table-striped table-hover" id="ts-overview">
<thead>
<tr>
<th class="nowrap align-top"><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_overview.xlf:typoscriptRecords.table.column.pageTitle" /></th>
<th class="nowrap align-top"><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_overview.xlf:typoscriptRecords.table.column.typoscriptRecords" /></th>
<th class="nowrap align-top"><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_overview.xlf:typoscriptRecords.table.column.site" /></th>
<th class="nowrap align-top"><f:translate key="LLL:EXT:tstemplate/Resources/Private/Language/locallang_overview.xlf:typoscriptRecords.table.column.root" /></th>
</tr>
</thead>
<tbody>
<f:for each="{pageTree}" as="page">
<f:render
section="TableRow"
arguments="{
page: page,
level: 0
}"
/>
</f:for>
</tbody>
</table>
</div>
</f:then>
<f:else>
<f:be.infobox
message="{f:translate(key: 'LLL:EXT:tstemplate/Resources/Private/Language/locallang_overview.xlf:typoscriptRecords.noRecordsFound')}"
state="{f:constant(name: 'TYPO3\CMS\Core\Type\ContextualFeedbackSeverity::INFO')}"
/>
</f:else>
</f:if>
</f:section>
<f:section name="TableRow">
<f:variable name="maxCharacters" value="30" />
<tr class="{f:if(condition: page.hidden, then: 'inactive')}">
<td class="align-top nowrap">
<span title="id={page.uid}" style="margin-left: {level * 20}px">
<core:IconForRecord table="pages" row="{page}" />
{page.title -> f:format.crop(maxCharacters: maxCharacters)}
</span>
</td>
<td class="align-top">
<f:for each="{page._templates}" as="templateFile" iteration="templateIterator">
<div class="{f:if(condition: '{templateIterator.isLast}', then: '', else: 'mb-2')}">
<f:if condition="{templateFile.type} == 'sys_template'">
<core:IconForRecord table="sys_template" row="{templateFile}" />
<a
href="{f:be.uri(route: 'web_typoscript_infomodify', parameters:'{id: templateFile.pid, selectedTemplate: templateFile.uid}')}"
title="ID: {templateFile.uid}"
>
{templateFile.title -> f:format.crop(maxCharacters: maxCharacters)}
</a>
</f:if>
<f:if condition="{templateFile.type} == 'site'">
<span title="{templateFile.title} (site:{templateFile.site.identifier})">
<core:icon identifier="mimetypes-x-content-template" overlay="mimetypes-x-content-domain" size="small"/>
<f:if condition="{templateFile.title}">
<f:then>
{templateFile.title -> f:format.crop(maxCharacters: maxCharacters)}
</f:then>
<f:else>
{templateFile.site.identifier -> f:format.crop(maxCharacters: maxCharacters)}
</f:else>
</f:if>
</span>
</f:if>
</div>
</f:for>
</td>
<td class="align-top">
<f:for each="{page._templates}" as="templateFile" iteration="templateIterator">
<div class="{f:if(condition: '{templateIterator.isLast}', then: '', else: 'mb-2')}">
<f:if condition="{templateFile.type} == 'site'">
<f:then>
<core:icon identifier="status-status-checked"/>
</f:then>
<f:else>
&nbsp;
</f:else>
</f:if>
</div>
</f:for>
</td>
<td class="align-top">
<f:for each="{page._templates}" as="templateFile" iteration="templateIterator">
<div class="{f:if(condition: '{templateIterator.isLast}', then: '', else: 'mb-2')}">
<f:if condition="{templateFile.root}">
<f:then>
<core:icon identifier="status-status-checked"/>
</f:then>
<f:else>
&nbsp;
</f:else>
</f:if>
</div>
</f:for>
</td>
</tr>
<f:comment><!-- Subpages --></f:comment>
<f:if condition="{page._nodes -> f:count()}">
<f:for each="{page._nodes}" as="page">
<f:render
section="TableRow"
arguments="{
page: page,
level: '{level + 1}'
}"
/>
</f:for>
</f:if>
</f:section>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 156 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 i from"@typo3/core/document-service.js";import l from"@typo3/core/event/regular-event.js";import"@typo3/backend/color-picker.js";var t;(function(o){o.editIconSelector=".t3js-toggle"})(t||(t={}));class d{constructor(){i.ready().then(e=>{e.querySelectorAll("typo3-backend-color-picker").length&&import("@typo3/backend/color-picker.js"),this.registerEvents()})}registerEvents(){new l("click",this.changeProperty).delegateTo(document,t.editIconSelector)}changeProperty(){const e=this.getAttribute("rel"),r=document.getElementById("defaultTS-"+e),n=document.getElementById("userTS-"+e),s=document.getElementById("check-"+e),c=this.dataset.bsToggle;c==="edit"?(r.style.display="none",n.style.removeProperty("display"),s.removeAttribute("disabled")):c==="undo"&&(n.style.display="none",r.style.removeProperty("display"),s.setAttribute("disabled","disabled"))}}var a=new d;export{a 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 t from"@typo3/core/event/regular-event.js";class r{constructor(){this.registerEventListeners()}registerEventListeners(){new t("typo3:datahandler:process",o=>{const e=o.detail.payload;e.action==="delete"&&!e.hasErrors&&document.location.reload()}).bindTo(document)}}var a=new r;export{a 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/core/document-service.js";import o from"@typo3/backend/modal.js";import{topLevelModuleImport as d}from"@typo3/backend/utility/top-level-module-import.js";import{html as r}from"lit";import{until as m}from"lit/directives/until.js";import p from"@typo3/core/ajax/ajax-request.js";class y{constructor(){this.registerEventListeners()}async registerEventListeners(){await l.ready(),document.querySelectorAll(".t3js-typoscript-analyzer-modal").forEach(e=>{e.addEventListener("click",a=>{a.preventDefault();const t=o.types.default,s=e.dataset.modalTitle||e.textContent.trim(),n=e.getAttribute("href"),c=o.sizes.large,i=r`${m(this.fetchModalContent(n),r`<div class=modal-loading><typo3-backend-spinner size=large></typo3-backend-spinner></div>`)}`;o.advanced({type:t,title:s,size:c,content:i})})})}async fetchModalContent(e){d("@typo3/backend/code-editor/element/code-mirror-element.js");const t=await(await new p(e).get()).resolve();return r`<typo3-t3editor-codemirror .mode=${{name:"@typo3/backend/code-editor/language/typoscript.js",flags:2,exportName:"typoscript",items:[{type:"invoke",args:[]}]}} nolazyload readonly class="flex-grow-1 mh-100"><textarea readonly disabled class=form-control>${t}</textarea></typo3-t3editor-codemirror>`}}var f=new y;export{f as default};