From 5696525e78e538967aeacaa546d1c28b45125684 Mon Sep 17 00:00:00 2001 From: Helmut Hackbarth Date: Sun, 24 Oct 2021 17:13:58 +0200 Subject: [PATCH] New version 5.1.2 --- .../Preview/DefaultPreviewRenderer.php | 9 +- .../Backend/Preview/T3sbPreviewRenderer.php | 5 +- Classes/Command/CdnToLocal.php | 8 - Classes/Command/CustomScss.php | 4 +- Classes/Controller/ConfigController.php | 133 ++++---- Classes/DataProcessing/BootstrapProcessor.php | 21 +- Classes/DataProcessing/CardProcessor.php | 4 +- .../CommaSeparatedValueProcessor.php | 2 +- Classes/DataProcessing/ConfigProcessor.php | 4 +- .../Domain/Repository/ConfigRepository.php | 7 +- .../EventListener/AssetRenderer/IsInline.php | 6 +- Classes/Updates/t3sbMigrateUpdateWizard.php | 222 +++++++++---- Classes/Utility/FileRendererInterface.php | 3 +- Classes/Utility/YouTubeRenderer.php | 3 +- Classes/ViewHelpers/GifbuilderViewHelper.php | 3 +- Configuration/FlexForms/CardSetting.xml | 10 + .../FlexForms/Container/CardWrapper.xml | 10 + .../TCA/Overrides/sys_file_reference.php | 4 +- Configuration/TCA/Overrides/tt_content.php | 151 +++++---- .../TypoScript/Lib/ContentElement.typoscript | 2 - .../Page/IncludeBootstrapCss.typoscript | 2 +- .../TypoScript/Page/IncludeDefault.typoscript | 2 +- .../TypoScript/Page/IncludeLocal.typoscript | 16 +- .../Page/JS/CookieConsent.typoscript | 161 +++++---- Configuration/TypoScript/constants.typoscript | 12 +- Configuration/TypoScript/setup.typoscript | 2 +- Contrib/scssphp/src/Compiler.php | 110 +++---- Contrib/scssphp/src/Parser.php | 3 +- .../Backend/Partials/Config/Accordion.html | 14 +- .../Configuration/TypoScript/setup.typoscript | 2 +- .../Resources/Private/Partials/Form.html | 26 +- .../Private/Templates/Search/Search.html | 33 +- .../TSconfig/templateLayouts.tsconfig | 2 +- .../Configuration/TypoScript/setup.typoscript | 2 + .../Private/Partials/List/List_8.html | 303 +++++++++++++++++ .../Private/Partials/List/List_9.html | 305 +++++++++++++++++ .../Private/Partials/List/Pagination.html | 57 ++++ .../Private/Templates/Category/List.html | 54 ++++ .../Private/Templates/News/List.html | 306 +----------------- .../Resources/Private/Templates/Tag/List.html | 39 +++ .../Private/Layouts/Content/Default.html | 2 +- .../Private/Partials/Layouts/Assets.html | 22 +- .../Templates/Container/CardWrapper.html | 2 +- Resources/Private/Templates/Content/Card.html | 18 +- Resources/Private/Templates/Main.html | 6 +- Resources/Public/Scripts/t3sbHelper.js | 36 +++ Resources/Public/Styles/t3sbootstrap.css | 2 +- composer.json | 22 +- ext_conf_template.txt | 62 ++-- ext_emconf.php | 14 +- ext_localconf.php | 195 ++++++----- ext_tables.php | 16 +- 52 files changed, 1560 insertions(+), 899 deletions(-) create mode 100644 Resources/Private/Extensions/news/Resources/Private/Partials/List/List_8.html create mode 100644 Resources/Private/Extensions/news/Resources/Private/Partials/List/List_9.html create mode 100644 Resources/Private/Extensions/news/Resources/Private/Partials/List/Pagination.html create mode 100644 Resources/Private/Extensions/news/Resources/Private/Templates/Category/List.html create mode 100644 Resources/Private/Extensions/news/Resources/Private/Templates/Tag/List.html diff --git a/Classes/Backend/Preview/DefaultPreviewRenderer.php b/Classes/Backend/Preview/DefaultPreviewRenderer.php index bd288cfc..6eb5dccb 100644 --- a/Classes/Backend/Preview/DefaultPreviewRenderer.php +++ b/Classes/Backend/Preview/DefaultPreviewRenderer.php @@ -17,6 +17,7 @@ use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; use TYPO3\CMS\Core\Localization\LanguageService; use TYPO3\CMS\Core\Service\FlexFormService; +use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; class DefaultPreviewRenderer extends StandardContentPreviewRenderer { @@ -34,7 +35,6 @@ public function renderPageModulePreviewHeader(GridColumnItem $item): string $record = $item->getRecord(); $itemLabels = $item->getContext()->getItemLabels(); $outHeader = ''; - $content = parent::renderPageModulePreviewContent($item); if ( ($content && $record['CType'] === 'list') || ($content && $record['CType'] === 'bullets') @@ -71,7 +71,6 @@ public function renderPageModulePreviewHeader(GridColumnItem $item): string . $hiddenHeaderNote . '
'; } - $info = ''; $contentTypeLabels = $item->getContext()->getContentTypeLabels(); $contentType = $contentTypeLabels[$record['CType']]; $info = '
'.$contentType.'
'; @@ -113,7 +112,8 @@ public function renderPageModulePreviewContent(GridColumnItem $item): string $contentType = $contentTypeLabels[$record['CType']]; if (isset($contentType)) { - $extconf = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Configuration\ExtensionConfiguration::class)->get('t3sbootstrap'); + $extconf = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get('t3sbootstrap'); + $maxCharacters = $extconf['previewCropMaxCharacters']; $append = ' ...'; @@ -129,6 +129,7 @@ public function renderPageModulePreviewContent(GridColumnItem $item): string } $out .= parent::linkEditContent(parent::renderText($text), $record); } + if ($record['CType'] == 't3sbs_gallery') { $out .= 'Columns: '.$record['imagecols']; if ($record['CType'] == 't3sbs_gallery') { @@ -216,7 +217,7 @@ public function renderPageModulePreviewContent(GridColumnItem $item): string } else { $message = sprintf( - $languageService->sL('LLL:EXT:lang/locallang_core.xlf:labels.noMatchingValue'), + $languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.noMatchingValue'), $record['CType'] ); $out .= '' . htmlspecialchars($message) . ''; diff --git a/Classes/Backend/Preview/T3sbPreviewRenderer.php b/Classes/Backend/Preview/T3sbPreviewRenderer.php index b9965a83..9ba303fb 100644 --- a/Classes/Backend/Preview/T3sbPreviewRenderer.php +++ b/Classes/Backend/Preview/T3sbPreviewRenderer.php @@ -25,6 +25,7 @@ use TYPO3\CMS\Core\Service\FlexFormService; use TYPO3\CMS\Core\Page\PageRenderer; use TYPO3\CMS\Core\Information\Typo3Version; +use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; class T3sbPreviewRenderer extends StandardContentPreviewRenderer { @@ -331,7 +332,7 @@ public function renderPageModulePreviewContent(GridColumnItem $item): string $flexconfOut .= '
'. parent::linkEditContent($this->getThumbCodeUnlinked($record, 'tt_content', $field), $record) . '
'; } - $extconf = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Configuration\ExtensionConfiguration::class)->get('t3sbootstrap'); + $extconf = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get('t3sbootstrap'); if ($extconf['previewClosedCollapsible']) { $newContent = '

-
'.$rendered.'
'; +
'.$rendered.'
'; } return $flexconfOut.$newContent; diff --git a/Classes/Command/CdnToLocal.php b/Classes/Command/CdnToLocal.php index 33ff5605..86c11b46 100644 --- a/Classes/Command/CdnToLocal.php +++ b/Classes/Command/CdnToLocal.php @@ -149,14 +149,6 @@ protected function execute(InputInterface $input, OutputInterface $output) self::writeCustomFile($customPath, $customFileName, $cdnPath); } - if ($key == 'viewportchecker') { - $customDir = 'fileadmin/T3SB/Resources/Public/JS/'; - $customPath = GeneralUtility::getFileAbsFileName($customDir); - $customFileName = 'jquery.viewportchecker.min.js'; - $cdnPath = 'https://cdnjs.cloudflare.com/ajax/libs/jQuery-viewport-checker/'.$version.'/jquery.viewportchecker.min.js'; - self::writeCustomFile($customPath, $customFileName, $cdnPath); - } - if ($key == 'animate') { $customDir = 'fileadmin/T3SB/Resources/Public/CSS/'; $customPath = GeneralUtility::getFileAbsFileName($customDir); diff --git a/Classes/Command/CustomScss.php b/Classes/Command/CustomScss.php index 0d3978be..ab84eb1d 100644 --- a/Classes/Command/CustomScss.php +++ b/Classes/Command/CustomScss.php @@ -83,7 +83,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $customDir = 'fileadmin/T3SB/Resources/Public/Contrib/Bootstrap/scss/'; $customPath = GeneralUtility::getFileAbsFileName($customDir); - $bootstrapVersion = GeneralUtility::isFirstPartOfStr($settings['cdn']['bootstrap'], '5.') ? $settings['cdn']['bootstrap'] : '5.0.2'; + $bootstrapVersion = str_starts_with($settings['cdn']['bootstrap'], '5.') ? $settings['cdn']['bootstrap'] : '5.1.1'; foreach (explode(',', $scssList) as $scss ) { $customFileName = trim($scss); @@ -261,7 +261,7 @@ private function writeCustomFile($customPath, $customFileName, $settings, $name) $customContent = $name == '_variables' ? '// Overrides Bootstrap variables'.PHP_EOL.'// $enable-shadows: true;'.PHP_EOL.'// $enable-gradients: true;'.PHP_EOL.'// $enable-negative-margins: true;' : '// Your own SCSS'; if ( $settings['bootswatch'] ) { - $customContent = GeneralUtility::getURL($settings['bootswatchURL'].strtolower($settings['bootswatch']).'/'.$name.'.scss'); + $customContent = file_get_contents($settings['bootswatchURL'].strtolower($settings['bootswatch']).'/'.$name.'.scss'); if ($name == '_variables') { $customContent = str_replace(' !default', '', $customContent); } diff --git a/Classes/Controller/ConfigController.php b/Classes/Controller/ConfigController.php index 6e0f73d8..71e862b3 100644 --- a/Classes/Controller/ConfigController.php +++ b/Classes/Controller/ConfigController.php @@ -25,6 +25,9 @@ use TYPO3\CMS\Core\Database\Query\QueryHelper; use TYPO3\CMS\Core\Information\Typo3Version; use TYPO3\CMS\Core\Page\PageRenderer; +use TYPO3\CMS\Core\Domain\Repository\PageRepository; +use T3SBS\T3sbootstrap\Domain\Repository\ConfigRepository; +use T3SBS\T3sbootstrap\Domain\Model\Config; /** * ConfigController @@ -107,12 +110,11 @@ class ConfigController extends ActionController * * @param \T3SBS\T3sbootstrap\Domain\Repository\ConfigRepository $configRepository */ - public function injectConfigRepository(\T3SBS\T3sbootstrap\Domain\Repository\ConfigRepository $configRepository) + public function injectConfigRepository(ConfigRepository $configRepository) { $this->configRepository = $configRepository; } - public function initializeAction() { $site = self::getCurrentSite(); @@ -229,7 +231,7 @@ public function newAction(): void } } else { - $newConfig = new \T3SBS\T3sbootstrap\Domain\Model\Config(); + $newConfig = new Config(); // some defaults $newConfig = self::setDefaults($newConfig); @@ -247,7 +249,7 @@ public function newAction(): void * @param \T3SBS\T3sbootstrap\Domain\Model\Config $newConfig * @return void */ - public function createAction(\T3SBS\T3sbootstrap\Domain\Model\Config $newConfig): void + public function createAction(Config $newConfig): void { $newConfig->setHomepageUid($this->rootPageId); $newConfig->setPid($this->currentUid); @@ -265,7 +267,7 @@ public function createAction(\T3SBS\T3sbootstrap\Domain\Model\Config $newConfig) * @param bool $updated * @return void */ - public function editAction(\T3SBS\T3sbootstrap\Domain\Model\Config $config, $updated = FALSE): void + public function editAction(Config $config, $updated = FALSE): void { $assignedOptions = self::getFieldsOptions(); $assignedOptions['t3version'] = $this->version; @@ -291,7 +293,7 @@ public function editAction(\T3SBS\T3sbootstrap\Domain\Model\Config $config, $upd * @param \T3SBS\T3sbootstrap\Domain\Model\Config $config * @return void */ - public function updateAction(\T3SBS\T3sbootstrap\Domain\Model\Config $config): void + public function updateAction(Config $config): void { $config->setHomepageUid($this->rootPageId); $this->configRepository->update($config); @@ -307,7 +309,7 @@ public function updateAction(\T3SBS\T3sbootstrap\Domain\Model\Config $config): v * @param \T3SBS\T3sbootstrap\Domain\Model\Config $config * @return void */ - public function deleteAction(\T3SBS\T3sbootstrap\Domain\Model\Config $config): void + public function deleteAction(Config $config): void { $this->configRepository->remove($config); self::writeConstants(); @@ -401,9 +403,9 @@ public function getFieldsOptions(): array * @param \T3SBS\T3sbootstrap\Domain\Model\Config $rootConfig * @return \T3SBS\T3sbootstrap\Domain\Model\Config $newConfig */ - public function getNewConfig(\T3SBS\T3sbootstrap\Domain\Model\Config $rootConfig): \T3SBS\T3sbootstrap\Domain\Model\Config + public function getNewConfig(Config $rootConfig): Config { - $newConfig = new \T3SBS\T3sbootstrap\Domain\Model\Config(); + $newConfig = new Config(); foreach ( $this->tcaColumns as $field=>$columns ) { $var = str_replace(' ', '_', $field); @@ -423,7 +425,7 @@ public function getNewConfig(\T3SBS\T3sbootstrap\Domain\Model\Config $rootConfig * @param \T3SBS\T3sbootstrap\Domain\Model\Config $config * @return array */ - protected function compareConfig(\T3SBS\T3sbootstrap\Domain\Model\Config $config): array + protected function compareConfig(Config $config): array { $compare = []; @@ -467,7 +469,7 @@ protected function overrideConfig(): array $fKey = GeneralUtility::underscoredToLowerCamelCase($fKey); $tsField = $ts['page.']['10.']['settings.']['config.'][$fKey]; - if ( $tsField != $this->rootConfig->$field() && GeneralUtility::isFirstPartOfStr($tsField, '{$bootstrap.config.') != TRUE ) { + if ( $tsField != $this->rootConfig->$field() && str_starts_with($tsField, '{$bootstrap.config.') != TRUE ) { if ( $this->rootConfig->$field() === TRUE ) { $override[$fKey] = 'enabled'; } elseif ( $this->rootConfig->$field() === FALSE ) { @@ -592,63 +594,52 @@ public function writeConstants(): void $breakpointWidth = $this->settings['breakpoint'][$navbarBreakpoint]; $filecontent = ''; - foreach ($this->rootTemplates as $key=>$rootTemplate) { - foreach ( $this->configRepository->findAll() as $config ) { - $rootLineArray = GeneralUtility::makeInstance(RootlineUtility::class, $config->getPid())->get(); - if ( $config->getPid() == $rootTemplate['pid'] ) { - if ( count($this->rootTemplates) == 1 ) { - $filecontent .= self::getConstants($config, TRUE); - $filecontent .= 'bootstrap.config.navbarBreakpointWidth = '.$breakpointWidth.PHP_EOL.PHP_EOL; - } else { - if ($rootLineArray[0]['uid'] == $rootTemplate['pid'] ){ - $filecontent .= '['.$rootTemplate['pid'].' in tree.rootLineIds]'.PHP_EOL; - $filecontent .= self::getConstants($config, TRUE); - $filecontent .= 'bootstrap.config.navbarBreakpointWidth = '.$breakpointWidth.PHP_EOL; - $filecontent .= '[END]'.PHP_EOL.PHP_EOL; - } - } - } else { - if ( count($this->rootTemplates) == 1 ) { - if ($rootLineArray[0]['uid'] == $rootTemplate['pid'] ){ - if ($config->getGeneralRootline() || $config->getNavbarMegamenu()) { - $filecontent .= '['.$config->getPid().' in tree.rootLineIds]'.PHP_EOL; - } else { - $filecontent .= '[page["uid"] == '.$config->getPid().']'.PHP_EOL; - } - $filecontent .= self::getConstants($config, FALSE); - $filecontent .= 'bootstrap.config.navbarBreakpointWidth = '.$breakpointWidth.PHP_EOL; - $filecontent .= '[END]'.PHP_EOL.PHP_EOL; - } - } else { - - if ($rootLineArray[0]['uid'] == $rootTemplate['pid'] ){ - if ($config->getGeneralRootline() || $config->getNavbarMegamenu()) { - $filecontent .= '['.$rootTemplate['pid'].' in tree.rootLineIds && '.$config->getPid().' in tree.rootLineIds]'.PHP_EOL; - } else { - $filecontent .= '['.$rootTemplate['pid'].' in tree.rootLineIds && page["uid"] == '.$config->getPid().']'.PHP_EOL; - } - $filecontent .= self::getConstants($config, FALSE); - $filecontent .= 'bootstrap.config.navbarBreakpointWidth = '.$breakpointWidth.PHP_EOL; - $filecontent .= '[END]'.PHP_EOL.PHP_EOL; - } - } - } + + foreach( $this->configRepository->findAll() as $config ) { + $page = GeneralUtility::makeInstance(PageRepository::class)->getPage($config->getPid()); + if ( $page['hidden'] === 0 && $page['deleted'] === 0 ) { + $pages[$config->getPid()] = $page; + $configurations[$config->getPid()] = $config; } + } - $customDir = 'fileadmin/T3SB/Configuration/TypoScript/'; - $customPath = GeneralUtility::getFileAbsFileName($customDir); - $customFileName = 't3sbconstants.typoscript'; - $customFile = $customPath.$customFileName; + foreach ( $configurations as $config ) { + if ($config->getPid() == $config->getHomepageUid()) { + // is root page + if ( count($configurations) === 1 ) { + $filecontent .= self::getConstants($config, TRUE); + $filecontent .= 'bootstrap.config.navbarBreakpointWidth = '.$breakpointWidth.PHP_EOL; + } else { + $filecontent .= '['.$config->getPid().' in tree.rootLineIds]'.PHP_EOL; + $filecontent .= self::getConstants($config, TRUE); + $filecontent .= 'bootstrap.config.navbarBreakpointWidth = '.$breakpointWidth.PHP_EOL; + $filecontent .= '[END]'.PHP_EOL.PHP_EOL; + } - if (file_exists($customFile)) { - unlink($customFile); - } - if (!is_dir($customPath)) { - mkdir($customPath, 0777, true); + } else { + if ($config->getGeneralRootline()) { + $filecontent .= '['.$config->getPid().' in tree.rootLineIds]'.PHP_EOL; + } else { + $filecontent .= '[page["uid"] == '.$config->getPid().']'.PHP_EOL; + } + $filecontent .= self::getConstants($config, FALSE); + $filecontent .= '[END]'.PHP_EOL.PHP_EOL; } + } - GeneralUtility::writeFile($customFile, $filecontent); + $customDir = 'fileadmin/T3SB/Configuration/TypoScript/'; + $customPath = GeneralUtility::getFileAbsFileName($customDir); + $customFileName = 't3sbconstants.typoscript'; + $customFile = $customPath.$customFileName; + + if (file_exists($customFile)) { + unlink($customFile); + } + if (!is_dir($customPath)) { + mkdir($customPath, 0777, true); } + + GeneralUtility::writeFile($customFile, $filecontent); } } @@ -660,7 +651,7 @@ public function writeConstants(): void * @param bool $isRoot * @return string */ - private function getConstants(\T3SBS\T3sbootstrap\Domain\Model\Config $config, $isRoot): string + private function getConstants(Config $config, $isRoot): string { $constants = 'bootstrap.config.uid = '.$config->getUid() .PHP_EOL; @@ -731,18 +722,18 @@ private function getUtilityColors(): array $customScssArr = GeneralUtility::trimExplode(';', $customScss['custom-variables']); foreach( $customScssArr as $customvariables ) { $scsscolor = GeneralUtility::trimExplode(':', $customvariables); - if ( GeneralUtility::isFirstPartOfStr($scsscolor[1], '$') + if ( str_starts_with($scsscolor[1], '$') && GeneralUtility::inList($defaultUtilColorsList, $scsscolor[0]) ) { $utilColors[$scsscolor[0]] = $scsscolor[1]; - } elseif (GeneralUtility::isFirstPartOfStr($scsscolor[1], '#')) { - if (GeneralUtility::isFirstPartOfStr($scsscolor[0], '$')) { + } elseif (str_starts_with($scsscolor[1], '#')) { + if (str_starts_with($scsscolor[0], '$')) { $colors[$scsscolor[0]] = $scsscolor[1]; } } } if (is_array($utilColors)) { foreach($utilColors as $key=>$utiColor) { - if ( GeneralUtility::isFirstPartOfStr($utiColor, '$') ) { + if ( str_starts_with($utiColor, '$') ) { $utilityColors[$key] = $colors[$utiColor]; } } @@ -759,11 +750,11 @@ private function getUtilityColors(): array $defaultScssColor = GeneralUtility::trimExplode(':', $defaultVariables); if ($defaultScssColor[1] && GeneralUtility::inList($defaultUtilColorsList, trim($defaultScssColor[0]))) { - if ( GeneralUtility::isFirstPartOfStr($defaultScssColor[1], '$')) { + if ( str_starts_with($defaultScssColor[1], '$')) { // variable has variable $defaultUtilColors[$defaultScssColor[0]] = trim(rtrim($defaultScssColor[1], '!default')); - } elseif (GeneralUtility::isFirstPartOfStr($defaultScssColor[1], '#')) { - if (GeneralUtility::isFirstPartOfStr($defaultScssColor[0], '$')) { + } elseif (str_starts_with($defaultScssColor[1], '#')) { + if (str_starts_with($defaultScssColor[0], '$')) { $defaultcolors[$defaultScssColor[0]] = trim(rtrim($defaultScssColor[1], '!default')); } } @@ -792,7 +783,7 @@ private function getUtilityColors(): array * @param \T3SBS\T3sbootstrap\Domain\Model\Config $newConfig * @return \T3SBS\T3sbootstrap\Domain\Model\Config $newConfig */ - protected function setDefaults($newConfig): \T3SBS\T3sbootstrap\Domain\Model\Config + protected function setDefaults($newConfig): Config { $newConfig->setHomepageUid($this->currentUid); $newConfig->setPageTitle( 'jumbotron' ); diff --git a/Classes/DataProcessing/BootstrapProcessor.php b/Classes/DataProcessing/BootstrapProcessor.php index 3cd94f3b..91a9a3ec 100644 --- a/Classes/DataProcessing/BootstrapProcessor.php +++ b/Classes/DataProcessing/BootstrapProcessor.php @@ -63,6 +63,7 @@ public function process(ContentObjectRenderer $cObj, array $contentObjectConfigu $processedData['dataAnimate'] = FALSE; $processedData['isAnimateCss'] = FALSE; + $processedData['animateCssRepeat'] = FALSE; $extConf = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get('t3sbootstrap'); @@ -637,28 +638,20 @@ public function process(ContentObjectRenderer $cObj, array $contentObjectConfigu $processedData['data']['tx_t3sbootstrap_animateCss'] = FALSE; } if ($processedData['data']['tx_t3sbootstrap_animateCss'] && $extConf['animateCss'] ) { - // add to class + $processedData['isAnimateCss'] = TRUE; + $processedData['class'] .= ' animated bt_hidden'; + $processedData['dataAnimate'] = $processedData['data']['tx_t3sbootstrap_animateCss']; if( $processedData['data']['tx_t3sbootstrap_animateCssRepeat'] ) { - $processedData['class'] .= ' animated bt_hidden '; - // data-attribute - $processedData['dataAnimate'] = ' data-vp-add-class='.$processedData['data']['tx_t3sbootstrap_animateCss'].''; - $processedData['dataAnimate'] .= ' data-vp-repeat=true'; - } else { - $processedData['class'] .= ' animated '.$processedData['data']['tx_t3sbootstrap_animateCss']; + $processedData['animateCssRepeat'] = TRUE; } // add to style if ($processedData['data']['tx_t3sbootstrap_animateCssDuration'] ) { $processedData['style'] .= ' animation-duration: '.$processedData['data']['tx_t3sbootstrap_animateCssDuration'].'s;'; } if ($processedData['data']['tx_t3sbootstrap_animateCssDelay'] ) { - - $processedData['style'] .= ' animation-delay: '.$processedData['data']['tx_t3sbootstrap_animateCssDelay'].';'; + $processedData['style'] .= ' animation-delay: '.$processedData['data']['tx_t3sbootstrap_animateCssDelay'].'s;'; } - $processedData['isViewportChecker'] = FALSE; - if ($processedData['data']['tx_t3sbootstrap_animateCssRepeat']) { - $processedData['isViewportChecker'] = TRUE; - } - $processedData['isAnimateCss'] = TRUE; + } // child of container (masonry_layout) diff --git a/Classes/DataProcessing/CardProcessor.php b/Classes/DataProcessing/CardProcessor.php index f4dde422..b5fa22f0 100644 --- a/Classes/DataProcessing/CardProcessor.php +++ b/Classes/DataProcessing/CardProcessor.php @@ -158,6 +158,7 @@ public function process(ContentObjectRenderer $cObj, array $contentObjectConfigu // class $cardClass = 'card'; + $cardClass .= $parentflexconf['equalHeight'] ? ' h-100' : ''; $cardClass .= $processedData['data']['tx_t3sbootstrap_header_position'] ? ' '.$processedData['data']['tx_t3sbootstrap_header_position']:''; if ( $processedData['data']['header_position'] ) { $headerPosition = $processedData['data']['header_position']; @@ -177,12 +178,13 @@ public function process(ContentObjectRenderer $cObj, array $contentObjectConfigu // addmedia $processedData['addmedia']['imgclass'] = $cardData['image']['class']; + $processedData['addmedia']['imgclass'] .= $tx_t3sbootstrap_flexform['horizontal'] ? ' rounded-start' : ''; $processedData['addmedia']['figureclass'] = ' text-center'; + $processedData['addmedia']['figureclass'] .= $tx_t3sbootstrap_flexform['horizontal'] ? ' d-block' : ''; $processedData['card'] = $cardData; return $processedData; } - } diff --git a/Classes/DataProcessing/CommaSeparatedValueProcessor.php b/Classes/DataProcessing/CommaSeparatedValueProcessor.php index d4f5fa4d..f758fd34 100644 --- a/Classes/DataProcessing/CommaSeparatedValueProcessor.php +++ b/Classes/DataProcessing/CommaSeparatedValueProcessor.php @@ -64,7 +64,7 @@ public function process(ContentObjectRenderer $cObj, array $contentObjectConfigu if (is_array($processedData['table'])) { foreach ($processedData['table'] as $key=>$table) { - if ( \TYPO3\CMS\Core\Utility\GeneralUtility::isFirstPartOfStr($table[count($table)-1], 'ç') ) { + if ( str_starts_with($table[count($table)-1], 'ç') ) { $tableClass = TRUE; break; } else { diff --git a/Classes/DataProcessing/ConfigProcessor.php b/Classes/DataProcessing/ConfigProcessor.php index 14930adc..8caaec1b 100644 --- a/Classes/DataProcessing/ConfigProcessor.php +++ b/Classes/DataProcessing/ConfigProcessor.php @@ -21,6 +21,8 @@ use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; use TYPO3\CMS\Core\Database\QueryGenerator; +use TYPO3\CMS\Core\Domain\Repository\PageRepository; + class ConfigProcessor implements DataProcessorInterface { @@ -69,7 +71,7 @@ public function process(ContentObjectRenderer $cObj, array $contentObjectConfigu // flexible small columns $currentPage = $frontendController->page; $smallColumnsCurrent = (int)$currentPage['tx_t3sbootstrap_smallColumns']; - $pageRepository = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Domain\Repository\PageRepository::class); + $pageRepository = GeneralUtility::makeInstance(PageRepository::class); $rootlinePage = $pageRepository->getPage($processedRecordVariables['homepageUid']); $smallColumnsRootline = (int)$rootlinePage['tx_t3sbootstrap_smallColumns']; $smallColumns = $smallColumnsCurrent ?: $smallColumnsRootline; diff --git a/Classes/Domain/Repository/ConfigRepository.php b/Classes/Domain/Repository/ConfigRepository.php index e9db89d5..0903506f 100644 --- a/Classes/Domain/Repository/ConfigRepository.php +++ b/Classes/Domain/Repository/ConfigRepository.php @@ -8,13 +8,16 @@ * LICENSE file that was distributed with this source code. */ +use TYPO3\CMS\Extbase\Persistence\Repository; +use TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings; + /** * The repository for Configs */ -class ConfigRepository extends \TYPO3\CMS\Extbase\Persistence\Repository +class ConfigRepository extends Repository { public function initializeObject() { - $querySettings = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings::class); + $querySettings = $this->objectManager->get(Typo3QuerySettings::class); $querySettings->setRespectStoragePage(false); $this->setDefaultQuerySettings($querySettings); } diff --git a/Classes/EventListener/AssetRenderer/IsInline.php b/Classes/EventListener/AssetRenderer/IsInline.php index 65c31afd..90e4a902 100644 --- a/Classes/EventListener/AssetRenderer/IsInline.php +++ b/Classes/EventListener/AssetRenderer/IsInline.php @@ -91,16 +91,16 @@ public function __invoke(BeforeJavaScriptsRenderingEvent $event): void if (substr($library, 0, 7) == 'vanilla' ) { $js .= $source['source'] .PHP_EOL; $event->getAssetCollector()->removeInlineJavaScript($library); - } elseif ( GeneralUtility::isFirstPartOfStr($library, 'background-video-') ) { + } elseif ( str_starts_with($library, 'background-video-') ) { $video .= $source['source'] .PHP_EOL; $event->getAssetCollector()->removeInlineJavaScript($library); - } elseif ( GeneralUtility::isFirstPartOfStr($library, 'addheight-') ) { + } elseif ( str_starts_with($library, 'addheight-') ) { $addheight .= $source['source']; $event->getAssetCollector()->removeInlineJavaScript($library); } elseif ( $library == 'contentconsent' ) { $contentconsent .= $source['source']; $event->getAssetCollector()->removeInlineJavaScript($library); - } elseif ( GeneralUtility::isFirstPartOfStr($library, 'contentconsentthumbnailautosize-') ) { + } elseif ( str_starts_with($library, 'contentconsentthumbnailautosize-') ) { $contentconsentthumbnailautosize .= $source['source']; $event->getAssetCollector()->removeInlineJavaScript($library); } else { diff --git a/Classes/Updates/t3sbMigrateUpdateWizard.php b/Classes/Updates/t3sbMigrateUpdateWizard.php index 75b54078..e33208c2 100644 --- a/Classes/Updates/t3sbMigrateUpdateWizard.php +++ b/Classes/Updates/t3sbMigrateUpdateWizard.php @@ -16,7 +16,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; -class t3sbMigrateUpdateWizard implements UpgradeWizardInterface +class T3sbMigrateUpdateWizard implements UpgradeWizardInterface { /** * Return the identifier for this wizard @@ -64,7 +64,7 @@ public function executeUpdate(): bool } /** - * Upgrade all grid columns + * Migrate Bootstrap Utility Classes from v4 to v5 * * @return void */ @@ -80,10 +80,10 @@ protected function upgradeColumns(): void $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); $queryBuilder = $connectionPool->getQueryBuilderForTable('tx_t3sbootstrap_domain_model_config'); $statements = $queryBuilder - ->select('uid', $field) - ->from('tx_t3sbootstrap_domain_model_config') - ->execute() - ->fetchAll(); + ->select('uid', $field) + ->from('tx_t3sbootstrap_domain_model_config') + ->execute() + ->fetchAll(); foreach ($statements as $statement) { $recordId = (int)$statement['uid']; $pos = strpos((string)$statement[$field], $rename); @@ -91,31 +91,28 @@ protected function upgradeColumns(): void // do nothing } else { $queryBuilder - ->update('tx_t3sbootstrap_domain_model_config') - ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($recordId, \PDO::PARAM_INT)) - ) - ->set($field, str_replace($rename, $renameTo[$key], $statement[$field])) - ->execute(); + ->update('tx_t3sbootstrap_domain_model_config') + ->where( + $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($recordId, \PDO::PARAM_INT)) + ) + ->set($field, str_replace($rename, $renameTo[$key], $statement[$field])) + ->execute(); } } } } /* sys_file_reference */ - $toRename = ['left', 'right', 'ml-', 'mr-', 'pl-', 'pr-']; - $renameTo = ['start', 'end', 'ms-', 'me-', 'ps-', 'pe-']; $fields = ['tx_t3sbootstrap_extra_class', 'tx_t3sbootstrap_extra_imgclass', 'tx_t3sbootstrap_description_align']; - foreach ($fields as $field) { foreach ($toRename as $key=>$rename) { $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); $queryBuilder = $connectionPool->getQueryBuilderForTable('sys_file_reference'); $statements = $queryBuilder - ->select('uid', $field) - ->from('sys_file_reference') - ->execute() - ->fetchAll(); + ->select('uid', $field) + ->from('sys_file_reference') + ->execute() + ->fetchAll(); foreach ($statements as $statement) { $recordId = (int)$statement['uid']; $pos = strpos((string)$statement[$field], $rename); @@ -123,81 +120,78 @@ protected function upgradeColumns(): void // do nothing } else { $queryBuilder - ->update('sys_file_reference') - ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($recordId, \PDO::PARAM_INT)) - ) - ->set($field, str_replace($rename, $renameTo[$key], $statement[$field])) - ->execute(); + ->update('sys_file_reference') + ->where( + $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($recordId, \PDO::PARAM_INT)) + ) + ->set($field, str_replace($rename, $renameTo[$key], $statement[$field])) + ->execute(); } } } } - /* pages */ - $toRename = ['var(--']; - $renameTo = ['var(--bs-']; - $fields = ['tx_t3sbootstrap_titlecolor', 'tx_t3sbootstrap_subtitlecolor', 'tx_t3sbootstrap_navigationcolor', 'tx_t3sbootstrap_navigationactivecolor', 'tx_t3sbootstrap_navigationhover', 'tx_t3sbootstrap_navigationbgcolor']; - + /* tt_content */ + $fields = ['tx_t3sbootstrap_extra_class', 'tx_t3sbootstrap_header_class']; foreach ($fields as $field) { foreach ($toRename as $key=>$rename) { $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); - $queryBuilder = $connectionPool->getQueryBuilderForTable('pages'); + $queryBuilder = $connectionPool->getQueryBuilderForTable('tt_content'); $statements = $queryBuilder - ->select('uid', $field) - ->from('pages') - ->execute() - ->fetchAll(); + ->select('uid', $field) + ->from('tt_content') + ->execute() + ->fetchAll(); foreach ($statements as $statement) { $recordId = (int)$statement['uid']; - $check = strpos((string)$statement[$field], 'var(--bs-'); $pos = strpos((string)$statement[$field], $rename); - if ($pos === false || $check === 0) { + if ($pos === false) { // do nothing } else { $queryBuilder - ->update('pages') - ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($recordId, \PDO::PARAM_INT)) - ) - ->set($field, str_replace($rename, $renameTo[$key], $statement[$field])) - ->execute(); + ->update('tt_content') + ->where( + $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($recordId, \PDO::PARAM_INT)) + ) + ->set($field, str_replace($rename, $renameTo[$key], $statement[$field])) + ->execute(); } } } } - /* tt_content */ - $toRename = ['left', 'right', 'ml-', 'mr-', 'pl-', 'pr-']; - $renameTo = ['start', 'end', 'ms-', 'me-', 'ps-', 'pe-']; - $fields = ['tx_t3sbootstrap_extra_class', 'tx_t3sbootstrap_header_class']; - + /* pages */ + $toRename = ['var(--']; + $renameTo = ['var(--bs-']; + $fields = ['tx_t3sbootstrap_titlecolor', 'tx_t3sbootstrap_subtitlecolor', 'tx_t3sbootstrap_navigationcolor', 'tx_t3sbootstrap_navigationactivecolor', 'tx_t3sbootstrap_navigationhover', 'tx_t3sbootstrap_navigationbgcolor']; foreach ($fields as $field) { foreach ($toRename as $key=>$rename) { $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); - $queryBuilder = $connectionPool->getQueryBuilderForTable('tt_content'); + $queryBuilder = $connectionPool->getQueryBuilderForTable('pages'); $statements = $queryBuilder - ->select('uid', $field) - ->from('tt_content') - ->execute() - ->fetchAll(); + ->select('uid', $field) + ->from('pages') + ->execute() + ->fetchAll(); foreach ($statements as $statement) { $recordId = (int)$statement['uid']; + $check = strpos((string)$statement[$field], 'var(--bs-'); $pos = strpos((string)$statement[$field], $rename); - if ($pos === false) { + if ($pos === false || $check === 0) { // do nothing } else { $queryBuilder - ->update('tt_content') - ->where( - $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($recordId, \PDO::PARAM_INT)) - ) - ->set($field, str_replace($rename, $renameTo[$key], $statement[$field])) - ->execute(); + ->update('pages') + ->where( + $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($recordId, \PDO::PARAM_INT)) + ) + ->set($field, str_replace($rename, $renameTo[$key], $statement[$field])) + ->execute(); } } } } + } /** @@ -235,14 +229,118 @@ public function getPrerequisites(): array /** - * Check if there are record within database table with an empty "compress" field. + * Check for old Bootstrap Utility Classes * * @return bool * @throws \InvalidArgumentException */ protected function checkIfWizardIsRequired(): bool { - return true; + + $require = false; + + /* tx_t3sbootstrap_domain_model_config */ + $toRename = ['left', 'right', 'ml-', 'mr-', 'pl-', 'pr-']; + $renameTo = ['start', 'end', 'ms-', 'me-', 'ps-', 'pe-']; + $fields = ['page_titleclass', 'meta_class', 'navbar_class', 'jumbotron_class', 'breadcrumb_class', 'footer_class', 'expandedcontent_classtop', 'expandedcontent_classbottom', 'page_content_extra_class', 'body_extra_class', 'aside_extra_class', 'main_extra_class']; + + foreach ($fields as $field) { + foreach ($toRename as $key=>$rename) { + $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); + $queryBuilder = $connectionPool->getQueryBuilderForTable('tx_t3sbootstrap_domain_model_config'); + $statements = $queryBuilder + ->select('uid', $field) + ->from('tx_t3sbootstrap_domain_model_config') + ->execute() + ->fetchAll(); + + foreach ($statements as $statement) { + $pos = strpos((string)$statement[$field], $rename); + if ($pos === false) { + // do nothing + } else { + $require = true; + } + } + } + } + + /* sys_file_reference */ + $toRename = ['left', 'right', 'ml-', 'mr-', 'pl-', 'pr-']; + $renameTo = ['start', 'end', 'ms-', 'me-', 'ps-', 'pe-']; + $fields = ['tx_t3sbootstrap_extra_class', 'tx_t3sbootstrap_extra_imgclass', 'tx_t3sbootstrap_description_align']; + + foreach ($fields as $field) { + foreach ($toRename as $key=>$rename) { + $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); + $queryBuilder = $connectionPool->getQueryBuilderForTable('sys_file_reference'); + $statements = $queryBuilder + ->select('uid', $field) + ->from('sys_file_reference') + ->execute() + ->fetchAll(); + foreach ($statements as $statement) { + $pos = strpos((string)$statement[$field], $rename); + if ($pos === false) { + // do nothing + } else { + $require = true; + } + } + } + } + + /* pages */ + $toRename = ['var(--']; + $renameTo = ['var(--bs-']; + $fields = ['tx_t3sbootstrap_titlecolor', 'tx_t3sbootstrap_subtitlecolor', 'tx_t3sbootstrap_navigationcolor', 'tx_t3sbootstrap_navigationactivecolor', 'tx_t3sbootstrap_navigationhover', 'tx_t3sbootstrap_navigationbgcolor']; + + foreach ($fields as $field) { + foreach ($toRename as $key=>$rename) { + $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); + $queryBuilder = $connectionPool->getQueryBuilderForTable('pages'); + $statements = $queryBuilder + ->select('uid', $field) + ->from('pages') + ->execute() + ->fetchAll(); + foreach ($statements as $statement) { + $pos = strpos((string)$statement[$field], $rename); + if ($pos === false) { + // do nothing + } else { + $require = true; + } + } + } + } + + /* tt_content */ + $toRename = ['left', 'right', 'ml-', 'mr-', 'pl-', 'pr-']; + $renameTo = ['start', 'end', 'ms-', 'me-', 'ps-', 'pe-']; + $fields = ['tx_t3sbootstrap_extra_class', 'tx_t3sbootstrap_header_class']; + + foreach ($fields as $field) { + foreach ($toRename as $key=>$rename) { + $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); + $queryBuilder = $connectionPool->getQueryBuilderForTable('tt_content'); + $statements = $queryBuilder + ->select('uid', $field) + ->from('tt_content') + ->execute() + ->fetchAll(); + foreach ($statements as $statement) { + $pos = strpos((string)$statement[$field], $rename); + if ($pos === false) { + // do nothing + } else { + $require = true; + } + } + } + } + + return $require; } } diff --git a/Classes/Utility/FileRendererInterface.php b/Classes/Utility/FileRendererInterface.php index de219847..75fbf743 100644 --- a/Classes/Utility/FileRendererInterface.php +++ b/Classes/Utility/FileRendererInterface.php @@ -9,11 +9,12 @@ */ use TYPO3\CMS\Core\Resource\FileInterface; +use TYPO3\CMS\Core\SingletonInterface; /** * Class FileRendererInterface */ -interface FileRendererInterface extends \TYPO3\CMS\Core\SingletonInterface { +interface FileRendererInterface extends SingletonInterface { /** * Returns the priority of the renderer diff --git a/Classes/Utility/YouTubeRenderer.php b/Classes/Utility/YouTubeRenderer.php index fb4a5513..f5ede42d 100644 --- a/Classes/Utility/YouTubeRenderer.php +++ b/Classes/Utility/YouTubeRenderer.php @@ -8,6 +8,7 @@ * LICENSE file that was distributed with this source code. */ +use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Resource\File; use TYPO3\CMS\Core\Resource\FileInterface; use TYPO3\CMS\Core\Resource\FileReference; @@ -63,7 +64,7 @@ protected function getOnlineMediaHelper(FileInterface $file) $orgFile = $orgFile->getOriginalFile(); } if ($orgFile instanceof File) { - $this->onlineMediaHelper = OnlineMediaHelperRegistry::getInstance()->getOnlineMediaHelper($orgFile); + $this->onlineMediaHelper = GeneralUtility::makeInstance(OnlineMediaHelperRegistry::class)->getOnlineMediaHelper($orgFile); } else { $this->onlineMediaHelper = false; } diff --git a/Classes/ViewHelpers/GifbuilderViewHelper.php b/Classes/ViewHelpers/GifbuilderViewHelper.php index 877370ed..590e6c49 100644 --- a/Classes/ViewHelpers/GifbuilderViewHelper.php +++ b/Classes/ViewHelpers/GifbuilderViewHelper.php @@ -18,6 +18,7 @@ use TYPO3\CMS\Extbase\Service\ImageService; use TYPO3\CMS\Extbase\Object\ObjectManager; use TYPO3\CMS\Core\Http\ApplicationType; +use TYPO3\CMS\Core\Resource\ResourceFactory; class GifbuilderViewHelper extends AbstractViewHelper @@ -51,7 +52,7 @@ public static function renderStatic( if (defined('TYPO3') && ApplicationType::fromRequest($GLOBALS['TYPO3_REQUEST'])->isFrontend()) { $objectManager = GeneralUtility::makeInstance(ObjectManager::class); $imageService = $objectManager->get(ImageService::class); - $resourceFactory = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Resource\ResourceFactory::class); + $resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class); $file = $resourceFactory->getFileObjectFromCombinedIdentifier('0:/'.$path); $width = 800; $height = 450; diff --git a/Configuration/FlexForms/CardSetting.xml b/Configuration/FlexForms/CardSetting.xml index e9d9590b..05e667f9 100644 --- a/Configuration/FlexForms/CardSetting.xml +++ b/Configuration/FlexForms/CardSetting.xml @@ -234,6 +234,16 @@ + + + + + + check + + + + diff --git a/Configuration/FlexForms/Container/CardWrapper.xml b/Configuration/FlexForms/Container/CardWrapper.xml index 0a5b7438..21545336 100644 --- a/Configuration/FlexForms/Container/CardWrapper.xml +++ b/Configuration/FlexForms/Container/CardWrapper.xml @@ -303,6 +303,16 @@ + + + + + FIELD:sDEF.card_wrapper:=:deck + + check + + + diff --git a/Configuration/TCA/Overrides/sys_file_reference.php b/Configuration/TCA/Overrides/sys_file_reference.php index 9f752cc3..5481c5e2 100644 --- a/Configuration/TCA/Overrides/sys_file_reference.php +++ b/Configuration/TCA/Overrides/sys_file_reference.php @@ -106,7 +106,7 @@ 'type' => 'check', 'items' => [ '1' => [ - '0' => 'LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.enabled' + '0' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.enabled' ] ] ] @@ -185,7 +185,7 @@ 'type' => 'check', 'items' => [ '1' => [ - '0' => 'LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.enabled' + '0' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.enabled' ] ] ] diff --git a/Configuration/TCA/Overrides/tt_content.php b/Configuration/TCA/Overrides/tt_content.php index 53711088..322db979 100644 --- a/Configuration/TCA/Overrides/tt_content.php +++ b/Configuration/TCA/Overrides/tt_content.php @@ -1,33 +1,42 @@ get('t3sbootstrap'); +$extconf = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get('t3sbootstrap'); /*************** * Add new EXT:container CTypes */ # GRID COLUMNS -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'two_columns', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.twoColumns.title', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.twoColumns.description', @@ -61,9 +70,9 @@ --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended '; -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'three_columns', // CType 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.threeColumns.title', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.threeColumns.description', @@ -81,9 +90,9 @@ ); $GLOBALS['TCA']['tt_content']['types']['three_columns']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['two_columns']['showitem']; -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'four_columns', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.fourColumns.title', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.fourColumns.description', @@ -102,9 +111,9 @@ ); $GLOBALS['TCA']['tt_content']['types']['four_columns']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['two_columns']['showitem']; -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'six_columns', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.sixColumns.title', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.sixColumns.description', @@ -127,9 +136,9 @@ # CARD WRAPPER -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'card_wrapper', 'Card Wrapper', 'In addition to styling the content within cards, Bootstrap includes a few options for laying out series of cards.', @@ -147,9 +156,9 @@ # BUTTON GROUP -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'button_group', 'Button Group', 'Group a series of buttons together on a single line with the button group.', @@ -166,9 +175,9 @@ $GLOBALS['TCA']['tt_content']['types']['button_group']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['two_columns']['showitem']; # AUTO LAYOUT -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'autoLayout_row', 'Auto-layout', 'Options: "Equal-width", "Setting one column width" or "Variable width content".', @@ -185,9 +194,9 @@ $GLOBALS['TCA']['tt_content']['types']['autoLayout_row']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['two_columns']['showitem']; # BACKGROUND WRAPPER -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'background_wrapper', 'Background Wrapper', 'Options: "Full width container with background color -image or -Youtube vido.', @@ -231,9 +240,9 @@ ]; # PARALLAX WRAPPER -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'parallax_wrapper', 'Parallax Wrapper', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.parallaxWrapper.description', @@ -250,9 +259,9 @@ $GLOBALS['TCA']['tt_content']['types']['parallax_wrapper']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['background_wrapper']['showitem']; # CONTAINER -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'container', 'Container', 'Bootstrap .container', @@ -269,9 +278,9 @@ $GLOBALS['TCA']['tt_content']['types']['container']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['two_columns']['showitem']; # CAROUSEL CONTAINER -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'carousel_container', 'Carousel Container', 'A container for several Carousel slides (CE:t3sb_carousel)', @@ -288,9 +297,9 @@ $GLOBALS['TCA']['tt_content']['types']['carousel_container']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['two_columns']['showitem']; # COLLAPSIBLE CONTAINER -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'collapsible_container', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.collapsibleContainer.title', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.collapsibleContainer.description', @@ -307,9 +316,9 @@ $GLOBALS['TCA']['tt_content']['types']['collapsible_container']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['two_columns']['showitem']; # COLLAPSIBLE ELEMENT -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'collapsible_accordion', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.collapsibleElement.title', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.collapsibleElement.description', @@ -326,9 +335,9 @@ $GLOBALS['TCA']['tt_content']['types']['collapsible_accordion']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['background_wrapper']['showitem']; # MODAL CONTAINER -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'modal', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.modal.title', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.modal.description', @@ -345,9 +354,9 @@ $GLOBALS['TCA']['tt_content']['types']['modal']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['two_columns']['showitem']; # TAB CONTAINER -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'tabs_container', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.tabContainer.title', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.tabContainer.description', @@ -364,9 +373,9 @@ $GLOBALS['TCA']['tt_content']['types']['tabs_container']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['two_columns']['showitem']; # TAB -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'tabs_tab', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.tabElement.title', 'LLL:EXT:t3sbootstrap/Resources/Private/Language/locallang_be.xlf:tx_container.tabElement.description', @@ -383,9 +392,9 @@ $GLOBALS['TCA']['tt_content']['types']['tabs_tab']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['two_columns']['showitem']; # LIST GROUP WRAPPER -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'listGroup_wrapper', 'List Group Wrapper', 'Shows other CEs in a bootstrap list group. Nice with "Link the entire Content Element"', @@ -402,9 +411,9 @@ $GLOBALS['TCA']['tt_content']['types']['listGroup_wrapper']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['two_columns']['showitem']; # MASONRY -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'masonry_wrapper', 'Masonry Wrapper', 'Masonry with the Bootstrap grid system', @@ -421,9 +430,9 @@ $GLOBALS['TCA']['tt_content']['types']['masonry_wrapper']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['two_columns']['showitem']; # SWIPE CONTAINER -\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\B13\Container\Tca\Registry::class)->configureContainer( +GeneralUtility::makeInstance(Registry::class)->configureContainer( ( - new \B13\Container\Tca\ContainerConfiguration( + new ContainerConfiguration( 'swiper_container', 'Swiper Container', 'A container for several Swipe slides (CE:t3sb_carousel)', @@ -443,7 +452,7 @@ /*************** * Add new CTypes */ -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem( +ExtensionManagementUtility::addTcaSelectItem( 'tt_content', 'CType', [ @@ -454,7 +463,7 @@ 'textmedia', 'after' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem( +ExtensionManagementUtility::addTcaSelectItem( 'tt_content', 'CType', [ @@ -465,7 +474,7 @@ 't3sbs_mediaobject', 'after' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem( +ExtensionManagementUtility::addTcaSelectItem( 'tt_content', 'CType', [ @@ -476,7 +485,7 @@ 't3sbs_card', 'after' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem( +ExtensionManagementUtility::addTcaSelectItem( 'tt_content', 'CType', [ @@ -487,7 +496,7 @@ 't3sbs_toast', 'after' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem( +ExtensionManagementUtility::addTcaSelectItem( 'tt_content', 'CType', [ @@ -498,7 +507,7 @@ 't3sbs_carousel', 'after' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem( +ExtensionManagementUtility::addTcaSelectItem( 'tt_content', 'CType', [ @@ -509,7 +518,7 @@ 't3sbs_button', 'after' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem( +ExtensionManagementUtility::addTcaSelectItem( 'tt_content', 'CType', [ @@ -604,7 +613,7 @@ 'type' => 'check', 'items' => [ '1' => [ - '0' => 'LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.enabled' + '0' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.enabled' ] ] ] @@ -973,7 +982,7 @@ 'type' => 'check', 'items' => [ '1' => [ - '0' => 'LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.enabled' + '0' => 'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.enabled' ] ] ] @@ -1067,7 +1076,7 @@ ], 'tx_t3sbootstrap_animateCssRepeat' => [ 'exclude' => 1, - 'label' => 'Repeat (jQuery-viewport-checker option)', + 'label' => 'Repeat', 'config' => [ 'type' => 'check' ] @@ -1103,7 +1112,7 @@ ]; -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tt_content',$tempContentColumns); +ExtensionManagementUtility::addTCAcolumns('tt_content',$tempContentColumns); unset($tempContentColumns); @@ -1234,7 +1243,7 @@ ] ]; // Add flexform -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue('*', 'FILE:EXT:t3sbootstrap/Configuration/FlexForms/CardContent.xml', 't3sbs_card'); +ExtensionManagementUtility::addPiFlexFormValue('*', 'FILE:EXT:t3sbootstrap/Configuration/FlexForms/CardContent.xml', 't3sbs_card'); /*************** @@ -1290,45 +1299,45 @@ ]; -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette( +ExtensionManagementUtility::addFieldsToPalette( 'tt_content', 'appearanceLinks', 'tx_t3sbootstrap_header_sectionMenu', 'after:sectionIndex' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette( +ExtensionManagementUtility::addFieldsToPalette( 'tt_content', 'header', 'tx_t3sbootstrap_header_celink', 'after:header_link' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette( +ExtensionManagementUtility::addFieldsToPalette( 'tt_content', 'headers', 'tx_t3sbootstrap_header_celink', 'after:header_link' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette( +ExtensionManagementUtility::addFieldsToPalette( 'tt_content', 'mediaAdjustments', 'tx_t3sbootstrap_bordercolor', 'after:imageborder' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette( +ExtensionManagementUtility::addFieldsToPalette( 'tt_content', 'mediaAdjustments', 'tx_t3sbootstrap_image_ratio', 'after:tx_t3sbootstrap_bordercolor' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette( +ExtensionManagementUtility::addFieldsToPalette( 'tt_content', 'mediaAdjustments', 'tx_t3sbootstrap_image_orig', 'before:tx_t3sbootstrap_image_ratio' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette( +ExtensionManagementUtility::addFieldsToPalette( 'tt_content', 'mediaAdjustments', 'tx_t3sbootstrap_inTextImgRowWidth', @@ -1337,33 +1346,33 @@ # add palette bootstrap etc -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes( +ExtensionManagementUtility::addToAllTCAtypes( 'tt_content', '--palette--; ;bsHeaderExtra', '', 'after:header' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes( +ExtensionManagementUtility::addToAllTCAtypes( 'tt_content', '--palette--;Bootstrap Color;bootstrapColor', '', 'after:layout' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes( +ExtensionManagementUtility::addToAllTCAtypes( 'tt_content', '--palette--;Bootstrap Utilities;bootstrap', '', 'after:layout' ); -\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes( +ExtensionManagementUtility::addToAllTCAtypes( 'tt_content', '--palette--;Bootstrap Spacing;bootstrapSpacing', '', 'after:layout' ); # add palette animate if EXT:content_animations is not loaded -if ( !\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('content_animations') ) { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes( +if ( !ExtensionManagementUtility::isLoaded('content_animations') ) { + ExtensionManagementUtility::addToAllTCAtypes( 'tt_content', '--palette--;Animation;animate', '', @@ -1414,7 +1423,7 @@ } if ($extconf['sectionOrder']) { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette( + ExtensionManagementUtility::addFieldsToPalette( 'tt_content', 'appearanceLinks', 'tx_t3sbootstrap_sectionOrder', @@ -1426,12 +1435,12 @@ /*************** * Show preview of tt_content elements in page module */ - $GLOBALS['TCA']['tt_content']['ctrl']['previewRenderer'] = T3SBS\T3sbootstrap\Backend\Preview\DefaultPreviewRenderer::class; + $GLOBALS['TCA']['tt_content']['ctrl']['previewRenderer'] = DefaultPreviewRenderer::class; $containers = ['two_columns', 'three_columns', 'four_columns', 'six_columns', 'card_wrapper', 'button_group', 'autoLayout_row', 'background_wrapper','parallax_wrapper',' container', 'carousel_container', 'collapsible_container', 'collapsible_accordion', 'modal', 'tabs_container', 'tabs_tab', 'listGroup_wrapper', 'masonry_wrapper', 'swiper_container']; foreach ($containers as $container) { - $GLOBALS['TCA']['tt_content']['types'][trim($container)]['previewRenderer'] = T3SBS\T3sbootstrap\Backend\Preview\T3sbPreviewRenderer::class; + $GLOBALS['TCA']['tt_content']['types'][trim($container)]['previewRenderer'] = T3sbPreviewRenderer::class; } } diff --git a/Configuration/TypoScript/Lib/ContentElement.typoscript b/Configuration/TypoScript/Lib/ContentElement.typoscript index 77147b4d..58ba0e9d 100644 --- a/Configuration/TypoScript/Lib/ContentElement.typoscript +++ b/Configuration/TypoScript/Lib/ContentElement.typoscript @@ -69,8 +69,6 @@ lib.contentElement { owlCarouselVersion = {$bootstrap.cdn.owlCarousel} swiperVersion = {$bootstrap.cdn.swiper} ytPlayerVersion = {$bootstrap.cdn.ytPlayer} - viewportcheckerVersion = {$bootstrap.cdn.viewportchecker} - viewportcheckerIntegrity = {$bootstrap.cdn.viewportcheckerIntegrity} cdn = {$bootstrap.cdn.enable} highlightIntegrity = {$bootstrap.cdn.highlightIntegrity} highlightVersion = {$bootstrap.cdn.highlight} diff --git a/Configuration/TypoScript/Page/IncludeBootstrapCss.typoscript b/Configuration/TypoScript/Page/IncludeBootstrapCss.typoscript index a2ddfe56..d3fd90cd 100644 --- a/Configuration/TypoScript/Page/IncludeBootstrapCss.typoscript +++ b/Configuration/TypoScript/Page/IncludeBootstrapCss.typoscript @@ -8,7 +8,7 @@ page { ########################################################################################################## # Local (fileadmin) - bootstrapCSS = fileadmin/T3SB/Resources/Public/CSS/bootstrap.min.css + bootstrapCSS = /fileadmin/T3SB/Resources/Public/CSS/bootstrap.min.css bootstrapCSS.forceOnTop = 1 bootstrapCSS.if { isFalse = {$bootstrap.cdn.enable} diff --git a/Configuration/TypoScript/Page/IncludeDefault.typoscript b/Configuration/TypoScript/Page/IncludeDefault.typoscript index 8e0cd79f..7e5b4270 100644 --- a/Configuration/TypoScript/Page/IncludeDefault.typoscript +++ b/Configuration/TypoScript/Page/IncludeDefault.typoscript @@ -125,7 +125,7 @@ page.includeJSLibs { [{$bootstrap.config.jqueryHeader} == 1 && {$bootstrap.cdn.enable} == 0] page.includeJSFooterlibs.jquery > page.includeJSLibs { - jquery = fileadmin/T3SB/Resources/Public/JS/jquery.min.js + jquery = /fileadmin/T3SB/Resources/Public/JS/jquery.min.js jquery.forceOnTop = 1 jquery.if.isFalse = {$bootstrap.disable.jquery} } diff --git a/Configuration/TypoScript/Page/IncludeLocal.typoscript b/Configuration/TypoScript/Page/IncludeLocal.typoscript index dc3af6f6..9e4fea01 100644 --- a/Configuration/TypoScript/Page/IncludeLocal.typoscript +++ b/Configuration/TypoScript/Page/IncludeLocal.typoscript @@ -8,7 +8,7 @@ page { # ########################################################################################################## - cookieconsentCss = fileadmin/T3SB/Resources/Public/CSS/cookieconsent.min.css + cookieconsentCss = /fileadmin/T3SB/Resources/Public/CSS/cookieconsent.min.css cookieconsentCss.if.isTrue = {$bootstrap.extconf.cookieconsent} } @@ -21,13 +21,13 @@ page { # ########################################################################################################## - jquery = fileadmin/T3SB/Resources/Public/JS/jquery.min.js + jquery = /fileadmin/T3SB/Resources/Public/JS/jquery.min.js jquery.forceOnTop = 1 jquery.if.isFalse = {$bootstrap.disable.jquery} - popper = fileadmin/T3SB/Resources/Public/JS/popper.js + popper = /fileadmin/T3SB/Resources/Public/JS/popper.js - bootstrap = fileadmin/T3SB/Resources/Public/JS/bootstrap.min.js + bootstrap = /fileadmin/T3SB/Resources/Public/JS/bootstrap.min.js } @@ -39,7 +39,7 @@ page { # ########################################################################################################## - cookieconsentJs = fileadmin/T3SB/Resources/Public/JS/cookieconsent.min.js + cookieconsentJs = /fileadmin/T3SB/Resources/Public/JS/cookieconsent.min.js cookieconsentJs.if.isTrue = {$bootstrap.extconf.cookieconsent} ########################################################################################################## @@ -48,7 +48,7 @@ page { # ########################################################################################################## - t3sbjqueryeasing = fileadmin/T3SB/Resources/Public/JS/jquery.easing.min.js + t3sbjqueryeasing = /fileadmin/T3SB/Resources/Public/JS/jquery.easing.min.js t3sbjqueryeasing.forceOnTop = 1 t3sbjqueryeasing.if.isFalse = {$bootstrap.disable.jquery} @@ -58,7 +58,7 @@ page { # ########################################################################################################## - lazyload = fileadmin/T3SB/Resources/Public/JS/lazyload.min.js + lazyload = /fileadmin/T3SB/Resources/Public/JS/lazyload.min.js lazyload.if.isTrue = {$bootstrap.extconf.lazyLoad} ########################################################################################################## @@ -68,7 +68,7 @@ page { ########################################################################################################## # Local - picturefill = fileadmin/T3SB/Resources/Public/JS/picturefill.min.js + picturefill = /fileadmin/T3SB/Resources/Public/JS/picturefill.min.js picturefill.if.isTrue = {$bootstrap.image.picturefill} } diff --git a/Configuration/TypoScript/Page/JS/CookieConsent.typoscript b/Configuration/TypoScript/Page/JS/CookieConsent.typoscript index 4bf47ca9..389bedbd 100644 --- a/Configuration/TypoScript/Page/JS/CookieConsent.typoscript +++ b/Configuration/TypoScript/Page/JS/CookieConsent.typoscript @@ -1,86 +1,85 @@ temp.jsCookieConsent = COA temp.jsCookieConsent { - -1 = TEXT -1.value ( - - // Cookieconsent - page.jsInline.5 - window.addEventListener("load", function(){ - var p; - - window.cookieconsent.initialise({ - - onInitialise: function(status) { - var type = this.options.type; - console.log("cookieconsent_type:", type); - console.log("cookieconsent_status:", status); - }, - - theme: "{$bootstrap.cookieconsent.theme}", - position: "{$bootstrap.cookieconsent.position}", - palette: { - popup: { - background: "{$bootstrap.cookieconsent.popup.background}", - text: "{$bootstrap.cookieconsent.popup.text}" + 1 = TEXT + 1.value ( + + // Cookieconsent - page.jsInline.5 + window.addEventListener("load", function(){ + var p; + + window.cookieconsent.initialise({ + + onInitialise: function(status) { + var type = this.options.type; + console.log("cookieconsent_type:", type); + console.log("cookieconsent_status:", status); }, - button: { - background: "{$bootstrap.cookieconsent.button.background}", - text: "{$bootstrap.cookieconsent.button.text}" - } - }, - content: { - message: "{$bootstrap.cookieconsent.message}", - dismiss: "{$bootstrap.cookieconsent.dismiss}", - deny: "{$bootstrap.cookieconsent.deny}", - allow: "{$bootstrap.cookieconsent.allow}", - link: "{$bootstrap.cookieconsent.link}", - href: "{$bootstrap.cookieconsent.href}", - }, - - elements: { - allow: '{{allow}}', - }, - - type: "{$bootstrap.cookieconsent.type}", - - revokeBtn: "{$bootstrap.cookieconsent.revokeBtn}", - // no popup on this pages - blacklistPage: ["{$bootstrap.cookieconsent.href}"], - - onStatusChange: function(status) { - console.log(this.hasConsented() ? - 'enable cookies' : 'disable cookies'); - - var type = this.options.type; - if ( type == 'opt-in' && this.hasConsented() ) { - location.reload(true); - } - if ( type == 'opt-out' && !this.hasConsented() ) { - location.reload(true); - } - }, - - law: { - regionalLaw: {$bootstrap.cookieconsent.regionalLaw}, - }, - location: {$bootstrap.cookieconsent.location}, - - - }, function (popup) { - p = popup; - }, function (err) { - console.error(err); - }); - - - if ( document.getElementById('btn-revokeChoice') ) { - document.getElementById('btn-revokeChoice').onclick = function (e) { - p.revokeChoice(); - }; - } - - }); - -) + + theme: "{$bootstrap.cookieconsent.theme}", + position: "{$bootstrap.cookieconsent.position}", + palette: { + popup: { + background: "{$bootstrap.cookieconsent.popup.background}", + text: "{$bootstrap.cookieconsent.popup.text}" + }, + button: { + background: "{$bootstrap.cookieconsent.button.background}", + text: "{$bootstrap.cookieconsent.button.text}" + } + }, + content: { + message: "{$bootstrap.cookieconsent.message}", + dismiss: "{$bootstrap.cookieconsent.dismiss}", + deny: "{$bootstrap.cookieconsent.deny}", + allow: "{$bootstrap.cookieconsent.allow}", + link: "{$bootstrap.cookieconsent.link}", + href: "{$bootstrap.cookieconsent.href}", + }, + + elements: { + allow: '{{allow}}', + }, + + type: "{$bootstrap.cookieconsent.type}", + + revokeBtn: "{$bootstrap.cookieconsent.revokeBtn}", + // no popup on this pages + blacklistPage: ["{$bootstrap.cookieconsent.href}"], + + onStatusChange: function(status) { + console.log(this.hasConsented() ? + 'enable cookies' : 'disable cookies'); + + var type = this.options.type; + if ( type == 'opt-in' && this.hasConsented() ) { + location.reload(true); + } + if ( type == 'opt-out' && !this.hasConsented() ) { + location.reload(true); + } + }, + + law: { + regionalLaw: {$bootstrap.cookieconsent.regionalLaw}, + }, + location: {$bootstrap.cookieconsent.location}, + + + }, function (popup) { + p = popup; + }, function (err) { + console.error(err); + }); + + + if ( document.getElementById('btn-revokeChoice') ) { + document.getElementById('btn-revokeChoice').onclick = function (e) { + p.revokeChoice(); + }; + } + + }); + + ) } \ No newline at end of file diff --git a/Configuration/TypoScript/constants.typoscript b/Configuration/TypoScript/constants.typoscript index 5a6640fd..bbd4093b 100644 --- a/Configuration/TypoScript/constants.typoscript +++ b/Configuration/TypoScript/constants.typoscript @@ -27,7 +27,7 @@ bootstrap.cdn { # cat=bootstrap-cdn/a-enable/20; type=options[none=0, Cerulean=cerulean, Cosmo=cosmo, Cyborg=cyborg, Darkly=darkly, Flatly=flatly, Journal=journal, Litera=litera, Lumen=lumen, Lux=lux, Materia=materia, Minty=minty, Morph=morph Pulse=pulse, Quartz=quartz, Sandstone=sandstone, Simplex=simplex, Sketchy=sketchy, Slate=slate, Solar=solar, Spacelab=spacelab, Superhero=superhero, United=united, Vapor=vapor, Yeti=yeti, Zephyr=zephyr]; label=Bootswatch Themes CDN: Override default Bootstrap values with selected Bootswatch Theme (run Scheduler) - Info: https://bootswatch.com/. bootswatch = 0 # cat=bootstrap-cdn/b-version/10; type=small; label=Bootstrap: - bootstrap = 5.1.2 + bootstrap = 5.1.3 # cat=bootstrap-cdn/b-version/11; type=small; label=Popper js: popperjs = 2.10.2 # cat=bootstrap-cdn/b-version/13; type=small; label=Masonry js: @@ -43,11 +43,9 @@ bootstrap.cdn { # cat=bootstrap-cdn/b-version/27; type=small; label=Highlight: used with codesnippet highlight = 11.2.0 # cat=bootstrap-cdn/b-version/30; type=small; label=Lazyload: - lazyload = 17.4.0 + lazyload = 17.5.0 # cat=bootstrap-cdn/b-version/32; type=small; label=Picturefill: picturefill = 3.0.3 - # cat=bootstrap-cdn/b-version/35; type=small; label=Viewportchecker: - viewportchecker = 1.8.8 # cat=bootstrap-cdn/b-version/37; type=small; label=Animate CSS: animate = 4.1.1 # cat=bootstrap-cdn/b-version/40; type=small; label=Baguette Box: @@ -66,9 +64,9 @@ bootstrap.cdn { swiper = 7 # cat=bootstrap-cdn/c-integrity/10; type=small; label=Bootstrap CSS: - bootstrapCssIntegrity = sha384-uWxY/CJNBR+1zjPWmfnSnVxwRheevXITnMqoEIeG1LJrdI0GlVs/9cVSyPYXdcSF + bootstrapCssIntegrity = sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3 # cat=bootstrap-cdn/c-integrity/11; type=small; label=Bootstrap JS: - bootstrapJsIntegrity = sha384-PsUw7Xwds7x08Ew3exXhqzbhuEYmA2xnwc8BuD6SEr+UmEHlX8/MCltYEodzWA4u + bootstrapJsIntegrity = sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13 # cat=bootstrap-cdn/c-integrity/12; type=small; label=Popper js: popperjsIntegrity = sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB # cat=bootstrap-cdn/c-integrity/13; type=small; label=Masonry js: @@ -85,8 +83,6 @@ bootstrap.cdn { lazyloadIntegrity = # cat=bootstrap-cdn/c-integrity/32; type=small; label=Picturefill: picturefillIntegrity = - # cat=bootstrap-cdn/c-integrity/35; type=small; label=Viewportchecker: - viewportcheckerIntegrity = # cat=bootstrap-cdn/c-integrity/37; type=small; label=Baguette Box: baguetteBoxIntegrity = # cat=bootstrap-cdn/c-integrity/40; type=small; label=Magnific Popup: diff --git a/Configuration/TypoScript/setup.typoscript b/Configuration/TypoScript/setup.typoscript index 3dcb7dde..e8ec5892 100644 --- a/Configuration/TypoScript/setup.typoscript +++ b/Configuration/TypoScript/setup.typoscript @@ -20,6 +20,7 @@ module.tx_t3sbootstrap { breakpoint.lg = {$bootstrap.navbar.breakpoint.lg} breakpoint.xl = {$bootstrap.navbar.breakpoint.xl} breakpoint.xxl = {$bootstrap.navbar.breakpoint.xxl} + disableJquery = {$bootstrap.disable.jquery} cdn { // Versions bootstrap = {$bootstrap.cdn.bootstrap} @@ -31,7 +32,6 @@ module.tx_t3sbootstrap { fontawesome = {$bootstrap.cdn.fontawesome} lazyload = {$bootstrap.cdn.lazyload} picturefill = {$bootstrap.cdn.picturefill} - viewportchecker = {$bootstrap.cdn.viewportchecker} animate = {$bootstrap.cdn.animate} baguetteBox = {$bootstrap.cdn.baguetteBox} magnificpopup = {$bootstrap.cdn.magnificpopup} diff --git a/Contrib/scssphp/src/Compiler.php b/Contrib/scssphp/src/Compiler.php index 56713094..76e17f1b 100644 --- a/Contrib/scssphp/src/Compiler.php +++ b/Contrib/scssphp/src/Compiler.php @@ -731,7 +731,7 @@ protected function compileRoot(Block $rootBlock) * * @return void */ - protected function missingSelectors() + public function missingSelectors() { foreach ($this->extends as $extend) { if (isset($extend[3])) { @@ -749,7 +749,7 @@ protected function missingSelectors() $origin = $this->collapseSelectors($origin); $this->sourceLine = $block[Parser::SOURCE_LINE]; - throw $this->error("\"$origin\" failed to @extend \"$target\". The selector \"$target\" was not found."); + throw $this->errorMsg("\"$origin\" failed to @extend \"$target\". The selector \"$target\" was not found."); } } @@ -1970,7 +1970,7 @@ protected function evalSelectors($selectors) try { $isValid = $parser->parseSelector($buffer, $newSelectors, true); } catch (ParserException $e) { - throw $this->error($e->getMessage()); + throw $this->errorMsg($e->getMessage()); } if ($isValid) { @@ -2258,7 +2258,7 @@ protected function pushCallStack($name = '') $msg = $this->callStackMessage(true, 100); $msg = 'Infinite calling loop'; - throw $this->error($msg); + throw $this->errorMsg($msg); } } @@ -2328,7 +2328,7 @@ protected function compileChildrenNoReturn($stms, OutputBlock $out, $selfParent } if (isset($ret)) { - throw $this->error('@return may only be used within a function'); + throw $this->errorMsg('@return may only be used within a function'); } } @@ -3054,14 +3054,14 @@ protected function compileChild($child, OutputBlock $out) $replacedSel = $this->replaceSelfSelector($sel); if ($replacedSel !== $sel) { - throw $this->error('Parent selectors aren\'t allowed here.'); + throw $this->errorMsg('Parent selectors aren\'t allowed here.'); } $results = $this->evalSelectors([$sel]); foreach ($results as $result) { if (\count($result) !== 1) { - throw $this->error('complex selectors may not be extended.'); + throw $this->errorMsg('complex selectors may not be extended.'); } // only use the first one @@ -3214,7 +3214,7 @@ protected function compileChild($child, OutputBlock $out) $mixin = $this->get(static::$namespaces['mixin'] . $name, false); if (! $mixin) { - throw $this->error("Undefined mixin $name"); + throw $this->errorMsg("Undefined mixin $name"); } $callingScope = $this->getStoreEnv(); @@ -3271,7 +3271,7 @@ protected function compileChild($child, OutputBlock $out) if (! empty($mixin->parentEnv)) { $this->env->declarationScopeParent = $mixin->parentEnv; } else { - throw $this->error("@mixin $name() without parentEnv"); + throw $this->errorMsg("@mixin $name() without parentEnv"); } $this->compileChildrenNoReturn($mixin->children, $out, $selfParent, $this->env->marker . ' ' . $name); @@ -3338,10 +3338,10 @@ protected function compileChild($child, OutputBlock $out) $line = $this->sourceLine; $value = $this->compileValue($this->reduce($value, true)); - throw $this->error("File $fname on line $line ERROR: $value\n"); + throw $this->errorMsg("File $fname on line $line ERROR: $value\n"); default: - throw $this->error("unknown child type: $child[0]"); + throw $this->errorMsg("unknown child type: $child[0]"); } } @@ -4115,7 +4115,7 @@ protected function opColorColor($op, $left, $right) case '%': if ($rval == 0) { - throw $this->error("color: Can't take modulo by zero"); + throw $this->errorMsg("color: Can't take modulo by zero"); } $out[] = $lval % $rval; @@ -4123,7 +4123,7 @@ protected function opColorColor($op, $left, $right) case '/': if ($rval == 0) { - throw $this->error("color: Can't divide by zero"); + throw $this->errorMsg("color: Can't divide by zero"); } $out[] = (int) ($lval / $rval); @@ -4136,7 +4136,7 @@ protected function opColorColor($op, $left, $right) return $this->opNeq($left, $right); default: - throw $this->error("color: unknown op $op"); + throw $this->errorMsg("color: unknown op $op"); } } @@ -4670,7 +4670,7 @@ public function compileValue($value, $quote = true) return $this->compileCommentValue($value); default: - throw $this->error('unknown value type: ' . json_encode($value)); + throw $this->errorMsg('unknown value type: ' . json_encode($value)); } } @@ -5218,7 +5218,7 @@ public function get($name, $shouldThrow = true, Environment $env = null, $unredu } if ($shouldThrow) { - throw $this->error("Undefined variable \$$name" . ($maxDepth <= 0 ? ' (infinite recursion)' : '')); + throw $this->errorMsg("Undefined variable \$$name" . ($maxDepth <= 0 ? ' (infinite recursion)' : '')); } // found nothing @@ -5625,7 +5625,7 @@ protected function importFile($path, OutputBlock $out) $this->sourceLine = 1; $this->sourceColumn = 1; - throw $this->error('The Sass indented syntax is not implemented.'); + throw $this->errorMsg('The Sass indented syntax is not implemented.'); } if (isset($this->importCache[$realPath])) { @@ -5764,7 +5764,7 @@ public function findImport($url, $currentDir = null) } } - throw $this->error("`$url` file not found for @import"); + throw $this->errorMsg("`$url` file not found for @import"); } /** @@ -5813,7 +5813,7 @@ private function checkImportPathConflicts(array $paths) $formattedPrettyPaths[] = ' ' . $this->getPrettyPath($path); } - throw $this->error("It's not clear which file to import. Found:\n" . implode("\n", $formattedPrettyPaths)); + throw $this->errorMsg("It's not clear which file to import. Found:\n" . implode("\n", $formattedPrettyPaths)); } /** @@ -5973,7 +5973,7 @@ public function throwError($msg) E_USER_DEPRECATED ); - throw $this->error(...func_get_args()); + throw $this->errorMsg(...func_get_args()); } /** @@ -5985,7 +5985,7 @@ public function throwError($msg) * * @return CompilerException */ - public function error($msg, ...$args) + public function errorMsg($msg, ...$args) { if ($args) { $msg = sprintf($msg, ...$args); @@ -6038,7 +6038,7 @@ public function errorArgsNumber($functionName, $ExpectedArgs, $nbActual) $nbExpected = \count($ExpectedArgs); if ($nbActual > $nbExpected) { - return $this->error( + return $this->errorMsg( 'Error: Only %d arguments allowed in %s(), but %d were passed.', $nbExpected, $functionName, @@ -6051,7 +6051,7 @@ public function errorArgsNumber($functionName, $ExpectedArgs, $nbActual) array_unshift($missing, array_pop($ExpectedArgs)); } - return $this->error( + return $this->errorMsg( 'Error: %s() argument%s %s missing.', $functionName, count($missing) > 1 ? 's' : '', @@ -6115,7 +6115,7 @@ protected function handleImportLoop($name) } if (realpath($file) === $name) { - throw $this->error('An @import loop has been found: %s imports %s', $file, basename($file)); + throw $this->errorMsg('An @import loop has been found: %s imports %s', $file, basename($file)); } } } @@ -6152,7 +6152,7 @@ protected function callScssFunction($func, $argValues) if (! empty($func->parentEnv)) { $this->env->declarationScopeParent = $func->parentEnv; } else { - throw $this->error("@function $name() without parentEnv"); + throw $this->errorMsg("@function $name() without parentEnv"); } $ret = $this->compileChildren($func->children, $tmp, $this->env->marker . ' ' . $name); @@ -7152,7 +7152,7 @@ protected function compileColorPartValue($value, $min, $max, $isInt = true) } elseif ($value->hasUnit('%')) { $num = $max * $value->getDimension() / 100; } else { - throw $this->error('Expected %s to have no units or "%%".', $value); + throw $this->errorMsg('Expected %s to have no units or "%%".', $value); } $value = $num; @@ -7285,7 +7285,7 @@ public function assertMap($value, $varName = null) public function assertList($value) { if ($value[0] !== Type::T_LIST) { - throw $this->error('expecting list, %s received', $value[0]); + throw $this->errorMsg('expecting list, %s received', $value[0]); } return $value; @@ -7617,7 +7617,7 @@ protected function libCall($args) } if (! in_array($functionReference[0], [Type::T_FUNCTION_REFERENCE, Type::T_FUNCTION])) { - throw $this->error('Function reference expected, got ' . $functionReference[0]); + throw $this->errorMsg('Function reference expected, got ' . $functionReference[0]); } $callArgs = [ @@ -7813,7 +7813,7 @@ protected function alterColor(array $args, $operation, $fn) if (!$scale && $checkPercent) { if (!$number->hasUnit('%')) { - $warning = $this->error("{$name} Passing a number `$number` without unit % is deprecated."); + $warning = $this->errorMsg("{$name} Passing a number `$number` without unit % is deprecated."); $this->logger->warn($warning->getMessage(), true); } } @@ -7974,7 +7974,7 @@ protected function libIeHexStr($args) $color = $this->coerceColor($args[0]); if (\is_null($color)) { - throw $this->error('Error: argument `$color` of `ie-hex-str($color)` must be a color'); + throw $this->errorMsg('Error: argument `$color` of `ie-hex-str($color)` must be a color'); } $color[4] = isset($color[4]) ? round(255 * $color[4]) : 255; @@ -7988,7 +7988,7 @@ protected function libRed($args) $color = $this->coerceColor($args[0]); if (\is_null($color)) { - throw $this->error('Error: argument `$color` of `red($color)` must be a color'); + throw $this->errorMsg('Error: argument `$color` of `red($color)` must be a color'); } return new Number((int) $color[1], ''); @@ -8000,7 +8000,7 @@ protected function libGreen($args) $color = $this->coerceColor($args[0]); if (\is_null($color)) { - throw $this->error('Error: argument `$color` of `green($color)` must be a color'); + throw $this->errorMsg('Error: argument `$color` of `green($color)` must be a color'); } return new Number((int) $color[2], ''); @@ -8012,7 +8012,7 @@ protected function libBlue($args) $color = $this->coerceColor($args[0]); if (\is_null($color)) { - throw $this->error('Error: argument `$color` of `blue($color)` must be a color'); + throw $this->errorMsg('Error: argument `$color` of `blue($color)` must be a color'); } return new Number((int) $color[3], ''); @@ -8212,20 +8212,20 @@ protected function libHwb($args, $kwargs, $funcName = 'hwb') if (\count($args) == 1) { if ($args[0][0] !== Type::T_LIST) { - throw $this->error("Missing elements \$whiteness and \$blackness"); + throw $this->errorMsg("Missing elements \$whiteness and \$blackness"); } if (\trim($args[0][1])) { - throw $this->error("\$channels must be a space-separated list."); + throw $this->errorMsg("\$channels must be a space-separated list."); } if (! empty($args[0]['enclosing'])) { - throw $this->error("\$channels must be an unbracketed list."); + throw $this->errorMsg("\$channels must be an unbracketed list."); } $args = $args[0][2]; if (\count($args) > 3) { - throw $this->error("hwb() : Only 3 elements are allowed but ". \count($args) . "were passed"); + throw $this->errorMsg("hwb() : Only 3 elements are allowed but ". \count($args) . "were passed"); } $args_to_check = $this->extractSlashAlphaInColorFunction($kwargs['channels'][2]); @@ -8235,13 +8235,13 @@ protected function libHwb($args, $kwargs, $funcName = 'hwb') } if (\count($args_to_check) < 2) { - throw $this->error("Missing elements \$whiteness and \$blackness"); + throw $this->errorMsg("Missing elements \$whiteness and \$blackness"); } if (\count($args_to_check) < 3) { - throw $this->error("Missing element \$blackness"); + throw $this->errorMsg("Missing element \$blackness"); } if (\count($args_to_check) > 4) { - throw $this->error("hwb() : Only 4 elements are allowed but ". \count($args) . "were passed"); + throw $this->errorMsg("hwb() : Only 4 elements are allowed but ". \count($args) . "were passed"); } foreach ($kwargs as $k => $arg) { @@ -8278,7 +8278,7 @@ protected function libHwb($args, $kwargs, $funcName = 'hwb') if (! \is_numeric($alpha)) { $val = $this->compileValue($args[3]); - throw $this->error("\$alpha: $val is not a number"); + throw $this->errorMsg("\$alpha: $val is not a number"); } } @@ -8572,7 +8572,7 @@ protected function libMin($args) return $min; } - throw $this->error('At least one argument must be passed.'); + throw $this->errorMsg('At least one argument must be passed.'); } protected static $libMax = ['numbers...']; @@ -8595,7 +8595,7 @@ protected function libMax($args) return $max; } - throw $this->error('At least one argument must be passed.'); + throw $this->errorMsg('At least one argument must be passed.'); } protected static $libLength = ['list']; @@ -8654,7 +8654,7 @@ protected function libSetNth($args) } if (! isset($list[2][$n])) { - throw $this->error('Invalid argument for "n"'); + throw $this->errorMsg('Invalid argument for "n"'); } $list[2][$n] = $args[2]; @@ -9009,7 +9009,7 @@ protected function libComparable($args) ! $number1 instanceof Number || ! $number2 instanceof Number ) { - throw $this->error('Invalid argument(s) for "comparable"'); + throw $this->errorMsg('Invalid argument(s) for "comparable"'); } return $this->toBool($number1->isComparableTo($number2)); @@ -9426,11 +9426,11 @@ protected function isSuperSelector($super, $sub) { // one and only one selector for each arg if (! $super) { - throw $this->error('Invalid super selector for isSuperSelector()'); + throw $this->errorMsg('Invalid super selector for isSuperSelector()'); } if (! $sub) { - throw $this->error('Invalid sub selector for isSuperSelector()'); + throw $this->errorMsg('Invalid sub selector for isSuperSelector()'); } if (count($sub) > 1) { @@ -9530,7 +9530,7 @@ protected function libSelectorAppend($args) $args = $args[2]; if (\count($args) < 1) { - throw $this->error('selector-append() needs at least 1 argument'); + throw $this->errorMsg('selector-append() needs at least 1 argument'); } $selectors = []; @@ -9555,14 +9555,14 @@ protected function selectorAppend($selectors) $lastSelectors = array_pop($selectors); if (! $lastSelectors) { - throw $this->error('Invalid selector list in selector-append()'); + throw $this->errorMsg('Invalid selector list in selector-append()'); } while (\count($selectors)) { $previousSelectors = array_pop($selectors); if (! $previousSelectors) { - throw $this->error('Invalid selector list in selector-append()'); + throw $this->errorMsg('Invalid selector list in selector-append()'); } // do the trick, happening $lastSelector to $previousSelector @@ -9605,7 +9605,7 @@ protected function libSelectorExtend($args) $extender = $this->getSelectorArg($extender, 'extender'); if (! $selectors || ! $extendee || ! $extender) { - throw $this->error('selector-extend() invalid arguments'); + throw $this->errorMsg('selector-extend() invalid arguments'); } $extended = $this->extendOrReplaceSelectors($selectors, $extendee, $extender); @@ -9626,7 +9626,7 @@ protected function libSelectorReplace($args) $replacement = $this->getSelectorArg($replacement, 'replacement'); if (! $selectors || ! $original || ! $replacement) { - throw $this->error('selector-replace() invalid arguments'); + throw $this->errorMsg('selector-replace() invalid arguments'); } $replaced = $this->extendOrReplaceSelectors($selectors, $original, $replacement, true); @@ -9655,7 +9655,7 @@ protected function extendOrReplaceSelectors($selectors, $extendee, $extender, $r foreach ($extendee as $es) { if (\count($es) !== 1) { - throw $this->error('Can\'t extend complex selector.'); + throw $this->errorMsg('Can\'t extend complex selector.'); } // only use the first one @@ -9693,7 +9693,7 @@ protected function libSelectorNest($args) $args = $args[2]; if (\count($args) < 1) { - throw $this->error('selector-nest() needs at least 1 argument'); + throw $this->errorMsg('selector-nest() needs at least 1 argument'); } $selectorsMap = []; @@ -9738,7 +9738,7 @@ protected function libSelectorUnify($args) $selectors2 = $this->getSelectorArg($selectors2, 'selectors2'); if (! $selectors1 || ! $selectors2) { - throw $this->error('selector-unify() invalid arguments'); + throw $this->errorMsg('selector-unify() invalid arguments'); } // only consider the first compound of each diff --git a/Contrib/scssphp/src/Parser.php b/Contrib/scssphp/src/Parser.php index 3ba2f67f..3a3ae628 100644 --- a/Contrib/scssphp/src/Parser.php +++ b/Contrib/scssphp/src/Parser.php @@ -15,6 +15,7 @@ use ScssPhp\ScssPhp\Exception\ParserException; use ScssPhp\ScssPhp\Logger\LoggerInterface; use ScssPhp\ScssPhp\Logger\QuietLogger; +use ScssPhp\ScssPhp\Node\Number; /** * Parser @@ -2956,7 +2957,7 @@ protected function unit(&$unit) if (\strlen($this->buffer) === $this->count || ! ctype_digit($this->buffer[$this->count])) { $this->whitespace(); - $unit = new Node\Number($m[1], empty($m[3]) ? '' : $m[3]); + $unit = new Number($m[1], empty($m[3]) ? '' : $m[3]); return true; } diff --git a/Resources/Private/Backend/Partials/Config/Accordion.html b/Resources/Private/Backend/Partials/Config/Accordion.html index d7e12d41..92c248d2 100644 --- a/Resources/Private/Backend/Partials/Config/Accordion.html +++ b/Resources/Private/Backend/Partials/Config/Accordion.html @@ -36,7 +36,16 @@

- FORM FIELD - - + + + + + + + + + + @@ -46,7 +55,7 @@

- - NESTED ACCORDION - + - NESTED ACCORDION -
@@ -77,7 +86,6 @@

- diff --git a/Resources/Private/Extensions/indexed_search/Configuration/TypoScript/setup.typoscript b/Resources/Private/Extensions/indexed_search/Configuration/TypoScript/setup.typoscript index fdac3e72..fa80d1b6 100644 --- a/Resources/Private/Extensions/indexed_search/Configuration/TypoScript/setup.typoscript +++ b/Resources/Private/Extensions/indexed_search/Configuration/TypoScript/setup.typoscript @@ -13,4 +13,4 @@ plugin.tx_indexedsearch { # A list of integer which should be root-pages to search from. rootPidList = {$plugin.tx_indexedsearch.settings.rootPidList} } -} \ No newline at end of file +} diff --git a/Resources/Private/Extensions/indexed_search/Resources/Private/Partials/Form.html b/Resources/Private/Extensions/indexed_search/Resources/Private/Partials/Form.html index 352f6888..22b5123a 100644 --- a/Resources/Private/Extensions/indexed_search/Resources/Private/Partials/Form.html +++ b/Resources/Private/Extensions/indexed_search/Resources/Private/Partials/Form.html @@ -2,19 +2,19 @@ -
f:format.raw()}')}> +
f:format.raw()}{f:if(condition: animationSettings, then: '{animationSettings -> f:format.raw()}')}> diff --git a/Resources/Private/Partials/Layouts/Assets.html b/Resources/Private/Partials/Layouts/Assets.html index ab0ebaed..17644de2 100644 --- a/Resources/Private/Partials/Layouts/Assets.html +++ b/Resources/Private/Partials/Layouts/Assets.html @@ -35,28 +35,18 @@ - - - - - - - - Viewport Checker v2 w/o jQuery is not working as expected - - // jQuery ViewportChecker for animateCss - Partials/Layouts/Assets.html - $( '.animated' ).each(function() { - $(this).viewportChecker({classToAdd: 'bt_visible',classToRemove: 'bt_hidden',offset: 0}); - }); + + // AnimateCss-{data.uid} - Partials/Layouts/Assets.html + var animatedElement = document.getElementById('c{data.uid}'), + animateRepeat = '{animateCssRepeat}', + dataAnimate = '{dataAnimate}'; + cssAnimate(animatedElement, dataAnimate, animateRepeat); - Lightbox - same in News/Detail.html diff --git a/Resources/Private/Templates/Container/CardWrapper.html b/Resources/Private/Templates/Container/CardWrapper.html index ed5195d8..e8e45b9b 100644 --- a/Resources/Private/Templates/Container/CardWrapper.html +++ b/Resources/Private/Templates/Container/CardWrapper.html @@ -18,7 +18,7 @@ CARD GRID (DECK) -
diff --git a/Resources/Private/Templates/Content/Card.html b/Resources/Private/Templates/Content/Card.html index 4271ddde..cd97e678 100644 --- a/Resources/Private/Templates/Content/Card.html +++ b/Resources/Private/Templates/Content/Card.html @@ -1,4 +1,5 @@ - + no header here @@ -17,6 +18,13 @@ } + +
+
+ +
+
+ Card Header
{card.header.text -> f:format.raw()}
@@ -28,7 +36,7 @@
Card Image (top) - + Card Text (top) @@ -44,7 +52,7 @@ Card Image (bottom) - + @@ -55,6 +63,10 @@
+ +
+
+
diff --git a/Resources/Private/Templates/Main.html b/Resources/Private/Templates/Main.html index 2cf6b0c4..81c3e0da 100644 --- a/Resources/Private/Templates/Main.html +++ b/Resources/Private/Templates/Main.html @@ -121,7 +121,7 @@

