TYPO3 v15 dev-main snapshot ()
This commit is contained in:
@@ -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>
|
||||
Reference in New Issue
Block a user