[!!!][FEATURE] Streamline Fluid Styled Content and CSS Styled Content 65/51065/87
authorBenjamin Kott <benjamin.kott@wfp2.com>
Thu, 29 Dec 2016 17:41:51 +0000 (18:41 +0100)
committerBenni Mack <benni@typo3.org>
Mon, 6 Feb 2017 22:06:39 +0000 (23:06 +0100)
CSS Styled Content has been a long time the preferred way of rendering
content in the frontend. Fluid Styled Content was introduced as
successor of CSC, but the feature set diverged from the beginning. The
lack of flexibility and incomplete feature set in comparision to CSC
made it hard to migrate existing instances.

Since TYPO3 CMS 7.6 Fluid-Templates are the defined standard and
official recommendation for content rendering. The feature set of FSC is
now matching CSC. Both content renderings are now streamlined to be
fully compatible with each other. For the period of CMS 8 LTS CSC will
share the same capabilities to make an transition as easy as possible.
CSC is now deprecated and goes into maintenance mode and will be removed
with CMS 9.

For compatibility, CSC is now supporting Textmedia that was before
exclusive to FSC. But also FSC has learned some tricks from CSC. Fluid
Styled Content has now support for all content elements prior existing
only in CSC, this includes "Text", "Text and Images" and "Images". Also
for example "Frames", "Space before" and "Space after" are now again
featured across both content rendering methods.