The main configuration has to be create } - + @@ -158,9 +158,9 @@

The main configuration has to be create if (window.location.hash) { t3sbScrollToAnchor({t3sb:intval(number: '{settings.config.sectionmenuAnchorOffset}')}, fixedNavbar, navbarHeight); } - + - + Loading spinner diff --git a/Resources/Public/Scripts/t3sbHelper.js b/Resources/Public/Scripts/t3sbHelper.js index 35d82239..70a325cb 100644 --- a/Resources/Public/Scripts/t3sbHelper.js +++ b/Resources/Public/Scripts/t3sbHelper.js @@ -423,6 +423,42 @@ function t3sbOffcanvas(vw, bp, utilColorArr) { } +// AnimateCss - Layouts/Assets.html +function isScrolledIntoView(el) { + // check for 5% visible + var percentVisible = 0.05; + var elemTop = el.getBoundingClientRect().top; + var elemBottom = el.getBoundingClientRect().bottom; + var elemHeight = el.getBoundingClientRect().height; + var overhang = elemHeight * (1 - percentVisible); + var isVisible = (elemTop >= -overhang) && (elemBottom <= window.innerHeight + overhang); + return isVisible; +} + +function cssAnimate(ael, dataAnimate, animateRepeat) { + if (isScrolledIntoView(ael)) { + ael.classList.add('bt_visible', dataAnimate); + ael.classList.remove('bt_hidden'); + } else { + if (animateRepeat) { + ael.classList.remove('bt_visible', dataAnimate); + ael.classList.add('bt_hidden'); + } + } + window.addEventListener('scroll', function() { + if (isScrolledIntoView(ael)) { + ael.classList.add('bt_visible', dataAnimate); + ael.classList.remove('bt_hidden'); + } else { + if (animateRepeat) { + ael.classList.remove('bt_visible', dataAnimate); + ael.classList.add('bt_hidden'); + } + } + }); +} + + // Searchbox in Navbar - Navbar/Assets.html function t3sbNavbarSearchbox(vw, bp) { let form = document.querySelector('.navbar form'); diff --git a/Resources/Public/Styles/t3sbootstrap.css b/Resources/Public/Styles/t3sbootstrap.css index 69bdb6c4..3875a9f6 100644 --- a/Resources/Public/Styles/t3sbootstrap.css +++ b/Resources/Public/Styles/t3sbootstrap.css @@ -1 +1 @@ -a{outline:0}.subheader{margin:0}.alert{display:grid}.code{padding:.2rem .4rem;font-size:90%;color:#bd4147;background-color:rgba(86,61,124,.15);border-radius:.25rem;font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}mark{background-color:#ff0;color:#000}.back-to-top{position:fixed;bottom:2em;right:1.5em;text-decoration:none;color:#eee;background-color:transparent;opacity:.7;padding:1em;z-index:1030}.back-to-top:hover{background-color:transparent;color:#999}.navbar-light .navbar-nav .nav-link .jumbotron{padding:2rem 1rem;margin-bottom:1.5rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem;margin-bottom:2rem}}.text-hide{display:none}.news a{text-decoration:none}.dropend .dropdown-menu{top:0;right:auto;left:100%}.dropend .dropdown-menu[data-bs-popper]{margin-left:0!important}.dropup.dropend .dropdown-menu[data-bs-popper]{bottom:0!important;top:auto!important}.dropdown-item.parent-active{color:#151515;text-decoration:none;background-color:#f6f6f6}.dropdown-item.active.parent-active{color:#fff;text-decoration:none;background-color:var(--bs-primary)}.dropdown-hover-all .dropdown-menu,.dropdown-hover>.dropdown-menu.dropend{margin-left:-1px!important}.card.card-effect-one img{-moz-transition:transform .5s ease-in-out!important;-webkit-transition:transform .5s ease-in-out!important;transition:transform .5s ease-in-out!important}.card.card-effect-one:hover{background-color:var(--bs-light)}.card.card-effect-one:hover img{-webkit-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}.card.card-effect-one::before{content:"";position:absolute;z-index:-1;left:50%;right:50%;bottom:0;background:var(--bs-primary);height:4px;-webkit-transition-property:left,right;transition-property:left,right;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.card.card-effect-one:active::before,.card.card-effect-one:focus::before,.card.card-effect-one:hover::before{left:0;right:0}.card.card-effect-one{display:inline-block;vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;overflow:hidden;-webkit-transform:scale(1)}picture img.lazy{opacity:0}picture img.lazy:not(.initial){transition:opacity 2s}picture img.lazy.error,picture img.lazy.initial,picture img.lazy.loaded{opacity:1}picture img.lazy:not([src]):not([srcset]){visibility:hidden}figure{overflow:hidden}.dropdown-menu-end .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-left:-.8rem;vertical-align:.255em;content:" ";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent;transform:rotate(90deg)}.dropdown-menu-end .dropend .dropdown-toggle::after{display:none}.dropdown-menu-end .dropend .dropdown-menu{right:100%;left:auto}.dropdown-menu-end .dropdown-toggle[aria-expanded=true]::before{transform:rotate(-90deg)}.dropdown-toggle::after,.dropdown-toggle::before{transition:.7s}.dropdown-toggle[aria-expanded=true]::after{transform:rotate(180deg)}.dropdown-menu-end .dropend .dropdown-menu[data-bs-popper]{top:0!important;right:100%!important;left:auto!important;margin-top:0!important;margin-left:.125rem!important}#main-navbar.shrink{height:auto}#main-navbar.navbar-shrink{padding:.5rem 1rem}.mfp-fade.mfp-bg{opacity:0;-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}.mfp-fade.mfp-bg.mfp-ready{opacity:.8}.mfp-fade.mfp-bg.mfp-removing{opacity:0}.mfp-fade.mfp-wrap .mfp-content{opacity:0;-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}.mfp-fade.mfp-wrap.mfp-ready .mfp-content{opacity:1}.mfp-fade.mfp-wrap.mfp-removing .mfp-content{opacity:0}.white-popup{position:relative;background:#fff;padding:20px;width:auto;max-width:500px;margin:20px auto}.card figure,.ge_autoLayout_row figure{margin:0}.card .list-group-item{color:#212529}a.card{color:inherit}a.card:hover{text-decoration:none}.meta-nav.text-white a{color:#fff!important}div.alert p,div.alert ul{margin:0}#language{cursor:pointer}#language .t3js-icon{margin-right:5px;position:relative;top:-2px}.tx-indexedsearch-redMarkup{color:red}.tx-indexedsearch-info p{margin:0}section.parallax{background-attachment:fixed;background-position:50% 0;background-repeat:no-repeat;background-size:cover;z-index:-1}section.multiple-parallax{background-attachment:fixed,fixed;background-position:left top,50% 0;background-repeat:repeat,no-repeat;background-size:auto,cover;z-index:-1}.absolute{position:absolute!important}.v-row{display:flex;flex-wrap:wrap}.content-consent.background-image,.jumbotron.background-image,div.background-image,section.background-image{background-repeat:no-repeat;background-size:cover;background-position:center center}.jumbotron.multiple-background-image,div.multiple-background-image,section.multiple-background-image{background-repeat:repeat,no-repeat;background-size:auto,cover;background-position:left top,center center}.jumbotron.background-fixed,div.background-fixed,section.background-fixed{background-attachment:fixed!important}.frame-ruler-before:before{content:"";display:block;border-top:1px solid rgba(0,0,0,.25);margin-bottom:2em}.frame-ruler-after:after{content:"";display:block;border-bottom:1px solid rgba(0,0,0,.25);margin-top:2em}.frame-indent{margin-left:15%;margin-right:15%}.frame-indent-left{margin-left:33%}.frame-indent-right{margin-right:33%}.preloader{z-index:999;position:absolute;left:calc(50% - 1.5rem);top:50%}.nav-meta,.nav-scroller{position:relative;z-index:2;height:2.75rem;overflow-y:hidden}.nav-meta .meta-text a,.nav-scroller .meta-text a{margin-right:1rem}.nav-meta .meta-text a:last-child,.nav-scroller .meta-text a:last-child{margin-right:0}.nav-scroller .nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-bottom:1rem;margin-top:-1px;overflow-x:auto;color:rgba(255,255,255,.75);text-align:center;white-space:nowrap;-webkit-overflow-scrolling:touch}.nav-underline .nav-link{padding-top:.75rem;padding-bottom:.75rem;font-size:.875rem;color:var(--bs-gray-dark)}.nav-underline .nav-link:hover{color:var(--bs-danger)}.nav-underline .active{font-weight:500;color:var(--bs-gray-dark)}.nav-underline .nav-link.meta-text{color:var(--bs-gray-dark)}.nav-underline .nav-link.meta-text a:hover{color:var(--bs-danger)}.navbar-expand-no{overflow-y:scroll!important;max-height:100%!important}.sticky.is-sticky{position:fixed;left:0;right:0;top:0;z-index:1000;width:100%}.carousel-indicators{display:flex!important}.carousel-item{transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease,-webkit-transform .5s ease;-webkit-backface-visibility:visible;backface-visibility:visible;overflow:hidden!important}.carousel figure{margin:0!important}.carousel-caption.caption-animated.animated{position:absolute;top:0;display:flex;justify-content:center;width:auto;color:#fff;text-align:center;-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.gallery .row{margin-right:-.5rem;margin-left:-.5rem}.gallery .col-sm{padding-right:.5rem;padding-left:.5rem}.image-gallery .ig-col{padding-right:.5rem;padding-left:.5rem;margin-bottom:1rem}.image-gallery .row{margin-right:-7.5px;margin-left:-7.5px}.inline-YTPlayer{z-index:1011}.content-consent{min-height:200px}.ce-link{text-decoration:none!important;color:inherit!important}.ce-link-content{text-decoration:none!important;box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);transition:all .3s cubic-bezier(.25,.8,.25,1);padding:1.5rem}.ce-link-content:hover{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.card.ce-link-content{padding:0}.img-transform{transition:transform .3s ease!important}.img-transform:active,.img-transform:hover{-webkit-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}figure.image{overflow:hidden;display:inline-grid;position:relative}.relative{position:relative}.relative .overlay>div{position:absolute;top:2rem}#site-preloader{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#f5f5f5;z-index:99999}#site-spinner{position:absolute;left:calc(50% - 1.5rem);top:50%}.sidebar-sub-item i{text-indent:-1px}figcaption{font-size:.75rem;font-weight:400}.fa,.fab,.fal,.far,.fas{line-height:inherit}.bt_hidden{opacity:0}.bt_visible{opacity:1}.page-pagination{margin:2rem 0}.page-pagination .page-item:first-child .page-link{border-top-left-radius:0;border-bottom-left-radius:0}.page-pagination .page-item:last-child .page-link{border-top-right-radius:0;border-bottom-right-radius:0}.video-card .card-img-overlay{margin-bottom:40px}.zoom-overlay{overflow:hidden;background:0 0;opacity:0;transition:opacity .35s,-webkit-transform .35s;transition:opacity .35s,transform .35s}.image a:hover .zoom-overlay{opacity:.8}.magnifying-glass-icon{color:#fff;text-align:center;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%);border-radius:50%;padding:20px;border:1px solid #fff;line-height:1;background:rgba(0,0,0,.5);width:60px;height:60px}.zoom-overlay .description .magnifying-glass-icon{top:50%}.card-img-overlay .card-body{padding:0}.navbar-brand img.d-inline-block{margin-right:.25rem}.media figure.image{position:relative;margin-bottom:0}.media .magnifying-glass-icon{top:50%}.w-33{width:33%!important}.w-66{width:66%!important}.fixedPosition{position:fixed;top:50%;margin:0!important;z-index:999}.fixedPosition-right{right:0}.fixedPosition-left{left:0}.rotate-plus{-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);-webkit-transform:rotate(90deg);transform:rotate(90deg);margin:0!important}.rotate-minus{-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);-webkit-transform:rotate(-90deg);transform:rotate(-90deg);margin:0!important}.media-body p{margin-bottom:0}p .svg-inline--fa{margin-right:.4rem}@media (min-width:576px){html{font-size:16px}.sm-twoColumns{min-width:26rem!important}.content-consent{min-height:300px}}@media (min-width:768px){.md-twoColumns{min-width:26rem!important}.content-consent{min-height:300px}}@media (min-width:992px){.lg-twoColumns{min-width:26rem!important}.content-consent{min-height:400px}}@media (min-width:1200px){.xl-twoColumns{min-width:26rem!important}.content-consent{min-height:500px}}@media (max-width:1199px){.navbar-expand-xl{overflow-y:scroll!important;max-height:100%!important}}@media (max-width:991px){.navbar-expand-lg{overflow-y:scroll!important;max-height:100%!important}}@media (max-width:767px){.navbar-expand-md{overflow-y:scroll!important;max-height:100%!important}.gallery .w-25,.gallery.w-25{width:100%!important}.gallery .w-50,.gallery.w-50{width:100%!important}.gallery .w-33,.gallery.w-33{width:100%!important}.gallery .w-66,.gallery.w-66{width:100%!important}.gallery .w-75,.gallery.w-75{width:100%!important}.align .w-25,.beside .w-25{width:100%!important}.align .w-50,.beside .w-50{width:100%!important}.align .w-33,.beside .w-33{width:100%!important}.align .w-66,.beside .w-66{width:100%!important}.align .w-75,.beside .w-75{width:100%!important}}@media (max-width:575px){.navbar-expand-sm{overflow-y:scroll!important;max-height:100%!important}.gallery{text-align:center}.card .img-overlay{color:#fff;text-shadow:6px 0 6px #666}.card .img-overlay .card-body{padding:0}}.card-flipper .image-flip.hover .backside,.card-flipper .image-flip:active .backside,.card-flipper .image-flip:hover .backside{-webkit-transform:rotateY(0);-moz-transform:rotateY(0);-o-transform:rotateY(0);-ms-transform:rotateY(0);transform:rotateY(0);border-radius:.25rem}.card-flipper .image-flip.hover .frontside,.card-flipper .image-flip:active .frontside,.card-flipper .image-flip:hover .frontside{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.card-flipper .mainflip{-webkit-transition:1s;-webkit-transform-style:preserve-3d;-ms-transition:1s;-moz-transition:1s;-moz-transform:perspective(1000px);-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d;position:relative}.card-flipper .frontside{position:relative;-webkit-transform:rotateY(0);-ms-transform:rotateY(0);z-index:2;margin-bottom:30px}.card-flipper .backside{position:absolute;top:0;left:0;background:#fff;-webkit-transform:rotateY(-180deg);-moz-transform:rotateY(-180deg);-o-transform:rotateY(-180deg);-ms-transform:rotateY(-180deg);transform:rotateY(-180deg);-webkit-box-shadow:5px 7px 9px -4px #9e9e9e;-moz-box-shadow:5px 7px 9px -4px #9e9e9e;box-shadow:5px 7px 9px -4px #9e9e9e}.card-flipper .backside,.card-flipper .frontside{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:1s;-webkit-transform-style:preserve-3d;-moz-transition:1s;-moz-transform-style:preserve-3d;-o-transition:1s;-o-transform-style:preserve-3d;-ms-transition:1s;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d}.card-flipper .backside .card,.card-flipper .frontside .card{min-height:312px}.card-flipper .fa-plus-square{color:var(--bs-primary)}#sectionmenu.section-menu.nav-fill.variant{background-color:#fff}#sectionmenu.section-menu.nav-fill.variant .nav-item{display:inline-block;position:relative;height:58px;border-right:2px solid var(--bs-light);border-top:2px solid var(--bs-light);border-bottom:2px solid var(--bs-light);text-align:center;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;color:#333;cursor:pointer;white-space:normal}#sectionmenu.section-menu.nav-fill.variant .nav-item:last-child{border-left:2px solid var(--bs-light)}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger{line-height:2.6}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger.active::before{border-left:13px solid transparent;border-right:13px solid transparent;border-top:12px solid var(--bs-primary);position:absolute;top:58px;left:calc(50% - 6px);content:"";display:inline;z-index:2000}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger:hover{color:var(--bs-primary);text-shadow:0 0 5px rgba(169,169,169,.3)}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger.active,#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger.active:hover{background-color:var(--bs-primary);border-bottom:1px solid var(--bs-primary);color:#fff;margin-top:0;height:58px;border-top:none}#sectionmenu.section-menu .nav-item.nav-link.active{color:var(--bs-danger)}#sectionmenu.section-menu.nav-pills .nav-item.nav-link.active{color:#fff}.bg-raster{position:relative}.bg-raster:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:url(/typo3conf/ext/t3sbootstrap/Resources/Public/Images/raster.png) repeat}#background-carousel{width:100%;height:100%;z-index:-1}#background-carousel .carousel,#background-carousel .carousel-inner{width:100%;height:100%;z-index:0;overflow:hidden}#background-carousel .carousel-item{width:100%;height:100%;background-position:center center;background-size:cover;z-index:0}#background-carousel #content-wrapper{position:absolute;z-index:1!important;min-width:100%;min-height:100%}#background-carousel .carousel-control-next,#background-carousel .carousel-control-prev{z-index:2}.carousel-control-next,.carousel-control-prev{z-index:10}.list-group .page-navigation:last-child{margin-top:1.5rem}.card-img-overlay .card-text p:last-child{margin-bottom:0}@media (min-width:576px) and (max-width:767.98px){.card-group>.card{flex:1 0 100%}}@media (min-width:768px){.card-group>.card{flex:1 0 50%}}@media (min-width:992px){.card-group>.card{flex:1 0 33.333%}}@media (min-width:1200px){.card-group>.card{flex:1 0 25%}}@media (min-width:576px){.card-columns{column-count:2}.image-flip .backside,.image-flip .card,.image-flip .frontside,.image-flip .mainflip{height:100%}}@media (min-width:768px){.card-columns{column-count:3}}@media (min-width:992px){.card-columns{column-count:4}}@media (min-width:1200px){.card-columns{column-count:4}}.news .card{box-shadow:0 0 0 transparent,0 1px 2px transparent;transition:all .3s cubic-bezier(.25,.8,.25,1)}.news .card:active,.news .card:hover{box-shadow:0 4px 8px rgba(0,0,0,.25),0 2px 2px rgba(0,0,0,.22);z-index:101}.news .list-group-item .d-sm-block p{margin-bottom:0}#news-preloader{position:relative;top:0;left:0;right:0;bottom:0;background-color:transparent;z-index:99999}#news-preloader-bottom{position:relative;top:-75px;left:0;right:0;bottom:0;background-color:transparent;z-index:99999}#news-spinner{position:absolute;right:0;top:-.5rem}.news .list-group-item .card-text p{margin-bottom:0}.news .list-group-item .media figure{margin-bottom:0}.news-single figure.image .zoom-overlay{left:1rem}.cardflipper .mainflip{-webkit-transition:1s;-webkit-transform-style:preserve-3d;-ms-transition:1s;-moz-transition:1s;-moz-transform:perspective(1000px);-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d;position:relative}.cardflipper .frontside{position:relative;-webkit-transform:rotateY(0);-ms-transform:rotateY(0);z-index:2;margin-bottom:30px}.cardflipper .backside{position:absolute;top:0;left:0;background:#fff;-webkit-transform:rotateY(-180deg);-moz-transform:rotateY(-180deg);-o-transform:rotateY(-180deg);-ms-transform:rotateY(-180deg);transform:rotateY(-180deg);-webkit-box-shadow:5px 7px 9px -4px #9e9e9e;-moz-box-shadow:5px 7px 9px -4px #9e9e9e;box-shadow:5px 7px 9px -4px #9e9e9e}.cardflipper .backside,.cardflipper .frontside{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:1s;-webkit-transform-style:preserve-3d;-moz-transition:1s;-moz-transform-style:preserve-3d;-o-transition:1s;-o-transform-style:preserve-3d;-ms-transition:1s;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d}.cardflipper .fa-plus-square{color:var(--bs-primary)}.cardflipper .fa-minus-square{color:var(--bs-primary)}.cardflipper .fa-minus-square:hover,.cardflipper .fa-plus-square:hover{cursor:pointer}.card-flipper .card-footer,.cardflipper .card-footer{padding:.75rem 1.25rem;background-color:transparent;border-top:none}.card-flipper .backside,.card-flipper .backside .card,.cardflipper .backside,.cardflipper .backside .card{height:100%}.card-footer{text-align:center}.img-copyright{position:relative;margin-top:-31px;margin-right:.5rem;display:flex;margin-left:auto;z-index:1000}.img-copyright:hover{cursor:help}.img-copyright-default{position:relative;margin-top:-24px;margin-right:.5rem;display:flex;margin-left:auto}span.copyright{margin-right:.5rem}.zoom-right{display:flex;margin-left:auto}.zoom-center{display:flex}.card .image-caption.text-right{margin-right:.5rem;margin-right:.5rem}figure .toast{margin-bottom:0!important;z-index:1}.imageorient-1 figure.image .zoom-overlay,.imageorient-9 figure.image .zoom-overlay{right:.5rem}.imageorient-10 figure.image .zoom-overlay,.imageorient-17 figure.image .zoom-overlay,.imageorient-18 figure.image .zoom-overlay,.imageorient-2 figure.image .zoom-overlay,.imageorient-25 figure.image .zoom-overlay,.imageorient-26 figure.image .zoom-overlay,.imageorient-66 figure.image .zoom-overlay,.imageorient-77 figure.image .zoom-overlay{left:.5rem}.offcanvas{box-shadow:none}.offcanvas-header{box-shadow:0 .5rem 1rem rgb(0 0 0 / 5%),inset 0 -1px 0 rgb(0 0 0 / 10%);padding-bottom:.75rem!important}.slideIn{-webkit-animation-name:slideIn;animation-name:slideIn}body.lg .dd-animate-1,body.md .dd-animate-1,body.xl .dd-animate-1{display:block;visibility:hidden;opacity:0;transform:translateY(50px);transition:.5s ease all}body.lg .dd-animate-1.show,body.md .dd-animate-1.show,body.xl .dd-animate-1.show{display:block;visibility:visible;opacity:1;transform:translateY(0);transition:.5s ease all}body.lg .dd-animate-2,body.lg .dd-animate-2 .dropdown-submenu .dropdown-menu,body.md .dd-animate-2,body.md .dd-animate-2 .dropdown-submenu .dropdown-menu,body.xl .dd-animate-2,body.xl .dd-animate-2 .dropdown-submenu .dropdown-menu{animation-name:example;animation-duration:1s}@keyframes example{from{opacity:.2}to{opacity:1}}.bs-callout{padding:20px;margin:20px 0;border:1px solid #eee;border-left-width:5px;border-radius:3px}.bs-callout h4{margin-top:0;margin-bottom:5px}.bs-callout p,.bs-callout ul:last-child{margin-bottom:0}.bs-callout code{border-radius:3px}.bs-callout+.bs-callout{margin-top:-5px}.bs-callout-default{border-left-color:var(--bs-secondary)}.bs-callout-default h4{color:var(--bs-secondary)}.bs-callout-primary{border-left-color:var(--bs-primary)}.bs-callout-primary h4{color:var(--bs-primary)}.bs-callout-success{border-left-color:var(--bs-success)}.bs-callout-success h4{color:var(--bs-success)}.bs-callout-danger{border-left-color:var(--bs-danger)}.bs-callout-danger h4{color:var(--bs-danger)}.bs-callout-warning{border-left-color:var(--bs-warning)}.bs-callout-warning h4{color:var(--bs-warning)}.bs-callout-info{border-left-color:var(--bs-info)}.bs-callout-info h4{color:var(--bs-info)}.img-hover-zoom img{transition:transform .8s ease!important}.img-hover-zoom:hover img{transform:scale(1.5)}.img-hover-zoom--zoom-n-rotate img{transition:transform .5s ease-in-out!important}.img-hover-zoom--zoom-n-rotate:hover img{transform:scale(2) rotate(25deg)}.img-hover-zoom--slowmo img{transform-origin:50% 65%;transition:transform 5s,filter 3s ease-in-out!important;filter:brightness(150%)}.img-hover-zoom--slowmo:hover img{filter:brightness(100%);transform:scale(2)}.img-hover-zoom--brightness img{transition:transform 2s,filter 1.5s ease-in-out!important;transform-origin:center center;filter:brightness(50%)}.img-hover-zoom--brightness:hover img{filter:brightness(100%);transform:scale(1.3)}.img-hover-zoom--blur img{transition:transform 1s,filter 2s ease-in-out!important;filter:blur(2px);transform:scale(1.2)}.img-hover-zoom--blur:hover img{filter:blur(0);transform:scale(1)}.img-hover-zoom--colorize img{transition:transform .5s,filter 1.5s ease-in-out!important;filter:grayscale(100%)}.img-hover-zoom--colorize:hover img{filter:grayscale(0);transform:scale(1.1)}.nav-icon{margin:-1.5px;width:35px;border:none;background-color:transparent}.nav-icon div,.nav-icon:after,.nav-icon:before{background-color:#fff;border-radius:3px;content:"";display:block;height:5px;margin:7px 0;transition:all .2s ease-in-out}.nav-icon:not(.collapsed):before{transform:translateY(12px) rotate(135deg)}.nav-icon:not(.collapsed):after{transform:translateY(-12px) rotate(-135deg)}.nav-icon:not(.collapsed) div{transform:scale(0)}.nav-icon:active,.nav-icon:focus{outline:0;box-shadow:none}.media{display:flex!important}.media figure.image{flex-shrink:0!important}.media .media-body{flex-grow:1!important}.card figcaption{padding-right:.5rem;padding-left:.5rem}.back-to-top.st-none{transform:scale(0);transition:transform .4s cubic-bezier(.5,0,.3,1)}.back-to-top.st-block{transform:scale(1);transition:transform .4s cubic-bezier(.5,0,.3,1)}.image .toast,picture{overflow:hidden}#main-navbar{-moz-transition:all 1s ease-in;-webkit-transition:all 1s ease-in;-o-transition:all 1s ease-in;transition:all 1s ease-in}.sticky{position:fixed!important;top:0;left:0;width:100%}.fab{margin-top:.2rem}.text-shadow{color:#fff;text-shadow:1px 1px 2px #000,0 0 25px #000,0 0 5px #000}.ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)}.ratio{position:relative;width:100%}.accordion-img::after{margin-right:1rem}@media (max-width:575px){.col-image .background-image{min-height:250px}}@media (max-width:991px){.col-image .background-image{min-height:350px}} +a{outline:0}.subheader{margin:0}.alert{display:grid}.code{padding:.2rem .4rem;font-size:90%;color:#bd4147;background-color:rgba(86,61,124,.15);border-radius:.25rem;font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}mark{background-color:#ff0;color:#000}.back-to-top{position:fixed;bottom:2em;right:1.5em;text-decoration:none;color:#eee;background-color:transparent;opacity:.7;padding:1em;z-index:1030}.back-to-top:hover{background-color:transparent;color:#999}.navbar-light .navbar-nav .nav-link .jumbotron{padding:2rem 1rem;margin-bottom:1.5rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem;margin-bottom:2rem}}.text-hide{display:none}.news a{text-decoration:none}.dropend .dropdown-menu{top:0;right:auto;left:100%}.dropend .dropdown-menu[data-bs-popper]{margin-left:0!important}.dropup.dropend .dropdown-menu[data-bs-popper]{bottom:0!important;top:auto!important}.dropdown-item.parent-active{color:#151515;text-decoration:none;background-color:#f6f6f6}.dropdown-item.active.parent-active{color:#fff;text-decoration:none;background-color:var(--bs-primary)}.dropdown-hover-all .dropdown-menu,.dropdown-hover>.dropdown-menu.dropend{margin-left:-1px!important}.card.card-effect-one img{-moz-transition:transform .5s ease-in-out!important;-webkit-transition:transform .5s ease-in-out!important;transition:transform .5s ease-in-out!important}.card.card-effect-one:hover{background-color:var(--bs-light)}.card.card-effect-one:hover img{-webkit-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}.card.card-effect-one::before{content:"";position:absolute;z-index:-1;left:50%;right:50%;bottom:0;background:var(--bs-primary);height:4px;-webkit-transition-property:left,right;transition-property:left,right;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out}.card.card-effect-one:active::before,.card.card-effect-one:focus::before,.card.card-effect-one:hover::before{left:0;right:0}.card.card-effect-one{display:inline-block;vertical-align:middle;-webkit-transform:perspective(1px) translateZ(0);transform:perspective(1px) translateZ(0);box-shadow:0 0 1px transparent;position:relative;overflow:hidden;-webkit-transform:scale(1)}picture img.lazy{opacity:0}picture img.lazy:not(.initial){transition:opacity 2s}picture img.lazy.error,picture img.lazy.initial,picture img.lazy.loaded{opacity:1}picture img.lazy:not([src]):not([srcset]){visibility:hidden}figure{overflow:hidden}.dropdown-menu-end .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-left:-.5rem;vertical-align:.255em;content:" ";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent;transform:rotate(90deg)}.dropdown-menu-end .dropend .dropdown-toggle::after{display:none}.dropdown-menu-end .dropend .dropdown-menu{right:100%;left:auto}.dropdown-menu-end .dropdown-toggle[aria-expanded=true]::before{transform:rotate(-90deg)}.dropdown-toggle::after,.dropdown-toggle::before{transition:.7s}.dropdown-toggle[aria-expanded=true]::after{transform:rotate(180deg)}.dropdown-menu-end .dropend .dropdown-menu[data-bs-popper]{top:0!important;right:100%!important;left:auto!important;margin-top:0!important;margin-left:.125rem!important}#main-navbar.shrink{height:auto}#main-navbar.navbar-shrink{padding:.5rem 1rem}.mfp-fade.mfp-bg{opacity:0;-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}.mfp-fade.mfp-bg.mfp-ready{opacity:.8}.mfp-fade.mfp-bg.mfp-removing{opacity:0}.mfp-fade.mfp-wrap .mfp-content{opacity:0;-webkit-transition:all .15s ease-out;-moz-transition:all .15s ease-out;transition:all .15s ease-out}.mfp-fade.mfp-wrap.mfp-ready .mfp-content{opacity:1}.mfp-fade.mfp-wrap.mfp-removing .mfp-content{opacity:0}.white-popup{position:relative;background:#fff;padding:20px;width:auto;max-width:500px;margin:20px auto}.card figure,.ge_autoLayout_row figure{margin:0}.card .list-group-item{color:#212529}a.card{color:inherit}a.card:hover{text-decoration:none}.meta-nav.text-white a{color:#fff!important}div.alert p,div.alert ul{margin:0}#language{cursor:pointer}#language .t3js-icon{margin-right:5px;position:relative;top:-2px}.tx-indexedsearch-redMarkup{color:red}.tx-indexedsearch-info p{margin:0}section.parallax{background-attachment:fixed;background-position:50% 0;background-repeat:no-repeat;background-size:cover;z-index:-1}section.multiple-parallax{background-attachment:fixed,fixed;background-position:left top,50% 0;background-repeat:repeat,no-repeat;background-size:auto,cover;z-index:-1}.absolute{position:absolute!important}.v-row{display:flex;flex-wrap:wrap}.content-consent.background-image,.jumbotron.background-image,div.background-image,section.background-image{background-repeat:no-repeat;background-size:cover;background-position:center center}.jumbotron.multiple-background-image,div.multiple-background-image,section.multiple-background-image{background-repeat:repeat,no-repeat;background-size:auto,cover;background-position:left top,center center}.jumbotron.background-fixed,div.background-fixed,section.background-fixed{background-attachment:fixed!important}.frame-ruler-before:before{content:"";display:block;border-top:1px solid rgba(0,0,0,.25);margin-bottom:2em}.frame-ruler-after:after{content:"";display:block;border-bottom:1px solid rgba(0,0,0,.25);margin-top:2em}.frame-indent{margin-left:15%;margin-right:15%}.frame-indent-left{margin-left:33%}.frame-indent-right{margin-right:33%}.preloader{z-index:999;position:absolute;left:calc(50% - 1.5rem);top:50%}.nav-meta,.nav-scroller{position:relative;z-index:2;height:2.75rem;overflow-y:hidden}.nav-meta .meta-text a,.nav-scroller .meta-text a{margin-right:1rem}.nav-meta .meta-text a:last-child,.nav-scroller .meta-text a:last-child{margin-right:0}.nav-scroller .nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-bottom:1rem;margin-top:-1px;overflow-x:auto;color:rgba(255,255,255,.75);text-align:center;white-space:nowrap;-webkit-overflow-scrolling:touch}.nav-underline .nav-link{padding-top:.75rem;padding-bottom:.75rem;font-size:.875rem;color:var(--bs-gray-dark)}.nav-underline .nav-link:hover{color:var(--bs-danger)}.nav-underline .active{font-weight:500;color:var(--bs-gray-dark)}.nav-underline .nav-link.meta-text{color:var(--bs-gray-dark)}.nav-underline .nav-link.meta-text a:hover{color:var(--bs-danger)}.navbar-expand-no{overflow-y:scroll!important;max-height:100%!important}.sticky.is-sticky{position:fixed;left:0;right:0;top:0;z-index:1000;width:100%}.carousel-indicators{display:flex!important}.carousel-item{transition:-webkit-transform .5s ease;transition:transform .5s ease;transition:transform .5s ease,-webkit-transform .5s ease;-webkit-backface-visibility:visible;backface-visibility:visible;overflow:hidden!important}.carousel figure{margin:0!important}.carousel-caption.caption-animated.animated{position:absolute;top:0;display:flex;justify-content:center;width:auto;color:#fff;text-align:center;-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.gallery .row{margin-right:-.5rem;margin-left:-.5rem}.gallery .col-sm{padding-right:.5rem;padding-left:.5rem}.image-gallery .ig-col{padding-right:.5rem;padding-left:.5rem;margin-bottom:1rem}.image-gallery .row{margin-right:-7.5px;margin-left:-7.5px}.inline-YTPlayer{z-index:1011}.content-consent{min-height:200px}.ce-link{text-decoration:none!important;color:inherit!important}.ce-link-content{text-decoration:none!important;box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);transition:all .3s cubic-bezier(.25,.8,.25,1);padding:1.5rem}.ce-link-content:hover{box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.card.ce-link-content{padding:0}.img-transform{transition:transform .3s ease!important}.img-transform:active,.img-transform:hover{-webkit-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}figure.image{overflow:hidden;display:inline-grid;position:relative}.relative{position:relative}.relative .overlay>div{position:absolute;top:2rem}#site-preloader{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#f5f5f5;z-index:99999}#site-spinner{position:absolute;left:calc(50% - 1.5rem);top:50%}.sidebar-sub-item i{text-indent:-1px}figcaption{font-size:.75rem;font-weight:400}.fa,.fab,.fal,.far,.fas{line-height:inherit}.bt_hidden{opacity:0}.bt_visible{opacity:1}.page-pagination{margin:2rem 0}.page-pagination .page-item:first-child .page-link{border-top-left-radius:0;border-bottom-left-radius:0}.page-pagination .page-item:last-child .page-link{border-top-right-radius:0;border-bottom-right-radius:0}.video-card .card-img-overlay{margin-bottom:40px}.zoom-overlay{overflow:hidden;background:0 0;opacity:0;transition:opacity .35s,-webkit-transform .35s;transition:opacity .35s,transform .35s}.image a:hover .zoom-overlay{opacity:.8}.magnifying-glass-icon{color:#fff;text-align:center;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%);border-radius:50%;padding:20px;border:1px solid #fff;line-height:1;background:rgba(0,0,0,.5);width:60px;height:60px}.zoom-overlay .description .magnifying-glass-icon{top:50%}.card-img-overlay .card-body{padding:0}.navbar-brand img.d-inline-block{margin-right:.25rem}.media figure.image{position:relative;margin-bottom:0}.media .magnifying-glass-icon{top:50%}.w-33{width:33%!important}.w-66{width:66%!important}.fixedPosition{position:fixed;top:50%;margin:0!important;z-index:999}.fixedPosition-right{right:0}.fixedPosition-left{left:0}.rotate-plus{-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);-webkit-transform:rotate(90deg);transform:rotate(90deg);margin:0!important}.rotate-minus{-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);-webkit-transform:rotate(-90deg);transform:rotate(-90deg);margin:0!important}.media-body p{margin-bottom:0}p .svg-inline--fa{margin-right:.4rem}@media (min-width:576px){html{font-size:16px}.sm-twoColumns{min-width:26rem!important}.content-consent{min-height:300px}}@media (min-width:768px){.md-twoColumns{min-width:26rem!important}.content-consent{min-height:300px}}@media (min-width:992px){.lg-twoColumns{min-width:26rem!important}.content-consent{min-height:400px}}@media (min-width:1200px){.xl-twoColumns{min-width:26rem!important}.content-consent{min-height:500px}}@media (max-width:1199px){.navbar-expand-xl{overflow-y:scroll!important;max-height:100%!important}}@media (max-width:991px){.navbar-expand-lg{overflow-y:scroll!important;max-height:100%!important}}@media (max-width:767px){.navbar-expand-md{overflow-y:scroll!important;max-height:100%!important}.gallery .w-25,.gallery.w-25{width:100%!important}.gallery .w-50,.gallery.w-50{width:100%!important}.gallery .w-33,.gallery.w-33{width:100%!important}.gallery .w-66,.gallery.w-66{width:100%!important}.gallery .w-75,.gallery.w-75{width:100%!important}.align .w-25,.beside .w-25{width:100%!important}.align .w-50,.beside .w-50{width:100%!important}.align .w-33,.beside .w-33{width:100%!important}.align .w-66,.beside .w-66{width:100%!important}.align .w-75,.beside .w-75{width:100%!important}}@media (max-width:575px){.navbar-expand-sm{overflow-y:scroll!important;max-height:100%!important}.gallery{text-align:center}.card .img-overlay{color:#fff;text-shadow:6px 0 6px #666}.card .img-overlay .card-body{padding:0}}.card-flipper .image-flip.hover .backside,.card-flipper .image-flip:active .backside,.card-flipper .image-flip:hover .backside{-webkit-transform:rotateY(0);-moz-transform:rotateY(0);-o-transform:rotateY(0);-ms-transform:rotateY(0);transform:rotateY(0);border-radius:.25rem}.card-flipper .image-flip.hover .frontside,.card-flipper .image-flip:active .frontside,.card-flipper .image-flip:hover .frontside{-webkit-transform:rotateY(180deg);-moz-transform:rotateY(180deg);-o-transform:rotateY(180deg);transform:rotateY(180deg)}.card-flipper .mainflip{-webkit-transition:1s;-webkit-transform-style:preserve-3d;-ms-transition:1s;-moz-transition:1s;-moz-transform:perspective(1000px);-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d;position:relative}.card-flipper .frontside{position:relative;-webkit-transform:rotateY(0);-ms-transform:rotateY(0);z-index:2;margin-bottom:30px}.card-flipper .backside{position:absolute;top:0;left:0;background:#fff;-webkit-transform:rotateY(-180deg);-moz-transform:rotateY(-180deg);-o-transform:rotateY(-180deg);-ms-transform:rotateY(-180deg);transform:rotateY(-180deg);-webkit-box-shadow:5px 7px 9px -4px #9e9e9e;-moz-box-shadow:5px 7px 9px -4px #9e9e9e;box-shadow:5px 7px 9px -4px #9e9e9e}.card-flipper .backside,.card-flipper .frontside{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:1s;-webkit-transform-style:preserve-3d;-moz-transition:1s;-moz-transform-style:preserve-3d;-o-transition:1s;-o-transform-style:preserve-3d;-ms-transition:1s;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d}.card-flipper .backside .card,.card-flipper .frontside .card{min-height:312px}.card-flipper .fa-plus-square{color:var(--bs-primary)}#sectionmenu.section-menu.nav-fill.variant{background-color:#fff}#sectionmenu.section-menu.nav-fill.variant .nav-item{display:inline-block;position:relative;height:58px;border-right:2px solid var(--bs-light);border-top:2px solid var(--bs-light);border-bottom:2px solid var(--bs-light);text-align:center;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;color:#333;cursor:pointer;white-space:normal}#sectionmenu.section-menu.nav-fill.variant .nav-item:last-child{border-left:2px solid var(--bs-light)}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger{line-height:2.6}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger.active::before{border-left:13px solid transparent;border-right:13px solid transparent;border-top:12px solid var(--bs-primary);position:absolute;top:58px;left:calc(50% - 6px);content:"";display:inline;z-index:2000}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger:hover{color:var(--bs-primary);text-shadow:0 0 5px rgba(169,169,169,.3)}#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger.active,#sectionmenu.section-menu.nav-fill.variant .nav-link.scroll-trigger.active:hover{background-color:var(--bs-primary);border-bottom:1px solid var(--bs-primary);color:#fff;margin-top:0;height:58px;border-top:none}#sectionmenu.section-menu .nav-item.nav-link.active{color:var(--bs-danger)}#sectionmenu.section-menu.nav-pills .nav-item.nav-link.active{color:#fff}.bg-raster{position:relative}.bg-raster:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:url(/typo3conf/ext/t3sbootstrap/Resources/Public/Images/raster.png) repeat}#background-carousel{width:100%;height:100%;z-index:-1}#background-carousel .carousel,#background-carousel .carousel-inner{width:100%;height:100%;z-index:0;overflow:hidden}#background-carousel .carousel-item{width:100%;height:100%;background-position:center center;background-size:cover;z-index:0}#background-carousel #content-wrapper{position:absolute;z-index:1!important;min-width:100%;min-height:100%}#background-carousel .carousel-control-next,#background-carousel .carousel-control-prev{z-index:2}.carousel-control-next,.carousel-control-prev{z-index:10}.list-group .page-navigation:last-child{margin-top:1.5rem}.card-img-overlay .card-text p:last-child{margin-bottom:0}@media (min-width:576px) and (max-width:767.98px){.card-group>.card{flex:1 0 100%}}@media (min-width:768px){.card-group>.card{flex:1 0 50%}}@media (min-width:992px){.card-group>.card{flex:1 0 33.333%}}@media (min-width:1200px){.card-group>.card{flex:1 0 25%}}@media (min-width:576px){.card-columns{column-count:2}.image-flip .backside,.image-flip .card,.image-flip .frontside,.image-flip .mainflip{height:100%}}@media (min-width:768px){.card-columns{column-count:3}}@media (min-width:992px){.card-columns{column-count:4}}@media (min-width:1200px){.card-columns{column-count:4}}.news .card{box-shadow:0 0 0 transparent,0 1px 2px transparent;transition:all .3s cubic-bezier(.25,.8,.25,1)}.news .card:active,.news .card:hover{box-shadow:0 4px 8px rgba(0,0,0,.25),0 2px 2px rgba(0,0,0,.22);z-index:101}.news .list-group-item .d-sm-block p{margin-bottom:0}#news-preloader{position:relative;top:0;left:0;right:0;bottom:0;background-color:transparent;z-index:99999}#news-preloader-bottom{position:relative;top:-75px;left:0;right:0;bottom:0;background-color:transparent;z-index:99999}#news-spinner{position:absolute;right:0;top:-.5rem}.news .list-group-item .card-text p{margin-bottom:0}.news .list-group-item .media figure{margin-bottom:0}.news-single figure.image .zoom-overlay{left:1rem}.cardflipper .mainflip{-webkit-transition:1s;-webkit-transform-style:preserve-3d;-ms-transition:1s;-moz-transition:1s;-moz-transform:perspective(1000px);-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d;position:relative}.cardflipper .frontside{position:relative;-webkit-transform:rotateY(0);-ms-transform:rotateY(0);z-index:2;margin-bottom:30px}.cardflipper .backside{position:absolute;top:0;left:0;background:#fff;-webkit-transform:rotateY(-180deg);-moz-transform:rotateY(-180deg);-o-transform:rotateY(-180deg);-ms-transform:rotateY(-180deg);transform:rotateY(-180deg);-webkit-box-shadow:5px 7px 9px -4px #9e9e9e;-moz-box-shadow:5px 7px 9px -4px #9e9e9e;box-shadow:5px 7px 9px -4px #9e9e9e}.cardflipper .backside,.cardflipper .frontside{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:1s;-webkit-transform-style:preserve-3d;-moz-transition:1s;-moz-transform-style:preserve-3d;-o-transition:1s;-o-transform-style:preserve-3d;-ms-transition:1s;-ms-transform-style:preserve-3d;transition:1s;transform-style:preserve-3d}.cardflipper .fa-plus-square{color:var(--bs-primary)}.cardflipper .fa-minus-square{color:var(--bs-primary)}.cardflipper .fa-minus-square:hover,.cardflipper .fa-plus-square:hover{cursor:pointer}.card-flipper .card-footer,.cardflipper .card-footer{padding:.75rem 1.25rem;background-color:transparent;border-top:none}.card-flipper .backside,.card-flipper .backside .card,.cardflipper .backside,.cardflipper .backside .card{height:100%}.card-footer{text-align:center}.img-copyright{position:relative;margin-top:-31px;margin-right:.5rem;display:flex;margin-left:auto;z-index:1000}.img-copyright:hover{cursor:help}.img-copyright-default{position:relative;margin-top:-24px;margin-right:.5rem;display:flex;margin-left:auto}span.copyright{margin-right:.5rem}.zoom-right{display:flex;margin-left:auto}.zoom-center{display:flex}.card .image-caption.text-right{margin-right:.5rem;margin-right:.5rem}figure .toast{margin-bottom:0!important;z-index:1}.imageorient-1 figure.image .zoom-overlay,.imageorient-9 figure.image .zoom-overlay{right:.5rem}.imageorient-10 figure.image .zoom-overlay,.imageorient-17 figure.image .zoom-overlay,.imageorient-18 figure.image .zoom-overlay,.imageorient-2 figure.image .zoom-overlay,.imageorient-25 figure.image .zoom-overlay,.imageorient-26 figure.image .zoom-overlay,.imageorient-66 figure.image .zoom-overlay,.imageorient-77 figure.image .zoom-overlay{left:.5rem}.offcanvas{box-shadow:none}.offcanvas-header{box-shadow:0 .5rem 1rem rgb(0 0 0 / 5%),inset 0 -1px 0 rgb(0 0 0 / 10%);padding-bottom:.75rem!important}.slideIn{-webkit-animation-name:slideIn;animation-name:slideIn}body.lg .dd-animate-1,body.md .dd-animate-1,body.xl .dd-animate-1{display:block;visibility:hidden;opacity:0;transform:translateY(50px);transition:.5s ease all}body.lg .dd-animate-1.show,body.md .dd-animate-1.show,body.xl .dd-animate-1.show{display:block;visibility:visible;opacity:1;transform:translateY(0);transition:.5s ease all}body.lg .dd-animate-2,body.lg .dd-animate-2 .dropdown-submenu .dropdown-menu,body.md .dd-animate-2,body.md .dd-animate-2 .dropdown-submenu .dropdown-menu,body.xl .dd-animate-2,body.xl .dd-animate-2 .dropdown-submenu .dropdown-menu{animation-name:example;animation-duration:1s}@keyframes example{from{opacity:.2}to{opacity:1}}.bs-callout{padding:20px;margin:20px 0;border:1px solid #eee;border-left-width:5px;border-radius:3px}.bs-callout h4{margin-top:0;margin-bottom:5px}.bs-callout p,.bs-callout ul:last-child{margin-bottom:0}.bs-callout code{border-radius:3px}.bs-callout+.bs-callout{margin-top:-5px}.bs-callout-default{border-left-color:var(--bs-secondary)}.bs-callout-default h4{color:var(--bs-secondary)}.bs-callout-primary{border-left-color:var(--bs-primary)}.bs-callout-primary h4{color:var(--bs-primary)}.bs-callout-success{border-left-color:var(--bs-success)}.bs-callout-success h4{color:var(--bs-success)}.bs-callout-danger{border-left-color:var(--bs-danger)}.bs-callout-danger h4{color:var(--bs-danger)}.bs-callout-warning{border-left-color:var(--bs-warning)}.bs-callout-warning h4{color:var(--bs-warning)}.bs-callout-info{border-left-color:var(--bs-info)}.bs-callout-info h4{color:var(--bs-info)}.img-hover-zoom img{transition:transform .8s ease!important}.img-hover-zoom:hover img{transform:scale(1.5)}.img-hover-zoom--zoom-n-rotate img{transition:transform .5s ease-in-out!important}.img-hover-zoom--zoom-n-rotate:hover img{transform:scale(2) rotate(25deg)}.img-hover-zoom--slowmo img{transform-origin:50% 65%;transition:transform 5s,filter 3s ease-in-out!important;filter:brightness(150%)}.img-hover-zoom--slowmo:hover img{filter:brightness(100%);transform:scale(2)}.img-hover-zoom--brightness img{transition:transform 2s,filter 1.5s ease-in-out!important;transform-origin:center center;filter:brightness(50%)}.img-hover-zoom--brightness:hover img{filter:brightness(100%);transform:scale(1.3)}.img-hover-zoom--blur img{transition:transform 1s,filter 2s ease-in-out!important;filter:blur(2px);transform:scale(1.2)}.img-hover-zoom--blur:hover img{filter:blur(0);transform:scale(1)}.img-hover-zoom--colorize img{transition:transform .5s,filter 1.5s ease-in-out!important;filter:grayscale(100%)}.img-hover-zoom--colorize:hover img{filter:grayscale(0);transform:scale(1.1)}.nav-icon{margin:-1.5px;width:35px;border:none;background-color:transparent}.nav-icon div,.nav-icon:after,.nav-icon:before{background-color:#fff;border-radius:3px;content:"";display:block;height:5px;margin:7px 0;transition:all .2s ease-in-out}.nav-icon:not(.collapsed):before{transform:translateY(12px) rotate(135deg)}.nav-icon:not(.collapsed):after{transform:translateY(-12px) rotate(-135deg)}.nav-icon:not(.collapsed) div{transform:scale(0)}.nav-icon:active,.nav-icon:focus{outline:0;box-shadow:none}.media{display:flex!important}.media figure.image{flex-shrink:0!important}.media .media-body{flex-grow:1!important}.card figcaption{padding-right:.5rem;padding-left:.5rem}.back-to-top.st-none{transform:scale(0);transition:transform .4s cubic-bezier(.5,0,.3,1)}.back-to-top.st-block{transform:scale(1);transition:transform .4s cubic-bezier(.5,0,.3,1)}.image .toast,picture{overflow:hidden}#main-navbar{-moz-transition:all 1s ease-in;-webkit-transition:all 1s ease-in;-o-transition:all 1s ease-in;transition:all 1s ease-in}.sticky{position:fixed!important;top:0;left:0;width:100%}.fab{margin-top:.2rem}.text-shadow{color:#fff;text-shadow:1px 1px 2px #000,0 0 25px #000,0 0 5px #000}.ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)}.ratio{position:relative;width:100%}.accordion-img::after{margin-right:1rem}@media (max-width:575px){.col-image .background-image{min-height:250px}}@media (max-width:991px){.col-image .background-image{min-height:350px}} diff --git a/composer.json b/composer.json index 80e60b80..7195c6d1 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,11 @@ { "name": "t3sbs/t3sbootstrap", - "description": "Startup extension to use bootstrap 4 classes, components and more out of the box. Example and info: www.t3sbootstrap.de", - "keywords": ["typo3", "typo3 cms", "bootstrap"], + "description": "Startup extension to use bootstrap 5 classes, components and more out of the box. Example and info: www.t3sbootstrap.de", + "keywords": [ + "typo3", + "typo3 cms", + "bootstrap" + ], "homepage": "https://t3sbootstrap.de", "authors": [ { @@ -12,9 +16,11 @@ "license": "GPL-2.0-or-later", "type": "typo3-cms-extension", "require": { - "typo3/cms-core": "^10.4.18 || ^11.5.0", - "b13/container": "^1.3.1", - "ichhabrecht/content-defender": "^3.1.0" + "typo3/cms-core": "^10.4", + "b13/container": "^1.3.1" + }, + "suggest": { + "ichhabrecht/content-defender": "^3.1.3" }, "autoload": { "psr-4": { @@ -22,8 +28,8 @@ } }, "extra": { - "typo3/cms": { - "extension-key": "t3sbootstrap" - } + "typo3/cms": { + "extension-key": "t3sbootstrap" + } } } diff --git a/ext_conf_template.txt b/ext_conf_template.txt index ccf83011..e09973fe 100644 --- a/ext_conf_template.txt +++ b/ext_conf_template.txt @@ -5,72 +5,72 @@ # customcategory=preview=Preview # customsubcategory=a-config=Bootstrap SCSS variables! - # cat=preview/enable/10; type=boolean; label=Backend Preview: Use custom preview renderer (clear cache). +# cat=preview/enable/10; type=boolean; label=Backend Preview: Use custom preview renderer (clear cache). preview = 1 - # cat=preview/enable/20; type=boolean; label=Crop bodytext: Crop bodytext by "maxCharacters" (clear cache). +# cat=preview/enable/20; type=boolean; label=Crop bodytext: Crop bodytext by "maxCharacters" (clear cache). previewCrop = 1 - # cat=preview/enable/30; type=string; label=Max Characters: Max Characters for crop bodytext (clear cache). +# cat=preview/enable/30; type=string; label=Max Characters: Max Characters for crop bodytext (clear cache). previewCropMaxCharacters = 80 - # cat=preview/enable/40; type=boolean; label=Closed Collapsible: Collapsible container preview always closed (clear cache). +# cat=preview/enable/40; type=boolean; label=Closed Collapsible: Collapsible container preview always closed (clear cache). previewClosedCollapsible = 0 - # cat=content/enable/10; type=boolean; label=Spacing: Shows select-fields for padding and margin in any content element if enabled. You can set those classes also in the input-field "Extra Class" (clear cache). +# cat=content/enable/10; type=boolean; label=Spacing: Shows select-fields for padding and margin in any content element if enabled. You can set those classes also in the input-field "Extra Class" (clear cache). spacing = 1 - # cat=content/enable/20; type=boolean; label=Container: Shows a select-field for a .container or .container-fluid class in any content element if enabled (clear cache). +# cat=content/enable/20; type=boolean; label=Container: Shows a select-field for a .container or .container-fluid class in any content element if enabled (clear cache). container = 1 - # cat=content/enable/30; type=boolean; label=Color: Shows palette "Bootstrap Color" in almost any content element if enabled. You can set those classes also in the input-field "Extra Class" (clear cache). +# cat=content/enable/30; type=boolean; label=Color: Shows palette "Bootstrap Color" in almost any content element if enabled. You can set those classes also in the input-field "Extra Class" (clear cache). color = 1 - # cat=content/enable/40; type=boolean; label=Image ratio: Shows an option for "Image ratio" in the palette "Media Adjustments" if enabled. (clear cache). +# cat=content/enable/40; type=boolean; label=Image ratio: Shows an option for "Image ratio" in the palette "Media Adjustments" if enabled. (clear cache). ratio = 0 - # cat=content/enable/41; type=boolean; label=Image Tag: Option in the FAL to output image in - instead in tag in the FE. +# cat=content/enable/41; type=boolean; label=Image Tag: Option in the FAL to output image in - instead in tag in the FE. imgtag = 0 - # cat=content/enable/45; type=boolean; label=Original Image: Shows an option for "Use Original Image" in the palette "Media Adjustments" if enabled. (clear cache). +# cat=content/enable/45; type=boolean; label=Original Image: Shows an option for "Use Original Image" in the palette "Media Adjustments" if enabled. (clear cache). origimage = 0 - # cat=content/enable/50; type=boolean; label=Custom section order: Helpfully if using menu-items in a "container". (clear cache). +# cat=content/enable/50; type=boolean; label=Custom section order: Helpfully if using menu-items in a "container". (clear cache). sectionOrder = 0 - # cat=content/enable/60; type=boolean; label=Custom "Extra Style" field: Custom style-field for tt_content. (clear cache). +# cat=content/enable/60; type=boolean; label=Custom "Extra Style" field: Custom style-field for tt_content. (clear cache). extraStyle = 0 - # cat=page/enable/10; type=boolean; label=Font Awesome Icons: include input field for Fontawesome Icons in Table pages - Edit Page -> Appearance (clear cache). +# cat=page/enable/10; type=boolean; label=Font Awesome Icons: include input field for Fontawesome Icons in Table pages - Edit Page -> Appearance (clear cache). fontawesome = 1 - # cat=page/enable/20; type=boolean; label=Font Awesome Icon in Page Title: Enable the fa icon in the page title (clear cache). +# cat=page/enable/20; type=boolean; label=Font Awesome Icon in Page Title: Enable the fa icon in the page title (clear cache). fontawesomepagetitle = 1 - # cat=page/enable/30; type=boolean; label=Navigation color: Enable various colors for submenu nav-items in dropdown-menus (clear cache). +# cat=page/enable/30; type=boolean; label=Navigation color: Enable various colors for submenu nav-items in dropdown-menus (clear cache). navigationColor = 0 - # cat=custom/a-config/10; type=boolean; label=Custom SCSS: activate (clear cache and run Scheduler). +# cat=custom/a-config/10; type=boolean; label=Custom SCSS: activate (clear cache and run Scheduler). customScss = 0 - # cat=custom/a-config/30; type=options[none, Cerulean, Cosmo, Cyborg, Darkly, Flatly, Journal, Litera, Lumen, Lux, Materia, Minty, Morph, Pulse, Quartz, Sandstone, Simplex, Sketchy, Slate, Solar, Spacelab, Superhero, United, Vapor, Yeti, Zephyr]; label=Bootswatch Themes: Override default Bootstrap values with selected Bootswatch Theme - Info: https://bootswatch.com/ (clear cache and run Scheduler). +# cat=custom/a-config/30; type=options[none, Cerulean, Cosmo, Cyborg, Darkly, Flatly, Journal, Litera, Lumen, Lux, Materia, Minty, Morph, Pulse, Quartz, Sandstone, Simplex, Sketchy, Slate, Solar, Spacelab, Superhero, United, Vapor, Yeti, Zephyr]; label=Bootswatch Themes: Override default Bootstrap values with selected Bootswatch Theme - Info: https://bootswatch.com/ (clear cache and run Scheduler). bootswatch = none - # cat=custom/a-config/60; type=boolean; label=Edit in Backend: edit, save custom-variables.scss and clean up temporary files in typo3temp/assets/t3sbootstrap/css/ (clear cache). +# cat=custom/a-config/60; type=boolean; label=Edit in Backend: edit, save custom-variables.scss and clean up temporary files in typo3temp/assets/t3sbootstrap/css/ (clear cache). editScss = 0 - # cat=flexform/enable/10; type=boolean; label=Extend flexforms with custom fields: e.g.: /fileadmin/T3SB/FlexForms/Container/CarouselContainer.xml (clear cache). +# cat=flexform/enable/10; type=boolean; label=Extend flexforms with custom fields: e.g.: /fileadmin/T3SB/FlexForms/Container/CarouselContainer.xml (clear cache). flexformExtend = 0 - # cat=flexform/enable/30; type=boolean; label=Modify flexforms select-fields: e.g.: plugin.tx_t3sbootstrap.flexform.button.style.add = My Style, Your Style (clear cache). +# cat=flexform/enable/30; type=boolean; label=Modify flexforms select-fields: e.g.: plugin.tx_t3sbootstrap.flexform.button.style.add = My Style, Your Style (clear cache). flexformModify = 0 - # cat=t3sb/enable/30; type=boolean; label=Expanded Content: you'll have two more (on top and bottom) backend-layout fields (colPos 20 and 21) if enabled (clear cache). +# cat=t3sb/enable/30; type=boolean; label=Expanded Content: you'll have two more (on top and bottom) backend-layout fields (colPos 20 and 21) if enabled (clear cache). expandedContent = 0 - # cat=t3sb/enable/50; type=boolean; label=CType in class: Shows the CType as ".class" for each content element in the sourcecode if enabled (clear cache). +# cat=t3sb/enable/50; type=boolean; label=CType in class: Shows the CType as ".class" for each content element in the sourcecode if enabled (clear cache). cTypeClass = 0 - # cat=dif/enable/10; type=boolean; label=Codesnippet: Enable CKEditor plugin "Code Snippet" (clear cache). +# cat=dif/enable/10; type=boolean; label=Codesnippet: Enable CKEditor plugin "Code Snippet" (clear cache). codesnippet = 0 - # cat=dif/enable/15; type=options[none=0, default=1, on click=2]; label=Copyright (Image/FAL): Displays a copyright notice in the lower right corner or on click - settings in FAL (clear cache). +# cat=dif/enable/15; type=options[none=0, default=1, on click=2]; label=Copyright (Image/FAL): Displays a copyright notice in the lower right corner or on click - settings in FAL (clear cache). imgCopyright = 0 - # cat=dif/enable/20; type=boolean; label=Custom translations:(clear cache). +# cat=dif/enable/20; type=boolean; label=Custom translations:(clear cache). customTranslations = 0 - # cat=advanced/enable/10; type=options[none=0, FA free=1, FA pro (You need the Pro license - Info: https://www.t3sbootstrap.de/dokumentation/snippets/extend-t3sbootstrap/font-awesome-pro)=2]; label=Font Awesome 5: include Font Awesome SCSS - if deactivated, only some required icons are loaded (clear cache). +# cat=advanced/enable/10; type=options[none=0, FA free=1, FA pro (You need the Pro license - Info: https://www.t3sbootstrap.de/dokumentation/snippets/extend-t3sbootstrap/font-awesome-pro)=2]; label=Font Awesome 5: include Font Awesome SCSS - if deactivated, only some required icons are loaded (clear cache). fontawesomeCss = 0 - # cat=advanced/enable/20; type=boolean; label=Animate CSS: include Animate CSS und Viewportchecker if EXT:content_animations is not loaded (clear cache). +# cat=advanced/enable/20; type=boolean; label=Animate CSS: include Animate CSS and Viewportchecker if EXT:content_animations is not loaded (clear cache). animateCss = 0 - # cat=advanced/enable/30; type=boolean; label=Link Hover Effect: for images - include a select field in the FAL (sys_file_reference) and some CSS - (clear cache). +# cat=advanced/enable/30; type=boolean; label=Link Hover Effect: for images - include a select field in the FAL (sys_file_reference) and some CSS - (clear cache). linkHoverEffect = 0 - # cat=advanced/enable/50; type=options[none=0, for all images=1, single selection in FAL=2]; label=Lazy Load: for images - include lazyload.min.js (clear cache). +# cat=advanced/enable/50; type=options[none=0, for all images=1, single selection in FAL=2]; label=Lazy Load: for images - include lazyload.min.js (clear cache). lazyLoad = 0 - # cat=advanced/enable/60; type=boolean; label=Cookieconsent: include Cookieconsent von https://cookieconsent.insites.com (clear cache). +# cat=advanced/enable/60; type=boolean; label=Cookieconsent: include Cookieconsent von https://cookieconsent.insites.com (clear cache). cookieconsent = 0 - # cat=advanced/enable/70; type=boolean; label=Extension news: integration of templates adapted for bootstrap (clear cache). +# cat=advanced/enable/70; type=boolean; label=Extension news: integration of templates adapted for bootstrap (clear cache). extNews = 1 diff --git a/ext_emconf.php b/ext_emconf.php index d3b2d54d..5506c811 100644 --- a/ext_emconf.php +++ b/ext_emconf.php @@ -17,28 +17,28 @@ 'author' => 'Helmut Hackbarth', 'author_email' => 'typo3@t3solution.de', 'state' => 'stable', - 'uploadfolder' => true, 'clearCacheOnLoad' => true, - 'version' => '5.1.1', + 'author_company' => 't3solution', + 'version' => '5.1.2', 'constraints' => [ 'depends' => [ - 'typo3' => '10.4.10-11.99.99', + 'typo3' => '10.4.13-11.9.99', 'container' => '1.3.1-1.99.99', - 'content_defender' => '3.1.0-3.99.99', + ], 'conflicts' => [ 'ws_scss' => '*', 'dyncss' => '*', 'gridelements' => '*', ], - 'suggests' => [], + 'suggests' => [ + 'content_defender' => '3.1.3-3.99.99', + ], ], 'autoload' => [ 'psr-4' => [ 'T3SBS\\T3sbootstrap\\' => 'Classes', ], ], - 'clearcacheonload' => true, - 'author_company' => NULL, ]; diff --git a/ext_localconf.php b/ext_localconf.php index 4c8d2632..0d2bc9c9 100644 --- a/ext_localconf.php +++ b/ext_localconf.php @@ -1,22 +1,43 @@ isBackend() || - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('frontend_editing')) { + if ( ($GLOBALS['TYPO3_REQUEST'] ?? null) instanceof ServerRequestInterface + && ApplicationType::fromRequest($GLOBALS['TYPO3_REQUEST'])->isBackend() || + ExtensionManagementUtility::isLoaded('frontend_editing')) { - $iconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\IconRegistry::class); + $iconRegistry = GeneralUtility::makeInstance(IconRegistry::class); // FontawesomeIconProvider $iconRegistry->registerIcon( 'buttongroup', - \TYPO3\CMS\Core\Imaging\IconProvider\FontawesomeIconProvider::class, + FontawesomeIconProvider::class, ['name' => 'bars'] ); unset($iconRegistry); @@ -26,93 +47,94 @@ * TsConfig */ # Page - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig("@import 'EXT:t3sbootstrap/Configuration/TSConfig/Page.tsconfig'"); + ExtensionManagementUtility::addPageTSConfig("@import 'EXT:t3sbootstrap/Configuration/TSConfig/Page.tsconfig'"); # CKEditor - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig("@import 'EXT:t3sbootstrap/Configuration/TSConfig/CKEditor.tsconfig'"); + ExtensionManagementUtility::addPageTSConfig("@import 'EXT:t3sbootstrap/Configuration/TSConfig/CKEditor.tsconfig'"); /*************** * Default Constants */ - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.form.ajax = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.typoscriptRendering = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.indexedsearch = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.news = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.codesnippet = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.imgCopyright = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.linkHoverEffect = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.fontawesomepagetitle = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.fontawesomeCss = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.cookieconsent = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.lazyLoad = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.animateCss = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.container = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.spacing = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.color = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.cTypeClass = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.customScss = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.editScss = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.expandedContent = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.bootswatch = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.customSectionOrder = 0'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.webp = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.form.ajax = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.typoscriptRendering = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.indexedsearch = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.news = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.codesnippet = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.imgCopyright = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.linkHoverEffect = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.fontawesomepagetitle = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.fontawesomeCss = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.cookieconsent = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.lazyLoad = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.animateCss = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.container = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.spacing = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.color = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.cTypeClass = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.customScss = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.editScss = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.expandedContent = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.bootswatch = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.customSectionOrder = 0'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.webp = 0'); /*************** * Extension configuration */ - $extconf = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Configuration\ExtensionConfiguration::class)->get('t3sbootstrap'); + $extconf = GeneralUtility::makeInstance(ExtensionConfiguration::class)->get('t3sbootstrap'); /*************** * Other Extensions */ # if typoscript_rendering is loaded - if ( \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('typoscript_rendering') ) { + if ( ExtensionManagementUtility::isLoaded('typoscript_rendering') ) { /*************** * plugin content consent */ - \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + ExtensionUtility::configurePlugin( 'T3sbootstrap', 'Pi1', [ - \T3SBS\T3sbootstrap\Controller\ConsentController::class => 'index, ajax', + ConsentController::class => 'index, ajax', ], // non-cacheable actions [ - \T3SBS\T3sbootstrap\Controller\ConsentController::class => 'ajax', + ConsentController::class => 'ajax', ] ); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.typoscriptRendering = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.typoscriptRendering = 1'); } # if indexed_search is loaded - if ( \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('indexed_search') ) { + if ( ExtensionManagementUtility::isLoaded('indexed_search') ) { # Setup - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript('t3sbootstrap', + ExtensionManagementUtility::addTypoScript('t3sbootstrap', 'setup','','defaultContentRendering' ); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.indexedsearch = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.indexedsearch = 1'); } # if news is loaded - if ( \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('news') && array_key_exists('extNews', $extconf) && $extconf['extNews'] === '1' ) { + if ( ExtensionManagementUtility::isLoaded('news') && array_key_exists('extNews', $extconf) && $extconf['extNews'] === '1' ) { # TsConfig - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig(''); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript('t3sbootstrap', + ExtensionManagementUtility::addPageTSConfig(''); + ExtensionManagementUtility::addTypoScript('t3sbootstrap', 'setup','','defaultContentRendering' ); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.news = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.news = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.ext.newsVersion = '.ExtensionManagementUtility::getExtensionVersion('news')); } // Optional flexform extend if (array_key_exists('flexformExtend', $extconf) && $extconf['flexformExtend'] === '1') { - $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'][\TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools::class]['flexParsing'][] - = \T3SBS\T3sbootstrap\Hooks\FlexFormHook::class; + $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS'][FlexFormTools::class]['flexParsing'][] + = FlexFormHook::class; } // Optional modify flexform fields if (array_key_exists('flexformModify', $extconf) && $extconf['flexformModify'] === '1') { - $GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['formDataGroup']['tcaDatabaseRecord'][\T3SBS\T3sbootstrap\Backend\FormDataProvider\FlexFormManipulation::class] = [ + $GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['formDataGroup']['tcaDatabaseRecord'][FlexFormManipulation::class] = [ 'depends' => [ - \TYPO3\CMS\Backend\Form\FormDataProvider\TcaFlexPrepare::class, + TcaFlexPrepare::class, ], 'before' => [ - \TYPO3\CMS\Backend\Form\FormDataProvider\TcaFlexProcess::class, + TcaFlexProcess::class, ], ]; } @@ -121,16 +143,16 @@ $extPath = 'EXT:t3sbootstrap/Resources/Private/Language/'; $ctPath = 'fileadmin/T3SB/Language/'; - $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'][$extPath . 'locallang.xlf'][] = \TYPO3\CMS\Core\Core\Environment::getPublicPath() . $ctPath . 'locallang.xlf'; - $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'][$extPath . 'locallang_m1.xlf'][] = \TYPO3\CMS\Core\Core\Environment::getPublicPath() . $ctPath . 'locallang_m1.xlf'; - $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'][$extPath . 'locallang_db.xlf'][] = \TYPO3\CMS\Core\Core\Environment::getPublicPath() . $ctPath . 'locallang_db.xlf'; - $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'][$extPath . 'locallang_be.xlf'][] = \TYPO3\CMS\Core\Core\Environment::getPublicPath() . $ctPath . 'locallang_be.xlf'; + $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'][$extPath . 'locallang.xlf'][] = Environment::getPublicPath() . $ctPath . 'locallang.xlf'; + $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'][$extPath . 'locallang_m1.xlf'][] = Environment::getPublicPath() . $ctPath . 'locallang_m1.xlf'; + $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'][$extPath . 'locallang_db.xlf'][] = Environment::getPublicPath() . $ctPath . 'locallang_db.xlf'; + $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'][$extPath . 'locallang_be.xlf'][] = Environment::getPublicPath() . $ctPath . 'locallang_be.xlf'; } // Optional CKEditor plugin "Code Snippet" if (array_key_exists('codesnippet', $extconf) && $extconf['codesnippet'] === '1') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.codesnippet = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.codesnippet = 1'); // if rte_ckeditor_fontawesome is loaded - if ( \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('rte_ckeditor_fontawesome') ) { + if ( ExtensionManagementUtility::isLoaded('rte_ckeditor_fontawesome') ) { if (array_key_exists('fontawesomeCss', $extconf) && $extconf['fontawesomeCss'] === '2') { $GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['t3sbootstrap'] = 'EXT:t3sbootstrap/Configuration/RTE/CodesnippetFaPro.yaml'; } else { @@ -141,7 +163,7 @@ } } else { // if rte_ckeditor_fontawesome is loaded - if ( \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('rte_ckeditor_fontawesome') ) { + if ( ExtensionManagementUtility::isLoaded('rte_ckeditor_fontawesome') ) { if (array_key_exists('fontawesomeCss', $extconf) && $extconf['fontawesomeCss'] === '2') { $GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['t3sbootstrap'] = 'EXT:t3sbootstrap/Configuration/RTE/DefaultFaPro.yaml'; } else { @@ -153,83 +175,83 @@ } // Optional Hover Link Effect (FAL) if (array_key_exists('linkHoverEffect', $extconf) && $extconf['linkHoverEffect'] === '1') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.linkHoverEffect = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.linkHoverEffect = 1'); } // Optional Copyright notice (FAL) if (array_key_exists('imgCopyright', $extconf) && $extconf['imgCopyright'] === '1') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.imgCopyright = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.imgCopyright = 1'); } elseif (array_key_exists('imgCopyright', $extconf) && $extconf['imgCopyright'] === '2') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.imgCopyright = 2'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.imgCopyright = 2'); } // Optional fontawesomepagetitle if (array_key_exists('fontawesomepagetitle', $extconf) && $extconf['fontawesomepagetitle'] === '1') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.fontawesomepagetitle = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.fontawesomepagetitle = 1'); } // Optional fontawesomeCss if (array_key_exists('fontawesomeCss', $extconf) && $extconf['fontawesomeCss'] === '1') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.fontawesomeCss = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.fontawesomeCss = 1'); } elseif (array_key_exists('fontawesomeCss', $extconf) && $extconf['fontawesomeCss'] === '2') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.fontawesomeCss = 2'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.fontawesomeCss = 2'); } // Optional cookieconsent if (array_key_exists('cookieconsent', $extconf) && $extconf['cookieconsent'] === '1') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.cookieconsent = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.cookieconsent = 1'); } // Optional lazyLoad if (array_key_exists('lazyLoad', $extconf) && $extconf['lazyLoad'] === '1') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.lazyLoad = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.lazyLoad = 1'); } elseif (array_key_exists('lazyLoad', $extconf) && $extconf['lazyLoad'] === '2') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.lazyLoad = 2'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.lazyLoad = 2'); } // Optional animateCss if (array_key_exists('animateCss', $extconf) && $extconf['animateCss'] > '0') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.animateCss = '.$extconf['animateCss']); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.animateCss = '.$extconf['animateCss']); } // Optional select-field for a .container or .container-fluid class in any content element if (array_key_exists('container', $extconf) && $extconf['container'] === '1') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.container = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.container = 1'); } // Optional select-fields for margin and padding in any content element if (array_key_exists('spacing', $extconf) && $extconf['spacing'] === '1') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.spacing = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.spacing = 1'); } // Optional "Bootstrap color palette" if (array_key_exists('color', $extconf) && $extconf['color'] === '1') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.color = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.color = 1'); } // Optional "cType in class" if (array_key_exists('cTypeClass', $extconf) && $extconf['cTypeClass'] === '1') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.cTypeClass = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.cTypeClass = 1'); } // Optional "custom scss" if (array_key_exists('customScss', $extconf) && $extconf['customScss'] === '1') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.customScss = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.customScss = 1'); // Optional "bootswatch theme" if (array_key_exists('bootswatch', $extconf) && $extconf['bootswatch'] !== 'none') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.bootswatch = '.$extconf['bootswatch']); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.bootswatch = '.$extconf['bootswatch']); } // Edit in BE if (array_key_exists('editScss', $extconf) && $extconf['editScss'] === '1') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.editScss = 1'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.editScss = 1'); } } // Optional "expanded content" if (array_key_exists('expandedContent', $extconf) && $extconf['expandedContent'] === '1') { # expanded content on top and bottom - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig("@import 'EXT:t3sbootstrap/Configuration/TSConfig/BackendLayouts/Expanded/_main.tsconfig'"); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.expandedContent = 1'); + ExtensionManagementUtility::addPageTSConfig("@import 'EXT:t3sbootstrap/Configuration/TSConfig/BackendLayouts/Expanded/_main.tsconfig'"); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.expandedContent = 1'); } else { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig("@import 'EXT:t3sbootstrap/Configuration/TSConfig/BackendLayouts/Default/_main.tsconfig'"); + ExtensionManagementUtility::addPageTSConfig("@import 'EXT:t3sbootstrap/Configuration/TSConfig/BackendLayouts/Default/_main.tsconfig'"); } // Optional "custom section menu order" if (array_key_exists('sectionOrder', $extconf) && $extconf['sectionOrder'] === '1') { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.sectionOrder = tx_t3sbootstrap_sectionOrder'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.sectionOrder = tx_t3sbootstrap_sectionOrder'); } else { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.sectionOrder = sorting'); + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.sectionOrder = sorting'); } # if webp is loaded - if ( \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('webp') ) { - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.webp = 1'); + if ( ExtensionManagementUtility::isLoaded('webp') ) { + ExtensionManagementUtility::addTypoScriptConstants('bootstrap.extconf.webp = 1'); } /*************** @@ -237,7 +259,7 @@ */ if (array_key_exists('preview', $extconf) && $extconf['preview'] === '1') { $GLOBALS['TYPO3_CONF_VARS']['SYS']['features']['fluidBasedPageModule'] = true; - $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['previewRendererResolver'] = \TYPO3\CMS\Backend\Preview\StandardPreviewRendererResolver::class; + $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['previewRendererResolver'] = StandardPreviewRendererResolver::class; } /*************** @@ -251,18 +273,17 @@ * Registering wizards */ $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['t3sbMigrateUpdateWizard'] - = \T3SBS\T3sbootstrap\Updates\t3sbMigrateUpdateWizard::class; + = T3sbMigrateUpdateWizard::class; /*************** * Parser */ // Register css processing parser - $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/t3sbootstrap/css']['parser'][\T3SBS\T3sbootstrap\Parser\ScssParser::class] = - \T3SBS\T3sbootstrap\Parser\ScssParser::class; + $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/t3sbootstrap/css']['parser'][ScssParser::class] = + ScssParser::class; // Register css processing hooks - $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_pagerenderer.php']['render-preProcess'][\T3SBS\T3sbootstrap\Hooks\PageRenderer\PreProcessHook::class] - = \T3SBS\T3sbootstrap\Hooks\PageRenderer\PreProcessHook::class . '->execute'; - + $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_pagerenderer.php']['render-preProcess'][PreProcessHook::class] + = PreProcessHook::class . '->execute'; -}); +})(); diff --git a/ext_tables.php b/ext_tables.php index d1123e2c..e9d2ac06 100644 --- a/ext_tables.php +++ b/ext_tables.php @@ -1,15 +1,19 @@ 'list, new, create, edit, update, delete, dashboard, constants ', + ConfigController::class => 'list, new, create, edit, update, delete, dashboard, constants ', ], [ 'access' => 'user,group', @@ -18,7 +22,7 @@ ] ); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('tx_t3sbootstrap_domain_model_config', 'EXT:t3sbootstrap/Resources/Private/Language/locallang_csh_tx_t3sbootstrap_domain_model_config.xlf'); - \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_t3sbootstrap_domain_model_config'); + ExtensionManagementUtility::addLLrefForTCAdescr('tx_t3sbootstrap_domain_model_config', 'EXT:t3sbootstrap/Resources/Private/Language/locallang_csh_tx_t3sbootstrap_domain_model_config.xlf'); + ExtensionManagementUtility::allowTableOnStandardPages('tx_t3sbootstrap_domain_model_config'); -}); +})();