Releases: master
Resolves: #79622
Resolves: #72422
Resolves: #75466
Resolves: #71570
Resolves: #71484
Change-Id: I7d2a9072baad508b6b87470b847444b91e7323fb
Reviewed-on: https://review.typo3.org/51065
Reviewed-by: Andreas Fernandez <typo3@scripting-base.de>
Tested-by: Andreas Fernandez <typo3@scripting-base.de>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
255 files changed:
Build/Resources/Public/Less/TYPO3/_element_label.less
typo3/sysext/backend/Classes/Controller/Wizard/TableController.php
typo3/sysext/backend/Classes/Tree/View/PagePositionMap.php
typo3/sysext/backend/Configuration/PageTSconfig/NewContentElementWizard.ts [deleted file]
typo3/sysext/backend/Configuration/TSconfig/Page/Mod/Wizards/NewContentElement.ts [new file with mode: 0644]
typo3/sysext/backend/Configuration/TSconfig/User/Options.ts [new file with mode: 0644]
typo3/sysext/backend/Configuration/UserTSconfig/Options.ts [deleted file]
typo3/sysext/backend/Resources/Private/Language/locallang_db_new_content_el.xlf
typo3/sysext/backend/Resources/Public/Css/backend.css
typo3/sysext/backend/ext_localconf.php
typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/AbstractMenuViewHelper.php [new file with mode: 0644]
typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/CategoriesViewHelper.php [new file with mode: 0644]
typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/DirectoryViewHelper.php [new file with mode: 0644]
typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/KeywordsViewHelper.php [new file with mode: 0644]
typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/ListViewHelper.php [new file with mode: 0644]
typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/MenuViewHelperTrait.php [new file with mode: 0644]
typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/SectionViewHelper.php [new file with mode: 0644]
typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/UpdatedViewHelper.php [new file with mode: 0644]
typo3/sysext/compatibility7/Configuration/PageTS/Mod/Wizards/NewContentElementMenu.txt [new file with mode: 0644]
typo3/sysext/compatibility7/Configuration/TCA/Overrides/sys_template.php [new file with mode: 0644]
typo3/sysext/compatibility7/Configuration/TCA/Overrides/tt_content.php
typo3/sysext/compatibility7/Configuration/TCA/Overrides/tt_content_element_menu.php [new file with mode: 0644]
typo3/sysext/compatibility7/Configuration/TypoScript/ContentElement/CssStyledContent/setup.txt [new file with mode: 0644]
typo3/sysext/compatibility7/Configuration/TypoScript/ContentElement/FluidStyledContent/setup.txt [new file with mode: 0644]
typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Directory.html [new file with mode: 0644]
typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-0.html [new file with mode: 0644]
typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-1.html [new file with mode: 0644]
typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-2.html [new file with mode: 0644]
typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-3.html [new file with mode: 0644]
typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-4.html [new file with mode: 0644]
typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-5.html [new file with mode: 0644]
typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-6.html [new file with mode: 0644]
typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-7.html [new file with mode: 0644]
typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-8.html [new file with mode: 0644]
typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-categorized_content.html [new file with mode: 0644]
typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-categorized_pages.html [new file with mode: 0644]
typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Templates/Menu.html [new file with mode: 0644]
typo3/sysext/compatibility7/ext_localconf.php
typo3/sysext/compatibility7/ext_tables.sql
typo3/sysext/context_help/Resources/Private/Language/locallang_csh_ttcontent.xlf
typo3/sysext/core/Classes/Category/CategoryRegistry.php
typo3/sysext/core/Classes/Imaging/IconRegistry.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-CSSStyledContentTableContentElementAdjustments.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-DedicatedContentElementsForMenus.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-DefaultContentElementChangedForFluidStyledContent.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-DefaultLayoutsForFluidStyledContentChanged.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-DroppingThumbnailConfigurationForTt_content.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-RemovalOfFluidStyledContentMenuViewHelpers.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-SpaceBeforeAndSpaceAfterAdjustmentsForCSSStyledContent.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-StreamliningStructureOfCSSStyledContentAndFluidStyledContent.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Deprecation-79622-DeprecationOfCSSStyledContent.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Feature-79622-HeaderPositionSupportForFluidStyledContent.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Feature-79622-NewContentElementsForFluidStyledContent.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Feature-79622-NewDefaultLayoutForFluidStyledContent.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Feature-79622-SpaceBeforeAndSpaceAfterClassForCssStyledContent.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Feature-79622-SpaceBeforeAndSpaceAfterClassForFluidStyledContent.rst [new file with mode: 0644]
typo3/sysext/core/Documentation/Changelog/master/Feature-79622-TextmediaSupportForCSSStyledContent.rst [new file with mode: 0644]
typo3/sysext/css_styled_content/Classes/Controller/CssStyledContentController.php
typo3/sysext/css_styled_content/Classes/Hooks/PageLayoutView/ImagePreviewRenderer.php [deleted file]
typo3/sysext/css_styled_content/Classes/Hooks/PageLayoutView/TextPreviewRenderer.php [deleted file]
typo3/sysext/css_styled_content/Classes/Hooks/PageLayoutView/TextpicPreviewRenderer.php [deleted file]
typo3/sysext/css_styled_content/Classes/Hooks/TcaCacheClearing.php [deleted file]
typo3/sysext/css_styled_content/Classes/ViewHelpers/Link/ClickEnlargeViewHelper.php [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/FlexForms/table.xml [deleted file]
typo3/sysext/css_styled_content/Configuration/PageTSconfig/NewContentElementWizard.ts [deleted file]
typo3/sysext/css_styled_content/Configuration/TCA/Overrides/pages.php [deleted file]
typo3/sysext/css_styled_content/Configuration/TCA/Overrides/sys_template.php
typo3/sysext/css_styled_content/Configuration/TCA/Overrides/tt_content.php [deleted file]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Bullets.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Div.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Header.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Html.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Image.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/List.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/MenuAbstract.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/MenuCategorizedContent.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/MenuCategorizedPages.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/MenuPages.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/MenuRecentlyUpdated.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/MenuRelatedPages.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/MenuSection.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/MenuSectionPages.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/MenuSitemap.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/MenuSitemapPages.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/MenuSubpages.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Shortcut.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Table.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Text.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Textmedia.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Textpic.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Uploads.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElementPartials/Menu.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/Helper/ParseFunc.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/Helper/StandardHeader.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/Helper/StylesContent.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/Styling/setup.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/constants.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/setup.txt [new file with mode: 0644]
typo3/sysext/css_styled_content/Configuration/TypoScript/v7/constants.txt [deleted file]
typo3/sysext/css_styled_content/Configuration/TypoScript/v7/setup.txt [deleted file]
typo3/sysext/css_styled_content/Documentation/Configuration/Objects/Image/Index.rst
typo3/sysext/css_styled_content/Documentation/Configuration/Objects/Table/Index.rst
typo3/sysext/css_styled_content/Resources/Private/Language/locallang.xlf
typo3/sysext/css_styled_content/Resources/Private/Language/locallang_db.xlf [deleted file]
typo3/sysext/css_styled_content/Resources/Private/Language/locallang_em.xlf [deleted file]
typo3/sysext/css_styled_content/Resources/Private/Templates/Textmedia.html [new file with mode: 0644]
typo3/sysext/css_styled_content/Tests/Functional/Tca/ContentVisibleFieldsTest.php
typo3/sysext/css_styled_content/ext_conf_template.txt [deleted file]
typo3/sysext/css_styled_content/ext_emconf.php
typo3/sysext/css_styled_content/ext_localconf.php
typo3/sysext/css_styled_content/ext_tables.sql [deleted file]
typo3/sysext/css_styled_content/static/constants.txt [deleted file]
typo3/sysext/css_styled_content/static/setup.txt [deleted file]
typo3/sysext/extensionmanager/Classes/Domain/Model/Extension.php
typo3/sysext/felogin/Configuration/TCA/Overrides/tt_content.php
typo3/sysext/fluid_styled_content/Classes/Hooks/TcaCacheClearing.php [deleted file]
typo3/sysext/fluid_styled_content/Classes/Hooks/TextmediaPreviewRenderer.php [deleted file]
typo3/sysext/fluid_styled_content/Classes/ViewHelpers/Link/SectionViewHelper.php [deleted file]
typo3/sysext/fluid_styled_content/Classes/ViewHelpers/Menu/AbstractMenuViewHelper.php [deleted file]
typo3/sysext/fluid_styled_content/Classes/ViewHelpers/Menu/CategoriesViewHelper.php [deleted file]
typo3/sysext/fluid_styled_content/Classes/ViewHelpers/Menu/DirectoryViewHelper.php [deleted file]
typo3/sysext/fluid_styled_content/Classes/ViewHelpers/Menu/KeywordsViewHelper.php [deleted file]
typo3/sysext/fluid_styled_content/Classes/ViewHelpers/Menu/ListViewHelper.php [deleted file]
typo3/sysext/fluid_styled_content/Classes/ViewHelpers/Menu/MenuViewHelperTrait.php [deleted file]
typo3/sysext/fluid_styled_content/Classes/ViewHelpers/Menu/SectionViewHelper.php [deleted file]
typo3/sysext/fluid_styled_content/Classes/ViewHelpers/Menu/UpdatedViewHelper.php [deleted file]
typo3/sysext/fluid_styled_content/Configuration/PageTSconfig/NewContentElementWizard.ts [deleted file]
typo3/sysext/fluid_styled_content/Configuration/TCA/Overrides/pages.php [deleted file]
typo3/sysext/fluid_styled_content/Configuration/TCA/Overrides/sys_template.php
typo3/sysext/fluid_styled_content/Configuration/TCA/Overrides/tt_content.php [deleted file]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/Default.txt [deleted file]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/Image.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/Menu.txt [deleted file]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/MenuAbstract.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/MenuCategorizedContent.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/MenuCategorizedPages.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/MenuPages.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/MenuRecentlyUpdated.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/MenuRelatedPages.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/MenuSection.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/MenuSectionPages.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/MenuSitemap.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/MenuSitemapPages.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/MenuSubpages.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/Text.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/ContentElement/Textpic.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/Helper/FluidContent.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/Helper/ParseFunc.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/Static/Setup/lib.fluidContent.ts [deleted file]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/Static/Setup/lib.parseFunc.ts [deleted file]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/Static/Setup/lib.stdheader.ts [deleted file]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/Static/Setup/styles.content.get.ts [deleted file]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/Static/constants.txt [deleted file]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/Static/setup.txt [deleted file]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/Styling/setup.txt
typo3/sysext/fluid_styled_content/Configuration/TypoScript/constants.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Configuration/TypoScript/setup.txt [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Documentation/Configuration/Index.rst
typo3/sysext/fluid_styled_content/Documentation/Configuration/PageTs/Index.rst [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Documentation/Configuration/PageTsConfig/Index.rst [deleted file]
typo3/sysext/fluid_styled_content/Documentation/Configuration/TypoScript/Index.rst
typo3/sysext/fluid_styled_content/Resources/Private/Language/Database.xlf [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf
typo3/sysext/fluid_styled_content/Resources/Private/Language/locallang_em.xlf [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Layouts/ContentFooter.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Layouts/Default.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Layouts/HeaderContentFooter.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Layouts/HeaderFooter.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/DropIn/After/All.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/DropIn/Before/All.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Footer.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Footer/All.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Header.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Header/All.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Header/Date.html
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Header/Header.html
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Header/SubHeader.html
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Media/Gallery.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Media/Rendering/Audio.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Media/Rendering/Image.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Media/Rendering/Video.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Media/Type.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Media/Type/Audio.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Media/Type/Image.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Media/Type/Video.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/MediaGallery.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Menu/Directory.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Menu/Type-0.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Menu/Type-1.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Menu/Type-2.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Menu/Type-3.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Menu/Type-4.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Menu/Type-5.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Menu/Type-6.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Menu/Type-7.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Menu/Type-8.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Menu/Type-categorized_content.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Menu/Type-categorized_pages.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Partials/Table/Columns.html
typo3/sysext/fluid_styled_content/Resources/Private/Templates/Bullets.html
typo3/sysext/fluid_styled_content/Resources/Private/Templates/Default.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/Div.html
typo3/sysext/fluid_styled_content/Resources/Private/Templates/Header.html
typo3/sysext/fluid_styled_content/Resources/Private/Templates/HeaderOnly.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/Html.html
typo3/sysext/fluid_styled_content/Resources/Private/Templates/Image.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/List.html
typo3/sysext/fluid_styled_content/Resources/Private/Templates/Menu.html [deleted file]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/MenuAbstract.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/MenuCategorizedContent.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/MenuCategorizedPages.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/MenuPages.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/MenuRecentlyUpdated.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/MenuRelatedPages.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/MenuSection.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/MenuSectionPages.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/MenuSitemap.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/MenuSitemapPages.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/MenuSubpages.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/Shortcut.html
typo3/sysext/fluid_styled_content/Resources/Private/Templates/Table.html
typo3/sysext/fluid_styled_content/Resources/Private/Templates/Text.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/Textmedia.html
typo3/sysext/fluid_styled_content/Resources/Private/Templates/Textpic.html [new file with mode: 0644]
typo3/sysext/fluid_styled_content/Resources/Private/Templates/Uploads.html
typo3/sysext/fluid_styled_content/ext_conf_template.txt [deleted file]
typo3/sysext/fluid_styled_content/ext_localconf.php
typo3/sysext/fluid_styled_content/ext_tables.sql [deleted file]
typo3/sysext/form/Resources/Public/Css/form.css
typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php
typo3/sysext/frontend/Classes/DataProcessing/MenuProcessor.php
typo3/sysext/frontend/Classes/Hooks/PageLayoutView/ImagePreviewRenderer.php [new file with mode: 0644]
typo3/sysext/frontend/Classes/Hooks/PageLayoutView/TextPreviewRenderer.php [new file with mode: 0644]
typo3/sysext/frontend/Classes/Hooks/PageLayoutView/TextmediaPreviewRenderer.php [new file with mode: 0644]
typo3/sysext/frontend/Classes/Hooks/PageLayoutView/TextpicPreviewRenderer.php [new file with mode: 0644]
typo3/sysext/frontend/Configuration/TCA/tt_content.php
typo3/sysext/frontend/Configuration/TSconfig/Page/Mod/Wizards/NewContentElement.txt [new file with mode: 0644]
typo3/sysext/frontend/Configuration/TSconfig/Page/TCEFORM.txt [new file with mode: 0644]
typo3/sysext/frontend/Resources/Private/Language/Database.xlf
typo3/sysext/frontend/Resources/Private/Language/locallang_ttc.xlf
typo3/sysext/frontend/Tests/Functional/Tca/ContentVisibleFieldsTest.php
typo3/sysext/frontend/ext_localconf.php
typo3/sysext/frontend/ext_tables.sql
typo3/sysext/frontend/ext_typoscript_setup.txt [new file with mode: 0644]
typo3/sysext/install/Classes/Updates/BulletContentElementUpdate.php [new file with mode: 0644]
typo3/sysext/install/Classes/Updates/MigrateCscStaticTemplateUpdate.php [new file with mode: 0644]
typo3/sysext/install/Classes/Updates/MigrateFscStaticTemplateUpdate.php [new file with mode: 0644]
typo3/sysext/install/Classes/Updates/SectionFrameToFrameClassUpdate.php [new file with mode: 0644]
typo3/sysext/install/Classes/Updates/SplitMenusUpdate.php [new file with mode: 0644]
typo3/sysext/install/Classes/Updates/TableFlexFormToTtContentFieldsUpdate.php
typo3/sysext/install/Classes/Updates/UploadContentElementUpdate.php [new file with mode: 0644]
typo3/sysext/install/Resources/Public/Css/install.css
typo3/sysext/install/ext_localconf.php
typo3/sysext/t3editor/Resources/Private/tsref.xml
typo3/sysext/t3editor/Resources/Public/JavaScript/parse_typoscript/tokenizetyposcript.js

index 27785bc..60b4260 100644 (file)
@@ -6,8 +6,9 @@
 .label-beta:extend(.label-warning){};
 .label-alpha:extend(.label-danger){};
 .label-obsolete:extend(.label-default){};
-.label-experimental:extend(.label-default){}
-.label-test:extend(.label-default){}
+.label-experimental:extend(.label-info){};
+.label-test:extend(.label-default){};
+.label-deprecated:extend(.label-danger){};
 .label-excludeFromUpdates:extend(.label-default){}
 
 .label-inline,
@@ -24,4 +25,4 @@
 }
 .label-space-right {
        margin-right: 1em;
-}
\ No newline at end of file
+}
index a096fc1..ba7289e 100644 (file)
@@ -265,11 +265,8 @@ class TableController extends AbstractWizardController
     public function getConfigCode($row)
     {
         // Get delimiter settings
-        $flexForm = GeneralUtility::xml2array($row['pi_flexform']);
-        if (is_array($flexForm)) {
-            $this->tableParsing_quote = $flexForm['data']['s_parsing']['lDEF']['tableparsing_quote']['vDEF'] ? chr((int)$flexForm['data']['s_parsing']['lDEF']['tableparsing_quote']['vDEF']) : '';
-            $this->tableParsing_delimiter = $flexForm['data']['s_parsing']['lDEF']['tableparsing_delimiter']['vDEF'] ? chr((int)$flexForm['data']['s_parsing']['lDEF']['tableparsing_delimiter']['vDEF']) : '|';
-        }
+        $this->tableParsing_quote = $row['table_enclosure'] ? chr((int)$row['table_enclosure']) : '';
+        $this->tableParsing_delimiter = $row['table_delimiter'] ? chr((int)$row['table_delimiter']) : '|';
         // If some data has been submitted, then construct
         if (isset($this->TABLECFG['c'])) {
             // Process incoming:
index 35e601d..760bbcb 100644 (file)
@@ -459,7 +459,7 @@ class PagePositionMap
                     } elseif ($columnConfig['colPos']) {
                         $table .= '<em>' . $this->wrapColumnHeader($this->getLanguageService()->getLL('noAccess'), '', '') . '</em>';
                     } else {
-                        $table .= '<em>' . $this->wrapColumnHeader(($columnConfig['name']?: '') . ' (' . $this->getLanguageService()->getLL('notAssigned') . ')', '', '') . '</em>';
+                        $table .= '<em>' . $this->wrapColumnHeader(($this->getLanguageService()->sL($columnConfig['name']) ?: '') . ' (' . $this->getLanguageService()->getLL('notAssigned') . ')', '', '') . '</em>';
                     }
                     $table .= '</p>';
                     // Render lines
diff --git a/typo3/sysext/backend/Configuration/PageTSconfig/NewContentElementWizard.ts b/typo3/sysext/backend/Configuration/PageTSconfig/NewContentElementWizard.ts
deleted file mode 100644 (file)
index b0ddf1c..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-# dummy placeholders for item groups
-mod.wizards.newContentElement.wizardItems {
-       common.header = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common
-       special.header = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:special
-       forms.header = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:forms
-       plugins.header = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:plugins
-       plugins.elements {
-               general {
-                       iconIdentifier = content-plugin
-                       title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:plugins_general_title
-                       description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:plugins_general_description
-                       tt_content_defValues.CType = list
-               }
-       }
-       plugins.show = *
-}
diff --git a/typo3/sysext/backend/Configuration/TSconfig/Page/Mod/Wizards/NewContentElement.ts b/typo3/sysext/backend/Configuration/TSconfig/Page/Mod/Wizards/NewContentElement.ts
new file mode 100644 (file)
index 0000000..ddc9757
--- /dev/null
@@ -0,0 +1,17 @@
+# dummy placeholders for item groups
+mod.wizards.newContentElement.wizardItems {
+    common.header = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common
+    menu.header = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:menu
+    special.header = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:special
+    forms.header = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:forms
+    plugins.header = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:plugins
+    plugins.elements {
+        general {
+            iconIdentifier = content-plugin
+            title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:plugins_general_title
+            description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:plugins_general_description
+            tt_content_defValues.CType = list
+        }
+    }
+    plugins.show = *
+}
diff --git a/typo3/sysext/backend/Configuration/TSconfig/User/Options.ts b/typo3/sysext/backend/Configuration/TSconfig/User/Options.ts
new file mode 100644 (file)
index 0000000..ca96d3e
--- /dev/null
@@ -0,0 +1 @@
+options.disableDelete.sys_file_metadata = 1
diff --git a/typo3/sysext/backend/Configuration/UserTSconfig/Options.ts b/typo3/sysext/backend/Configuration/UserTSconfig/Options.ts
deleted file mode 100644 (file)
index ca96d3e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-options.disableDelete.sys_file_metadata = 1
index f1e7489..2a434a6 100644 (file)
                        <trans-unit id="common_table_description">
                                <source>A simple table.</source>
                        </trans-unit>
+                       <trans-unit id="menu">
+                               <source>Menu</source>
+                       </trans-unit>
+                       <trans-unit id="menu_abstract.title">
+                               <source>Abstracts</source>
+                       </trans-unit>
+                       <trans-unit id="menu_abstract.description">
+                               <source>Menu of subpages of selected pages including abstracts</source>
+                       </trans-unit>
+                       <trans-unit id="menu_categorized_content.title">
+                               <source>Categorized content</source>
+                       </trans-unit>
+                       <trans-unit id="menu_categorized_content.description">
+                               <source>Content elements for selected categories</source>
+                       </trans-unit>
+                       <trans-unit id="menu_categorized_pages.title">
+                               <source>Categorized pages</source>
+                       </trans-unit>
+                       <trans-unit id="menu_pages.title">
+                               <source>Pages</source>
+                       </trans-unit>
+                       <trans-unit id="menu_pages.description">
+                               <source>Menu of selected pages</source>
+                       </trans-unit>
+                       <trans-unit id="menu_subpages.title">
+                               <source>Subpages</source>
+                       </trans-unit>
+                       <trans-unit id="menu_subpages.description">
+                               <source>Menu of subpages of selected pages</source>
+                       </trans-unit>
+                       <trans-unit id="menu_categorized_pages.description">
+                               <source>Pages for selected categories</source>
+                       </trans-unit>
+                       <trans-unit id="menu_recently_updated.title">
+                               <source>Recently updated pages</source>
+                       </trans-unit>
+                       <trans-unit id="menu_recently_updated.description">
+                               <source>Menu of recenlty updated pages</source>
+                       </trans-unit>
+                       <trans-unit id="menu_related_pages.title">
+                               <source>Related pages</source>
+                       </trans-unit>
+                       <trans-unit id="menu_related_pages.description">
+                               <source>Menu of related pages based on keywords</source>
+                       </trans-unit>
+                       <trans-unit id="menu_section.title">
+                               <source>Section index</source>
+                       </trans-unit>
+                       <trans-unit id="menu_section.description">
+                               <source>Page content marked for section menus</source>
+                       </trans-unit>
+                       <trans-unit id="menu_section_pages.title">
+                               <source>Section index of subpages from selected pages</source>
+                       </trans-unit>
+                       <trans-unit id="menu_section_pages.description">
+                               <source>Menu of subpages of selected pages including sections</source>
+                       </trans-unit>
+                       <trans-unit id="menu_sitemap.title">
+                               <source>Sitemap</source>
+                       </trans-unit>
+                       <trans-unit id="menu_sitemap.description">
+                               <source>Expanded menu of all pages and subpages for selected pages</source>
+                       </trans-unit>
+                       <trans-unit id="menu_sitemap_pages.title">
+                               <source>Sitemaps of selected pages</source>
+                       </trans-unit>
+                       <trans-unit id="menu_sitemap_pages.description">
+                               <source>Expanded menu of all subpages for selected pages</source>
+                       </trans-unit>
                        <trans-unit id="special">
                                <source>Special elements</source>
                        </trans-unit>
index 9e43e99..782f3f0 100644 (file)
@@ -320,7 +320,8 @@ th {
 :root .fa-rotate-270,
 :root .fa-flip-horizontal,
 :root .fa-flip-vertical {
-  filter: none;
+  -webkit-filter: none;
+          filter: none;
 }
 .fa-stack {
   position: relative;
@@ -5726,7 +5727,6 @@ a.label:focus {
 }
 .label-default,
 .label-obsolete,
-.label-experimental,
 .label-test,
 .label-excludeFromUpdates {
   background-color: #d7d7d7;
@@ -5750,7 +5750,8 @@ a.label:focus {
 .label-success[href]:focus {
   background-color: #5f8139;
 }
-.label-info {
+.label-info,
+.label-experimental {
   background-color: #6daae0;
 }
 .label-info[href]:hover,
@@ -5766,7 +5767,8 @@ a.label:focus {
   background-color: #d88b1a;
 }
 .label-danger,
-.label-alpha {
+.label-alpha,
+.label-deprecated {
   background-color: #c83c3c;
 }
 .label-danger[href]:hover,
@@ -8901,7 +8903,7 @@ div.dropdown-menu {
 }
 /*!
  * Datetimepicker for Bootstrap 3
- * version : 4.17.44
+ * version : 4.17.42
  * https://github.com/Eonasdan/bootstrap-datetimepicker/
  */
 .bootstrap-datetimepicker-widget {
index a10532d..52191c9 100644 (file)
@@ -40,5 +40,5 @@ $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsfebeuserauth.php'
 $GLOBALS['TYPO3_CONF_VARS']['SYS']['livesearch']['page'] = 'pages';
 
 // Include base TSconfig setup
-\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig('<INCLUDE_TYPOSCRIPT: source="FILE:EXT:backend/Configuration/PageTSconfig/NewContentElementWizard.ts">');
-\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addUserTSConfig('<INCLUDE_TYPOSCRIPT: source="FILE:EXT:backend/Configuration/UserTSconfig/Options.ts">');
+\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig('<INCLUDE_TYPOSCRIPT: source="FILE:EXT:backend/Configuration/TSconfig/Page/Mod/Wizards/NewContentElement.ts">');
+\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addUserTSConfig('<INCLUDE_TYPOSCRIPT: source="FILE:EXT:backend/Configuration/TSconfig/User/Options.ts">');
diff --git a/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/AbstractMenuViewHelper.php b/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/AbstractMenuViewHelper.php
new file mode 100644 (file)
index 0000000..f641437
--- /dev/null
@@ -0,0 +1,115 @@
+<?php
+namespace TYPO3\CMS\Compatibility7\ViewHelpers\Menu;
+
+/*
+ * 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!
+ */
+
+use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
+use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
+use TYPO3\CMS\Frontend\Page\PageRepository;
+
+/**
+ * Class AbstractMenuViewHelper
+ */
+abstract class AbstractMenuViewHelper extends AbstractViewHelper
+{
+    /**
+     * Get the constraints for the page based on doktype and field "nav_hide"
+     *
+     * By default the following doktypes are always ignored:
+     * - 6: Backend User Section
+     * - > 200: Folder (254)
+     *          Recycler (255)
+     *
+     * Optional are:
+     * - 199: Menu separator
+     * - nav_hide: Not in menu
+     *
+     * @param bool $includeNotInMenu Should pages which are hidden for menu's be included
+     * @param bool $includeMenuSeparator Should pages of type "Menu separator" be included
+     * @return string
+     */
+    protected function getPageConstraints($includeNotInMenu = false, $includeMenuSeparator = false)
+    {
+        $constraints = [];
+
+        $constraints[] = 'doktype NOT IN (' . PageRepository::DOKTYPE_BE_USER_SECTION . ',' . PageRepository::DOKTYPE_RECYCLER . ',' . PageRepository::DOKTYPE_SYSFOLDER . ')';
+
+        if (!$includeNotInMenu) {
+            $constraints[] = 'nav_hide = 0';
+        }
+
+        if (!$includeMenuSeparator) {
+            $constraints[] = 'doktype != ' . PageRepository::DOKTYPE_SPACER;
+        }
+
+        return 'AND ' . implode(' AND ', $constraints);
+    }
+
+    /**
+     * Get a filtered list of page UIDs according to initial list
+     * of UIDs and entryLevel parameter.
+     *
+     * @param array $pageUids
+     * @param int|null $entryLevel
+     * @return array
+     */
+    protected function getPageUids(array $pageUids, $entryLevel = 0)
+    {
+        $typoScriptFrontendController = $this->getTypoScriptFrontendController();
+
+        // Remove empty entries from array
+        $pageUids = array_filter($pageUids);
+
+        // If no pages have been defined, use the current page
+        if (empty($pageUids)) {
+            if ($entryLevel !== null) {
+                if ($entryLevel < 0) {
+                    $entryLevel = count($typoScriptFrontendController->tmpl->rootLine) - 1 + $entryLevel;
+                }
+                $pageUids = [$typoScriptFrontendController->tmpl->rootLine[$entryLevel]['uid']];
+            } else {
+                $pageUids = [$typoScriptFrontendController->id];
+            }
+        }
+
+        return $pageUids;
+    }
+
+    /**
+     * @param array $variables
+     * @return mixed
+     */
+    protected function renderChildrenWithVariables(array $variables)
+    {
+        foreach ($variables as $name => $value) {
+            $this->templateVariableContainer->add($name, $value);
+        }
+
+        $output = $this->renderChildren();
+
+        foreach ($variables as $name => $_) {
+            $this->templateVariableContainer->remove($name);
+        }
+
+        return $output;
+    }
+
+    /**
+     * @return TypoScriptFrontendController
+     */
+    protected function getTypoScriptFrontendController()
+    {
+        return $GLOBALS['TSFE'];
+    }
+}
diff --git a/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/CategoriesViewHelper.php b/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/CategoriesViewHelper.php
new file mode 100644 (file)
index 0000000..8155be0
--- /dev/null
@@ -0,0 +1,111 @@
+<?php
+namespace TYPO3\CMS\Compatibility7\ViewHelpers\Menu;
+
+/*
+ * 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!
+ */
+
+use TYPO3\CMS\Fluid\Core\ViewHelper\Exception;
+use TYPO3\CMS\Frontend\Category\Collection\CategoryCollection;
+
+/**
+ * A view helper which returns records with assigned categories
+ *
+ * = Example =
+ *
+ * <code title="Pages with categories 1 and 2 assigned">
+ * <ce:menu.categories categoryUids="{0: 1, 1: 2}" as="pages" relationField="categories" table="pages">
+ *   <f:for each="{pages}" as="page">
+ *     {page.title}
+ *   </f:for>
+ * </ce:menu.categories>
+ * </code>
+ *
+ * <output>
+ * Page with category 1 assigned
+ * Page with category 1 and 2 assigned
+ * </output>
+ */
+class CategoriesViewHelper extends AbstractMenuViewHelper
+{
+    /**
+     * Output escaping is disabled as child content contains HTML by default
+     *
+     * @var bool
+     */
+    protected $escapeOutput = false;
+
+    /**
+     * Initialize ViewHelper arguments
+     *
+     * @return void
+     */
+    public function initializeArguments()
+    {
+        $this->registerArgument('categoryUids', 'array', 'The categories assigned', true);
+        $this->registerArgument('as', 'string', 'Name of the template variable that will contain resolved pages', true);
+        $this->registerArgument('relationField', 'string', 'The category field for MM relation table', true);
+        $this->registerArgument('table', 'string', 'The table to which categories are assigned (source table)', true);
+    }
+
+    /**
+     * Render the view helper
+     *
+     * @return string
+     */
+    public function render()
+    {
+        $categoryUids = (array)$this->arguments['categoryUids'];
+        $as = (string)$this->arguments['as'];
+        if (empty($categoryUids)) {
+            return '';
+        }
+
+        return $this->renderChildrenWithVariables([
+            $as => $this->findByCategories($categoryUids, $this->arguments['relationField'], $this->arguments['table'])
+        ]);
+    }
+
+    /**
+     * Find records from a certain table which have categories assigned
+     *
+     * @param array $categoryUids The uids of the categories
+     * @param string $relationField Field relation in MM table
+     * @param string $tableName Name of the table to search in
+     * @return array
+     * @throws Exception
+     */
+    protected function findByCategories($categoryUids, $relationField, $tableName = 'pages')
+    {
+        $result = [];
+
+        foreach ($categoryUids as $categoryUid) {
+            try {
+                $collection = CategoryCollection::load(
+                    $categoryUid,
+                    true,
+                    $tableName,
+                    $relationField
+                );
+                if ($collection->count() > 0) {
+                    foreach ($collection as $record) {
+                        $result[$record['uid']] = $record;
+                    }
+                }
+            } catch (\RuntimeException $e) {
+                throw new Exception($e->getMessage(), 1476122186);
+            }
+        }
+
+        return $result;
+    }
+}
diff --git a/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/DirectoryViewHelper.php b/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/DirectoryViewHelper.php
new file mode 100644 (file)
index 0000000..e79a238
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+namespace TYPO3\CMS\Compatibility7\ViewHelpers\Menu;
+
+/*
+ * 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!
+ */
+
+/**
+ * A view helper which returns the subpages of the given pages
+ *
+ * = Example =
+ *
+ * <code title="Directory of pages with uid = 1 and uid = 2">
+ * <ce:menu.directory pageUids="{0: 1, 1: 2}" as="pages">
+ *   <f:for each="{pages}" as="page">
+ *     {page.title}
+ *   </f:for>
+ * </ce:menu.directory>
+ * </code>
+ *
+ * <output>
+ * Subpage 1 of page with uid = 1
+ * Subpage 2 of page with uid = 1
+ * Subpage 1 of page with uid = 2
+ * </output>
+ */
+class DirectoryViewHelper extends AbstractMenuViewHelper
+{
+    /**
+     * Output escaping is disabled as child content contains HTML by default
+     *
+     * @var bool
+     */
+    protected $escapeOutput = false;
+
+    /**
+     * Initialize ViewHelper arguments
+     *
+     * @return void
+     */
+    public function initializeArguments()
+    {
+        $this->registerArgument('as', 'string', 'Name of template variable which will contain selected pages', true);
+        $this->registerArgument('levelAs', 'string', 'Name of template variable which will contain current level', false, null);
+        $this->registerArgument('pageUids', 'array', 'Page UIDs of parent pages', false, []);
+        $this->registerArgument('entryLevel', 'integer', 'The entry level', false, null);
+        $this->registerArgument('maximumLevel', 'integer', 'Maximum level for rendering of nested menus', false, 10);
+        $this->registerArgument('includeNotInMenu', 'boolean', 'Include pages that are marked "hide in menu"?', false, false);
+        $this->registerArgument('includeMenuSeparator', 'boolean', 'Include pages of the type "Menu separator"?', false, false);
+    }
+
+    /**
+     * Render the view helper
+     *
+     * @return string
+     */
+    public function render()
+    {
+        $typoScriptFrontendController = $this->getTypoScriptFrontendController();
+        $as = $this->arguments['as'];
+        $pageUids = (array)$this->arguments['pageUids'];
+        $entryLevel = $this->arguments['entryLevel'];
+        $levelAs = $this->arguments['levelAs'];
+        $maximumLevel = $this->arguments['maximumLevel'];
+        $includeNotInMenu = (bool)$this->arguments['includeNotInMenu'];
+        $includeMenuSeparator = (bool)$this->arguments['includeMenuSeparator'];
+
+        $pageUids = $this->getPageUids($pageUids, $entryLevel);
+        $pages = $typoScriptFrontendController->sys_page->getMenu(
+            $pageUids,
+            '*',
+            'sorting',
+            $this->getPageConstraints($includeNotInMenu, $includeMenuSeparator)
+        );
+
+        $output = '';
+
+        if (!empty($pages)) {
+            if (!$typoScriptFrontendController->register['ceMenuLevel_directory']) {
+                $typoScriptFrontendController->register['ceMenuLevel_directory'] = 1;
+                $typoScriptFrontendController->register['ceMenuMaximumLevel_directory'] = $maximumLevel;
+            } else {
+                $typoScriptFrontendController->register['ceMenuLevel_directory']++;
+            }
+
+            if ($typoScriptFrontendController->register['ceMenuLevel_directory'] > $typoScriptFrontendController->register['ceMenuMaximumLevel_directory']) {
+                return '';
+            }
+
+            $variables = [
+                $as => $pages
+            ];
+            if (!empty($levelAs)) {
+                $variables[$levelAs] = $typoScriptFrontendController->register['ceMenuLevel_directory'];
+            }
+            $output = $this->renderChildrenWithVariables($variables);
+
+            $typoScriptFrontendController->register['ceMenuLevel_directory']--;
+
+            if ($typoScriptFrontendController->register['ceMenuLevel_directory'] === 0) {
+                unset(
+                    $typoScriptFrontendController->register['ceMenuLevel_directory'],
+                    $typoScriptFrontendController->register['ceMenuMaximumLevel_directory']
+                );
+            }
+        }
+
+        return $output;
+    }
+}
diff --git a/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/KeywordsViewHelper.php b/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/KeywordsViewHelper.php
new file mode 100644 (file)
index 0000000..43d71ab
--- /dev/null
@@ -0,0 +1,157 @@
+<?php
+namespace TYPO3\CMS\Compatibility7\ViewHelpers\Menu;
+
+/*
+ * 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!
+ */
+
+use TYPO3\CMS\Core\Database\ConnectionPool;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * A view helper which returns pages with one of the same keywords as the given pages
+ *
+ * Search default starts at the root of the current page tree.
+ * With entryLevel this can be adjusted.
+ *
+ * = Example =
+ *
+ * <code title="Pages with the similar keyword(s) of page uid = 1 and uid = 2">
+ * <ce:menu.keywords pageUids="{0: 1, 1: 2}" as="pages">
+ *   <f:for each="{pages}" as="page">
+ *     {page.title}
+ *   </f:for>
+ * </ce:menu.keywords>
+ * </code>
+ *
+ * <output>
+ * Page with the keywords "typo3" and "fluid"
+ * Page with the keyword "fluid"
+ * Page with the keyword "typo3"
+ * </output>
+ */
+class KeywordsViewHelper extends AbstractMenuViewHelper
+{
+    /**
+     * Output escaping is disabled as child content contains HTML by default
+     *
+     * @var bool
+     */
+    protected $escapeOutput = false;
+
+    /**
+     * Initialize ViewHelper arguments
+     *
+     * @return void
+     */
+    public function initializeArguments()
+    {
+        $this->registerArgument('as', 'string', 'Name of template variable which will contain selected pages', true);
+        $this->registerArgument('entryLevel', 'integer', 'The entry level', false, 0);
+        $this->registerArgument('pageUids', 'array', 'Page UIDs of pages to fetch the keywords from', false, []);
+        $this->registerArgument('keywords', 'array', 'Keywords for which to search', false, []);
+        $this->registerArgument('includeNotInMenu', 'boolean', 'Include pages that are marked "hide in menu"?', false, false);
+        $this->registerArgument('includeMenuSeparator', 'boolean', 'Include pages of the type "Menu separator"?', false, false);
+        $this->registerArgument('excludeNoSearchPages', 'boolean', 'Exclude pages that are NOT marked "include in search"?', false, true);
+    }
+
+    /**
+     * Render the view helper
+     *
+     * @return string
+     */
+    public function render()
+    {
+        $typoScriptFrontendController = $this->getTypoScriptFrontendController();
+        $as = (string)$this->arguments['as'];
+        $entryLevel = (int)$this->arguments['entryLevel'];
+        $pageUids = (array)$this->arguments['pageUids'];
+        $keywords = (array)$this->arguments['keywords'];
+        $includeNotInMenu = (bool)$this->arguments['includeNotInMenu'];
+        $includeMenuSeparator = (bool)$this->arguments['includeMenuSeparator'];
+        $excludeNoSearchPages = (bool)$this->arguments['excludeNoSearchPages'];
+
+        // If no pages have been defined, use the current page
+        if (empty($pageUids)) {
+            $pageUids = [$typoScriptFrontendController->page['uid']];
+        }
+
+        // Transform the keywords list into an array
+        if (!is_array($keywords)) {
+            $unfilteredKeywords = $this->keywordsToArray($keywords);
+        } else {
+            $unfilteredKeywords = $keywords;
+        }
+
+        // Use the keywords of the page when none has been given
+        if (empty($keywords)) {
+            foreach ($pageUids as $pageUid) {
+                $page = $typoScriptFrontendController->sys_page->getPage($pageUid);
+                $unfilteredKeywords = array_merge(
+                    $unfilteredKeywords,
+                    $this->keywordsToArray($page['keywords'])
+                );
+            }
+        }
+        $filteredKeywords = array_unique($unfilteredKeywords);
+
+        $constraints = $this->getPageConstraints($includeNotInMenu, $includeMenuSeparator);
+        if ($excludeNoSearchPages) {
+            $constraints .= ' AND no_search = 0';
+        }
+
+        $keywordConstraints = [];
+        if ($filteredKeywords) {
+            $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
+            foreach ($filteredKeywords as $keyword) {
+                $keyword = $queryBuilder->quote('%' . $queryBuilder->escapeLikeWildcards($keyword) . '%');
+                $keywordConstraints[] = 'keywords LIKE ' . $keyword;
+            }
+            $constraints .= ' AND (' . implode(' OR ', $keywordConstraints) . ')';
+        }
+
+        // Start point
+        if ($entryLevel < 0) {
+            $entryLevel = count($typoScriptFrontendController->tmpl->rootLine) - 1 + $entryLevel;
+        }
+        $startUid = $typoScriptFrontendController->tmpl->rootLine[$entryLevel]['uid'];
+        $treePageUids = explode(
+            ',',
+            $typoScriptFrontendController->cObj->getTreeList($startUid, 20)
+        );
+
+        $pages = $typoScriptFrontendController->sys_page->getMenuForPages(
+            array_merge([$startUid], $treePageUids),
+            '*',
+            '',
+            $constraints
+        );
+        return $this->renderChildrenWithVariables([
+            $as => $pages
+        ]);
+    }
+
+    /**
+     * Get a clean array of keywords
+     *
+     * The list of keywords can have a separator like comma, semicolon or line feed
+     *
+     * @param string $keywords The list of keywords
+     * @return array Cleaned up list
+     */
+    protected function keywordsToArray($keywords)
+    {
+        $keywordList = preg_split('/[,;' . LF . ']/', $keywords);
+
+        return array_filter(array_map('trim', $keywordList));
+    }
+}
diff --git a/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/ListViewHelper.php b/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/ListViewHelper.php
new file mode 100644 (file)
index 0000000..f52eb57
--- /dev/null
@@ -0,0 +1,123 @@
+<?php
+namespace TYPO3\CMS\Compatibility7\ViewHelpers\Menu;
+
+/*
+ * 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!
+ */
+
+/**
+ * A view helper which returns a list of pages
+ *
+ * = Example =
+ *
+ * <code title="List of pages with uid = 1 and uid = 2">
+ * <ce:menu.list pageUids="{0: 1, 1: 2}" as="pages">
+ *   <f:for each="{pages}" as="page">
+ *     {page.title}
+ *   </f:for>
+ * </ce:menu.list>
+ * </code>
+ *
+ * <output>
+ * Page with uid = 1
+ * Page with uid = 2
+ * </output>
+ */
+class ListViewHelper extends AbstractMenuViewHelper
+{
+    /**
+     * Output escaping is disabled as child content contains HTML by default
+     *
+     * @var bool
+     */
+    protected $escapeOutput = false;
+
+    /**
+     * Initialize ViewHelper arguments
+     */
+    public function initializeArguments()
+    {
+        $this->registerArgument('as', 'string', 'Name of template variable which will contain selected pages', true);
+        $this->registerArgument('levelAs', 'string', 'Name of template variable which will contain current level', false, null);
+        $this->registerArgument('pageUids', 'array', 'Page UIDs of parent pages', false, []);
+        $this->registerArgument('entryLevel', 'integer', 'The entry level', false, null);
+        $this->registerArgument('maximumLevel', 'integer', 'Maximum level for rendering of nested menus', false, 10);
+        $this->registerArgument('includeNotInMenu', 'boolean', 'Include pages that are marked "hide in menu"?', false, false);
+        $this->registerArgument('includeMenuSeparator', 'boolean', 'Include pages of the type "Menu separator"?', false, false);
+    }
+
+    /**
+     * Render the view helper
+     *
+     * @return string
+     * @throws \TYPO3\CMS\Fluid\Core\ViewHelper\Exception
+     */
+    public function render()
+    {
+        $typoScriptFrontendController = $this->getTypoScriptFrontendController();
+        $as = $this->arguments['as'];
+        $pageUids = (array)$this->arguments['pageUids'];
+        $entryLevel = $this->arguments['entryLevel'];
+        $levelAs = $this->arguments['levelAs'];
+        $maximumLevel = $this->arguments['maximumLevel'];
+        $includeNotInMenu = (bool)$this->arguments['includeNotInMenu'];
+        $includeMenuSeparator = (bool)$this->arguments['includeMenuSeparator'];
+
+        $pageUids = $this->getPageUids($pageUids, $entryLevel);
+        $pages = $typoScriptFrontendController->sys_page->getMenuForPages(
+            $pageUids,
+            '*',
+            '',
+            $this->getPageConstraints($includeNotInMenu, $includeMenuSeparator)
+        );
+
+        $tempPagesForSort = [];
+        foreach ($pageUids as $pageUid) {
+            if ($pages[$pageUid]) {
+                $tempPagesForSort[$pageUid] = $pages[$pageUid];
+            }
+        }
+        $pages = $tempPagesForSort;
+
+        $output = '';
+
+        if (!empty($pages)) {
+            if (!$typoScriptFrontendController->register['ceMenuLevel_list']) {
+                $typoScriptFrontendController->register['ceMenuLevel_list'] = 1;
+                $typoScriptFrontendController->register['ceMenuMaximumLevel_list'] = $maximumLevel;
+            } else {
+                $typoScriptFrontendController->register['ceMenuLevel_list']++;
+            }
+
+            if ($typoScriptFrontendController->register['ceMenuLevel_list'] > $typoScriptFrontendController->register['ceMenuMaximumLevel_list']) {
+                return '';
+            }
+
+            $variables = [
+                $as => $pages
+            ];
+            if (!empty($levelAs)) {
+                $variables[$levelAs] = $typoScriptFrontendController->register['ceMenuLevel_list'];
+            }
+            $output = $this->renderChildrenWithVariables($variables);
+
+            $typoScriptFrontendController->register['ceMenuLevel_list']--;
+
+            if ($typoScriptFrontendController->register['ceMenuLevel_list'] === 0) {
+                unset($typoScriptFrontendController->register['ceMenuLevel_list']);
+                unset($typoScriptFrontendController->register['ceMenuMaximumLevel_list']);
+            }
+        }
+
+        return $output;
+    }
+}
diff --git a/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/MenuViewHelperTrait.php b/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/MenuViewHelperTrait.php
new file mode 100644 (file)
index 0000000..da1566e
--- /dev/null
@@ -0,0 +1,125 @@
+<?php
+namespace TYPO3\CMS\Compatibility7\ViewHelpers\Menu;
+
+/*
+ * 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!
+ */
+
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
+use TYPO3\CMS\Frontend\Page\PageRepository;
+
+/**
+ * Trait for Menu-ViewHelpers that require support functions for
+ * working with menus that require page selection constraints.
+ * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
+ */
+trait MenuViewHelperTrait
+{
+    /**
+     * Get the constraints for the page based on doktype and field "nav_hide"
+     *
+     * By default the following doktypes are always ignored:
+     * - 6: Backend User Section
+     * - > 200: Folder (254)
+     *          Recycler (255)
+     *
+     * Optional are:
+     * - 199: Menu separator
+     * - nav_hide: Not in menu
+     *
+     * @param bool $includeNotInMenu Should pages which are hidden for menu's be included
+     * @param bool $includeMenuSeparator Should pages of type "Menu separator" be included
+     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9, use AbstractMenuViewHelper instead of MenuViewHelperTrait
+     * @return string
+     */
+    protected function getPageConstraints($includeNotInMenu = false, $includeMenuSeparator = false)
+    {
+        GeneralUtility::logDeprecatedFunction();
+        $constraints = [];
+
+        $constraints[] = 'doktype NOT IN (' . PageRepository::DOKTYPE_BE_USER_SECTION . ',' . PageRepository::DOKTYPE_RECYCLER . ',' . PageRepository::DOKTYPE_SYSFOLDER . ')';
+
+        if (!$includeNotInMenu) {
+            $constraints[] = 'nav_hide = 0';
+        }
+
+        if (!$includeMenuSeparator) {
+            $constraints[] = 'doktype != ' . PageRepository::DOKTYPE_SPACER;
+        }
+
+        return 'AND ' . implode(' AND ', $constraints);
+    }
+
+    /**
+     * Get a filtered list of page UIDs according to initial list
+     * of UIDs and entryLevel parameter.
+     *
+     * @param array $pageUids
+     * @param int|NULL $entryLevel
+     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9, use AbstractMenuViewHelper instead of MenuViewHelperTrait
+     * @return array
+     */
+    protected function getPageUids(array $pageUids, $entryLevel = 0)
+    {
+        GeneralUtility::logDeprecatedFunction();
+        $typoScriptFrontendController = $this->getTypoScriptFrontendController();
+
+        // Remove empty entries from array
+        $pageUids = array_filter($pageUids);
+
+        // If no pages have been defined, use the current page
+        if (empty($pageUids)) {
+            if ($entryLevel !== null) {
+                if ($entryLevel < 0) {
+                    $entryLevel = count($typoScriptFrontendController->tmpl->rootLine) - 1 + $entryLevel;
+                }
+                $pageUids = [$typoScriptFrontendController->tmpl->rootLine[$entryLevel]['uid']];
+            } else {
+                $pageUids = [$typoScriptFrontendController->id];
+            }
+        }
+
+        return $pageUids;
+    }
+
+    /**
+     * @param array $variables
+     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9, use AbstractMenuViewHelper instead of MenuViewHelperTrait
+     * @return mixed
+     */
+    protected function renderChildrenWithVariables(array $variables)
+    {
+        GeneralUtility::logDeprecatedFunction();
+        foreach ($variables as $name => $value) {
+            $this->templateVariableContainer->add($name, $value);
+        }
+
+        $output = $this->renderChildren();
+
+        foreach ($variables as $name => $_) {
+            $this->templateVariableContainer->remove($name);
+        }
+
+        return $output;
+    }
+
+    /**
+     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9, use AbstractMenuViewHelper instead of MenuViewHelperTrait
+     * @return TypoScriptFrontendController
+     */
+    protected function getTypoScriptFrontendController()
+    {
+        GeneralUtility::logDeprecatedFunction();
+        return $GLOBALS['TSFE'];
+    }
+}
diff --git a/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/SectionViewHelper.php b/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/SectionViewHelper.php
new file mode 100644 (file)
index 0000000..e5de6da
--- /dev/null
@@ -0,0 +1,141 @@
+<?php
+namespace TYPO3\CMS\Compatibility7\ViewHelpers\Menu;
+
+/*
+ * 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!
+ */
+
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * A view helper which returns content elements with 'Show in Section Menus' enabled
+ *
+ * By default only content in colPos=0 will be found. This can be overruled by using "column"
+ *
+ * If you set property "type" to 'all', then the 'Show in Section Menus' checkbox is not considered
+ * and all content elements are selected.
+ *
+ * If the property "type" is 'header' then only content elements with a visible header layout
+ * (and a non-empty 'header' field!) are selected.
+ * In other words, if the header layout of an element is set to 'Hidden' then the element will not be in the results.
+ *
+ * = Example =
+ *
+ * <code title="Content elements in page with uid = 1 and 'Show in Section Menu's' enabled">
+ * <ce:menu.section pageUid="1" as="contentElements">
+ *   <f:for each="{contentElements}" as="contentElement">
+ *     {contentElement.header}
+ *   </f:for>
+ * </ce:menu.section>
+ * </code>
+ *
+ * <output>
+ * Content element 1 in page with uid = 1 and "Show in section menu's" enabled
+ * Content element 2 in page with uid = 1 and "Show in section menu's" enabled
+ * Content element 3 in page with uid = 1 and "Show in section menu's" enabled
+ * </output>
+ */
+class SectionViewHelper extends AbstractMenuViewHelper
+{
+    /**
+     * Output escaping is disabled as child content contains HTML by default
+     *
+     * @var bool
+     */
+    protected $escapeOutput = false;
+
+    /**
+     * Initialize ViewHelper arguments
+     *
+     * @return void
+     */
+    public function initializeArguments()
+    {
+        $this->registerArgument('as', 'string', 'Name of the template variable that will contain selected pages', true);
+        $this->registerArgument('column', 'string', 'Column numbers (colPos) from which to select content', false, '0');
+        $this->registerArgument('pageUid', 'integer', 'UID of page containing section-objects; defaults to current page', false, null);
+        $this->registerArgument('type', 'string', 'Search method when selecting indices from page', false, '');
+    }
+
+    /**
+     * Render the view helper
+     *
+     * @return string
+     */
+    public function render()
+    {
+        $as = (string)$this->arguments['as'];
+        $pageUid = (int)$this->arguments['pageUid'];
+        $type = (string)$this->arguments['type'];
+
+        if (empty($pageUid)) {
+            $pageUid = $this->getTypoScriptFrontendController()->id;
+        }
+
+        if (!empty($type) && !in_array($type, ['all', 'header'], true)) {
+            return '';
+        }
+
+        return $this->renderChildrenWithVariables([
+            $as => $this->findBySection($pageUid, $type, $this->arguments['column'])
+        ]);
+    }
+
+    /**
+     * Find content with 'Show in Section Menus' enabled in a page
+     *
+     * By default only content in colPos=0 will be found. This can be overruled by using $column
+     *
+     * If you set property type to "all", then the 'Show in Section Menus' checkbox is not considered
+     * and all content elements are selected.
+     *
+     * If the property $type is 'header' then only content elements with a visible header layout
+     * (and a non-empty 'header' field!) is selected.
+     * In other words, if the header layout of an element is set to 'Hidden' then the page will not appear in the menu.
+     *
+     * @param int $pageUid The page uid
+     * @param string $type Search method
+     * @param string $column Restrict content by the column number
+     * @return array
+     */
+    protected function findBySection($pageUid, $type = '', $column = '')
+    {
+        $constraints = [];
+        if (trim($column) !== '') {
+            $colPosList = implode(',', GeneralUtility::intExplode(',', $column, true));
+            $constraints[] = 'colPos IN(' . ($colPosList !== '' ? $colPosList : '0') . ')';
+        }
+
+        switch ($type) {
+            case 'all':
+                break;
+            case 'header':
+                $constraints[] = 'sectionIndex = 1';
+                $constraints[] = 'header <> \'\'';
+                $constraints[] = 'header_layout <> 100';
+                break;
+            default:
+                $constraints[] = 'sectionIndex = 1';
+        }
+
+        $whereStatement = implode(' AND ', $constraints);
+
+        $contentElements = $this->getTypoScriptFrontendController()->cObj->getRecords('tt_content', [
+            'where' => $whereStatement,
+            'orderBy' => 'sorting',
+            'languageField' => 'sys_language_uid',
+            'pidInList' => (int)$pageUid
+        ]);
+
+        return $contentElements;
+    }
+}
diff --git a/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/UpdatedViewHelper.php b/typo3/sysext/compatibility7/Classes/ViewHelpers/Menu/UpdatedViewHelper.php
new file mode 100644 (file)
index 0000000..9a590d5
--- /dev/null
@@ -0,0 +1,117 @@
+<?php
+namespace TYPO3\CMS\Compatibility7\ViewHelpers\Menu;
+
+/*
+ * 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!
+ */
+
+/**
+ * A view helper which returns recently updated subpages (multiple levels) of the given pages
+ *
+ * = Example =
+ *
+ * <code title="Pages with the similar keyword(s) of page uid = 1 and uid = 2">
+ * <ce:menu.updated pageUids="{0: 1, 1: 2}" as="pages">
+ *   <f:for each="{pages}" as="page">
+ *     {page.title}
+ *   </f:for>
+ * </ce:menu.updated>
+ * </code>
+ *
+ * <output>
+ * Recently updated subpage 1
+ * Recently updated subpage 2
+ * Recently updated subpage 3
+ * </output>
+ */
+class UpdatedViewHelper extends AbstractMenuViewHelper
+{
+    /**
+     * Output escaping is disabled as child content contains HTML by default
+     *
+     * @var bool
+     */
+    protected $escapeOutput = false;
+
+    /**
+     * Initialize ViewHelper arguments
+     *
+     * @return void
+     */
+    public function initializeArguments()
+    {
+        $this->registerArgument('as', 'string', 'Name of the template variable that will contain selected pages', true);
+        $this->registerArgument('pageUids', 'array', 'Page UIDs of parent pages', false, []);
+        $this->registerArgument('sortField', 'string', 'Field to sort pages; possible values: starttime, lastUpdated, tstamp, crdate', false, 'SYS_LASTCHANGED');
+        $this->registerArgument('maximumAge', 'string', 'Maximum age of pages to be included; supports mathematical expressions', false, '604800');
+        $this->registerArgument('includeNotInMenu', 'boolean', 'Include pages that are marked "hide in menu"?', false, false);
+        $this->registerArgument('includeMenuSeparator', 'boolean', 'Include pages of the type "Menu separator"?', false, false);
+        $this->registerArgument('excludeNoSearchPages', 'boolean', 'Exclude pages that are NOT marked "include in search"?', false, true);
+    }
+
+    /**
+     * Render the view helper
+     *
+     * @return string
+     */
+    public function render()
+    {
+        $typoScriptFrontendController = $this->getTypoScriptFrontendController();
+        $as = (string)$this->arguments['as'];
+        $pageUids = (array)$this->arguments['pageUids'];
+        $sortField = $this->arguments['sortField'];
+        $maximumAge = $this->arguments['maximumAge'];
+        $includeNotInMenu = (bool)$this->arguments['includeNotInMenu'];
+        $includeMenuSeparator = (bool)$this->arguments['includeMenuSeparator'];
+        $excludeNoSearchPages = (bool)$this->arguments['excludeNoSearchPages'];
+
+        // If no pages have been defined, use the current page
+        if (empty($pageUids)) {
+            $pageUids = [$typoScriptFrontendController->page['uid']];
+        }
+
+        $unfilteredPageTreeUids = [];
+        foreach ($pageUids as $pageUid) {
+            $unfilteredPageTreeUids = array_merge(
+                $unfilteredPageTreeUids,
+                explode(
+                    ',',
+                    $typoScriptFrontendController->cObj->getTreeList($pageUid, 20)
+                )
+            );
+        }
+        $pageTreeUids = array_unique($unfilteredPageTreeUids);
+
+        $constraints = $this->getPageConstraints($includeNotInMenu, $includeMenuSeparator);
+
+        if ($excludeNoSearchPages) {
+            $constraints .= ' AND no_search = 0';
+        }
+
+        if (!in_array($sortField, ['starttime', 'lastUpdated', 'tstamp', 'crdate'])) {
+            $sortField = 'SYS_LASTCHANGED';
+        }
+
+        $minimumTimeStamp = time() - (int)$typoScriptFrontendController->cObj->calc($maximumAge);
+        $constraints .= ' AND ' . $sortField . ' >=' . $minimumTimeStamp;
+
+        $pages = $typoScriptFrontendController->sys_page->getMenuForPages(
+            $pageTreeUids,
+            '*',
+            $sortField . ' DESC',
+            $constraints
+        );
+        return $this->renderChildrenWithVariables([
+            $as => $pages
+        ]);
+    }
+}
diff --git a/typo3/sysext/compatibility7/Configuration/PageTS/Mod/Wizards/NewContentElementMenu.txt b/typo3/sysext/compatibility7/Configuration/PageTS/Mod/Wizards/NewContentElementMenu.txt
new file mode 100644 (file)
index 0000000..08430a5
--- /dev/null
@@ -0,0 +1,17 @@
+#
+# Define content elements in "New Content Element Wizard"
+#
+mod.wizards.newContentElement.wizardItems {
+    menu.elements {
+        menu {
+            iconIdentifier = content-special-menu
+            title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:special_menus_title
+            description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:special_menus_description
+            tt_content_defValues {
+                CType = menu
+                menu_type = 0
+            }
+        }
+    }
+    menu.show := addToList(menu)
+}
diff --git a/typo3/sysext/compatibility7/Configuration/TCA/Overrides/sys_template.php b/typo3/sysext/compatibility7/Configuration/TCA/Overrides/sys_template.php
new file mode 100644 (file)
index 0000000..57adc0c
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+defined('TYPO3_MODE') or die();
+
+if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('css_styled_content')) {
+    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile(
+        'compatibility7',
+        'Configuration/TypoScript/ContentElement/CssStyledContent/',
+        'CSS Styled Content TYPO3 v7'
+    );
+}
+if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('fluid_styled_content')) {
+    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile(
+        'compatibility7',
+        'Configuration/TypoScript/ContentElement/FluidStyledContent/',
+        'Fluid Styled Content TYPO3 v7'
+    );
+}
index 2bd8202..1278825 100644 (file)
@@ -19,7 +19,10 @@ $fields = [
 
 // Register "old" FE plugin and hide layout, select_key and pages fields in BE
 \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPlugin(
-    ['LLL:EXT:indexed_search/Resources/Private/Language/locallang_main.xlf:mod_indexed_search', 'indexed_search'],
+    [
+        'LLL:EXT:indexed_search/Resources/Private/Language/locallang_main.xlf:mod_indexed_search',
+        'indexed_search'
+    ],
     'list_type',
     'indexed_search'
 );
diff --git a/typo3/sysext/compatibility7/Configuration/TCA/Overrides/tt_content_element_menu.php b/typo3/sysext/compatibility7/Configuration/TCA/Overrides/tt_content_element_menu.php
new file mode 100644 (file)
index 0000000..149cc6d
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+defined('TYPO3_MODE') or die();
+
+call_user_func(function () {
+    // Add the CType
+    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem(
+        'tt_content',
+        'CType',
+        [
+            'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:CType.I.12',
+            'menu',
+            'content-special-menu'
+        ],
+        'shortcut',
+        'before'
+    );
+    $GLOBALS['TCA']['tt_content']['ctrl']['requestUpdate'] .= ',menu_type';
+    $GLOBALS['TCA']['tt_content']['ctrl']['typeicon_classes']['menu'] = 'content-special-menu';
+    $GLOBALS['TCA']['tt_content']['palettes']['menu'] = [
+        'showitem' => '
+            menu_type;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type_formlabel,
+            --linebreak--,
+            pages;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:pages.ALT.menu_formlabel
+        ',
+    ];
+    $GLOBALS['TCA']['tt_content']['types']['menu'] = [
+        'showitem' => '
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
+                --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
+                --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
+                --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.menu;menu,
+            --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
+                layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
+                --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
+            --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.accessibility,
+                --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.menu_accessibility;menu_accessibility,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
+                --palette--;;language,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
+                --palette--;;hidden,
+                --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
+                categories,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
+                rowDescription,
+            --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
+        ',
+        'subtype_value_field' => 'menu_type',
+        'subtypes_excludelist' => [
+            '2' => 'pages',
+            'categorized_pages' => 'pages',
+            'categorized_content' => 'pages',
+        ],
+        'subtypes_addlist' => [
+            'categorized_pages' => 'selected_categories, category_field',
+            'categorized_content' => 'selected_categories, category_field',
+        ]
+    ];
+
+    // Add additional fields
+    $additionalColumns = [
+        'menu_type' => [
+            'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type',
+            'onChange' => 'reload',
+            'config' => [
+                'type' => 'select',
+                'renderType' => 'selectSingle',
+                'items' => [
+                    [
+                        'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type.I.0',
+                        '0'
+                    ],
+                    [
+                        'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type.I.1',
+                        '1'
+                    ],
+                    [
+                        'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type.I.2',
+                        '4'
+                    ],
+                    [
+                        'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type.I.3',
+                        '7'
+                    ],
+                    [
+                        'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type.I.4',
+                        '2'
+                    ],
+                    [
+                        'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type.I.8',
+                        '8'
+                    ],
+                    [
+                        'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type.I.5',
+                        '3'
+                    ],
+                    [
+                        'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type.I.6',
+                        '5'
+                    ],
+                    [
+                        'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type.I.7',
+                        '6'
+                    ],
+                    [
+                        'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type.I.categorized_pages',
+                        'categorized_pages'
+                    ],
+                    [
+                        'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:menu_type.I.categorized_content',
+                        'categorized_content'
+                    ]
+                ],
+                'default' => 0
+            ]
+        ]
+    ];
+    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tt_content', $additionalColumns);
+});
diff --git a/typo3/sysext/compatibility7/Configuration/TypoScript/ContentElement/CssStyledContent/setup.txt b/typo3/sysext/compatibility7/Configuration/TypoScript/ContentElement/CssStyledContent/setup.txt
new file mode 100644 (file)
index 0000000..8e39fea
--- /dev/null
@@ -0,0 +1,272 @@
+#
+# Menu configuration for css_styled_content
+#
+tt_content.stdWrap.innerWrap.cObject.default {
+    10.cObject.menu = TEXT
+    10.cObject.menu.value = <nav id="c{field:uid}"
+    30.cObject.menu = TEXT
+    30.cObject.menu.value = >|</nav>
+}
+
+
+#
+# cType: menu
+#
+tt_content.menu = COA
+tt_content.menu {
+    10 = < lib.stdheader
+    20 = CASE
+    20 {
+        key.field = menu_type
+        # "Menu of these pages"
+        default = HMENU
+        default {
+            special = list
+            special.value.field = pages
+            stdWrap {
+                prepend = COA
+                prepend {
+                    stdWrap {
+                        if.isTrue.field = accessibility_bypass
+                    }
+                    10 = LOAD_REGISTER
+                    10 {
+                        accessibility_bypass_text = TEXT
+                        accessibility_bypass_text {
+                            field = accessibility_bypass_text
+                        }
+                    }
+                    20 = CONTENT
+                    20 {
+                        table = tt_content
+                        select {
+                            pidInList = this
+                            orderBy = sorting
+                            where {
+                                dataWrap = sorting>{field:sorting}
+                            }
+                            languageField = sys_language_uid
+                            max = 1
+                        }
+                        renderObj = TEXT
+                        renderObj {
+                            required = 1
+                            data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:menu.bypassNavigation
+                            override.data = register:accessibility_bypass_text
+                            trim = 1
+                            htmlSpecialChars = 1
+                            typolink {
+                                parameter {
+                                    field = pid
+                                }
+                                section {
+                                    field = uid
+                                }
+                            }
+                            wrap = <li class="csc-nav-bypass">|</li>
+                        }
+                    }
+                    30 = RESTORE_REGISTER
+                }
+                outerWrap = <ul class="csc-menu csc-menu-def">|</ul>
+                required = 1
+            }
+            1 = TMENU
+            1 {
+                target < lib.parseTarget
+                target =
+                target.override = {$PAGE_TARGET}
+                NO {
+                    stdWrap.htmlSpecialChars = 1
+                    wrapItemAndSub = <li>|</li>
+                    ATagTitle.field = description // title
+                }
+            }
+        }
+        # "Menu of subpages to these pages"
+        1 < .default
+        1 {
+            special = directory
+            stdWrap {
+                outerWrap = <ul class="csc-menu csc-menu-1">|</ul>
+            }
+        }
+        # "Sitemap - liststyle"
+        2 = HMENU
+        2 {
+            stdWrap < tt_content.menu.20.default.stdWrap
+            stdWrap {
+                outerWrap = <div class="csc-sitemap">|</div>
+            }
+            1 = TMENU
+            1 {
+                target < lib.parseTarget
+                target =
+                target.override = {$PAGE_TARGET}
+                expAll = 1
+                wrap = <ul>|</ul>
+                NO {
+                    stdWrap.htmlSpecialChars = 1
+                    wrapItemAndSub = <li>|</li>
+                    ATagTitle.field = description // title
+                }
+            }
+            2 < .1
+            3 < .1
+            4 < .1
+            5 < .1
+            6 < .1
+            7 < .1
+        }
+        # "Section index (pagecontent w/Index checked - liststyle)"
+        3 < .default
+        3 {
+            special {
+                value {
+                    override {
+                        data = page:uid
+                        if {
+                            isFalse.field = pages
+                        }
+                    }
+                }
+            }
+            stdWrap {
+                outerWrap = <ul class="csc-menu csc-menu-3">|</ul>
+            }
+            1 = TMENU
+            1 {
+                sectionIndex = 1
+                sectionIndex.type = header
+                NO.wrapItemAndSub = <li class="csc-section">|</li>
+            }
+        }
+        # "Menu of subpages to these pages (with abstract)"
+        4 < .1
+        4 {
+            stdWrap {
+                prepend.20.renderObj.wrap = <dt class="csc-nav-bypass">|</dt><dd>&nbsp;</dd>
+                outerWrap = <dl class="csc-menu csc-menu-4">|</dl>
+            }
+            1.NO {
+                wrapItemAndSub >
+                linkWrap = <dt>|</dt>
+                after {
+                    cObject = TEXT
+                    cObject {
+                        data = field : abstract // field : description // field : subtitle
+                        htmlSpecialChars = 1
+                        required = 1
+                    }
+                    ifBlank = &nbsp;
+                    wrap = <dd>|</dd>
+                }
+                ATagTitle.field = description // title
+            }
+        }
+        # "Recently updated pages"
+        5 < .default
+        5 {
+            stdWrap {
+                outerWrap = <ul class="csc-menu csc-menu-5">|</ul>
+            }
+            special = updated
+            special {
+                maxAge = 3600*24*7
+                excludeNoSearchPages = 1
+            }
+        }
+        # "Related pages (based on keywords)"
+        6 < .default
+        6 {
+            stdWrap {
+                outerWrap = <ul class="csc-menu csc-menu-6">|</ul>
+            }
+            special = keywords
+            special {
+                excludeNoSearchPages = 1
+            }
+        }
+        # "Menu of subpages to these pages + sections - liststyle"
+        7 < .1
+        7 {
+            stdWrap {
+                outerWrap = <ul class="csc-menu csc-menu-7">|</ul>
+            }
+            1.expAll = 1
+            2 < .1
+            2 {
+                sectionIndex = 1
+                sectionIndex.type = header
+                wrap = <ul>|</ul>
+                NO.wrapItemAndSub = <li class="csc-section">|</li>
+            }
+        }
+        # "Sitemaps of selected pages - liststyle"
+        8 < .2
+        8 {
+            special = directory
+            special.value.field = pages
+        }
+        # Menu of categorized pages
+        categorized_pages < .default
+        categorized_pages {
+            special = categories
+            special.value.field = selected_categories
+            special.relation.field = category_field
+            special.sorting = title
+            special.order = asc
+            stdWrap {
+                outerWrap = <ul class="csc-menu csc-menu-categorized-pages">|</ul>
+            }
+        }
+        # Menu of categorized content elements
+        categorized_content = RECORDS
+        categorized_content {
+            categories.field = selected_categories
+            categories.relation.field = category_field
+            tables = tt_content
+            conf.tt_content = TEXT
+            conf.tt_content {
+                field = header
+                typolink.parameter = {field:pid}#{field:uid}
+                typolink.parameter.insertData = 1
+                wrap = <li>|</li>
+            }
+            wrap = <ul>|</ul>
+        }
+    }
+    20.stdWrap {
+        wrap {
+            cObject = COA
+            cObject {
+                10 = TEXT
+                10 {
+                    field = accessibility_title
+                    htmlSpecialChars = 1
+                    dataWrap = <map id="map{field:uid}" title="|">
+                    dataWrap {
+                        override = <map name="map{field:uid}" title="|">
+                        override {
+                            if {
+                                isFalse.data = TSFE:xhtmlDoctype
+                            }
+                        }
+                    }
+                }
+                20 = TEXT
+                20 {
+                    value = |</map>
+                }
+            }
+            if {
+                isTrue {
+                    field = accessibility_title
+                }
+            }
+        }
+        editIcons = tt_content: menu_type, pages
+        editIcons.iconTitle.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.menuSitemap
+        prefixComment = 2 | Menu/Sitemap element:
+    }
+}
diff --git a/typo3/sysext/compatibility7/Configuration/TypoScript/ContentElement/FluidStyledContent/setup.txt b/typo3/sysext/compatibility7/Configuration/TypoScript/ContentElement/FluidStyledContent/setup.txt
new file mode 100644 (file)
index 0000000..d931045
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# Default configuration for content elements which are using FLUIDTEMPLATE directly
+#
+lib.fluidContent {
+    templateRootPaths {
+        1 = EXT:compatibility7/Resources/Private/FluidStyledContent/Templates/
+    }
+    partialRootPaths {
+        1 = EXT:compatibility7/Resources/Private/FluidStyledContent/Partials/
+    }
+    layoutRootPaths {
+        1 = EXT:compatibility7/Resources/Private/FluidStyledContent/Layouts/
+    }
+}
+
+
+#
+# Special Menus:
+#
+tt_content.menu =< lib.fluidContent
+tt_content.menu {
+    templateName = Menu
+    dataProcessing {
+        10 = TYPO3\CMS\Frontend\DataProcessing\SplitProcessor
+        10 {
+            if.isTrue.field = pages
+            fieldName = pages
+            delimiter = ,
+            removeEmptyEntries = 1
+            filterIntegers = 1
+            filterUnique = 1
+            as = pageUids
+        }
+        20 < .10
+        20 {
+            if.isTrue.field = selected_categories
+            fieldName = selected_categories
+            as = categoryUids
+        }
+    }
+    stdWrap {
+        editIcons = tt_content: header [header_layout], menu_type, pages
+        editIcons {
+            iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.menu
+        }
+    }
+}
diff --git a/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Directory.html b/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Directory.html
new file mode 100644 (file)
index 0000000..51e3161
--- /dev/null
@@ -0,0 +1,23 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:ce="http://typo3.org/ns/TYPO3/CMS/Compatibility7/ViewHelpers" data-namespace-typo3-fluid="true">
+<ce:menu.directory pageUids="{pageUids}" as="pages" levelAs="level">
+    <f:if condition="{pages}">
+        <ul>
+            <f:for each="{pages}" as="page">
+                <li>
+                    <f:link.page pageUid="{page.uid}" target="{page.target}">
+                        <f:if condition="{page.nav_title}">
+                            <f:then>
+                                {page.nav_title}
+                            </f:then>
+                            <f:else>
+                                {page.title}
+                            </f:else>
+                        </f:if>
+                    </f:link.page>
+                    <f:render partial="Menu/Directory" arguments="{pageUids: {0: page.uid}}" />
+                </li>
+            </f:for>
+        </ul>
+    </f:if>
+</ce:menu.directory>
+</html>
diff --git a/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-0.html b/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-0.html
new file mode 100644 (file)
index 0000000..3e8dc51
--- /dev/null
@@ -0,0 +1,22 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:ce="http://typo3.org/ns/TYPO3/CMS/Compatibility7/ViewHelpers" data-namespace-typo3-fluid="true">
+<ce:menu.list pageUids="{pageUids}" as="pages">
+    <f:if condition="{pages}">
+        <ul class="ce-menu ce-menu-0">
+            <f:for each="{pages}" as="page">
+                <li>
+                    <f:link.page pageUid="{page.uid}" target="{page.target}">
+                        <f:if condition="{page.nav_title}">
+                            <f:then>
+                                {page.nav_title}
+                            </f:then>
+                            <f:else>
+                                {page.title}
+                            </f:else>
+                        </f:if>
+                    </f:link.page>
+                </li>
+            </f:for>
+        </ul>
+    </f:if>
+</ce:menu.list>
+</html>
diff --git a/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-1.html b/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-1.html
new file mode 100644 (file)
index 0000000..f883e65
--- /dev/null
@@ -0,0 +1,22 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:ce="http://typo3.org/ns/TYPO3/CMS/Compatibility7/ViewHelpers" data-namespace-typo3-fluid="true">
+<ce:menu.directory pageUids="{pageUids}" as="pages">
+    <f:if condition="{pages}">
+        <ul class="ce-menu ce-menu-1">
+            <f:for each="{pages}" as="page">
+                <li>
+                    <f:link.page pageUid="{page.uid}" target="{page.target}">
+                        <f:if condition="{page.nav_title}">
+                            <f:then>
+                                {page.nav_title}
+                            </f:then>
+                            <f:else>
+                                {page.title}
+                            </f:else>
+                        </f:if>
+                    </f:link.page>
+                </li>
+            </f:for>
+        </ul>
+    </f:if>
+</ce:menu.directory>
+</html>
diff --git a/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-2.html b/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-2.html
new file mode 100644 (file)
index 0000000..d3e8b36
--- /dev/null
@@ -0,0 +1,23 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:ce="http://typo3.org/ns/TYPO3/CMS/Compatibility7/ViewHelpers" data-namespace-typo3-fluid="true">
+<ce:menu.list entryLevel="0" as="pages" levelAs="level">
+    <f:if condition="{pages}">
+        <ul class="ce-menu ce-menu-2">
+            <f:for each="{pages}" as="page">
+                <li>
+                    <f:link.page pageUid="{page.uid}" target="{page.target}">
+                        <f:if condition="{page.nav_title}">
+                            <f:then>
+                                {page.nav_title}
+                            </f:then>
+                            <f:else>
+                                {page.title}
+                            </f:else>
+                        </f:if>
+                    </f:link.page>
+                    <f:render partial="Menu/Directory" arguments="{pageUids: {0: page.uid}}" />
+                </li>
+            </f:for>
+        </ul>
+    </f:if>
+</ce:menu.list>
+</html>
diff --git a/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-3.html b/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-3.html
new file mode 100644 (file)
index 0000000..b66300e
--- /dev/null
@@ -0,0 +1,21 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:ce="http://typo3.org/ns/TYPO3/CMS/Compatibility7/ViewHelpers" data-namespace-typo3-fluid="true">
+<ce:menu.list pageUids="{pageUids}" as="pages">
+    <f:if condition="{pages}">
+        <ul class="ce-menu ce-menu-3">
+            <f:for each="{pages}" as="page">
+                <ce:menu.section pageUid="{page.uid}" as="contentElements" type="header">
+                    <f:if condition="{contentElements}">
+                        <f:for each="{contentElements}" as="contentElement">
+                            <li>
+                                <f:link.page pageUid="{page.uid}" section="c{contentElement.uid}" target="{page.target}">
+                                    {contentElement.header}
+                                </f:link.page>
+                            </li>
+                        </f:for>
+                    </f:if>
+                </ce:menu.section>
+            </f:for>
+        </ul>
+    </f:if>
+</ce:menu.list>
+</html>
diff --git a/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-4.html b/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-4.html
new file mode 100644 (file)
index 0000000..59bbfab
--- /dev/null
@@ -0,0 +1,46 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:ce="http://typo3.org/ns/TYPO3/CMS/Compatibility7/ViewHelpers" data-namespace-typo3-fluid="true">
+<ce:menu.directory pageUids="{pageUids}" as="pages">
+    <f:if condition="{pages}">
+        <dl class="ce-menu ce-menu-4">
+            <f:for each="{pages}" as="page">
+                <dt>
+                    <f:link.page pageUid="{page.uid}" target="{page.target}">
+                        <f:if condition="{page.nav_title}">
+                            <f:then>
+                                {page.nav_title}
+                            </f:then>
+                            <f:else>
+                                {page.title}
+                            </f:else>
+                        </f:if>
+                    </f:link.page>
+                </dt>
+                <dd>
+                    <f:if condition="{page.abstract}">
+                        <f:then>
+                            {page.abstract}
+                        </f:then>
+                        <f:else>
+                            <f:if condition="{page.description}">
+                                <f:then>
+                                    {page.description}
+                                </f:then>
+                                <f:else>
+                                    <f:if condition="{page.subtitle}">
+                                        <f:then>
+                                            {page.subtitle}
+                                        </f:then>
+                                        <f:else>
+                                            &nbsp;
+                                        </f:else>
+                                    </f:if>
+                                </f:else>
+                            </f:if>
+                        </f:else>
+                    </f:if>
+                </dd>
+            </f:for>
+        </dl>
+    </f:if>
+</ce:menu.directory>
+</html>
diff --git a/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-5.html b/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-5.html
new file mode 100644 (file)
index 0000000..a29ba7a
--- /dev/null
@@ -0,0 +1,22 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:ce="http://typo3.org/ns/TYPO3/CMS/Compatibility7/ViewHelpers" data-namespace-typo3-fluid="true">
+<ce:menu.updated pageUids="{pageUids}" as="pages" maximumAge="3600*24*7">
+    <f:if condition="{pages}">
+        <ul class="ce-menu ce-menu-5">
+            <f:for each="{pages}" as="page">
+                <li>
+                    <f:link.page pageUid="{page.uid}" target="{page.target}">
+                        <f:if condition="{page.nav_title}">
+                            <f:then>
+                                {page.nav_title}
+                            </f:then>
+                            <f:else>
+                                {page.title}
+                            </f:else>
+                        </f:if>
+                    </f:link.page>
+                </li>
+            </f:for>
+        </ul>
+    </f:if>
+</ce:menu.updated>
+</html>
diff --git a/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-6.html b/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-6.html
new file mode 100644 (file)
index 0000000..75d6539
--- /dev/null
@@ -0,0 +1,22 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:ce="http://typo3.org/ns/TYPO3/CMS/Compatibility7/ViewHelpers" data-namespace-typo3-fluid="true">
+<ce:menu.keywords pageUids="{pageUids}" as="pages">
+    <f:if condition="{pages}">
+        <ul class="ce-menu ce-menu-6">
+            <f:for each="{pages}" as="page">
+                <li>
+                    <f:link.page pageUid="{page.uid}" target="{page.target}">
+                        <f:if condition="{page.nav_title}">
+                            <f:then>
+                                {page.nav_title}
+                            </f:then>
+                            <f:else>
+                                {page.title}
+                            </f:else>
+                        </f:if>
+                    </f:link.page>
+                </li>
+            </f:for>
+        </ul>
+    </f:if>
+</ce:menu.keywords>
+</html>
diff --git a/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-7.html b/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-7.html
new file mode 100644 (file)
index 0000000..5889158
--- /dev/null
@@ -0,0 +1,35 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:ce="http://typo3.org/ns/TYPO3/CMS/Compatibility7/ViewHelpers" data-namespace-typo3-fluid="true">
+<ce:menu.directory pageUids="{pageUids}" as="pages">
+    <f:if condition="{pages}">
+        <ul class="ce-menu ce-menu-7">
+            <f:for each="{pages}" as="page">
+                <li>
+                    <f:link.page pageUid="{page.uid}" target="{page.target}">
+                        <f:if condition="{page.nav_title}">
+                            <f:then>
+                                {page.nav_title}
+                            </f:then>
+                            <f:else>
+                                {page.title}
+                            </f:else>
+                        </f:if>
+                    </f:link.page>
+                </li>
+                <ce:menu.section pageUid="{page.uid}" as="contentElements" type="header">
+                    <f:if condition="{contentElements}">
+                        <ul>
+                            <f:for each="{contentElements}" as="contentElement">
+                                <li>
+                                    <f:link.page pageUid="{page.uid}" section="c{contentElement.uid}" target="{page.target}">
+                                        {contentElement.header}
+                                    </f:link.page>
+                                </li>
+                            </f:for>
+                        </ul>
+                    </f:if>
+                </ce:menu.section>
+            </f:for>
+        </ul>
+    </f:if>
+</ce:menu.directory>
+</html>
diff --git a/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-8.html b/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-8.html
new file mode 100644 (file)
index 0000000..f0c7866
--- /dev/null
@@ -0,0 +1,23 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:ce="http://typo3.org/ns/TYPO3/CMS/Compatibility7/ViewHelpers" data-namespace-typo3-fluid="true">
+<ce:menu.directory pageUids="{pageUids}" as="pages" levelAs="level">
+    <f:if condition="{pages}">
+        <ul class="ce-menu ce-menu-8">
+            <f:for each="{pages}" as="page">
+                <li>
+                    <f:link.page pageUid="{page.uid}" target="{page.target}">
+                        <f:if condition="{page.nav_title}">
+                            <f:then>
+                                {page.nav_title}
+                            </f:then>
+                            <f:else>
+                                {page.title}
+                            </f:else>
+                        </f:if>
+                    </f:link.page>
+                    <f:render partial="Menu/Directory" arguments="{pageUids: {0: page.uid}}" />
+                </li>
+            </f:for>
+        </ul>
+    </f:if>
+</ce:menu.directory>
+</html>
diff --git a/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-categorized_content.html b/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-categorized_content.html
new file mode 100644 (file)
index 0000000..7a46008
--- /dev/null
@@ -0,0 +1,17 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:ce="http://typo3.org/ns/TYPO3/CMS/Compatibility7/ViewHelpers" data-namespace-typo3-fluid="true">
+<ce:menu.categories categoryUids="{categoryUids}" as="contentElements" relationField="{data.category_field}" table="tt_content">
+    <f:if condition="{contentElements}">
+        <ul class="ce-menu ce-menu-categorized-content">
+            <f:for each="{contentElements}" as="contentElement">
+                <f:if condition="{contentElement.header}">
+                    <li>
+                        <f:link.page pageUid="{contentElement.pid}" section="c{contentElement.uid}" target="{page.target}">
+                            {contentElement.header}
+                        </f:link.page>
+                    </li>
+                </f:if>
+            </f:for>
+        </ul>
+    </f:if>
+</ce:menu.categories>
+</html>
diff --git a/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-categorized_pages.html b/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Partials/Menu/Type-categorized_pages.html
new file mode 100644 (file)
index 0000000..eb6406a
--- /dev/null
@@ -0,0 +1,22 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:ce="http://typo3.org/ns/TYPO3/CMS/Compatibility7/ViewHelpers" data-namespace-typo3-fluid="true">
+<ce:menu.categories categoryUids="{categoryUids}" as="pages" relationField="{data.category_field}" table="pages">
+    <f:if condition="{pages}">
+        <ul class="ce-menu ce-menu-9">
+            <f:for each="{pages}" as="page">
+                <li>
+                    <f:link.page pageUid="{page.uid}" target="{page.target}">
+                        <f:if condition="{page.nav_title}">
+                            <f:then>
+                                {page.nav_title}
+                            </f:then>
+                            <f:else>
+                                {page.title}
+                            </f:else>
+                        </f:if>
+                    </f:link.page>
+                </li>
+            </f:for>
+        </ul>
+    </f:if>
+</ce:menu.categories>
+</html>
diff --git a/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Templates/Menu.html b/typo3/sysext/compatibility7/Resources/Private/FluidStyledContent/Templates/Menu.html
new file mode 100644 (file)
index 0000000..42fdfc6
--- /dev/null
@@ -0,0 +1,8 @@
+<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
+<f:layout name="Default" />
+<f:section name="Main">
+
+    <f:render partial="Menu/Type-{data.menu_type}" arguments="{_all}" />
+
+</f:section>
+</html>
index 0f123a4..399e9cd 100644 (file)
@@ -2,6 +2,7 @@
 
 defined('TYPO3_MODE') or die();
 
+// Indexed search
 if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('indexed_search')) {
     // register pibase plugin
     \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript(
@@ -21,6 +22,68 @@ if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('indexed_search
     );
 }
 
+// Content element
+if (TYPO3_MODE === 'BE') {
+    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig(
+        '<INCLUDE_TYPOSCRIPT: source="FILE:EXT:compatibility7/Configuration/PageTS/Mod/Wizards/NewContentElementMenu.txt">'
+    );
+}
+if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('css_styled_content')) {
+    $GLOBALS['TYPO3_CONF_VARS']['FE']['contentRenderingTemplates'][] = 'compatibility7/Configuration/TypoScript/ContentElement/CssStyledContent/';
+}
+if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('fluid_styled_content')) {
+    $GLOBALS['TYPO3_CONF_VARS']['FE']['contentRenderingTemplates'][] = 'compatibility7/Configuration/TypoScript/ContentElement/FluidStyledContent/';
+    // Set alias for deprecated fluid styled content menu viewhelper
+    if (!class_exists('TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\AbstractMenuViewHelper')) {
+        class_alias(
+            \TYPO3\CMS\Compatibility7\ViewHelpers\Menu\AbstractMenuViewHelper::class,
+            'TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\AbstractMenuViewHelper'
+        );
+    }
+    if (!class_exists('TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\CategoriesViewHelper')) {
+        class_alias(
+            \TYPO3\CMS\Compatibility7\ViewHelpers\Menu\CategoriesViewHelper::class,
+            'TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\CategoriesViewHelper'
+        );
+    }
+    if (!class_exists('TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\DirectoryViewHelper')) {
+        class_alias(
+            \TYPO3\CMS\Compatibility7\ViewHelpers\Menu\DirectoryViewHelper::class,
+            'TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\DirectoryViewHelper'
+        );
+    }
+    if (!class_exists('TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\KeywordsViewHelper')) {
+        class_alias(
+            \TYPO3\CMS\Compatibility7\ViewHelpers\Menu\KeywordsViewHelper::class,
+            'TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\KeywordsViewHelper'
+        );
+    }
+    if (!class_exists('TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\ListViewHelper')) {
+        class_alias(
+            \TYPO3\CMS\Compatibility7\ViewHelpers\Menu\ListViewHelper::class,
+            'TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\ListViewHelper'
+        );
+    }
+    if (!class_exists('TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\MenuViewHelperTrait')) {
+        class_alias(
+            \TYPO3\CMS\Compatibility7\ViewHelpers\Menu\MenuViewHelperTrait::class,
+            'TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\MenuViewHelperTrait'
+        );
+    }
+    if (!class_exists('TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\SectionViewHelper')) {
+        class_alias(
+            \TYPO3\CMS\Compatibility7\ViewHelpers\Menu\SectionViewHelper::class,
+            'TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\SectionViewHelper'
+        );
+    }
+    if (!class_exists('TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\UpdatedViewHelper')) {
+        class_alias(
+            \TYPO3\CMS\Compatibility7\ViewHelpers\Menu\UpdatedViewHelper::class,
+            'TYPO3\CMS\FluidStyledContent\ViewHelpers\Menu\UpdatedViewHelper'
+        );
+    }
+}
+
 // Enable pages.url_scheme functionality again
 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typolinkProcessing']['typolinkModifyParameterForPageLinks']['compatibility7_urlscheme']
     = \TYPO3\CMS\Compatibility7\Hooks\EnforceUrlSchemeHook::class;
index 7f092c2..a7c9f82 100644 (file)
@@ -1,4 +1,11 @@
 #
+# Table structure for table 'tt_content'
+#
+CREATE TABLE tt_content (
+       menu_type varchar(30) DEFAULT '0' NOT NULL
+);
+
+#
 # Additional fields for table 'pages'
 #
 CREATE TABLE pages (
index eb560f3..61b9f79 100644 (file)
@@ -298,14 +298,11 @@ You can also display images in multiple columns and even enable an option that o
 tt_content:imageheight,
 tt_content:imageorient,
 tt_content:imageborder,
-tt_content:image_noRows,
 tt_content:image_link,
 tt_content:image_zoom,
 tt_content:imagecols,
 tt_content:imagecaption,
-tt_content:image_effects,
 tt_content:image_frames,
-tt_content:image_compression,
 Using images ("Getting Started") | https://docs.typo3.org/typo3cms/GettingStartedTutorial/TheFileModuleOrImageArchives/ManagingFilesInTypo3/
 Using images (Animation) | FILE:EXT:welcome/modsub/ani_10.gif</source>
                                <note from="developer">A part of this string is an internal text, which must not be changed. Just copy this part into the translation field and do not change it. For more information have a look at the Tutorial.</note>
@@ -352,18 +349,6 @@ Apart from the visual difference there is a technical aspect as well. If you cho
 tt_content:image</source>
                                <note from="developer">This string contains an internal text, which must not be changed. Just copy the original text into the translation field. For more information have a look at the Tutorial.</note>
                        </trans-unit>
-                       <trans-unit id="image_noRows.description">
-                               <source>Disables tablerows in the image block.</source>
-                       </trans-unit>
-                       <trans-unit id="image_noRows.details" xml:space="preserve">
-                               <source>To illustrate, imagine you have 2 or more columns &lt;em&gt;and&lt;/em&gt; rows of images. If one image in the upper row is taller than the second this will generate empty space beneath the second image. This is due to the normal flow in which the images are placed in table cells.
-If you enable the No Rows option, the table will place the images in a column into a single table cell which make the distance between them vertically identical throughout. This may provide a better look if the alternative is unacceptable.</source>
-                       </trans-unit>
-                       <trans-unit id="_image_noRows.seeAlso" xml:space="preserve">
-                               <source>tt_content:imagecols,
-tt_content:image</source>
-                               <note from="developer">This string contains an internal text, which must not be changed. Just copy the original text into the translation field. For more information have a look at the Tutorial.</note>
-                       </trans-unit>
                        <trans-unit id="image_link.description">
                                <source>Enter a link for the image. For multiple images, separate the links with commas.</source>
                        </trans-unit>
@@ -389,39 +374,18 @@ tt_content:image</source>
 tt_content:image</source>
                                <note from="developer">This string contains an internal text, which must not be changed. Just copy the original text into the translation field. For more information have a look at the Tutorial.</note>
                        </trans-unit>
-                       <trans-unit id="image_effects.description">
-                               <source>Select special image processing effects, such as rotation and color adjustments.</source>
-                       </trans-unit>
-                       <trans-unit id="_image_effects.seeAlso" xml:space="preserve">
-                               <source>tt_content:image_compression,
-tt_content:image_frames,
-tt_content:image</source>
-                               <note from="developer">This string contains an internal text, which must not be changed. Just copy the original text into the translation field. For more information have a look at the Tutorial.</note>
-                       </trans-unit>
                        <trans-unit id="image_frames.description">
                                <source>Select special image framing options.</source>
                        </trans-unit>
                        <trans-unit id="_image_frames.seeAlso" xml:space="preserve">
-                               <source>tt_content:image_compression,
-tt_content:image_effects,
-tt_content:image</source>
-                               <note from="developer">This string contains an internal text, which must not be changed. Just copy the original text into the translation field. For more information have a look at the Tutorial.</note>
-                       </trans-unit>
-                       <trans-unit id="image_compression.description">
-                               <source>Select image quality and image type options.</source>
-                       </trans-unit>
-                       <trans-unit id="_image_compression.seeAlso" xml:space="preserve">
-                               <source>tt_content:image_frames,
-tt_content:image_effects,
-tt_content:image</source>
+                               <source>tt_content:image</source>
                                <note from="developer">This string contains an internal text, which must not be changed. Just copy the original text into the translation field. For more information have a look at the Tutorial.</note>
                        </trans-unit>
                        <trans-unit id="imagecols.description">
                                <source>Set the number of columns when the images are displayed in the Frontend of the website.</source>
                        </trans-unit>
                        <trans-unit id="_imagecols.seeAlso" xml:space="preserve">
-                               <source>tt_content:image_noRows,
-tt_content:image</source>
+                               <source>tt_content:image</source>
                                <note from="developer">This string contains an internal text, which must not be changed. Just copy the original text into the translation field. For more information have a look at the Tutorial.</note>
                        </trans-unit>
                        <trans-unit id="imagecaption.description">
@@ -433,19 +397,6 @@ In this case, each line in this field will be the image caption of the correspon
 
 The caption text field is also used by the Content Element type "File Links" where each line represents a description of a file in the list.</source>
                        </trans-unit>
-                       <trans-unit id="_imagecaption.seeAlso" xml:space="preserve">
-                               <source>tt_content:imagecaption_position,
-tt_content:image</source>
-                               <note from="developer">This string contains an internal text, which must not be changed. Just copy the original text into the translation field. For more information have a look at the Tutorial.</note>
-                       </trans-unit>
-                       <trans-unit id="imagecaption_position.description">
-                               <source>Aligns the image captions to the left, center, or right.</source>
-                       </trans-unit>
-                       <trans-unit id="_imagecaption_position.seeAlso" xml:space="preserve">
-                               <source>tt_content:imagecaption,
-tt_content:image</source>
-                               <note from="developer">This string contains an internal text, which must not be changed. Just copy the original text into the translation field. For more information have a look at the Tutorial.</note>
-                       </trans-unit>
                        <trans-unit id="cols.description">
                                <source>Select a fixed number of table columns</source>
                        </trans-unit>
@@ -533,24 +484,6 @@ tt_content:sectionIndex</source>
                                <source>EXT:context_help/Resources/Public/Images/cshimages/ttcontent_7.png</source>
                                <note from="developer">This string contains an internal text, which must not be changed. Just copy the original text into the translation field. For more information have a look at the Tutorial.</note>
                        </trans-unit>
-                       <trans-unit id="table_bgColor.description">
-                               <source>Select the table background color.</source>
-                       </trans-unit>
-                       <trans-unit id="table_border.description">
-                               <source>Select the table border thickness.</source>
-                       </trans-unit>
-                       <trans-unit id="table_cellspacing.description">
-                               <source>Select the table cell spacing.</source>
-                       </trans-unit>
-                       <trans-unit id="table_cellspacing.details">
-                               <source>Cell spacing is the distance between table cells in rows and columns. The distance is equally applied in all directions, top, bottom, left, and right.</source>
-                       </trans-unit>
-                       <trans-unit id="table_cellpadding.description">
-                               <source>Select the table cellpadding.</source>
-                       </trans-unit>
-                       <trans-unit id="table_cellpadding.details">
-                               <source>Cell padding is the 'internal' margin of a table cell. The distance is equally applied in all directions, top, bottom, left, and right.</source>
-                       </trans-unit>
                        <trans-unit id="media.description">
                                <source>Files can be added to the list here.</source>
                        </trans-unit>
@@ -567,24 +500,14 @@ tt_content:sectionIndex</source>
                                <source>Top Margin (in pixels) inserts whitespace &lt;em&gt;before&lt;/em&gt; this Content Element.</source>
                        </trans-unit>
                        <trans-unit id="_spaceBefore.seeAlso" xml:space="preserve">
-                               <source>tt_content:spaceAfter,
-tt_content:section_frame</source>
+                               <source>tt_content:spaceAfter</source>
                                <note from="developer">This string contains an internal text, which must not be changed. Just copy the original text into the translation field. For more information have a look at the Tutorial.</note>
                        </trans-unit>
                        <trans-unit id="spaceAfter.description">
                                <source>Bottom Margin (in pixels) inserts whitespace &lt;em&gt;after&lt;/em&gt; this Content Element.</source>
                        </trans-unit>
                        <trans-unit id="_spaceAfter.seeAlso" xml:space="preserve">
-                               <source>tt_content:spaceBefore,
-tt_content:section_frame</source>
-                               <note from="developer">This string contains an internal text, which must not be changed. Just copy the original text into the translation field. For more information have a look at the Tutorial.</note>
-                       </trans-unit>
-                       <trans-unit id="section_frame.description">
-                               <source>Select indention or framing options for the Content Element.</source>
-                       </trans-unit>
-                       <trans-unit id="_section_frame.seeAlso" xml:space="preserve">
-                               <source>tt_content:spaceAfter,
-tt_content:spaceBefore</source>
+                               <source>tt_content:spaceBefore</source>
                                <note from="developer">This string contains an internal text, which must not be changed. Just copy the original text into the translation field. For more information have a look at the Tutorial.</note>
                        </trans-unit>
                        <trans-unit id="sectionIndex.description">
index 31a9a86..22cdd60 100644 (file)
@@ -139,13 +139,16 @@ class CategoryRegistry implements SingletonInterface
      */
     public function getCategoryFieldsForTable(array &$configuration)
     {
-        $table = '';
-        $menuType = isset($configuration['row']['menu_type'][0]) ? $configuration['row']['menu_type'][0] : '';
-        // Define the table being looked up from the type of menu
-        if ($menuType === 'categorized_pages') {
-            $table = 'pages';
-        } elseif ($menuType === 'categorized_content') {
-            $table = 'tt_content';
+        $table = $configuration['config']['itemsProcConfig']['table'] ?? '';
+        // Lookup table for legacy menu content element
+        if (empty($table)) {
+            $menuType = $configuration['row']['menu_type'][0] ?? '';
+            // Define the table being looked up from the type of menu
+            if ($menuType === 'categorized_pages') {
+                $table = 'pages';
+            } elseif ($menuType === 'categorized_content') {
+                $table = 'tt_content';
+            }
         }
         // Return early if no table is defined
         if (empty($table)) {
index 1ce2ed2..f44dc65 100644 (file)
@@ -1677,6 +1677,54 @@ class IconRegistry implements SingletonInterface
                 'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-special-menu.svg'
             ]
         ],
+        'content-menu-abstract' => [
+            'provider' => SvgIconProvider::class,
+            'options' => [
+                'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-abstract.svg'
+            ]
+        ],
+        'content-menu-categorized' => [
+            'provider' => SvgIconProvider::class,
+            'options' => [
+                'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-categorized.svg'
+            ]
+        ],
+        'content-menu-pages' => [
+            'provider' => SvgIconProvider::class,
+            'options' => [
+                'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-pages.svg'
+            ]
+        ],
+        'content-menu-section' => [
+            'provider' => SvgIconProvider::class,
+            'options' => [
+                'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-section.svg'
+            ]
+        ],
+        'content-menu-sitemap' => [
+            'provider' => SvgIconProvider::class,
+            'options' => [
+                'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-sitemap.svg'
+            ]
+        ],
+        'content-menu-sitemap-pages' => [
+            'provider' => SvgIconProvider::class,
+            'options' => [
+                'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-sitemap-pages.svg'
+            ]
+        ],
+        'content-menu-recently-updated' => [
+            'provider' => SvgIconProvider::class,
+            'options' => [
+                'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-recently-updated.svg'
+            ]
+        ],
+        'content-menu-related' => [
+            'provider' => SvgIconProvider::class,
+            'options' => [
+                'source' => 'EXT:core/Resources/Public/Icons/T3Icons/content/content-menu-related.svg'
+            ]
+        ],
         'content-special-shortcut' => [
             'provider' => SvgIconProvider::class,
             'options' => [
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-CSSStyledContentTableContentElementAdjustments.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-CSSStyledContentTableContentElementAdjustments.rst
new file mode 100644 (file)
index 0000000..570b99d
--- /dev/null
@@ -0,0 +1,118 @@
+.. include:: ../../Includes.txt
+
+=======================================================================
+Breaking: #79622 - CSS Styled Content table content element adjustments
+=======================================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+In order to streamline the options and enhance compatibility across CSS Styled
+Content and Fluid Styled Content the table content element has been partly
+refactored. All previous flexform configuration has been migrated to database
+fields, shared across both content rendering definitions.
+
+Element options removed:
+- Table Summary
+- No CSS styles for this table
+
+Element options changed:
+- Additional CSS Class
+
+Rendering changes:
+- Additional CSS classes for tr, th, td have been dropped
+
+TypoScript options removed:
+- color
+- tableParams_0
+- tableParams_1
+- tableParams_2
+- tableParams_3
+- border
+- cellpadding
+- cellspacing
+
+
+Table Summary
+-------------
+The <table> summary attribute is not supported in HTML5 and was dropped.
+No migration path available.
+
+
+No CSS styles for table
+-----------------------
+The default CSS styling for CSS Styled Content is now optional. If no styling
+is required, simply do not include the optional static template or override
+the styling with CSS.
+
+
+Additional CSS Class
+--------------------
+The process of adding additional CSS classes for tables has been changed.
+To ease the work of the editor the CSS class field is no longer a simple input
+field. Adding CSS classes are now handled by predefined CSS classes that can
+be adjusted by the integrator. Classes will be prefixed with "contenttable-".
+
+.. code-block:: typoscript
+
+   TCEFORM.tt_content.table_class {
+      removeItems = striped,bordered
+      addItems {
+         hover = LLL:my_extension/Resources/Private/language.xlf:hover
+      }
+   }
+
+.. code-block:: php
+
+   $GLOBALS['TCA']['tt_content']['columns']['table_class']['config']['items'][] = [
+      0 = LLL:my_extension/Resources/Private/language.xlf:hover
+      1 = hover
+   ];
+
+
+Rendering changes and removed TypoScript options
+------------------------------------------------
+Style specific options have been removed and are no longer available. This
+includes the following options for table rendering: `color`, `tableParams_0`,
+`tableParams_1`, `tableParams_2`, `tableParams_3`, `border`, `cellpadding` and
+`cellspacing`. Also additional CSS classes for `tr`, `th` and `td` are no
+longer available.
+
+
+Affected Installations
+======================
+
+Installations that use the CSS Styled Content element table.
+
+
+Migration
+=========
+
+Run the upgrade wizard in the install tool to migrate all fields previously
+stored in flexforms to dedicated fields in the database.
+
+
+Table summary
+-------------
+The <table> summary attribute is not supported in HTML5 and was dropped.
+No migration path available.
+
+
+No CSS styles for this table
+----------------------------
+Remove the optional "CSS Styled Content Styling" static template.
+
+
+Additional CSS classes
+----------------------
+Additional CSS Classes must be registered as items for the field `table_class`.
+
+
+Rendering changes and removed TypoScript Options
+------------------------------------------------
+Use CSS styling to restore the look of your tables.
+
+
+.. index:: FlexForm, Frontend, TCA, TypoScript
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-DedicatedContentElementsForMenus.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-DedicatedContentElementsForMenus.rst
new file mode 100644 (file)
index 0000000..dffc68e
--- /dev/null
@@ -0,0 +1,47 @@
+.. include:: ../../Includes.txt
+
+=======================================================
+Breaking: #79622 - Dedicated content elements for menus
+=======================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+For better maintainability the currently existing content element
+menu has been split into dedicated content elements.
+
+==========================   ==========================   ==========================================================
+Database Key                 Name                         Description
+==========================   ==========================   ==========================================================
+menu_abstract                Abstracts                    Menu of subpages of selected pages including abstracts
+menu_categorized_content     Categorized content          Content elements for selected categories
+menu_categorized_pages       Categorized pages            Pages for selected categories
+menu_pages                   Pages                        Menu of selected pages
+menu_subpages                Subpages                     Menu of subpages of selected pages
+menu_recently_updated        Recently updated pages       Menu of recenlty updated pages
+menu_related_pages           Related pages                Menu of related pages based on keywords
+menu_section                 Section index                Page content marked for section menus
+menu_section_pages           Section index of subpages    Menu of subpages of selected pages including sections
+menu_sitemap                 Sitemap                      Expanded menu of all pages and subpages for selected pages
+menu_sitemap_pages           Sitemaps of selected pages   Expanded menu of all subpages for selected pages
+==========================   ==========================   ==========================================================
+
+
+Affected Installations
+======================
+
+All installations that use the content element "menu".
+
+
+Migration
+=========
+
+Run the migration wizard in the install tool. All shipped menu types from the
+TYPO3 core will be migrated to the new dedicated elements.
+
+The migration is optional, you can also enable the extension `compatibility7`
+that will make the old menu content element available again.
+
+.. index:: Frontend
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-DefaultContentElementChangedForFluidStyledContent.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-DefaultContentElementChangedForFluidStyledContent.rst
new file mode 100644 (file)
index 0000000..18f727c
--- /dev/null
@@ -0,0 +1,44 @@
+.. include:: ../../Includes.txt
+
+===========================================================================
+Breaking: #79622 - Default content element changed for Fluid Styled Content
+===========================================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+The default content element has been streamlined with CSS Styled Content
+and was changed to "Text".
+
+
+Impact
+======
+
+The default content element is now "Text".
+
+
+Affected Installations
+======================
+
+All instances that have Fluid Styled Content installed.
+
+
+Migration
+=========
+
+To restore the configuration you need to set the default content element
+manually to your preferred choice. You can do this by simply overriding
+the configuration again in your `Configuration/TCA/Overrides/tt_content.php` file.
+
+.. code-block:: php
+
+   $GLOBALS['TCA']['tt_content']['columns']['CType']['config']['default'] = 'textmedia';
+
+.. code-block:: php
+
+   $GLOBALS['TCA']['tt_content']['columns']['CType']['config']['default'] = 'header';
+
+
+.. index:: TCA
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-DefaultLayoutsForFluidStyledContentChanged.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-DefaultLayoutsForFluidStyledContentChanged.rst
new file mode 100644 (file)
index 0000000..280e2d2
--- /dev/null
@@ -0,0 +1,45 @@
+.. include:: ../../Includes.txt
+
+===================================================================
+Breaking: #79622 - Default layouts for Fluid Styled Content changed
+===================================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+The content element layouts for Fluid Styled Content have been changed
+to provide a better maintainability and to be more flexible.
+
+Previously available content element layouts `ContentFooter`, `HeaderFooter`
+and `HeaderContentFooter` have been dropped and replaced with a single
+`Default` layout that is more flexible.
+
+
+Impact
+======
+
+The content element layouts `ContentFooter`, `HeaderFooter` and
+`HeaderContentFooter` are no longer available. Referencing these layouts will
+result in an exception.
+
+
+Affected Installations
+======================
+
+All instances that override or implement custom content elements based on
+Fluid Styled Content that use the layouts `ContentFooter`, `HeaderFooter`
+or `HeaderContentFooter`.
+
+
+Migration
+=========
+
+All content elements and overrides need to be migrated to the new default
+layout. Have a look at the feature description on how to use the new layout.
+
+Feature-79622-NewDefaultLayoutForFluidStyledContent.rst
+
+
+.. index:: Fluid, Frontend
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-DroppingThumbnailConfigurationForTt_content.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-DroppingThumbnailConfigurationForTt_content.rst
new file mode 100644 (file)
index 0000000..ec1d81a
--- /dev/null
@@ -0,0 +1,46 @@
+.. include:: ../../Includes.txt
+
+==================================================================
+Breaking: #79622 - Dropping thumbnail configuration for tt_content
+==================================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+We are currently not able to set the thumbnail field for records according
+to the type of the record. Since tt_content uses different fields to store
+media we are removing this default configuration that was set to `images`
+by CSS Styled Content and `assets` by Fluid Styled Content.
+
+
+Impact
+======
+
+Thumbnails in list view are no longer displayed for tt_content records.
+
+
+Affected Installations
+======================
+
+All instances.
+
+
+Migration
+=========
+
+To restore the configuration you need to set the thumbnail field manually to
+your preferred choice.
+You can do this by simply adding the configuration again in your `Configuration/TCA/Overrides/tt_content.php` file.
+
+.. code-block:: php
+
+   $GLOBALS['TCA']['tt_content']['ctrl']['thumbnail'] = 'image';
+
+.. code-block:: php
+
+   $GLOBALS['TCA']['tt_content']['ctrl']['thumbnail'] = 'assets';
+
+
+.. index:: TCA
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-RemovalOfFluidStyledContentMenuViewHelpers.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-RemovalOfFluidStyledContentMenuViewHelpers.rst
new file mode 100644 (file)
index 0000000..71304c2
--- /dev/null
@@ -0,0 +1,86 @@
+.. include:: ../../Includes.txt
+
+===================================================================
+Breaking: #79622 - Removal of Fluid Styled Content Menu ViewHelpers
+===================================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+Fetching data directly in the view is not recommended and the temporary
+solution of menu viewhelpers are now replaced by it´s successor the menu
+processor that is based on HMENU.
+
+Menu ViewHelpers have been moved to the `compatibility7` extension, and are
+replaced in the core menu content elements.
+
+List of removed ViewHelpers:
+- menu.categories
+- menu.directory
+- menu.keywords
+- menu.list
+- menu.section
+- menu.updated
+
+
+Affected Installations
+======================
+
+All installations that use the `fluid_styled_content` menu viewhelpers.
+
+
+Migration
+=========
+
+Use `TYPO3\CMS\Frontend\DataProcessing\MenuProcessor` instead of viewhelpers.
+
+For CMS 8 the viewhelpers will be available as soon as `compatibility7` is
+installed, but it´s highly recommended to migrate your configuration.
+
+Example (Directory)
+-------------------
+
+Before:
+
+.. code-block:: typoscript
+
+   tt_content.menu_subpages.dataProcessing {
+      10 = TYPO3\CMS\Frontend\DataProcessing\SplitProcessor
+      10 {
+         if.isTrue.field = pages
+         fieldName = pages
+         delimiter = ,
+         removeEmptyEntries = 1
+         filterIntegers = 1
+         filterUnique = 1
+         as = pageUids
+      }
+   }
+
+.. code-block:: html
+
+   <ce:menu.directory pageUids="{pageUids}" as="pages" levelAs="level">
+      <f:for each="{pages}" as="page">
+         ...
+      </f:for>
+   </ce.menu.directory>
+
+After:
+
+.. code-block:: typoscript
+
+   tt_content.menu_subpages.dataProcessing {
+      10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
+      10.special = directory
+      10.special.value.field = pages
+   }
+
+.. code-block:: html
+
+   <f:for each="{menu}" as="page">
+      ...
+   </f:for>
+
+.. index:: Fluid, Frontend
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-SpaceBeforeAndSpaceAfterAdjustmentsForCSSStyledContent.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-SpaceBeforeAndSpaceAfterAdjustmentsForCSSStyledContent.rst
new file mode 100644 (file)
index 0000000..3b444a7
--- /dev/null
@@ -0,0 +1,123 @@
+.. include:: ../../Includes.txt
+
+================================================================================
+Breaking: #79622 - SpaceBefore and SpaceAfter adjustments for CSS Styled Content
+================================================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+CSS Styled Content provided the editor the possibility to fine-tune distances
+between content elements. The concept of CSC relied on that the editor
+understood what `margins` are, how they are calculated and had to maintain
+an overview of pixels that where used on the site he is maintaining.
+
+This lead to different problems not only for the editor but also for the
+integrator because he has no control about what the editor fills into these
+fields. Also it was hardly controlable when these distances should be
+variable and change on certain viewports for mobile usage.
+
+To regain control for this behaviour we are now introducing a new concept
+that purely relies on CSS classes, that can be defined by the integrator.
+
+The original fields `spaceAfter` and `spaceBefore` have been dropped, and also
+the method :php:`\TYPO3\CMS\CssStyledContent\Controller\CssStyledContentController::renderSpace`
+is not called anymore.
+
+
+Old TypoScript Rendering
+------------------------
+
+.. code-block:: typoscript
+
+   tt_content.stdWrap.innerWrap.cObject.default.20.20 = USER
+   tt_content.stdWrap.innerWrap.cObject.default.20.20 {
+      userFunc = TYPO3\CMS\CssStyledContent\Controller\CssStyledContentController->renderSpace
+      space = before
+      constant = {$content.spaceBefore}
+      classStdWrap {
+         required = 1
+         noTrimWrap = |csc-space-before-| |
+      }
+   }
+
+
+New TypoScript Rendering
+------------------------
+
+.. code-block:: typoscript
+
+   tt_content.stdWrap.innerWrap.cObject.default.20.20 = TEXT
+   tt_content.stdWrap.innerWrap.cObject.default.20.20 {
+      field = space_before_class
+      required = 1
+      noTrimWrap = |csc-space-before-| |
+   }
+
+
+Impact
+======
+
+Userdefined distances between content elements are missing.
+
+
+Affected Installations
+======================
+
+All instances that use  CSS Styled Content and have spaceBefore or spaceAfter
+values set to generate more space between their content elements.
+
+
+Check if your site is affected
+------------------------------
+
+.. code-block:: mysql
+
+   SELECT
+      uid,
+      pid,
+      spaceBefore,
+      spaceAfter
+   FROM
+      tt_content
+   WHERE
+      (spaceBefore > 0 OR spaceAfter > 0)
+      AND deleted = 0
+
+
+Migration
+=========
+
+There is no automatic migration available. If a migration is nessesary you need
+to check the new presets available and migrate the pixels defined before to the
+a preset of your choice.
+
+
+Example
+-------
+
+.. code-block:: mysql
+
+   UPDATE
+      tt_content
+   SET
+      spaceAfter = 0,
+      space_after_class = 'medium'
+   WHERE
+      spaceAfter >= 42
+      AND spaceAfter < 56
+
+
+Replacement Documentation
+-------------------------
+
+For detailed information about the replacement of spaceBefore and spaceAfter,
+please head over to the feature documentation of SpaceBefore- and SpaceAfterClass
+for CSS Styled Content.
+
+Feature-79622-SpaceBeforeAndSpaceAfterClassForCssStyledContent.rst
+
+
+.. index:: Frontend
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-StreamliningStructureOfCSSStyledContentAndFluidStyledContent.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-79622-StreamliningStructureOfCSSStyledContentAndFluidStyledContent.rst
new file mode 100644 (file)
index 0000000..1ddf24a
--- /dev/null
@@ -0,0 +1,142 @@
+.. include:: ../../Includes.txt
+
+========================================================================================
+Breaking: #79622 - Streamlining structure of CSS Styled Content and Fluid Styled Content
+========================================================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+The file structures of CSS Styled Content and Fluid Styled Content have been streamlined.
+
+
+File structure of CSS Styled Content
+------------------------------------
+
+.. code-block::
+
+   - Configuration/TypoScript
+   | - ContentElement
+   | | - Bullets.txt
+   | | - Div.txt
+   | | - Header.txt
+   | | - Html.txt
+   | | - Image.txt
+   | | - List.txt
+   | | - MenuAbstract.txt
+   | | - MenuCategorizedContent.txt
+   | | - MenuCategorizedPages.txt
+   | | - MenuPages.txt
+   | | - MenuRecentlyUpdated.txt
+   | | - MenuRelatedPages.txt
+   | | - MenuSection.txt
+   | | - MenuSectionPages.txt
+   | | - MenuSitemap.txt
+   | | - MenuSitemapPages.txt
+   | | - MenuSubpages.txt
+   | | - Shortcut.txt
+   | | - Table.txt
+   | | - Text.txt
+   | | - Textmedia.txt
+   | | - Textpic.txt
+   | | - Uploads.txt
+   | - ContentElementPartials
+   | | - Menu.txt
+   | - Helper
+   | | - ParseFunc.txt
+   | | - StandardHeader.txt
+   | | - StylesContent.txt
+   | - Styling
+   | | - setup.txt
+   | - constants.txt
+   | - setup.txt
+
+
+File structure of Fluid Styled Content
+--------------------------------------
+
+.. code-block::
+
+   - Configuration/TypoScript
+   | - ContentElement
+   | | - Bullets.txt
+   | | - Div.txt
+   | | - Header.txt
+   | | - Html.txt
+   | | - Image.txt
+   | | - List.txt
+   | | - MenuAbstract.txt
+   | | - MenuCategorizedContent.txt
+   | | - MenuCategorizedPages.txt
+   | | - MenuPages.txt
+   | | - MenuRecentlyUpdated.txt
+   | | - MenuRelatedPages.txt
+   | | - MenuSection.txt
+   | | - MenuSectionPages.txt
+   | | - MenuSitemap.txt
+   | | - MenuSitemapPages.txt
+   | | - MenuSubpages.txt
+   | | - Shortcut.txt
+   | | - Table.txt
+   | | - Text.txt
+   | | - Textmedia.txt
+   | | - Textpic.txt
+   | | - Uploads.txt
+   | - Helper
+   | | - FluidContent.txt
+   | | - ParseFunc.txt
+   | - Styling
+   | | - setup.txt
+   | - constants.txt
+   | - setup.txt
+
+
+Impact
+======
+
+TYPO3 will fail to load the rendering definitions correctly if the paths are
+not included matching the new file locations.
+
+
+Affected Installations
+======================
+
+All installations that are referring to the previous location of the rendering
+definitions. Please check if your using any of these paths for including the
+rendering definitions.
+
+
+CSS Styled Content
+------------------
+
+- EXT:css_styled_content/static/v4.5
+- EXT:css_styled_content/static/v4.6
+- EXT:css_styled_content/static/v4.7
+- EXT:css_styled_content/static/v6.0
+- EXT:css_styled_content/static/v6.1
+- EXT:css_styled_content/static/v6.2
+- EXT:css_styled_content/static
+- EXT:css_styled_content/Configuration/TypoScript/v7
+
+
+Fluid Styled Content
+--------------------
+
+- EXT:fluid_styled_content/TypoScript/Static
+
+
+Migration
+=========
+
+Database entries can automatically upgraded to the new locations. If you have
+references in your TypoScript files you need to to the migration manually.
+
+Use the new locations for accessing the TypoScript configuration.
+
+- `CSS Styled Content` = EXT:css_styled_content/Configuration/TypoScript/
+- `Fluid Styled Content` = EXT:fluid_styled_content/Configuration/TypoScript/
+
+
+.. index:: Fluid, Frontend
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-79622-DeprecationOfCSSStyledContent.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-79622-DeprecationOfCSSStyledContent.rst
new file mode 100644 (file)
index 0000000..c8e7b50
--- /dev/null
@@ -0,0 +1,38 @@
+.. include:: ../../Includes.txt
+
+=======================================================
+Deprecation: #79622 - Deprecation of CSS Styled Content
+=======================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+CSS Styled Content has been a long time the preferred way of rendering
+content in the frontend. Fluid Styled Content was introduced as
+successor of CSC, but the feature set diverged from the beginning. The
+lack of flexibility and incomplete feature set in comparision to CSC made
+it hard to migrate existing instances.
+
+Since TYPO3 CMS 7.6 Fluid-Templates are the defined standard and
+official recommendation for content rendering. The feature set of FSC is
+now matching CSC. Both content renderings are now streamlined to be fully
+compatible with each other. For the period of CMS 8 LTS CSC will share
+the same capabilities to make a transition as easy as possible. CSC is
+now deprecated and goes into maintenance mode and will be removed with
+CMS 9.
+
+
+Affected Installations
+======================
+
+All installations that still use or rely on the content rendering of `css_styled_content`.
+
+
+Migration
+=========
+
+Create a custom content rendering definition or switch to a maintained one like `fluid_styled_content`.
+
+.. index:: Frontend
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-79622-HeaderPositionSupportForFluidStyledContent.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-79622-HeaderPositionSupportForFluidStyledContent.rst
new file mode 100644 (file)
index 0000000..45811f0
--- /dev/null
@@ -0,0 +1,82 @@
+.. include:: ../../Includes.txt
+
+==================================================================
+Feature: #79622 - Header Position support for Fluid Styled Content
+==================================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+Header position as known from CSS Styled Content is now also supported by
+Fluid Styled Content. This will allow the editor to have more control about
+the alignment of the header in the frontend.
+
+By default all CSS classes for header alignment are prefixed with
+`ce-headline-` to make the css class unique to allow even more adjustments
+without breaking your styling somwhere else.
+
+
+Predefined values for header alignment and resulting CSS classes
+----------------------------------------------------------------
+
+==========   ==========   ====================
+Name         Value        CSS Class
+==========   ==========   ====================
+Default      (empty)      (No CSS Class added)
+Center       center       ce-headline-center
+Right        right        ce-headline-right
+Left         left         ce-headline-left
+
+
+Implementation Example
+----------------------
+
+The following examples are taken from the partials of fluid_styled_content that
+can be found here `EXT:fluid_styled_content/Resources/Private/Partials/Header/All.html`
+and here `EXT:fluid_styled_content/Resources/Private/Partials/Header/Header.html`.
+
+.. code-block:: html
+
+   <f:render partial="Header/Header" arguments="{
+      header: data.header,
+      layout: data.header_layout,
+      positionClass: '{f:if(condition: data.header_position, then: \'ce-headline-{data.header_position}\')}',
+      link: data.header_link,
+      default: settings.defaultHeaderType}" />
+
+.. code-block:: html
+
+   <h1 class="{positionClass}">
+     <f:link.typolink parameter="{link}">{header}</f:link.typolink>
+   </h1>
+
+
+Edit Predefined Options
+-----------------------
+
+.. code-block:: typoscript
+
+   TCEFORM.tt_content.header_position {
+      removeItems = center,left,right
+      addItems {
+         fancyheader = LLL:EXT:extension/Resources/Private/Language/locallang.xlf:fancyHeader
+      }
+   }
+
+.. code-block:: php
+
+   $GLOBALS['TCA']['tt_content']['columns']['header_position']['config']['items'][] = [
+      0 = LLL:EXT:extension/Resources/Private/Language/locallang.xlf:fancyHeader
+      1 = fancyheader
+   ];
+
+
+Impact
+======
+
+Header positions are now available to all editors by default.
+
+
+.. index:: Fluid, Frontend
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-79622-NewContentElementsForFluidStyledContent.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-79622-NewContentElementsForFluidStyledContent.rst
new file mode 100644 (file)
index 0000000..e3fbbf7
--- /dev/null
@@ -0,0 +1,31 @@
+.. include:: ../../Includes.txt
+
+===============================================================
+Feature: #79622 - New Content Elements for Fluid Styled Content
+===============================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+Content Elements from CSS Styled Content that were previously not supported
+by Fluid Styled Content are now making their comeback in order to share
+the same feature set across both content element renderings.
+
+=================   ==========   =================================================================
+Name                cType        Description
+=================   ==========   =================================================================
+Text                text         A regular text element with header and bodytext fields.
+Text and Images     textpic      Any number of images wrapped right around a regular text element.
+Images              image        Any number of images aligned in columns and rows with a caption.
+
+
+Impact
+======
+
+The content elements Text, Text and Images, Images are now also available
+for use when Fluid Styled Content is used as content rendering definition.
+
+
+.. index:: Frontend
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-79622-NewDefaultLayoutForFluidStyledContent.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-79622-NewDefaultLayoutForFluidStyledContent.rst
new file mode 100644 (file)
index 0000000..ca8f4e9
--- /dev/null
@@ -0,0 +1,151 @@
+.. include:: ../../Includes.txt
+
+=============================================================
+Feature: #79622 - New default layout for Fluid Styled Content
+=============================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+Previously there have been three layouts you could choose from when you are
+defining your own custom content elements or override an existing template.
+
+To provide a better maintainability and ease the overrides we are reducing
+these to a single layout that is named `Default` with all sections optional
+and fallbacks if the section is not set. Also we are introducing the "DropIn"
+concept.
+
+
+Structure
+---------
+
+The `Default` layout consists of five predefined sections that can be utilized to
+shape the output for your content rendering. In most cases you will not have
+to care about other section than `Main`. The sections will be rendered in that
+exact ordering.
+
+- Before
+- Header
+- Main
+- Footer
+- After
+
+.. code-block:: html
+
+   <f:spaceless>
+      <f:if condition="{data.frame_class} != none">
+         <f:then>
+            <div id="c{data.uid}" class="frame frame-{data.frame_class} frame-type-{data.CType} frame-layout-{data.layout}{f:if(condition: data.space_before_class, then: ' frame-space-before-{data.space_before_class}')}{f:if(condition: data.space_after_class, then: ' frame-space-after-{data.space_after_class}')}">
+               <f:if condition="{data._LOCALIZED_UID}">
+                  <a id="c{data._LOCALIZED_UID}"></a>
+               </f:if>
+               <f:render section="Before" optional="true">
+                  <f:render partial="DropIn/Before/All" arguments="{_all}" />
+               </f:render>
+               <f:render section="Header" optional="true">
+                  <f:render partial="Header/All" arguments="{_all}" />
+               </f:render>
+               <f:render section="Main" optional="true" />
+               <f:render section="Footer" optional="true">
+                  <f:render partial="Footer/All" arguments="{_all}" />
+               </f:render>
+               <f:render section="After" optional="true">
+                  <f:render partial="DropIn/After/All" arguments="{_all}" />
+               </f:render>
+            </div>
+         </f:then>
+         <f:else>
+            <a id="c{data.uid}"></a>
+            <f:if condition="{data._LOCALIZED_UID}">
+               <a id="c{data._LOCALIZED_UID}"></a>
+            </f:if>
+            <f:if condition="{data.space_before_class}">
+               <div class="frame-space-before-{data.space_before_class}"></div>
+            </f:if>
+            <f:render section="Before" optional="true">
+               <f:render partial="DropIn/Before/All" arguments="{_all}" />
+            </f:render>
+            <f:render section="Header" optional="true">
+               <f:render partial="Header/All" arguments="{_all}" />
+            </f:render>
+            <f:render section="Main" optional="true" />
+            <f:render section="Footer" optional="true">
+               <f:render partial="Footer/All" arguments="{_all}" />
+            </f:render>
+            <f:render section="After" optional="true">
+               <f:render partial="DropIn/After/All" arguments="{_all}" />
+            </f:render>
+            <f:if condition="{data.space_after_class}">
+               <div class="frame-space-after-{data.space_after_class}"></div>
+            </f:if>
+         </f:else>
+      </f:if>
+   </f:spaceless>
+
+
+DropIn
+------
+
+The sections `Before` and `After` are so called `DropIn` sections. DropIns
+have been introduced to be able to place additional functionality to all
+content elements without overriding layouts or the templates. DropIn´s are
+basically placeholders/empty partials that are meant to be overridden if necessary.
+
+DropIn Locations:
+
+- Resources/Private/Partials/DropIn/Before/All.html
+- Resources/Private/Partials/DropIn/After/All.html
+
+
+Handling Optional Sections
+--------------------------
+
+Since all sections are optional you do not need to reference them in your
+templates. All sections except the `Main` section have a fallback to a default
+behaviour if they are not set in the template. This is for example used to render
+the content element header.
+
+.. code-block:: html
+
+   <f:render section="Header" optional="true">
+      <f:render partial="Header/All" arguments="{_all}" />
+   </f:render>
+
+In some cases it can be useful to disable or override the default fallback of a
+section. For example if the HTML does not want to render the header at all.
+
+.. code-block:: html
+
+   <f:layout name="Default" />
+   <f:section name="Header" />
+   <f:section name="Main">
+      <f:format.raw>{data.bodytext}</f:format.raw>
+   </f:section>
+
+.. code-block:: html
+
+   <f:layout name="Default" />
+   <f:section name="Header">
+      <f:if condition="{gallery.position.noWrap} != 1">
+         <f:render partial="Header/All" arguments="{_all}" />
+      </f:if>
+   </f:section>
+   <f:section name="Main">
+      ...
+   </f:section>
+
+
+Basic Usage
+-----------
+
+.. code-block:: html
+
+   <f:layout name="Default" />
+   <f:section name="Main">
+      ...
+   </f:section>
+
+
+.. index:: Fluid, Frontend
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-79622-SpaceBeforeAndSpaceAfterClassForCssStyledContent.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-79622-SpaceBeforeAndSpaceAfterClassForCssStyledContent.rst
new file mode 100644 (file)
index 0000000..c4dd1da
--- /dev/null
@@ -0,0 +1,92 @@
+.. include:: ../../Includes.txt
+
+=========================================================================
+Feature: #79622 - SpaceBefore- and SpaceAfterClass for CSS Styled Content
+=========================================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+CSS Styled Content provided the editor the possibility to fine-tune distances
+between content elements. The concept of CSC relied on that the editor
+understood what `margins` are, how they are calculated and had to maintain
+an overview of pixels that where used on the site he is maintaining.
+
+This lead to different problems not only for the editor but also for the
+integrator because he has no control about what the editor fills into these
+fields. Also it was hardly controlable when these distances should be
+variable and change on certain viewports for mobile usage.
+
+To regain control for this behaviour we are now introducing a new concept
+that purely relies on CSS classes, that can be defined by the integrator.
+
+All CSS classes are by default prefixed by `frame-space-before-` or
+`frame-spacer-after-` and added to the surrounding frame when available.
+If the frame if the content element is set to none, placeholder elements
+are placed before and after to generate that distance.
+
+The default CSS definitions are placed in the optional static template
+`TypoScript Content Elements CSS (optional)`. If this is not included
+only the CSS classes will be added but without having CSS rules matching
+these classes.
+
+
+Example for before classes
+--------------------------
+
+=============   =============   ===============================   =============
+Name            Value           CSS Class                         Margin
+=============   =============   ===============================   =============
+None            (empty)         (No CSS Class added)              (No Margin)
+Extra Small     extra-small     csc-space-before-extra-small      1em
+Small           small           csc-space-before-small            2em
+Medium          medium          csc-space-before-medium           3em
+Large           large           csc-space-before-large            4em
+Extra Large     extra-large     csc-space-before-extra-large      5em
+
+
+Example Output
+--------------
+
+.. code-block:: html
+
+   <div id="c43" class="... csc-space-before-medium">
+      ...
+   </div>
+
+.. code-block:: html
+
+   <a id="c43"></a>
+   <div class="csc-space-before-medium"></div>
+   ...
+   <div class="csc-space-after-medium"></div>
+
+
+Edit Predefined Options
+-----------------------
+
+.. code-block:: typoscript
+
+   TCEFORM.tt_content.space_before_class {
+      removeItems = extra-small,small,medium,large,extra-large
+      addItems {
+         superspace = LLL:EXT:extension/Resources/Private/Language/locallang.xlf:superSpace
+      }
+   }
+
+.. code-block:: php
+
+   $GLOBALS['TCA']['tt_content']['columns']['space_before_class']['config']['items'][] = [
+      0 = LLL:EXT:extension/Resources/Private/Language/locallang.xlf:superSpace
+      1 = superspace
+   ];
+
+
+Impact
+======
+
+SpaceBefore and SpaceAfter is now available to all CSS Styled Content elements.
+
+.. index:: Frontend
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-79622-SpaceBeforeAndSpaceAfterClassForFluidStyledContent.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-79622-SpaceBeforeAndSpaceAfterClassForFluidStyledContent.rst
new file mode 100644 (file)
index 0000000..a00e57c
--- /dev/null
@@ -0,0 +1,91 @@
+.. include:: ../../Includes.txt
+
+===========================================================================
+Feature: #79622 - SpaceBefore- and SpaceAfterClass for Fluid Styled Content
+===========================================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+CSS Styled Content provided the editor the possibility to fine-tune distances
+between content elements. The concept of CSC relied on that the editor
+understood what `margins` are, how they are calculated and had to maintain
+an overview of pixels that where used on the site he is maintaining.
+
+This lead to different problems not only for the editor but also for the
+integrator because he has no control about what the editor fills into these
+fields. Also it was hardly controlable when these distances should be
+variable and change on certain viewports for mobile usage.
+
+To regain control for this behaviour we are now introducing a new concept
+that purely relies on CSS classes, that can be defined by the integrator.
+
+All CSS classes are by default prefixed by `frame-space-before-` or
+`frame-spacer-after-` and added to the surrounding frame when available.
+If the frame if the content element is set to none, placeholder elements
+are placed before and after to generate that distance.
+
+The default CSS definitions are placed in the optional static template
+`Fluid Content Elements CSS (optional)`. If this is not included only the
+CSS classes will be added but without having CSS rules matching these classes.
+
+
+Example for before classes
+--------------------------
+
+=============   =============   ===============================   =============
+Name            Value           CSS Class                         Margin
+=============   =============   ===============================   =============
+None            (empty)         (No CSS Class added)              (No Margin)
+Extra Small     extra-small     frame-space-before-extra-small     1em
+Small           small           frame-space-before-small           2em
+Medium          medium          frame-space-before-medium          3em
+Large           large           frame-space-before-large           4em
+Extra Large     extra-large     frame-space-before-extra-large     5em
+
+
+Example Output
+--------------
+
+.. code-block:: html
+
+   <div id="c43" class="frame ... frame-space-before-medium">
+      ...
+   </div>
+
+.. code-block:: html
+
+   <a id="c43"></a>
+   <div class="frame-space-before-medium"></div>
+   ...
+   <div class="frame-space-after-medium"></div>
+
+
+Edit predefined options
+-----------------------
+
+.. code-block:: typoscript
+
+   TCEFORM.tt_content.space_before_class {
+      removeItems = extra-small,small,medium,large,extra-large
+      addItems {
+         superspace = LLL:EXT:extension/Resources/Private/Language/locallang.xlf:superSpace
+      }
+   }
+
+.. code-block:: php
+
+   $GLOBALS['TCA']['tt_content']['columns']['space_before_class']['config']['items'][] = [
+      0 = LLL:EXT:extension/Resources/Private/Language/locallang.xlf:superSpace
+      1 = superspace
+   ];
+
+
+Impact
+======
+
+SpaceBefore and SpaceAfter is now available to all Fluid Styled Content elements.
+
+.. index:: Fluid, Frontend
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Feature-79622-TextmediaSupportForCSSStyledContent.rst b/typo3/sysext/core/Documentation/Changelog/master/Feature-79622-TextmediaSupportForCSSStyledContent.rst
new file mode 100644 (file)
index 0000000..c2238c0
--- /dev/null
@@ -0,0 +1,28 @@
+.. include:: ../../Includes.txt
+
+==========================================================
+Feature: #79622 - Textmedia support for CSS Styled Content
+==========================================================
+
+See :issue:`79622`
+
+Description
+===========
+
+CSS Styled content now comes with support for the content element "Text and Media"
+that was previously exclusive to Fluid Styled Content, to make the transition from
+CSS Styled Content to Fluid Styled content more easy.
+
+The "Text and Media" implementation uses the fluid rendering for the Gallery from
+the Fluid Styled Content implementation and also the ClickEnlarge ViewHelper.
+This is only a temporary solution until we remove CSS Styled Content from the
+TYPO3 Core with CMS 9.
+
+
+Impact
+======
+
+"Text and Media" content element is now also available for CSS Styled Content.
+
+
+.. index:: Frontend
index 5bb8dfc..8ab3fa2 100644 (file)
@@ -74,19 +74,29 @@ class CssStyledContentController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlug
             if ($content === '') {
                 return '';
             }
-            // get flexform values
-            $caption = trim(htmlspecialchars($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'acctables_caption')));
-            $useTfoot = trim($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'acctables_tfoot'));
-            $headerPos = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'acctables_headerpos');
-            $noStyles = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'acctables_nostyles');
-            $tableClass = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'acctables_tableclass');
-            $delimiter = trim($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'tableparsing_delimiter', 's_parsing'));
+            // Get configuration
+            $caption = trim($this->cObj->data['table_caption']);
+            $useTfoot = trim($this->cObj->data['table_tfoot']);
+            $headerPosition = trim($this->cObj->data['table_header_position']);
+            switch ($headerPosition) {
+                case '1':
+                    $headerPos = 'top';
+                    break;
+                case '2':
+                    $headerPos = 'left';
+                    break;
+                default:
+                    $headerPos = '';
+                    break;
+            }
+            $tableClass = trim($this->cObj->data['table_class']);
+            $delimiter = trim($this->cObj->data['table_delimiter']);
             if ($delimiter) {
                 $delimiter = chr((int)$delimiter);
             } else {
                 $delimiter = '|';
             }
-            $quotedInput = trim($this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'tableparsing_quote', 's_parsing'));
+            $quotedInput = trim($this->cObj->data['table_enclosure']);
             if ($quotedInput) {
                 $quotedInput = chr((int)$quotedInput);
             } else {
@@ -114,29 +124,20 @@ class CssStyledContentController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlug
                         $cells[$a] = ' ';
                     }
                     $cells[$a] = preg_replace('|<br */?>|i', LF, $cells[$a]);
-                    $cellAttribs = $noStyles ? '' : ($a > 0 && $cols - 1 == $a ? ' class="td-last td-' . $a . '"' : ' class="td-' . $a . '"');
                     if ($headerPos === 'top' && !$k || $headerPos === 'left' && !$a) {
                         $scope = ' scope="' . $headerScope . '"';
                         $scope .= ' id="' . $headerIdPrefix . ($headerScope === 'col' ? $a : $k) . '"';
-                        $newCells[$a] = '
-                                                       <th' . $cellAttribs . $scope . '>' . $this->cObj->stdWrap($cells[$a], $conf['innerStdWrap.']) . '</th>';
+                        $newCells[$a] = '<th' . $scope . '>' . $this->cObj->stdWrap($cells[$a], $conf['innerStdWrap.']) . '</th>';
                     } else {
                         if (empty($headerPos)) {
                             $accessibleHeader = '';
                         } else {
                             $accessibleHeader = ' headers="' . $headerIdPrefix . ($headerScope === 'col' ? $a : $k) . '"';
                         }
-                        $newCells[$a] = '
-                                                       <td' . $cellAttribs . $accessibleHeader . '>' . $this->cObj->stdWrap($cells[$a], $conf['innerStdWrap.']) . '</td>';
+                        $newCells[$a] = '<td' . $accessibleHeader . '>' . $this->cObj->stdWrap($cells[$a], $conf['innerStdWrap.']) . '</td>';
                     }
                 }
-                if (!$noStyles) {
-                    $oddEven = $k % 2 ? 'tr-odd' : 'tr-even';
-                    $rowAttribs = $k > 0 && $rCount - 1 == $k ? ' class="' . $oddEven . ' tr-last"' : ' class="' . $oddEven . ' tr-' . $k . '"';
-                }
-                $rows[$k] = '
-                                       <tr' . $rowAttribs . '>' . implode('', $newCells) . '
-                                       </tr>';
+                $rows[$k] = '<tr' . $rowAttribs . '>' . implode('', $newCells) . '</tr>';
             }
             $addTbody = 0;
             $tableContents = '';
@@ -145,14 +146,12 @@ class CssStyledContentController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlug
                                        <caption>' . $caption . '</caption>';
             }
             if ($headerPos === 'top' && $rows[0]) {
-                $tableContents .= '<thead>' . $rows[0] . '
-                                       </thead>';
+                $tableContents .= '<thead>' . $rows[0] . '</thead>';
                 unset($rows[0]);
                 $addTbody = 1;
             }
             if ($useTfoot) {
-                $tableContents .= '
-                                       <tfoot>' . $rows[$rCount - 1] . '</tfoot>';
+                $tableContents .= '<tfoot>' . $rows[$rCount - 1] . '</tfoot>';
                 unset($rows[$rCount - 1]);
                 $addTbody = 1;
             }
@@ -164,16 +163,10 @@ class CssStyledContentController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlug
             // Set header type:
             $type = (int)$this->cObj->data['layout'];
             // Table tag params.
-            $tableTagParams = $this->getTableAttributes($conf, $type);
-            if (!$noStyles) {
-                $tableTagParams['class'] = 'contenttable contenttable-' . $type . ($tableClass ? ' ' . $tableClass : '') . $tableTagParams['class'];
-            } elseif ($tableClass) {
-                $tableTagParams['class'] = $tableClass;
-            }
+            $tableTagParams = [];
+            $tableTagParams['class'] = 'contenttable contenttable-' . $type . ($tableClass ? ' contenttable-' . $tableClass : '');
             // Compile table output:
-            $out = '
-                               <table ' . GeneralUtility::implodeAttributes($tableTagParams) . '>' . $tableContents . '
-                               </table>';
+            $out = '<table ' . GeneralUtility::implodeAttributes($tableTagParams) . '>' . $tableContents . '</table>';
             // Return value
             return $out;
         }
@@ -389,8 +382,6 @@ class CssStyledContentController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlug
         $netW = $maxW - $colspacing * ($colCount - 1) - $colCount * $border * ($borderThickness + $borderSpace) * 2;
         // Specify the maximum width for each column
         $columnWidths = $this->getImgColumnWidths($conf, $colCount, $netW);
-        $image_compression = (int)$this->cObj->stdWrap($conf['image_compression'], $conf['image_compression.']);
-        $image_effects = (int)$this->cObj->stdWrap($conf['image_effects'], $conf['image_effects.']);
         $image_frames = (int)$this->cObj->stdWrap($conf['image_frames.']['key'], $conf['image_frames.']['key.']);
         // EqualHeight
         $equalHeight = (int)$this->cObj->stdWrap($conf['equalH'], $conf['equalH.']);
@@ -526,29 +517,11 @@ class CssStyledContentController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlug
             if (!empty($customRendering)) {
                 $imgsTag[$imgKey] = $customRendering;
             } elseif ($imgConf || $imgConf['file']) {
-                if ($this->cObj->image_effects[$image_effects]) {
-                    $imgConf['file.']['params'] .= ' ' . $this->cObj->image_effects[$image_effects];
-                }
                 if ($image_frames) {
                     if (is_array($conf['image_frames.'][$image_frames . '.'])) {
                         $imgConf['file.']['m.'] = $conf['image_frames.'][$image_frames . '.'];
                     }
                 }
-                if ($image_compression && $imgConf['file'] !== 'GIFBUILDER') {
-                    if ($image_compression == 1) {
-                        $tempImport = $imgConf['file.']['import'];
-                        $tempImport_dot = $imgConf['file.']['import.'];
-                        $tempTreatIdAsReference = $imgConf['file.']['treatIdAsReference'];
-                        unset($imgConf['file.']);
-                        $imgConf['file.']['import'] = $tempImport;
-                        $imgConf['file.']['import.'] = $tempImport_dot;
-                        $imgConf['file.']['treatIdAsReference'] = $tempTreatIdAsReference;
-                    } elseif (isset($this->cObj->image_compression[$image_compression])) {
-                        $imgConf['file.']['params'] .= ' ' . $this->cObj->image_compression[$image_compression]['params'];
-                        $imgConf['file.']['ext'] = $this->cObj->image_compression[$image_compression]['ext'];
-                        unset($imgConf['file.']['ext.']);
-                    }
-                }
                 if ($titleInLink && !$titleInLinkAndImg) {
                     // Check if the image will be linked
                     $link = $this->cObj->imageLinkWrap('', $this->cObj->getCurrentFile() ?: $totalImagePath, $imgConf['imageLinkWrap.']);
@@ -578,33 +551,14 @@ class CssStyledContentController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlug
         $imageBlockWidth = max($imageRowsFinalWidths) + $colspacing * ($colCount - 1) + $colCount * $border * ($borderSpace + $borderThickness) * 2;
         $this->frontendController->register['rowwidth'] = $imageBlockWidth;
         $this->frontendController->register['rowWidthPlusTextMargin'] = $imageBlockWidth + $textMargin;
-        // noRows is in fact just one ROW, with the amount of columns specified, where the images are placed in.
-        // noCols is just one COLUMN, each images placed side by side on each row
-        $noRows = $this->cObj->stdWrap($conf['noRows'], $conf['noRows.']);
-        $noCols = $this->cObj->stdWrap($conf['noCols'], $conf['noCols.']);
-        // noRows overrides noCols. They cannot exist at the same time.
-        if ($noRows) {
-            $noCols = 0;
-            $rowCount = 1;
-        }
-        if ($noCols) {
-            $colCount = 1;
-        }
         // Edit icons:
         if (!is_array($conf['editIcons.'])) {
             $conf['editIcons.'] = [];
         }
         $editIconsHTML = $conf['editIcons'] && $this->frontendController->beUserLogin ? $this->cObj->editIcons('', $conf['editIcons'], $conf['editIcons.']) : '';
-        // If noRows, we need multiple imagecolumn wraps
         $imageWrapCols = 1;
-        if ($noRows) {
-            $imageWrapCols = $colCount;
-        }
         // User wants to separate the rows, but only do that if we do have rows
         $separateRows = $this->cObj->stdWrap($conf['separateRows'], $conf['separateRows.']);
-        if ($noRows) {
-            $separateRows = 0;
-        }
         if ($rowCount == 1) {
             $separateRows = 0;
         }
@@ -624,13 +578,6 @@ class CssStyledContentController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlug
             $addClassesImageConf = $this->frontendController->tmpl->splitConfArray(['addClassesImage' => $addClassesImage], $imagesInColumns);
             $rows = [];
             $currentImage = 0;
-            // Set the class for the caption (split or global)
-            $classCaptionAlign = [
-                'center' => 'csc-textpic-caption-c',
-                'right' => 'csc-textpic-caption-r',
-                'left' => 'csc-textpic-caption-l'
-            ];
-            $captionAlign = $this->cObj->stdWrap($conf['captionAlign'], $conf['captionAlign.']);
             // Iterate over the rows
             for ($rowCounter = 1; $rowCounter <= $rowCount; $rowCounter++) {
                 $rowColumns = [];
@@ -667,9 +614,6 @@ class CssStyledContentController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlug
                             // Get the caption
                             if (!$renderGlobalCaption) {
                                 $imageMarkers['caption'] = $this->cObj->stdWrap($this->cObj->cObjGet($conf['caption.'], 'caption.'), $conf['caption.']);
-                                if ($captionAlign) {
-                                    $captionMarkers['classes'] = ' ' . $classCaptionAlign[$captionAlign];
-                                }
                                 $imageMarkers['caption'] = $this->cObj->substituteMarkerArray($imageMarkers['caption'], $captionMarkers, '###|###', 1, 1);
                             }
                             if ($addClassesImageConf[$imagesCounter - 1]['addClassesImage']) {
@@ -687,9 +631,7 @@ class CssStyledContentController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlug
                     }
                     $rowColumns[] = $this->cObj->substituteMarkerArray($rowColumn, $columnMarkers, '###|###', 1, 1);
                 }
-                if ($noRows) {
-                    $rowConfiguration = $conf['noRowsStdWrap.'];
-                } elseif ($rowCounter == $rowCount) {
+                if ($rowCounter == $rowCount) {
                     $rowConfiguration = $conf['lastRowStdWrap.'];
                 } else {
                     $rowConfiguration = $conf['rowStdWrap.'];
@@ -706,9 +648,6 @@ class CssStyledContentController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlug
             // Add the global caption to the allStdWrap marker array if set
             if ($globalCaption) {
                 $allMarkers['caption'] = $globalCaption;
-                if ($captionAlign) {
-                    $classes[] = $classCaptionAlign[$captionAlign];
-                }
             }
             // Set the margin for image + text, no wrap always to avoid multiple stylesheets
             $noWrapMargin = (int)(($maxWInText ? $maxWInText : $fiftyPercentWidthInText) + (int)$this->cObj->stdWrap($conf['textMargin'], $conf['textMargin.']));
@@ -819,31 +758,14 @@ class CssStyledContentController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlug
                 }
                 if ($separateRows) {
                     $thisImages .= $allRows;
-                } else {
-                    $thisImages .= $this->cObj->stdWrap($allRows, $conf['noRowsStdWrap.']);
-                }
-                if ($noRows) {
-                    // Only needed to make columns, rather than rows:
-                    $images .= $this->cObj->stdWrap($thisImages, $conf['imageColumnStdWrap.']);
-                } else {
-                    $images .= $thisImages;
                 }
+                $images .= $thisImages;
             }
             // Add the global caption, if not split
             if ($globalCaption) {
                 $images .= $globalCaption;
             }
             // CSS-classes
-            $captionClass = '';
-            $classCaptionAlign = [
-                'center' => 'csc-textpic-caption-c',
-                'right' => 'csc-textpic-caption-r',
-                'left' => 'csc-textpic-caption-l'
-            ];
-            $captionAlign = $this->cObj->stdWrap($conf['captionAlign'], $conf['captionAlign.']);
-            if ($captionAlign) {
-                $captionClass = $classCaptionAlign[$captionAlign];
-            }
             $borderClass = '';
             if ($border) {
                 $borderClass = $conf['borderClass'] ?: 'csc-textpic-border';
@@ -851,7 +773,6 @@ class CssStyledContentController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlug
             // Multiple classes with all properties, to be styled in CSS
             $class = '';
             $class .= $borderClass ? ' ' . $borderClass : '';
-            $class .= $captionClass ? ' ' . $captionClass : '';
             $class .= $equalHeight ? ' csc-textpic-equalheight' : '';
             $addClasses = $this->cObj->stdWrap($conf['addClasses'], $conf['addClasses.']);
             $class .= $addClasses ? ' ' . $addClasses : '';
@@ -967,7 +888,7 @@ class CssStyledContentController extends \TYPO3\CMS\Frontend\Plugin\AbstractPlug
      ************************************/
 
     /**
-     * Returns table attributes for uploads / tables.
+     * Returns table attributes for tables. Not used anymore.
      *
      * @param array $conf TypoScript configuration array
      * @param int $type The "layout" type
diff --git a/typo3/sysext/css_styled_content/Classes/Hooks/PageLayoutView/ImagePreviewRenderer.php b/typo3/sysext/css_styled_content/Classes/Hooks/PageLayoutView/ImagePreviewRenderer.php
deleted file mode 100644 (file)
index f384e14..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-namespace TYPO3\CMS\CssStyledContent\Hooks\PageLayoutView;
-
-/*
- * 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!
- */
-
-/**
- * Contains a preview rendering for the page module of CType="image"
- */
-class ImagePreviewRenderer implements \TYPO3\CMS\Backend\View\PageLayoutViewDrawItemHookInterface
-{
-    /**
-     * Preprocesses the preview rendering of the content element "image".
-     *
-     * @param \TYPO3\CMS\Backend\View\PageLayoutView $parentObject Calling parent object
-     * @param bool $drawItem Whether to draw the item using the default functionalities
-     * @param string $headerContent Header content
-     * @param string $itemContent Item content
-     * @param array $row Record row of tt_content
-     * @return void
-     */
-    public function preProcess(
-        \TYPO3\CMS\Backend\View\PageLayoutView &$parentObject,
-        &$drawItem,
-        &$headerContent,
-        &$itemContent,
-        array &$row
-    ) {
-        if ($row['CType'] === 'image') {
-            if ($row['image']) {
-                $itemContent .= $parentObject->linkEditContent($parentObject->getThumbCodeUnlinked($row, 'tt_content', 'image'), $row);
-
-                $fileReferences = \TYPO3\CMS\Backend\Utility\BackendUtility::resolveFileReferences('tt_content', 'image', $row);
-
-                if (!empty($fileReferences)) {
-                    $linkedContent = '';
-
-                    foreach ($fileReferences as $fileReference) {
-                        $description = $fileReference->getDescription();
-                        if ($description !== null && $description !== '') {
-                            $linkedContent .= htmlspecialchars($description) . '<br />';
-                        }
-                    }
-
-                    $itemContent .= $parentObject->linkEditContent($linkedContent, $row);
-
-                    unset($linkedContent);
-                }
-            }
-
-            $drawItem = false;
-        }
-    }
-}
diff --git a/typo3/sysext/css_styled_content/Classes/Hooks/PageLayoutView/TextPreviewRenderer.php b/typo3/sysext/css_styled_content/Classes/Hooks/PageLayoutView/TextPreviewRenderer.php
deleted file mode 100644 (file)
index d33f393..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-namespace TYPO3\CMS\CssStyledContent\Hooks\PageLayoutView;
-
-/*
- * 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!
- */
-
-/**
- * Contains a preview rendering for the page module of CType="text"
- */
-class TextPreviewRenderer implements \TYPO3\CMS\Backend\View\PageLayoutViewDrawItemHookInterface
-{
-    /**
-     * Preprocesses the preview rendering of the content element "text".
-     *
-     * @param \TYPO3\CMS\Backend\View\PageLayoutView $parentObject Calling parent object
-     * @param bool $drawItem Whether to draw the item using the default functionalities
-     * @param string $headerContent Header content
-     * @param string $itemContent Item content
-     * @param array $row Record row of tt_content
-     * @return void
-     */
-    public function preProcess(
-        \TYPO3\CMS\Backend\View\PageLayoutView &$parentObject,
-        &$drawItem,
-        &$headerContent,
-        &$itemContent,
-        array &$row
-    ) {
-        if ($row['CType'] === 'text') {
-            if ($row['bodytext']) {
-                $itemContent .= $parentObject->linkEditContent($parentObject->renderText($row['bodytext']), $row) . '<br />';
-            }
-
-            $drawItem = false;
-        }
-    }
-}
diff --git a/typo3/sysext/css_styled_content/Classes/Hooks/PageLayoutView/TextpicPreviewRenderer.php b/typo3/sysext/css_styled_content/Classes/Hooks/PageLayoutView/TextpicPreviewRenderer.php
deleted file mode 100644 (file)
index bb2f11b..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-namespace TYPO3\CMS\CssStyledContent\Hooks\PageLayoutView;
-
-/*
- * 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!
- */
-
-/**
- * Contains a preview rendering for the page module of CType="textpic"
- */
-class TextpicPreviewRenderer implements \TYPO3\CMS\Backend\View\PageLayoutViewDrawItemHookInterface
-{
-    /**
-     * Preprocesses the preview rendering of the content element "textpic".
-     *
-     * @param \TYPO3\CMS\Backend\View\PageLayoutView $parentObject Calling parent object
-     * @param bool $drawItem Whether to draw the item using the default functionalities
-     * @param string $headerContent Header content
-     * @param string $itemContent Item content
-     * @param array $row Record row of tt_content
-     * @return void
-     */
-    public function preProcess(
-        \TYPO3\CMS\Backend\View\PageLayoutView &$parentObject,
-        &$drawItem,
-        &$headerContent,
-        &$itemContent,
-        array &$row
-    ) {
-        if ($row['CType'] === 'textpic') {
-            if ($row['bodytext']) {
-                $itemContent .= $parentObject->linkEditContent($parentObject->renderText($row['bodytext']), $row) . '<br />';
-            }
-
-            if ($row['image']) {
-                $itemContent .= $parentObject->linkEditContent($parentObject->getThumbCodeUnlinked($row, 'tt_content', 'image'), $row);
-
-                $fileReferences = \TYPO3\CMS\Backend\Utility\BackendUtility::resolveFileReferences('tt_content', 'image', $row);
-
-                if (!empty($fileReferences)) {
-                    $linkedContent = '';
-
-                    foreach ($fileReferences as $fileReference) {
-                        $description = $fileReference->getDescription();
-                        if ($description !== null && $description !== '') {
-                            $linkedContent .= htmlspecialchars($description) . '<br />';
-                        }
-                    }
-
-                    $itemContent .= $parentObject->linkEditContent($linkedContent, $row);
-
-                    unset($linkedContent);
-                }
-            }
-
-            $drawItem = false;
-        }
-    }
-}
diff --git a/typo3/sysext/css_styled_content/Classes/Hooks/TcaCacheClearing.php b/typo3/sysext/css_styled_content/Classes/Hooks/TcaCacheClearing.php
deleted file mode 100644 (file)
index b7ea4c2..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-namespace TYPO3\CMS\CssStyledContent\Hooks;
-
-/*
- * 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!
- */
-use TYPO3\CMS\Core\Cache\CacheManager;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Utility to clear the TCA cache
- */
-class TcaCacheClearing
-{
-    /**
-     * Flush the cache_core cache to remove cached TCA
-     *
-     * @return void
-     */
-    public static function clearTcaCache()
-    {
-        $cacheManager = GeneralUtility::makeInstance(CacheManager::class);
-        $cacheManager->getCache('cache_core')->flush();
-    }
-}
diff --git a/typo3/sysext/css_styled_content/Classes/ViewHelpers/Link/ClickEnlargeViewHelper.php b/typo3/sysext/css_styled_content/Classes/ViewHelpers/Link/ClickEnlargeViewHelper.php
new file mode 100644 (file)
index 0000000..6baa614
--- /dev/null
@@ -0,0 +1,113 @@
+<?php
+namespace TYPO3\CMS\CssStyledContent\ViewHelpers\Link;
+
+/*
+ * 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!
+ */
+
+use TYPO3\CMS\Core\Resource\FileInterface;
+use TYPO3\CMS\Core\Resource\FileReference;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Service\TypoScriptService;
+use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
+use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
+use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
+
+/**
+ * A view helper for creating a link for an image popup.
+ *
+ * = Example =
+ *
+ * <code title="enlarge image on click">
+ * <ce:link.clickEnlarge image="{image}" configuration="{settings.images.popup}"><img src=""></ce:link.clickEnlarge>
+ * </code>
+ *
+ * <output>
+ * <a href="url" onclick="javascript" target="thePicture"><img src=""></a>
+ * </output>
+ */
+class ClickEnlargeViewHelper extends AbstractViewHelper
+{
+    /**
+     * @var bool
+     */
+    protected $escapeOutput = false;
+
+    /**
+     * Initialize ViewHelper arguments
+     *
+     * @return void
+     */
+    public function initializeArguments()
+    {
+        $this->registerArgument('image', FileReference::class, 'The original image file', true);
+        $this->registerArgument(
+            'configuration',
+            'mixed',
+            'String, \TYPO3\CMS\Core\Resource\File or \TYPO3\CMS\Core\Resource\FileReference with link configuration',
+            true
+        );
+    }
+
+    /**
+     * Render the view helper
+     *
+     * @return string
+     */
+    public function render()
+    {
+        return self::renderStatic(
+            $this->arguments,
+            $this->buildRenderChildrenClosure(),
+            $this->renderingContext
+        );
+    }
+
+    /**
+     * @param array $arguments
+     * @param \Closure $renderChildrenClosure
+     * @param RenderingContextInterface $renderingContext
+     * @return string
+     */
+    public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
+    {
+        $image = $arguments['image'];
+        if ($image instanceof FileInterface) {
+            self::getContentObjectRenderer()->setCurrentFile($image);
+        }
+        $configuration = self::getTypoScriptService()->convertPlainArrayToTypoScriptArray($arguments['configuration']);
+        $content = $renderChildrenClosure();
+        $configuration['enable'] = true;
+
+        return self::getContentObjectRenderer()->imageLinkWrap($content, $image, $configuration);
+    }
+
+    /**
+     * @return ContentObjectRenderer
+     */
+    protected static function getContentObjectRenderer()
+    {
+        return $GLOBALS['TSFE']->cObj;
+    }
+
+    /**
+     * @return TypoScriptService
+     */
+    protected static function getTypoScriptService()
+    {
+        static $typoScriptService;
+        if ($typoScriptService === null) {
+            $typoScriptService = GeneralUtility::makeInstance(TypoScriptService::class);
+        }
+        return $typoScriptService;
+    }
+}
diff --git a/typo3/sysext/css_styled_content/Configuration/FlexForms/table.xml b/typo3/sysext/css_styled_content/Configuration/FlexForms/table.xml
deleted file mode 100644 (file)
index 5b249be..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<T3DataStructure>
-       <sheets>
-               <sDEF>
-                       <ROOT>
-                               <TCEforms>
-                                       <sheetTitle>LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_acctables</sheetTitle>
-                               </TCEforms>
-                               <type>array</type>
-                               <el>
-                                       <acctables_caption>
-                                               <TCEforms>
-                                                       <label>LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_acctables_caption</label>
-                                                       <config>
-                                                               <type>input</type>
-                                                               <size>33</size>
-                                                       </config>
-                                               </TCEforms>
-                                       </acctables_caption>
-
-                                       <acctables_summary>
-                                               <TCEforms>
-                                                       <label>LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_acctables_summary</label>
-                                                       <config>
-                                                               <type>input</type>
-                                                               <size>33</size>
-                                                       </config>
-                                               </TCEforms>
-                                       </acctables_summary>
-
-                                       <acctables_tfoot>
-                                               <TCEforms>
-                                                       <label>LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_acctables_tfoot</label>
-                                                       <config>
-                                                               <type>check</type>
-                                                               <items type="array">
-                                                                       <numIndex index="1" type="array">
-                                                                               <numIndex index="0">LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.enabled</numIndex>
-                                                                               <numIndex index="1">1</numIndex>
-                                                                       </numIndex>
-                                                               </items>
-                                                       </config>
-                                               </TCEforms>
-                                       </acctables_tfoot>
-
-                                       <acctables_headerpos>
-                                               <TCEforms>
-                                                       <label>LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_acctables_headerpos</label>
-                                                       <config>
-                                                               <type>select</type>
-                                                               <items type="array">
-                                                                       <numIndex index="0" type="array">
-                                                                               <numIndex index="0">LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_acctables_headerpos.I.0</numIndex>
-                                                                               <numIndex index="1"></numIndex>
-                                                                       </numIndex>
-                                                                       <numIndex index="1" type="array">
-                                                                               <numIndex index="0">LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_acctables_headerpos.I.1</numIndex>
-                                                                               <numIndex index="1">top</numIndex>
-                                                                       </numIndex>
-                                                                       <numIndex index="2" type="array">
-                                                                               <numIndex index="0">LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_acctables_headerpos.I.2</numIndex>
-                                                                               <numIndex index="1">left</numIndex>
-                                                                       </numIndex>
-                                                               </items>
-                                                               <minitems>0</minitems>
-                                                               <maxitems>1</maxitems>
-                                                               <size>1</size>
-                                                       </config>
-                                               </TCEforms>
-                                       </acctables_headerpos>
-                                       <acctables_nostyles>
-                                               <TCEforms>
-                                                       <label>LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_acctables_nostyles</label>
-                                                       <config>
-                                                               <type>check</type>
-                                                       </config>
-                                               </TCEforms>
-                                       </acctables_nostyles>
-
-                                       <acctables_tableclass>
-                                               <TCEforms>
-                                                       <label>LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_acctables_tableclass</label>
-                                                       <config>
-                                                               <type>input</type>
-                                                               <size>33</size>
-                                                               <eval>trim</eval>
-                                                       </config>
-                                               </TCEforms>
-                                       </acctables_tableclass>
-                               </el>
-                       </ROOT>
-               </sDEF>
-               <s_parsing>
-                       <ROOT>
-                               <TCEforms>
-                                       <sheetTitle>LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_tableparsing</sheetTitle>
-                               </TCEforms>
-                               <type>array</type>
-                               <el>
-                                       <tableparsing_quote>
-                                               <TCEforms>
-                                                       <label>LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_tableparsing_quote</label>
-                                                       <config>
-                                                               <type>select</type>
-                                                               <items type="array">
-                                                                       <numIndex index="0" type="array">
-                                                                               <numIndex index="0">LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_tableparsing_quote_none</numIndex>
-                                                                               <numIndex index="1"></numIndex>
-                                                                       </numIndex>
-                                                                       <numIndex index="1" type="array">
-                                                                               <numIndex index="0">LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_tableparsing_quote_single</numIndex>
-                                                                               <numIndex index="1">39</numIndex>
-                                                                       </numIndex>
-                                                                       <numIndex index="2" type="array">
-                                                                               <numIndex index="0">LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_tableparsing_quote_double</numIndex>
-                                                                               <numIndex index="1">34</numIndex>
-                                                                       </numIndex>
-                                                               </items>
-                                                               <minitems>0</minitems>
-                                                               <maxitems>1</maxitems>
-                                                               <size>1</size>
-                                                       </config>
-                                               </TCEforms>
-                                       </tableparsing_quote>
-
-                                       <tableparsing_delimiter>
-                                               <TCEforms>
-                                                       <label>LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_tableparsing_delimiter</label>
-                                                       <config>
-                                                               <type>select</type>
-                                                               <items type="array">
-                                                                       <numIndex index="0" type="array">
-                                                                               <numIndex index="0">LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_tableparsing_delimiter_pipe</numIndex>
-                                                                               <numIndex index="1">124</numIndex>
-                                                                       </numIndex>
-                                                                       <numIndex index="1" type="array">
-                                                                               <numIndex index="0">LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_tableparsing_delimiter_semicolon</numIndex>
-                                                                               <numIndex index="1">59</numIndex>
-                                                                       </numIndex>
-                                                                       <numIndex index="2" type="array">
-                                                                               <numIndex index="0">LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_tableparsing_delimiter_comma</numIndex>
-                                                                               <numIndex index="1">44</numIndex>
-                                                                       </numIndex>
-                                                                       <numIndex index="3" type="array">
-                                                                               <numIndex index="0">LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_tableparsing_delimiter_colon</numIndex>
-                                                                               <numIndex index="1">58</numIndex>
-                                                                       </numIndex>
-                                                                       <numIndex index="4" type="array">
-                                                                               <numIndex index="0">LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_tableparsing_delimiter_tab</numIndex>
-                                                                               <numIndex index="1">9</numIndex>
-                                                                       </numIndex>
-                                                               </items>
-                                                               <minitems>0</minitems>
-                                                               <maxitems>1</maxitems>
-                                                               <size>1</size>
-                                                       </config>
-                                               </TCEforms>
-                                       </tableparsing_delimiter>
-                               </el>
-                       </ROOT>
-               </s_parsing>
-       </sheets>
-</T3DataStructure>
diff --git a/typo3/sysext/css_styled_content/Configuration/PageTSconfig/NewContentElementWizard.ts b/typo3/sysext/css_styled_content/Configuration/PageTSconfig/NewContentElementWizard.ts
deleted file mode 100644 (file)
index 63fafc0..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-mod.wizards.newContentElement.wizardItems {
-       common.elements {
-               header {
-                       iconIdentifier = content-header
-                       title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_headerOnly_title
-                       description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_headerOnly_description
-                       tt_content_defValues {
-                               CType = header
-                       }
-               }
-
-               text {
-                       iconIdentifier = content-text
-                       title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_regularText_title
-                       description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_regularText_description
-                       tt_content_defValues {
-                               CType = text
-                       }
-               }
-
-               textpic {
-                       iconIdentifier = content-textpic
-                       title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_textImage_title
-                       description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_textImage_description
-                       tt_content_defValues {
-                               CType = textpic
-                       }
-               }
-
-               image {
-                       iconIdentifier = content-image
-                       title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_imagesOnly_title
-                       description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_imagesOnly_description
-                       tt_content_defValues {
-                               CType = image
-                       }
-               }
-
-               bullets {
-                       iconIdentifier = content-bullets
-                       title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_bulletList_title
-                       description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_bulletList_description
-                       tt_content_defValues {
-                               CType = bullets
-                       }
-               }
-
-               table {
-                       iconIdentifier = content-table
-                       title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_table_title
-                       description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:common_table_description
-                       tt_content_defValues {
-                               CType = table
-                       }
-               }
-               uploads {
-                       iconIdentifier = content-special-uploads
-                       title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:special_filelinks_title
-                       description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:special_filelinks_description
-                       tt_content_defValues {
-                               CType = uploads
-                       }
-               }
-       }
-
-       common.show := addToList(header,text,textpic,image,bullets,table,uploads)
-
-       special.elements {
-               menu {
-                       iconIdentifier = content-special-menu
-                       title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:special_menus_title
-                       description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:special_menus_description
-                       tt_content_defValues {
-                               CType = menu
-                               menu_type = 0
-                       }
-               }
-
-               html {
-                       iconIdentifier = content-special-html
-                       title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:special_plainHTML_title
-                       description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:special_plainHTML_description
-                       tt_content_defValues {
-                               CType = html
-                       }
-               }
-
-               div {
-                       iconIdentifier = content-special-div
-                       title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:special_divider_title
-                       description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:special_divider_description
-                       tt_content_defValues {
-                               CType = div
-                       }
-               }
-
-               shortcut {
-                       iconIdentifier = content-special-shortcut
-                       title = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:special_shortcut_title
-                       description = LLL:EXT:backend/Resources/Private/Language/locallang_db_new_content_el.xlf:special_shortcut_description
-                       tt_content_defValues {
-                               CType = shortcut
-                       }
-               }
-       }
-
-       special.show := addToList(menu,html,div,shortcut)
-}
diff --git a/typo3/sysext/css_styled_content/Configuration/TCA/Overrides/pages.php b/typo3/sysext/css_styled_content/Configuration/TCA/Overrides/pages.php
deleted file mode 100644 (file)
index 08bfb68..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-defined('TYPO3_MODE') or die();
-
-call_user_func(function () {
-    $extConf = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['css_styled_content'], ['allowed_classes' => false]);
-    if (isset($extConf['loadContentElementWizardTsConfig']) && (int)$extConf['loadContentElementWizardTsConfig'] === 0) {
-        // Add pageTSconfig
-        \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::registerPageTSConfigFile(
-            'css_styled_content',
-            'Configuration/PageTSconfig/NewContentElementWizard.ts',
-            'CSS-based Content Elements'
-        );
-    }
-});
index c69c945..36cc3ba 100644 (file)
@@ -1,5 +1,13 @@
 <?php
 defined('TYPO3_MODE') or die();
 
-\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile('css_styled_content', 'static/', 'CSS Styled Content');
-\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile('css_styled_content', 'Configuration/TypoScript/v7/', 'CSS Styled Content TYPO3 v7');
+\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile(
+    'css_styled_content',
+    'Configuration/TypoScript/',
+    'TypoScript Content Elements'
+);
+\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile(
+    'css_styled_content',
+    'Configuration/TypoScript/Styling/',
+    'TypoScript Content Elements CSS (optional)'
+);
diff --git a/typo3/sysext/css_styled_content/Configuration/TCA/Overrides/tt_content.php b/typo3/sysext/css_styled_content/Configuration/TCA/Overrides/tt_content.php
deleted file mode 100644 (file)
index 6f15b7b..0000000
+++ /dev/null
@@ -1,774 +0,0 @@
-<?php
-defined('TYPO3_MODE') or die();
-
-//Extra fields for the tt_content table
-$extraContentColumns = [
-    'header_position' => [
-        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_position',
-        'exclude' => true,
-        'config' => [
-            'type' => 'select',
-            'renderType' => 'selectSingle',
-            'items' => [
-                [
-                    'LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.default_value',
-                    ''
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_position.I.1',
-                    'center'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_position.I.2',
-                    'right'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_position.I.3',
-                    'left'
-                ]
-            ],
-            'default' => ''
-        ]
-    ],
-    'image_compression' => [
-        'exclude' => true,
-        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_compression',
-        'config' => [
-            'type' => 'select',
-            'renderType' => 'selectSingle',
-            'items' => [
-                [
-                    'LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.default_value',
-                    0
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_compression.I.1',
-                    1
-                ],
-                [
-                    'GIF/256',
-                    10
-                ],
-                [
-                    'GIF/128',
-                    11
-                ],
-                [
-                    'GIF/64',
-                    12
-                ],
-                [
-                    'GIF/32',
-                    13
-                ],
-                [
-                    'GIF/16',
-                    14
-                ],
-                [
-                    'GIF/8',
-                    15
-                ],
-                [
-                    'PNG',
-                    39
-                ],
-                [
-                    'PNG/256',
-                    30
-                ],
-                [
-                    'PNG/128',
-                    31
-                ],
-                [
-                    'PNG/64',
-                    32
-                ],
-                [
-                    'PNG/32',
-                    33
-                ],
-                [
-                    'PNG/16',
-                    34
-                ],
-                [
-                    'PNG/8',
-                    35
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_compression.I.15',
-                    21
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_compression.I.16',
-                    22
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_compression.I.17',
-                    24
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_compression.I.18',
-                    26
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_compression.I.19',
-                    28
-                ]
-            ]
-        ]
-    ],
-    'image_effects' => [
-        'exclude' => true,
-        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects',
-        'config' => [
-            'type' => 'select',
-            'renderType' => 'selectSingle',
-            'items' => [
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects.I.0',
-                    0
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects.I.1',
-                    1
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects.I.2',
-                    2
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects.I.3',
-                    3
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects.I.4',
-                    10
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects.I.5',
-                    11
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects.I.6',
-                    20
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects.I.7',
-                    23
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects.I.8',
-                    25
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects.I.9',
-                    26
-                ]
-            ]
-        ]
-    ],
-    'image_noRows' => [
-        'exclude' => true,
-        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_noRows',
-        'config' => [
-            'type' => 'check',
-            'items' => [
-                '1' => [
-                    '0' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_noRows.I.0'
-                ]
-            ]
-        ]
-    ],
-    'section_frame' => [
-        'exclude' => true,
-        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:section_frame',
-        'config' => [
-            'type' => 'select',
-            'renderType' => 'selectSingle',
-            'items' => [
-                [
-                    '',
-                    '0'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:section_frame.I.1',
-                    '1'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:section_frame.I.2',
-                    '5'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:section_frame.I.3',
-                    '6'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:section_frame.I.4',
-                    '10'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:section_frame.I.5',
-                    '11'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:section_frame.I.6',
-                    '12'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:section_frame.I.7',
-                    '20'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:section_frame.I.8',
-                    '21'
-                ]
-            ],
-            'default' => 0
-        ]
-    ],
-    'spaceAfter' => [
-        'exclude' => true,
-        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:spaceAfter',
-        'config' => [
-            'type' => 'input',
-            'size' => 5,
-            'max' => 5,
-            'eval' => 'int',
-            'range' => [
-                'lower' => 0
-            ],
-            'default' => 0
-        ]
-    ],
-    'spaceBefore' => [
-        'exclude' => true,
-        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:spaceBefore',
-        'config' => [
-            'type' => 'input',
-            'size' => 5,
-            'max' => 5,
-            'eval' => 'int',
-            'range' => [
-                'lower' => 0
-            ],
-            'default' => 0
-        ]
-    ],
-    'table_bgColor' => [
-        'exclude' => true,
-        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_bgColor',
-        'config' => [
-            'type' => 'select',
-            'renderType' => 'selectSingle',
-            'items' => [
-                [
-                    'LLL:EXT:lang/Resources/Private/Language/locallang_general.xlf:LGL.default_value',
-                    '0'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_bgColor.I.1',
-                    '1'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_bgColor.I.2',
-                    '2'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_bgColor.I.3',
-                    '200'
-                ],
-                [
-                    '-----',
-                    '--div--'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_bgColor.I.5',
-                    '240'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_bgColor.I.6',
-                    '241'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_bgColor.I.7',
-                    '242'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_bgColor.I.8',
-                    '243'
-                ],
-                [
-                    'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_bgColor.I.9',
-                    '244'
-                ]
-            ],
-            'default' => 0
-        ]
-    ],
-    'table_border' => [
-        'exclude' => true,
-        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_border',
-        'config' => [
-            'type' => 'input',
-            'size' => 3,
-            'max' => 3,
-            'eval' => 'int',
-            'range' => [
-                'upper' => 20,
-                'lower' => 0
-            ],
-            'default' => 0
-        ]
-    ],
-    'table_cellpadding' => [
-        'exclude' => true,
-        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_cellpadding',
-        'config' => [
-            'type' => 'input',
-            'size' => 3,
-            'max' => 3,
-            'eval' => 'int',
-            'range' => [
-                'upper' => '200',
-                'lower' => 0
-            ],
-            'default' => 0
-        ]
-    ],
-    'table_cellspacing' => [
-        'exclude' => true,
-        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_cellspacing',
-        'config' => [
-            'type' => 'input',
-            'size' => 3,
-            'max' => 3,
-            'eval' => 'int',
-            'range' => [
-                'upper' => '200',
-                'lower' => 0
-            ],
-            'default' => 0
-        ]
-    ]
-];
-
-// Adding fields to the tt_content table definition in TCA
-\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tt_content', $extraContentColumns);
-
-// Add flexform
-\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue('*', 'FILE:EXT:css_styled_content/Configuration/FlexForms/table.xml', 'table');
-
-// Add content elements
-$GLOBALS['TCA']['tt_content']['ctrl']['typeicon_classes'] = array_merge(
-    $GLOBALS['TCA']['tt_content']['ctrl']['typeicon_classes'],
-    [
-        'textpic' => 'mimetypes-x-content-text-picture',
-        'image' => 'mimetypes-x-content-image',
-        'text' => 'mimetypes-x-content-text'
-    ]
-);
-array_splice(
-    $GLOBALS['TCA']['tt_content']['columns']['CType']['config']['items'],
-    2,
-    0,
-    [
-        [
-            'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:CType.I.1',
-            'text',
-            'content-text'
-        ],
-        [
-            'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:CType.I.2',
-            'textpic',
-            'content-textpic'
-        ],
-        [
-            'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:CType.I.3',
-            'image',
-            'content-image'
-        ]
-    ]
-);
-$GLOBALS['TCA']['tt_content']['columns']['CType']['config']['default'] = 'text';
-
-// Add palettes
-$GLOBALS['TCA']['tt_content']['palettes'] = array_replace(
-    $GLOBALS['TCA']['tt_content']['palettes'],
-    [
-        'header' => [
-            'showitem' => '
-                header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_formlabel,
-                --linebreak--,
-                header_layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_layout_formlabel,
-                header_position;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_position_formlabel,
-                date;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:date_formlabel,
-                --linebreak--,
-                header_link;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link_formlabel
-            ',
-        ],
-        'headers' => [
-            'showitem' => '
-                header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_formlabel,
-                --linebreak--,
-                header_layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_layout_formlabel,
-                header_position;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_position_formlabel,
-                date;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:date_formlabel,
-                --linebreak--,
-                header_link;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link_formlabel,
-                --linebreak--,
-                subheader;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:subheader_formlabel
-            ',
-        ],
-        'imageblock' => [
-            'showitem' => '
-                imageorient;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imageorient_formlabel,
-                imagecols;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imagecols_formlabel,
-                --linebreak--,
-                image_noRows;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_noRows_formlabel,
-                imagecaption_position;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imagecaption_position_formlabel
-            ',
-        ],
-        'tablelayout' => [
-            'showitem' => '
-                table_bgColor;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_bgColor_formlabel,
-                table_border;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_border_formlabel,
-                table_cellspacing;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_cellspacing_formlabel,
-                table_cellpadding;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:table_cellpadding_formlabel
-            ',
-        ],
-        'visibility' => [
-            'showitem' => '
-                hidden;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:hidden_formlabel,
-                sectionIndex;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:sectionIndex_formlabel,
-                linkToTop;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:linkToTop_formlabel
-            ',
-        ],
-        'frames' => [
-            'showitem' => '
-                layout;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:layout_formlabel,
-                spaceBefore;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:spaceBefore_formlabel,
-                spaceAfter;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:spaceAfter_formlabel,
-                section_frame;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:section_frame_formlabel
-            ',
-        ]
-    ]
-);
-
-\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette(
-    'tt_content',
-    'image_settings',
-    'imagewidth;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imagewidth_formlabel,
-        imageheight;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imageheight_formlabel,
-        imageborder;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:imageborder_formlabel,
-        --linebreak--,
-        image_compression;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_compression_formlabel,
-        image_effects;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:image_effects_formlabel,'
-);
-
-// Field arrangement for CE "header"
-$GLOBALS['TCA']['tt_content']['types']['header']['showitem'] = '
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.headers;headers,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
-        --palette--;;language,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
-        --palette--;;hidden,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
-        categories,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
-        rowDescription,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
-';
-
-// Field arrangement for CE "text"
-$GLOBALS['TCA']['tt_content']['types']['text']['showitem'] = '
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-        bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext_formlabel,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
-        --palette--;;language,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
-        --palette--;;hidden,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
-        categories,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
-        rowDescription,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
-';
-
-if (!isset($GLOBALS['TCA']['tt_content']['types']['text']['columnsOverrides']['bodytext']['config'])
-    || !is_array($GLOBALS['TCA']['tt_content']['types']['text']['columnsOverrides']['bodytext']['config'])
-) {
-    $GLOBALS['TCA']['tt_content']['types']['text']['columnsOverrides']['bodytext']['config'] = [];
-}
-$GLOBALS['TCA']['tt_content']['types']['text']['columnsOverrides']['bodytext']['config']['enableRichtext'] = true;
-$GLOBALS['TCA']['tt_content']['types']['text']['columnsOverrides']['bodytext']['config']['richtextConfiguration'] = 'default';
-
-// Field arrangement for CE "textpic"
-$GLOBALS['TCA']['tt_content']['types']['textpic']['showitem'] = '
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-        bodytext;Text,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.images,
-        image,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.imagelinks;imagelinks,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.image_settings;image_settings,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.imageblock;imageblock,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
-        --palette--;;language,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
-        --palette--;;hidden,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
-        categories,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
-        rowDescription,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
-';
-
-if (!isset($GLOBALS['TCA']['tt_content']['types']['textpic']['columnsOverrides']['bodytext']['config'])
-    || !is_array($GLOBALS['TCA']['tt_content']['types']['textpic']['columnsOverrides']['bodytext']['config'])
-) {
-    $GLOBALS['TCA']['tt_content']['types']['textpic']['columnsOverrides']['bodytext']['config'] = [];
-}
-$GLOBALS['TCA']['tt_content']['types']['textpic']['columnsOverrides']['bodytext']['config']['enableRichtext'] = true;
-$GLOBALS['TCA']['tt_content']['types']['textpic']['columnsOverrides']['bodytext']['config']['richtextConfiguration'] = 'default';
-
-// Field arrangement for CE "image"
-$GLOBALS['TCA']['tt_content']['types']['image']['showitem'] = '
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.images,
-        image,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.imagelinks;imagelinks,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.image_settings;image_settings,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.imageblock;imageblock,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
-        --palette--;;language,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
-        --palette--;;hidden,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
-        categories,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
-        rowDescription,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
-';
-
-// Field arrangement for CE "bullets"
-$GLOBALS['TCA']['tt_content']['types']['bullets']['showitem'] = '
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-        bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext.ALT.bulletlist_formlabel,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
-        --palette--;;language,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
-        --palette--;;hidden,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
-        categories,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
-        rowDescription,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
-';
-if (!is_array($GLOBALS['TCA']['tt_content']['types']['bullets']['columnsOverrides'])) {
-    $GLOBALS['TCA']['tt_content']['types']['bullets']['columnsOverrides'] = [];
-}
-if (!is_array($GLOBALS['TCA']['tt_content']['types']['bullets']['columnsOverrides']['bodytext'])) {
-    $GLOBALS['TCA']['tt_content']['types']['bullets']['columnsOverrides']['bodytext'] = [];
-}
-$GLOBALS['TCA']['tt_content']['types']['bullets']['columnsOverrides']['bodytext']['config']['wrap'] = 'off';
-
-// Field arrangement for CE "table"
-$GLOBALS['TCA']['tt_content']['types']['table']['showitem'] = '
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:CType.I.5,
-        cols,bodytext,pi_flexform,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.table_layout;tablelayout,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
-        --palette--;;language,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
-        --palette--;;hidden,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
-        categories,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
-        rowDescription,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
-';
-if (!is_array($GLOBALS['TCA']['tt_content']['types']['table']['columnsOverrides'])) {
-    $GLOBALS['TCA']['tt_content']['types']['table']['columnsOverrides'] = [];
-}
-if (!is_array($GLOBALS['TCA']['tt_content']['types']['table']['columnsOverrides']['bodytext'])) {
-    $GLOBALS['TCA']['tt_content']['types']['table']['columnsOverrides']['bodytext'] = [];
-}
-$GLOBALS['TCA']['tt_content']['types']['table']['columnsOverrides']['bodytext']['config']['renderType'] = 'textTable';
-$GLOBALS['TCA']['tt_content']['types']['table']['columnsOverrides']['bodytext']['config']['wrap'] = 'off';
-
-// Field arrangement for CE "uploads"
-$GLOBALS['TCA']['tt_content']['types']['uploads']['showitem'] = '
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:media;uploads,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.uploads_layout;uploadslayout,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
-        --palette--;;language,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
-        --palette--;;hidden,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
-        categories,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
-        rowDescription,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
-';
-
-// Field arrangement for CE "menu"
-$GLOBALS['TCA']['tt_content']['types']['menu']['showitem'] = '
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.menu;menu,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.menu_accessibility;menu_accessibility,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
-        --palette--;;language,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
-        --palette--;;hidden,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
-        categories,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
-        rowDescription,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
-';
-
-// Field arrangement for CE "shortcut"
-$GLOBALS['TCA']['tt_content']['types']['shortcut']['showitem'] = '
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-        header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.shortcut_formlabel,
-        records;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:records_formlabel,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
-        --palette--;;language,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
-        --palette--;;hidden,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
-        categories,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
-        rowDescription,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
-';
-
-// Field arrangement for CE "list"
-$GLOBALS['TCA']['tt_content']['types']['list']['showitem'] = '
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.plugin,
-        list_type;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:list_type_formlabel,
-        pages;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:pages.ALT.list_formlabel,
-        recursive,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
-        --palette--;;language,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
-        --palette--;;hidden,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
-        categories,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
-        rowDescription,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
-';
-
-// Field arrangement for CE "div"
-$GLOBALS['TCA']['tt_content']['types']['div']['showitem'] = '
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-        header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.div_formlabel,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
-        --palette--;;language,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
-        --palette--;;hidden,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
-        categories,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
-        rowDescription,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
-';
-
-// Field arrangement for CE "html"
-$GLOBALS['TCA']['tt_content']['types']['html']['showitem'] = '
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
-        header;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header.ALT.html_formlabel,
-        bodytext;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:bodytext.ALT.html_formlabel,
-    --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.frames;frames,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.appearanceLinks;appearanceLinks,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
-        --palette--;;language,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
-        --palette--;;hidden,
-        --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.access;access,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
-        categories,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes,
-        rowDescription,
-    --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended,
-';
-
-$GLOBALS['TCA']['tt_content']['columns']['section_frame']['config']['items'][0] = [
-    'LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_section_frame.I.0', '0'
-];
-
-$GLOBALS['TCA']['tt_content']['columns']['section_frame']['config']['items'][9] = [
-    'LLL:EXT:css_styled_content/Resources/Private/Language/locallang_db.xlf:tt_content.tx_cssstyledcontent_section_frame.I.9', '66'
-];
diff --git a/typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Bullets.txt b/typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Bullets.txt
new file mode 100644 (file)
index 0000000..eec2e0f
--- /dev/null
@@ -0,0 +1,59 @@
+# Bullet List:
+# A single bullet list.
+#
+# CType: bullets
+
+tt_content.bullets = COA
+tt_content.bullets {
+    10 = < lib.stdheader
+    20 = CASE
+    20 {
+        key.field = bullets_type
+        # Unordered List
+        default = TEXT
+        default {
+            field = bodytext
+            trim = 1
+            split {
+                token.char = 10
+                cObjNum = 1
+                1.current = 1
+                1.htmlSpecialChars = 1
+                1.wrap = <li>|</li>
+            }
+            dataWrap = <ul class="ce-bullets ce-bullets-{field:bullets_type}">|</ul>
+        }
+        # Ordered List
+        1 < .default
+        1 {
+            dataWrap = <ol class="ce-bullets ce-bullets-{field:bullets_type}">|</ol>
+        }
+        # Definition List
+        2 < .default
+        2 {
+            split {
+                1 >
+                1 {
+                    10 = TEXT
+                    10 {
+                        current = 1
+                        split {
+                            token = |
+                            cObjNum = |*|1|| 2|*|
+                            1.current = 1
+                            1.htmlSpecialChars = 1
+                            1.wrap = <dt>|</dt>
+                            2 < .1
+                            2.wrap = <dd>|</dd>
+                        }
+                    }
+                }
+            }
+            dataWrap = <dl class="ce-bullets ce-bullets-{field:bullets_type}">|</dl>
+        }
+        editIcons = tt_content: bodytext, [bullets_type]
+        editIcons.beforeLastTag = 1
+        editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.xlf:eIcon.bullets
+        prefixComment = 2 | Bullet list:
+    }
+}
diff --git a/typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Div.txt b/typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Div.txt
new file mode 100644 (file)
index 0000000..465b36c
--- /dev/null
@@ -0,0 +1,15 @@
+# Divider:
+# This element inserts a visual divider, which is by default a horizontal line.
+#
+# CType: div
+
+tt_content.div = TEXT
+tt_content.div {
+    value = <hr>
+    override = <hr />
+    override.if {
+        isTrue.data = TSFE:xhtmlDoctype
+    }
+    wrap = <div class="divider">|</div>
+    prefixComment = 2 | Div element
+}
diff --git a/typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Header.txt b/typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Header.txt
new file mode 100644 (file)
index 0000000..f574e2d
--- /dev/null
@@ -0,0 +1,25 @@
+# Header Only:
+# Adds a header only.
+#
+# CType: header
+
+tt_content.header = COA
+tt_content.header {
+    10 = < lib.stdheader
+    20 = TEXT
+    20 {
+        field = subheader
+        required = 1
+        dataWrap = <p class="csc-subheader csc-subheader-{field:layout}">|</p>
+        htmlSpecialChars = 1
+        if {
+            value = html5
+            equals.data = TSFE:config|config|doctype
+            negate = 1
+        }
+        editIcons = tt_content:subheader,layout
+        editIcons.beforeLastTag = 1
+        editIcons.iconTitle.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.subheader
+        prefixComment = 2 | Subheader:
+    }
+}
diff --git a/typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Html.txt b/typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Html.txt
new file mode 100644 (file)
index 0000000..26d096d
--- /dev/null
@@ -0,0 +1,13 @@
+# Plain HTML:
+# With this element you can output raw HTML code on the page.
+#
+# CType: html
+
+tt_content.html = TEXT
+tt_content.html {
+    field = bodytext
+    editIcons = tt_content:bodytext
+    editIcons.beforeLastTag = 1
+    editIcons.iconTitle.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.html
+    prefixComment = 2 | Raw HTML content:
+}
diff --git a/typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Image.txt b/typo3/sysext/css_styled_content/Configuration/TypoScript/ContentElement/Image.txt
new file mode 100644 (file)
index 0000000..38dc4dd
--- /dev/null
@@ -0,0 +1,475 @@
+# Image:
+# also used for rendering 'textpic' type
+#
+# CType: image
+
+tt_content.image = COA
+tt_content.image.10 = < lib.stdheader
+tt_content.image.20 = USER
+tt_content.image.20 {
+    userFunc = TYPO3\CMS\CssStyledContent\Controller\CssStyledContentController->render_textpic
+    preRenderRegisters {
+        // To optimize performance we load all image captions into a register
+        // because we need to know if at least one image has a caption at
+        // multiple places to determine the render method.
+        allImageCaptions.cObject = FILES
+        allImageCaptions.cObject {
+            references {
+                table = tt_content
+                fieldName = image
+            }
+            renderObj = TEXT
+            renderObj.data = file:current:description
+        }
+    }
+    # Image source
+    imgList.cObject = FILES
+    imgList.cObject {
+        references < tt_content.image.20.preRenderRegisters.allImageCaptions.cObject.references
+        renderObj = TEXT
+        renderObj.data = file:current:uid
+        renderObj.wrap = |,
+    }
+    imgPath = uploads/pics/
+    // This needs to be set because the UID list generated in the imgList
+    // setting contains UIDs of file references (not files).
+    imgListContainsReferenceUids = 1
+    # Single image rendering
+    imgObjNum = 1
+    1 {
+        file.import.data = file:current:uid
+        file.treatIdAsReference = 1
+        file.width.field = imagewidth
+        layoutKey = {$styles.content.imgtext.layoutKey}
+        layout {
+            default {
+                element = <img src="###SRC###" width="###WIDTH###" height="###HEIGHT###"###PARAMS######ALTPARAMS######BORDER######SELFCLOSINGTAGSLASH###>
+            }
+            srcset {
+                element = <img src="###SRC###" srcset="###SOURCECOLLECTION###"###PARAMS######ALTPARAMS######SELFCLOSINGTAGSLASH###>
+                source = |*|###SRC### ###SRCSETCANDIDATE###,|*|###SRC### ###SRCSETCANDIDATE###
+            }
+            picture {
+                element = <picture>###SOURCECOLLECTION###<img src="###SRC###"###PARAMS######ALTPARAMS######SELFCLOSINGTAGSLASH###></picture>
+                source = <source srcset="###SRC###" media="###MEDIAQUERY###"###SELFCLOSINGTAGSLASH###>
+            }
+            data {
+                element = <img src="###SRC###"###SOURCECOLLECTION######PARAMS######ALTPARAMS######SELFCLOSINGTAGSLASH###>
+                source = data-###DATAKEY###="###SRC###"
+                source.noTrimWrap = ; ;;
+                source.noTrimWrap.splitChar = ;
+            }
+        }
+        # Default sourceCollection as an example
+        # Please write your own sourceCollection (highly recommended)
+        sourceCollection {
+            small {
+                width = 200
+                srcsetCandidate = 600w
+                mediaQuery = (max-device-width: 600px)
+                dataKey = small
+            }
+            smallRetina {
+                if {
+                    value = {$styles.content.imgtext.layoutKey}
+                    equals = default
+                    negate = 1
+                }
+                width = 200
+                pixelDensity = 2
+                srcsetCandidate = 600w 2x
+                mediaQuery = (max-device-width: 600px) AND (min-resolution: 192dpi)
+                dataKey = smallRetina
+            }
+        }
+        imageLinkWrap = 1
+        imageLinkWrap {
+            bodyTag = <body style="margin:0; background:#fff;">
+            wrap = <a href="javascript:close();"> | </a>
+            width = {$styles.content.imgtext.linkWrap.width}
+            height = {$styles.content.imgtext.linkWrap.height}
+            effects = {$styles.content.imgtext.linkWrap.effects}
+            crop.data = file:current:crop
+            JSwindow = 1
+            JSwindow.newWindow = {$styles.content.imgtext.linkWrap.newWindow}
+            JSwindow.if.isFalse = {$styles.content.imgtext.linkWrap.lightboxEnabled}
+            directImageLink = {$styles.content.imgtext.linkWrap.lightboxEnabled}
+            enable.field = image_zoom
+            enable.ifEmpty.typolink.parameter.data = file:current:link
+            enable.ifEmpty.typolink.returnLast = url
+            typolink.parameter.data = file:current:link
+            typolink.target < lib.parseTarget
+            typolink.target =
+            typolink.target.override = {$styles.content.links.target}
+            typolink.extTarget < lib.parseTarget
+            typolink.extTarget =
+            typolink.extTarget.override = {$styles.content.links.extTarget}
+            linkParams.ATagParams.dataWrap =  class="{$styles.content.imgtext.linkWrap.lightboxCssClass}" rel="{$styles.content.imgtext.linkWrap.lightboxRelAttribute}"
+        }
+        altText = TEXT
+        altText {
+            data = file:current:alternative
+            stripHtml = 1
+        }
+        titleText < .altText
+        titleText.data = file:current:title
+        longdescURL {
+            parameter {
+                field = longdescURL
+                split {
+                    token {
+                        char = 10
+                    }
+                    returnKey.data = register : IMAGE_NUM_CURRENT
+                }
+            }
+        }
+        emptyTitleHandling = {$styles.content.imgtext.emptyTitleHandling}
+        titleInLink = {$styles.content.imgtext.titleInLink}
+        titleInLinkAndImg = {$styles.content.imgtext.titleInLinkAndImg}
+    }
+    textPos.field = imageorient
+    maxW = {$styles.content.imgtext.maxW}
+    maxW.override.data = register:maxImageWidth
+    maxWInText = {$styles.content.imgtext.maxWInText}
+    maxWInText.override.data = register:maxImageWidthInText
+    equalH.field = imageheight
+    cols.field = imagecols
+    border.field = imageborder
+    caption {
+        1 = COA
+        1 {
+            1 = TEXT
+            1 {
+                data = file:current:description
+                required = 1
+                htmlSpecialChars = 1
+                br = 1
+            }
+        }
+    }
+    // This needs to be set to TRUE because otherwise render_textpic will
+    // render a global caption which we do not have.
+    imageTextSplit = 1
+    borderThick = {$styles.content.imgtext.borderThick}
+    borderClass = {$styles.content.imgtext.borderClass}
+    colSpace = {$styles.content.imgtext.colSpace}
+    textMargin = {$styles.content.imgtext.textMargin}
+    borderSpace = {$styles.content.imgtext.borderSpace}
+    separateRows = {$styles.content.imgtext.separateRows}
+    addClasses =
+    addClassesCol =
+    addClassesCol.ifEmpty = csc-textpic-firstcol csc-textpic-lastcol
+    addClassesCol.override = csc-textpic-firstcol |*| |*| csc-textpic-lastcol
+    addClassesCol.override.if {
+        isGreaterThan.field = imagecols
+        value = 1
+    }
+    addClassesImage = csc-textpic-first |*| |*| csc-textpic-last
+    #
+    imageStdWrap.dataWrap = <div class="csc-textpic-imagewrap" style="width:{register:totalwidth}px;"> | </div>
+    imageStdWrapNoWidth.wrap = <div class="csc-textpic-imagewrap"> | </div>
+
+    layout = CASE
+    layout {
+        key.field = imageorient
+        # above-center
+        default = TEXT
+        default {
+            value = <div class="csc-textpic csc-textpic-center csc-textpic-above###CLASSES###">###IMAGES######TEXT###</div>
+            override = <div class="csc-textpic csc-textpic-responsive csc-textpic-center csc-textpic-above###CLASSES###">###IMAGES######TEXT###</div>
+            override {
+                if {
+                    value = default
+                    equals = {$styles.content.imgtext.layoutKey}
+                    negate = 1
+                }
+            }
+        }
+        # above-right
+        1 = TEXT
+        1 {
+            value = <div class="csc-textpic csc-textpic-right csc-textpic-above###CLASSES###">###IMAGES######TEXT###</div>
+            override = <div class="csc-textpic csc-textpic-responsive csc-textpic-right csc-textpic-above###CLASSES###">###IMAGES######TEXT###</div>
+            override {
+                if {
+                    value = default
+                    equals = {$styles.content.imgtext.layoutKey}
+                    negate = 1
+                }
+            }
+        }
+        # above-left
+        2 = TEXT
+        2 {
+            value = <div class="csc-textpic csc-textpic-left csc-textpic-above###CLASSES###">###IMAGES######TEXT###</div>
+            override = <div class="csc-textpic csc-textpic-responsive csc-textpic-left csc-textpic-above###CLASSES###">###IMAGES######TEXT###</div>
+            override {
+                if {
+                    value = default
+                    equals = {$styles.content.imgtext.layoutKey}
+                    negate = 1
+                }
+            }
+        }
+        # below-center
+        8 = TEXT
+        8 {
+            value = <div class="csc-textpic csc-textpic-center csc-textpic-below###CLASSES###">###TEXT######IMAGES###</div>
+            override = <div class="csc-textpic csc-textpic-responsive csc-textpic-center csc-textpic-below###CLASSES###">###TEXT######IMAGES###</div>
+            override {
+                if {
+                    value = default
+                    equals = {$styles.content.imgtext.layoutKey}
+                    negate = 1
+                }
+            }
+        }
+        # below-right
+        9 = TEXT
+        9 {
+            value = <div class="csc-textpic csc-textpic-right csc-textpic-below###CLASSES###">###TEXT######IMAGES###</div>
+            override = <div class="csc-textpic csc-textpic-responsive csc-textpic-right csc-textpic-below###CLASSES###">###TEXT######IMAGES###</div>
+            override {
+                if {
+                    value = default
+                    equals = {$styles.content.imgtext.layoutKey}
+                    negate = 1
+                }
+            }
+        }
+        # below-left
+        10 = TEXT
+        10 {
+            value = <div class="csc-textpic csc-textpic-left csc-textpic-below###CLASSES###">###TEXT######IMAGES###</div>
+            override = <div class="csc-textpic csc-textpic-responsive csc-textpic-left csc-textpic-below###CLASSES###">###TEXT######IMAGES###</div>
+            override {
+                if {
+                    value = default
+                    equals = {$styles.content.imgtext.layoutKey}
+                    negate = 1
+                }
+            }
+        }
+        # intext-right
+        17 = TEXT
+        17 {
+            value = <div class="csc-textpic csc-textpic-intext-right###CLASSES###">###IMAGES######TEXT###</div>
+            override = <div class="csc-textpic csc-textpic-responsive csc-textpic-intext-right###CLASSES###">###IMAGES######TEXT###</div>
+            override {
+                if {
+                    value = default
+                    equals = {$styles.content.imgtext.layoutKey}
+                    negate = 1
+                }
+            }
+        }
+        # intext-left
+        18 = TEXT
+        18 {
+            value = <div class="csc-textpic csc-textpic-intext-left###CLASSES###">###IMAGES######TEXT###</div>
+            override = <div class="csc-textpic csc-textpic-responsive csc-textpic-intext-left###CLASSES###">###IMAGES######TEXT###</div>
+            override {
+                if {
+                    value = default
+                    equals = {$styles.content.imgtext.layoutKey}
+                    negate = 1
+                }
+            }
+        }
+        # intext-right-nowrap
+        25 = TEXT
+        25 {
+            value = <div class="csc-textpic csc-textpi