[TASK] Rewrite toggle and save to ajax in AdminPanel 26/56826/5
authorSusanne Moog <susanne.moog@typo3.org>
Sun, 29 Apr 2018 14:18:57 +0000 (16:18 +0200)
committerFrank Naegler <frank.naegler@typo3.org>
Fri, 11 May 2018 14:54:59 +0000 (16:54 +0200)
As the next step on the road to a better adminPanel,
the save and toggle actions were rewritten to use ajax
getting mostly rid of the $_GET params.

Related: #84044
Resolves: #84892
Releases: master
Change-Id: Ic9169db7cf07b0246d91240c01140bfc05ecef71
Reviewed-on: https://review.typo3.org/56826
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Mathias Schreiber <mathias.schreiber@typo3.com>
Tested-by: Mathias Schreiber <mathias.schreiber@typo3.com>
Reviewed-by: Frank Naegler <frank.naegler@typo3.org>
Tested-by: Frank Naegler <frank.naegler@typo3.org>
Build/Resources/Public/Sass/adminpanel.scss
typo3/sysext/adminpanel/Classes/Controller/AjaxController.php [new file with mode: 0644]
typo3/sysext/adminpanel/Classes/Controller/MainController.php
typo3/sysext/adminpanel/Classes/Service/ModuleLoader.php [new file with mode: 0644]
typo3/sysext/adminpanel/Classes/View/AdminPanelView.php
typo3/sysext/adminpanel/Configuration/Backend/AjaxRoutes.php [new file with mode: 0644]
typo3/sysext/adminpanel/Resources/Public/Css/adminpanel.css
typo3/sysext/adminpanel/Resources/Public/JavaScript/AdminPanel.js [new file with mode: 0644]

index 7a386fd..7e63895 100644 (file)
 // Enabling
 //
 #TSFE_ADMIN_PANEL_FORM {
-    #typo3AdminPanelEnable,
     #typo3AdminPanelCollapse {
         display: none;
     }
                 display: inline;
             }
 
-            .typo3-adminPanel-header-enable-disabled {
-                display: none;
-            }
-
             .typo3-adminPanel-header-collapse {
                 display: block;
             }
             .typo3-adminPanel-header-collapse-enabled {
                 display: inline;
             }
-
-            .typo3-adminPanel-header-collapse-disabled {
-                display: none;
-            }
         }
     }
 }
         }
 
         .typo3-adminPanel-header-enable-enabled {
-            display: none;
             color: $brand-success;
         }
 
diff --git a/typo3/sysext/adminpanel/Classes/Controller/AjaxController.php b/typo3/sysext/adminpanel/Classes/Controller/AjaxController.php
new file mode 100644 (file)
index 0000000..a870271
--- /dev/null
@@ -0,0 +1,98 @@
+<?php
+declare(strict_types = 1);
+
+namespace TYPO3\CMS\Adminpanel\Controller;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use Psr\Http\Message\RequestInterface;
+use TYPO3\CMS\Adminpanel\Service\ModuleLoader;
+use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
+use TYPO3\CMS\Core\Cache\CacheManager;
+use TYPO3\CMS\Core\Http\JsonResponse;
+use TYPO3\CMS\Core\Http\ServerRequest;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Admin Panel Ajax Controller - Route endpoint for ajax actions
+ */
+class AjaxController
+{
+
+    /**
+     * Save adminPanel data
+     *
+     * @param ServerRequest $request
+     * @return JsonResponse
+     */
+    public function saveDataAction(ServerRequest $request): JsonResponse
+    {
+        $moduleLoader = GeneralUtility::makeInstance(ModuleLoader::class);
+
+        $modules = $moduleLoader->getModulesFromConfiguration();
+
+        $input = $request->getParsedBody()['TSFE_ADMIN_PANEL'] ?? null;
+        $beUser = $this->getBackendUser();
+        if (is_array($input)) {
+            // Setting
+            $beUser->uc['TSFE_adminConfig'] = array_merge(
+                !is_array($beUser->uc['TSFE_adminConfig']) ? [] : $beUser->uc['TSFE_adminConfig'],
+                $input
+            );
+            unset($beUser->uc['TSFE_adminConfig']['action']);
+
+            /** @var \TYPO3\CMS\Adminpanel\Modules\AdminPanelModuleInterface $module */
+            foreach ($modules as $module) {
+                if ($module->isEnabled()) {
+                    $module->onSubmit($input);
+                }
+            }
+            // Saving
+            $beUser->writeUC();
+            // Flush fluid template cache
+            $cacheManager = GeneralUtility::makeInstance(CacheManager::class);
+            $cacheManager->setCacheConfigurations($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']);
+            $cacheManager->getCache('fluid_template')->flush();
+        }
+        return new JsonResponse(['success' => true]);
+    }
+
+    /**
+     * Toggle admin panel active state via UC
+     *
+     * @param \Psr\Http\Message\RequestInterface $request
+     * @return \TYPO3\CMS\Core\Http\JsonResponse
+     */
+    public function toggleActiveState(RequestInterface $request): JsonResponse
+    {
+        $backendUser = $this->getBackendUser();
+        if ($backendUser->uc['TSFE_adminConfig']['display_top'] ?? false) {
+            $backendUser->uc['TSFE_adminConfig']['display_top'] = false;
+        } else {
+            $backendUser->uc['TSFE_adminConfig']['display_top'] = true;
+        }
+        $backendUser->writeUC();
+        return new JsonResponse(['success' => true]);
+    }
+
+    /**
+     * Returns the current BE user.
+     *
+     * @return \TYPO3\CMS\Core\Authentication\BackendUserAuthentication
+     */
+    protected function getBackendUser(): BackendUserAuthentication
+    {
+        return $GLOBALS['BE_USER'];
+    }
+}
index 1ffdb97..2df560c 100644 (file)
@@ -17,12 +17,12 @@ namespace TYPO3\CMS\Adminpanel\Controller;
  */
 
 use TYPO3\CMS\Adminpanel\Modules\AdminPanelModuleInterface;
+use TYPO3\CMS\Adminpanel\Service\ModuleLoader;
 use TYPO3\CMS\Adminpanel\View\AdminPanelView;
 use TYPO3\CMS\Backend\FrontendBackendUserAuthentication;
 use TYPO3\CMS\Core\Cache\CacheManager;
 use TYPO3\CMS\Core\Http\ServerRequest;
 use TYPO3\CMS\Core\Localization\LanguageService;
-use TYPO3\CMS\Core\Service\DependencyOrderingService;
 use TYPO3\CMS\Core\SingletonInterface;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
@@ -46,7 +46,8 @@ class MainController implements SingletonInterface
      */
     public function initialize(ServerRequest $request): void
     {
-        $this->validateSortAndInitializeModules();
+        $moduleLoader = GeneralUtility::makeInstance(ModuleLoader::class);
+        $this->modules = $moduleLoader->getModulesFromConfiguration();
         $this->saveConfiguration();
 
         foreach ($this->modules as $module) {
@@ -101,52 +102,6 @@ class MainController implements SingletonInterface
     }
 
     /**
-     * Validates, sorts and initiates the registered modules
-     *
-     * @throws \RuntimeException
-     */
-    protected function validateSortAndInitializeModules(): void
-    {
-        $modules = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules'] ?? [];
-        if (empty($modules)) {
-            return;
-        }
-        foreach ($modules as $identifier => $configuration) {
-            if (empty($configuration) || !is_array($configuration)) {
-                throw new \RuntimeException(
-                    'Missing configuration for module "' . $identifier . '".',
-                    1519490105
-                );
-            }
-            if (!is_string($configuration['module']) ||
-                empty($configuration['module']) ||
-                !class_exists($configuration['module']) ||
-                !is_subclass_of(
-                    $configuration['module'],
-                    AdminPanelModuleInterface::class
-                )
-            ) {
-                throw new \RuntimeException(
-                    'The module "' .
-                    $identifier .
-                    '" defines an invalid module class. Ensure the class exists and implements the "' .
-                    AdminPanelModuleInterface::class .
-                    '".',
-                    1519490112
-                );
-            }
-        }
-
-        $orderedModules = GeneralUtility::makeInstance(DependencyOrderingService::class)->orderByDependencies(
-            $modules
-        );
-
-        foreach ($orderedModules as $module) {
-            $this->modules[] = GeneralUtility::makeInstance($module['module']);
-        }
-    }
-
-    /**
      * Returns LanguageService
      *
      * @return LanguageService
diff --git a/typo3/sysext/adminpanel/Classes/Service/ModuleLoader.php b/typo3/sysext/adminpanel/Classes/Service/ModuleLoader.php
new file mode 100644 (file)
index 0000000..3b2ddb4
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+declare(strict_types = 1);
+
+namespace TYPO3\CMS\Adminpanel\Service;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Adminpanel\Modules\AdminPanelModuleInterface;
+use TYPO3\CMS\Core\Service\DependencyOrderingService;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+
+/**
+ * Admin Panel Module Loader
+ *
+ * @internal
+ */
+class ModuleLoader
+{
+
+    /**
+     * Validates, sorts and initiates the registered modules
+     *
+     * @throws \RuntimeException
+     * @return AdminPanelModuleInterface[]
+     */
+    public function getModulesFromConfiguration(): array
+    {
+        $modules = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules'] ?? [];
+        if (empty($modules)) {
+            return [];
+        }
+        foreach ($modules as $identifier => $configuration) {
+            if (empty($configuration) || !is_array($configuration)) {
+                throw new \RuntimeException(
+                    'Missing configuration for module "' . $identifier . '".',
+                    1519490105
+                );
+            }
+            if (!is_string($configuration['module']) ||
+                empty($configuration['module']) ||
+                !class_exists($configuration['module']) ||
+                !is_subclass_of(
+                    $configuration['module'],
+                    AdminPanelModuleInterface::class
+                )) {
+                throw new \RuntimeException(
+                    'The module "' .
+                    $identifier .
+                    '" defines an invalid module class. Ensure the class exists and implements the "' .
+                    AdminPanelModuleInterface::class .
+                    '".',
+                    1519490112
+                );
+            }
+        }
+
+        $orderedModules = GeneralUtility::makeInstance(DependencyOrderingService::class)->orderByDependencies(
+            $modules
+        );
+
+        $finalModulesArr = [];
+        foreach ($orderedModules as $module) {
+            $finalModulesArr[] = GeneralUtility::makeInstance($module['module']);
+        }
+
+        return $finalModulesArr;
+    }
+}
index 8005c0d..f377574 100644 (file)
@@ -17,6 +17,7 @@ namespace TYPO3\CMS\Adminpanel\View;
 
 use TYPO3\CMS\Adminpanel\Modules\AdminPanelModuleInterface;
 use TYPO3\CMS\Adminpanel\Service\EditToolbarService;
+use TYPO3\CMS\Backend\Routing\UriBuilder;
 use TYPO3\CMS\Core\Imaging\Icon;
 use TYPO3\CMS\Core\Imaging\IconFactory;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
@@ -183,10 +184,14 @@ class AdminPanelView
             }
         }
 
+        $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
+        $toggleActiveUrl = $uriBuilder->buildUriFromRoute('ajax_adminPanel_toggle');
+        $saveFormUrl = $uriBuilder->buildUriFromRoute('ajax_adminPanel_saveForm');
+
         $output = [];
         $output[] = '<!-- TYPO3 Admin panel start -->';
         $output[] = '<a id="TSFE_ADMIN_PANEL"></a>';
-        $output[] = '<form id="TSFE_ADMIN_PANEL_FORM" name="TSFE_ADMIN_PANEL_FORM" style="display: none;" action="' . htmlspecialchars(GeneralUtility::getIndpEnv('TYPO3_REQUEST_SCRIPT')) . '#TSFE_ADMIN_PANEL" method="get" onsubmit="document.forms.TSFE_ADMIN_PANEL_FORM[\'TSFE_ADMIN_PANEL[DUMMY]\'].value=Math.random().toString().substring(2,8)">';
+        $output[] = '<div data-typo3-role="typo3-adminPanel"><form id="TSFE_ADMIN_PANEL_FORM" name="TSFE_ADMIN_PANEL_FORM" style="display: none;" action="' . htmlspecialchars(GeneralUtility::getIndpEnv('TYPO3_REQUEST_SCRIPT')) . '#TSFE_ADMIN_PANEL" method="get" onsubmit="document.forms.TSFE_ADMIN_PANEL_FORM[\'TSFE_ADMIN_PANEL[DUMMY]\'].value=Math.random().toString().substring(2,8)">';
         if (!GeneralUtility::_GET('id')) {
             $output[] = '<input type="hidden" name="id" value="' . $this->getTypoScriptFrontendController()->id . '" />';
         }
@@ -202,10 +207,6 @@ class AdminPanelView
                 }
             }
         }
-        $output[] = '  <input type="hidden" name="TSFE_ADMIN_PANEL[display_top]" value="0" />';
-        $output[] = '  <input id="typo3AdminPanelEnable" type="checkbox" onchange="document.TSFE_ADMIN_PANEL_FORM.submit();" name="TSFE_ADMIN_PANEL[display_top]" value="1"' .
-                    ($this->isAdminPanelActivated() ? ' checked="checked"' : '') .
-                    '/>';
         $output[] = '  <input id="typo3AdminPanelCollapse" type="checkbox" value="1" />';
         $output[] = '  <div class="typo3-adminPanel typo3-adminPanel-state-' .
                     ($this->isAdminPanelActivated() ? 'open' : 'closed') .
@@ -213,13 +214,18 @@ class AdminPanelView
         $output[] = '    <div class="typo3-adminPanel-header">';
         $output[] = '      <span class="typo3-adminPanel-header-title">' . $this->extGetLL('adminPanelTitle') . '</span>';
         $output[] = '      <span class="typo3-adminPanel-header-user">' . htmlspecialchars($this->getBackendUser()->user['username']) . '</span>';
-        $output[] = '      <label for="typo3AdminPanelEnable" class="typo3-adminPanel-header-enable">';
-        $output[] = '        <span class="typo3-adminPanel-header-enable-enabled">';
-        $output[] = '          ' . $this->iconFactory->getIcon('actions-edit-hide', Icon::SIZE_SMALL)->render('inline');
-        $output[] = '        </span>';
-        $output[] = '        <span class="typo3-adminPanel-header-enable-disabled">';
-        $output[] = '          ' . $this->iconFactory->getIcon('actions-edit-unhide', Icon::SIZE_SMALL)->render('inline');
-        $output[] = '        </span>';
+        $output[] = '      <label for="typo3AdminPanelEnable" data-typo3-role="typo3-adminPanel-trigger" data-typo3-ajax-url="' .
+                    $toggleActiveUrl .
+                    '" class="typo3-adminPanel-header-enable">';
+        if ($this->isAdminPanelActivated()) {
+            $output[] = '        <span class="typo3-adminPanel-header-enable-enabled">';
+            $output[] = '          ' . $this->iconFactory->getIcon('actions-edit-hide', Icon::SIZE_SMALL)->render('inline');
+            $output[] = '        </span>';
+        } else {
+            $output[] = '        <span class="typo3-adminPanel-header-enable-disabled">';
+            $output[] = '          ' . $this->iconFactory->getIcon('actions-edit-unhide', Icon::SIZE_SMALL)->render('inline');
+            $output[] = '        </span>';
+        }
         $output[] = '      </label>';
         $output[] = '      <label for="typo3AdminPanelCollapse" class="typo3-adminPanel-header-collapse">';
         $output[] = '        <span class="typo3-adminPanel-header-collapse-enabled">';
@@ -232,14 +238,16 @@ class AdminPanelView
         $output[] = '    </div>';
         if ($moduleContent && $this->extNeedUpdate) {
             $output[] = '<div class="typo3-adminPanel-actions">';
-            $output[] = '  <input class="typo3-adminPanel-btn typo3-adminPanel-btn-dark" type="submit" value="' . $this->extGetLL('update') . '" />';
+            $output[] = '  <button data-typo3-role="typo3-adminPanel-saveButton" data-typo3-ajax-url="' .
+                        $saveFormUrl .
+                        '" class="typo3-adminPanel-btn typo3-adminPanel-btn-dark">' . $this->extGetLL('update') . '</button>';
             $output[] = '</div>';
         }
         $output[] = '    <div class="typo3-adminPanel-body">';
         $output[] = '      ' . $moduleContent;
         $output[] = '    </div>';
         $output[] = '  </div>';
-        $output[] = '</form>';
+        $output[] = '</form></div>';
         if ($this->getBackendUser()->uc['TSFE_adminConfig']['display_top']) {
             $evalFieldJavaScriptFile = GeneralUtility::getFileAbsFileName('EXT:backend/Resources/Public/JavaScript/jsfunc.evalfield.js');
             $output[] = '<script type="text/javascript" src="' . htmlspecialchars(PathUtility::getAbsoluteWebPath($evalFieldJavaScriptFile)) . '"></script>';
@@ -273,7 +281,9 @@ class AdminPanelView
             $output[] = '<script language="javascript" type="text/javascript">' . $this->extJSCODE . '</script>';
         }
         $cssFileLocation = GeneralUtility::getFileAbsFileName('EXT:adminpanel/Resources/Public/Css/adminpanel.css');
+        $jsFileLocation = GeneralUtility::getFileAbsFileName('EXT:adminpanel/Resources/Public/JavaScript/AdminPanel.js');
         $output[] = '<link type="text/css" rel="stylesheet" href="' . htmlspecialchars(PathUtility::getAbsoluteWebPath($cssFileLocation)) . '" media="all" />';
+        $output[] = '<script type="text/javascript" src="' . htmlspecialchars(PathUtility::getAbsoluteWebPath($jsFileLocation)) . '"></script>';
         $output[] = $this->getAdminPanelStylesheet();
         $output[] = '<!-- TYPO3 admin panel end -->';
 
diff --git a/typo3/sysext/adminpanel/Configuration/Backend/AjaxRoutes.php b/typo3/sysext/adminpanel/Configuration/Backend/AjaxRoutes.php
new file mode 100644 (file)
index 0000000..103b5eb
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * Definitions for routes provided by EXT:adminpanel
+ * Contains all AJAX-based routes for entry points
+ */
+return [
+    'adminPanel_saveForm' => [
+        'path' => '/adminpanel/form/save',
+        'target' => \TYPO3\CMS\Adminpanel\Controller\AjaxController::class . '::saveDataAction'
+    ],
+    'adminPanel_toggle' => [
+        'path' => '/adminpanel/toggleActiveState',
+        'target' => \TYPO3\CMS\Adminpanel\Controller\AjaxController::class . '::toggleActiveState'
+    ],
+];
index 35818bd..abfbf33 100644 (file)
@@ -10,4 +10,4 @@
  * 
  * The TYPO3 project - inspiring people to share!
  */
-#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon,.typo3-editPanel-btn .icon,.typo3-editPanel-link .icon{position:relative;display:inline-block;overflow:hidden;white-space:nowrap;vertical-align:-22%}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon img,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon svg,.typo3-editPanel-btn .icon img,.typo3-editPanel-btn .icon svg,.typo3-editPanel-link .icon img,.typo3-editPanel-link .icon svg{display:block;height:100%;width:100%;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon *,.typo3-editPanel-btn .icon *,.typo3-editPanel-link .icon *{display:block;line-height:inherit}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-markup,.typo3-editPanel-btn .icon-markup,.typo3-editPanel-link .icon-markup{position:absolute;display:block;text-align:center;top:0;left:0;right:0;bottom:0}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-overlay,.typo3-editPanel-btn .icon-overlay,.typo3-editPanel-link .icon-overlay{position:absolute;bottom:0;right:0;height:68.75%;width:68.75%;text-align:center}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-color,.typo3-editPanel-btn .icon-color,.typo3-editPanel-link .icon-color{fill:currentColor}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-spin .icon-markup,.typo3-editPanel-btn .icon-spin .icon-markup,.typo3-editPanel-link .icon-spin .icon-markup{-webkit-animation:icon-spin 2s infinite linear;animation:icon-spin 2s infinite linear}@-webkit-keyframes icon-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes icon-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-state-disabled .icon-markup,.typo3-editPanel-btn .icon-state-disabled .icon-markup,.typo3-editPanel-link .icon-state-disabled .icon-markup{opacity:.5}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-small,.typo3-editPanel-btn .icon-size-small,.typo3-editPanel-link .icon-size-small{height:16px;width:16px;line-height:16px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-small .icon-unify,.typo3-editPanel-btn .icon-size-small .icon-unify,.typo3-editPanel-link .icon-size-small .icon-unify{line-height:16px;font-size:14px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-small .icon-overlay .icon-unify,.typo3-editPanel-btn .icon-size-small .icon-overlay .icon-unify,.typo3-editPanel-link .icon-size-small .icon-overlay .icon-unify{line-height:10px;font-size:9px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-default,.typo3-editPanel-btn .icon-size-default,.typo3-editPanel-link .icon-size-default{height:32px;width:32px;line-height:32px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-default .icon-unify,.typo3-editPanel-btn .icon-size-default .icon-unify,.typo3-editPanel-link .icon-size-default .icon-unify{line-height:32px;font-size:28px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-default .icon-overlay .icon-unify,.typo3-editPanel-btn .icon-size-default .icon-overlay .icon-unify,.typo3-editPanel-link .icon-size-default .icon-overlay .icon-unify{line-height:20px;font-size:18px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-large,.typo3-editPanel-btn .icon-size-large,.typo3-editPanel-link .icon-size-large{height:48px;width:48px;line-height:48px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-large .icon-unify,.typo3-editPanel-btn .icon-size-large .icon-unify,.typo3-editPanel-link .icon-size-large .icon-unify{line-height:48px;font-size:42px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-large .icon-overlay .icon-unify,.typo3-editPanel-btn .icon-size-large .icon-overlay .icon-unify,.typo3-editPanel-link .icon-size-large .icon-overlay .icon-unify{line-height:30px;font-size:26px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-actions-edit-copy-release,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-actions-edit-cut-release,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-dialog-error,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-status-current,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-status-permission-denied,.typo3-editPanel-btn .icon-actions-edit-copy-release,.typo3-editPanel-btn .icon-actions-edit-cut-release,.typo3-editPanel-btn .icon-status-dialog-error,.typo3-editPanel-btn .icon-status-status-current,.typo3-editPanel-btn .icon-status-status-permission-denied,.typo3-editPanel-link .icon-actions-edit-copy-release,.typo3-editPanel-link .icon-actions-edit-cut-release,.typo3-editPanel-link .icon-status-dialog-error,.typo3-editPanel-link .icon-status-status-current,.typo3-editPanel-link .icon-status-status-permission-denied{color:#c83c3c}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-status-sorting-light-asc,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-status-sorting-light-desc,.typo3-editPanel-btn .icon-status-status-sorting-light-asc,.typo3-editPanel-btn .icon-status-status-sorting-light-desc,.typo3-editPanel-link .icon-status-status-sorting-light-asc,.typo3-editPanel-link .icon-status-status-sorting-light-desc{color:#fff}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-status-sorting-asc,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-status-sorting-desc,.typo3-editPanel-btn .icon-status-status-sorting-asc,.typo3-editPanel-btn .icon-status-status-sorting-desc,.typo3-editPanel-link .icon-status-status-sorting-asc,.typo3-editPanel-link .icon-status-status-sorting-desc{color:#737373}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-dialog-information,.typo3-editPanel-btn .icon-status-dialog-information,.typo3-editPanel-link .icon-status-dialog-information{color:#6daae0}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-dialog-ok,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-status-permission-granted,.typo3-editPanel-btn .icon-status-dialog-ok,.typo3-editPanel-btn .icon-status-status-permission-granted,.typo3-editPanel-link .icon-status-dialog-ok,.typo3-editPanel-link .icon-status-status-permission-granted{color:#79a548}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-dialog-notification,.typo3-editPanel-btn .icon-status-dialog-notification,.typo3-editPanel-link .icon-status-dialog-notification{color:#333}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-dialog-warning,.typo3-editPanel-btn .icon-status-dialog-warning,.typo3-editPanel-link .icon-status-dialog-warning{color:#e8a33d}@font-face{font-family:TYPO3FontAwesome;src:url(../../../../backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?v=4.6.3);src:url(../../../../backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?#iefix&v=4.6.3) format("embedded-opentype"),url(../../../../backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff2?v=4.6.3) format("woff2"),url(../../../../backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff?v=4.6.3) format("woff"),url(../../../../backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.ttf?v=4.6.3) format("truetype"),url(../../../../backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular) format("svg");font-weight:400;font-style:normal}#TSFE_ADMIN_PANEL_FORM .fa:before,.typo3-editPanel .fa:before,.typo3-feedit-element .fa:before{display:inline-block;font:normal normal normal 14px/1 TYPO3FontAwesome;font-size:15px;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transform:translate(0,0);transform:translate(0,0)}#TSFE_ADMIN_PANEL_FORM .fa-pencil:before,.typo3-editPanel .fa-pencil:before,.typo3-feedit-element .fa-pencil:before{content:"\f040"}#TSFE_ADMIN_PANEL_FORM .fa-angle-up:before,.typo3-editPanel .fa-angle-up:before,.typo3-feedit-element .fa-angle-up:before{content:"\f106"}#TSFE_ADMIN_PANEL_FORM .fa-angle-down:before,.typo3-editPanel .fa-angle-down:before,.typo3-feedit-element .fa-angle-down:before{content:"\f107"}#TSFE_ADMIN_PANEL_FORM .fa-toggle-off:before,.typo3-editPanel .fa-toggle-off:before,.typo3-feedit-element .fa-toggle-off:before{content:"\f204"}#TSFE_ADMIN_PANEL_FORM .fa-toggle-on:before,.typo3-editPanel .fa-toggle-on:before,.typo3-feedit-element .fa-toggle-on:before{content:"\f205"}#TSFE_ADMIN_PANEL_FORM .fa-google-plus-square:before,.typo3-editPanel .fa-google-plus-square:before,.typo3-feedit-element .fa-google-plus-square:before{content:"\f0d4"}#TSFE_ADMIN_PANEL_FORM .fa-trash:before,.typo3-editPanel .fa-trash:before,.typo3-feedit-element .fa-trash:before{content:"\f1f8"}#TSFE_ADMIN_PANEL_FORM .fa-history:before,.typo3-editPanel .fa-history:before,.typo3-feedit-element .fa-history:before{content:"\f1da"}#TSFE_ADMIN_PANEL_FORM .fa-list-alt:before,.typo3-editPanel .fa-list-alt:before,.typo3-feedit-element .fa-list-alt:before{content:"\f022"}#TSFE_ADMIN_PANEL_FORM .fa-plus-square:before,.typo3-editPanel .fa-plus-square:before,.typo3-feedit-element .fa-plus-square:before{content:"\f0fe"}#TSFE_ADMIN_PANEL_FORM .fa-arrows:before,.typo3-editPanel .fa-arrows:before,.typo3-feedit-element .fa-arrows:before{content:"\f047"}#TSFE_ADMIN_PANEL_FORM .fa-exclamation-circle:before,.typo3-editPanel .fa-exclamation-circle:before,.typo3-feedit-element .fa-exclamation-circle:before{content:"\f06a"}#TSFE_ADMIN_PANEL_FORM .fa-exclamation-triangle:before,.typo3-editPanel .fa-exclamation-triangle:before,.typo3-feedit-element .fa-exclamation-triangle:before{content:"\f071"}#TSFE_ADMIN_PANEL_FORM .fa-info-circle:before,.typo3-editPanel .fa-info-circle:before,.typo3-feedit-element .fa-info-circle:before{content:"\f05a"}#TSFE_ADMIN_PANEL_FORM .fa-caret-down:before,.typo3-editPanel .fa-caret-down:before,.typo3-feedit-element .fa-caret-down:before{content:"\f0d7"}#TSFE_ADMIN_PANEL_FORM .fa-caret-up:before,.typo3-editPanel .fa-caret-up:before,.typo3-feedit-element .fa-caret-up:before{content:"\f0d8"}#TSFE_ADMIN_PANEL_FORM .fa-bolt:before,.typo3-editPanel .fa-bolt:before,.typo3-feedit-element .fa-bolt:before{content:"\f0e7"}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-title-identifier:before{display:inline-block;font:normal normal normal 14px/1 TYPO3FontAwesome;font-size:15px;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transform:translate(0,0);transform:translate(0,0)}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel,.typo3-editPanel{background-color:#fafafa;color:#333;font-family:sans-serif;font-size:12px;line-height:1.35em}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel a,.typo3-editPanel a{color:inherit;text-decoration:none}#TSFE_ADMIN_PANEL_FORM{display:block!important;position:fixed;bottom:0;left:0;max-width:100%;max-height:100%;z-index:10002;padding:0;margin:0}#TSFE_ADMIN_PANEL_FORM *{box-sizing:border-box}#TSFE_ADMIN_PANEL_FORM *,#TSFE_ADMIN_PANEL_FORM :active,#TSFE_ADMIN_PANEL_FORM :focus,#TSFE_ADMIN_PANEL_FORM :hover{outline:0}#TSFE_ADMIN_PANEL_FORM :after,#TSFE_ADMIN_PANEL_FORM :before{box-sizing:border-box}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel{border:1px solid #cacaca;max-height:100vh;max-width:100%;min-width:280px;border-left:0;border-bottom:0;border-top-left-radius:2px;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column}#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelCollapse,#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelEnable{display:none}#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelEnable:checked+#typo3AdminPanelCollapse+.typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-enable-enabled{display:inline}#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelEnable:checked+#typo3AdminPanelCollapse+.typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-enable-disabled{display:none}#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelEnable:checked+#typo3AdminPanelCollapse+.typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-collapse{display:block}#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelCollapse:checked+.typo3-adminPanel .typo3-adminPanel-actions,#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelCollapse:checked+.typo3-adminPanel .typo3-adminPanel-body{display:none}#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelCollapse:checked+.typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-collapse-enabled{display:inline}#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelCollapse:checked+.typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-collapse-disabled{display:none}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header{position:relative;background-color:#333;color:#fafafa;padding:1em 3em}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-user:before{content:':';margin-right:.5em}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-collapse,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-enable{position:absolute;cursor:pointer;top:50%;left:0;padding:1em;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-collapse{display:none;left:auto;right:0}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-enable-enabled{display:none;color:#79a548}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-enable-disabled{color:#c83c3c}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-collapse-enabled{display:none}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-actions{text-align:right;padding:0 1em .75em;background-color:#333;color:#fafafa}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-body{height:100%;overflow:auto}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-body>.typo3-adminPanel-section-title:first-child{border-top:none}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-title{position:relative;overflow:hidden;border-top:1px solid #bbb;background-color:#eee;padding:.75em 3em .75em 1em}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-title:hover{background-color:#ddd}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-title a{position:relative;display:block;padding:.75em 3em .75em 1em;margin:-.75em -3em -.75em -1em}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-title-identifier{position:absolute;top:50%;right:0;padding:1em;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-title-identifier:before{content:"\f105"}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-open .typo3-adminPanel-section-title-identifier:before{content:"\f107 "}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-body{padding:.75em 1em}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel label{display:block;font-weight:400;padding:0;margin:0;overflow:hidden}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel input[type=text],#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel select{display:block;width:100%;padding:.5em;border:1px solid #ccc;margin:.5em 0;font-size:inherit}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel input[type=text]:focus,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel input[type=text]:hover,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel select:focus,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel select:hover{border-color:#aaa}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group{margin:1em 0}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-checkbox,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-radio{margin:.5em 0}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-checkbox label,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-radio label{padding-left:20px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-checkbox input[type=checkbox],#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-checkbox input[type=radio],#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-radio input[type=checkbox],#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-radio input[type=radio]{float:left;padding:0;margin:1px 0 0 -20px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table-overflow{max-width:100%;margin:1em 0;overflow-x:auto}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table{width:100%;border:1px solid #ccc;border-collapse:collapse;border-spacing:0}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table td,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table th{text-align:left;overflow:hidden;position:relative;vertical-align:top;padding:.75em}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table thead tr{background-color:rgba(0,0,0,.15)}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table thead td,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table thead th{font-weight:400}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table-cell-content{word-wrap:break-word}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table-cell-nowrap{white-space:nowrap}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-logRow-highlight{background-color:#fcd3cf}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .stackPointer{color:maroon;vertical-align:top}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn{display:inline-block;margin-bottom:0;padding:6px 8px;border:1px solid transparent;border-radius:0;font-weight:400;line-height:1.5;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn:active,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn:focus,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn:hover{outline:0}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn-default{color:#333;background-color:#eee;border-color:#bbb;cursor:pointer}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn-default:hover{background-color:#c4c4c4}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn-dark{color:#fafafa;background-color:#555;border-color:rgba(0,0,0,.5);cursor:pointer}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn-dark:hover{background-color:#444}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn-group{position:relative;display:inline-block;vertical-align:middle}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn-group .typo3-adminPanel-btn+.typo3-adminPanel-btn{margin-left:-1px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon{display:inline-block;margin-right:2px;padding:0;height:18px;width:16px;white-space:nowrap;overflow:hidden;vertical-align:middle}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon:after,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon:before{position:absolute;content:'';margin-left:7px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon:before{top:0;height:100%;width:2px;margin-left:7px;border-left:1px dotted #666}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon:after{border-top:1px dotted #666;height:2px;width:8px;margin-top:8px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon-jointop:before{top:50%}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon-joinbottom:before{height:26px;margin-top:-8px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon-line:after{display:none}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon-blank{display:none}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon-clear:after,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon-clear:before{display:none}.typo3-feedit-element{border:1px solid #cacaca;margin:1em 0}.typo3-editPanel{display:block!important;border-top:1px solid #cacaca;padding:.5em}.typo3-editPanel .typo3-editPanel-label{margin-left:1.5em;display:inline-block;vertical-align:middle}.typo3-editPanel .typo3-adminPanel-btn,.typo3-editPanel .typo3-editPanel-btn{display:inline-block!important;margin-bottom:0;padding:6px 8px;line-height:1.5em;border:1px solid transparent;border-radius:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.typo3-editPanel .typo3-adminPanel-btn:active,.typo3-editPanel .typo3-adminPanel-btn:focus,.typo3-editPanel .typo3-adminPanel-btn:hover,.typo3-editPanel .typo3-editPanel-btn:active,.typo3-editPanel .typo3-editPanel-btn:focus,.typo3-editPanel .typo3-editPanel-btn:hover{outline:0}.typo3-editPanel .typo3-adminPanel-btn-default,.typo3-editPanel .typo3-editPanel-btn-default{color:#333;background-color:#eee;border-color:#bbb;cursor:pointer}.typo3-editPanel .typo3-adminPanel-btn-default:hover,.typo3-editPanel .typo3-editPanel-btn-default:hover{background-color:#c4c4c4}.typo3-editPanel .typo3-adminPanel-form-group,.typo3-editPanel .typo3-editPanel-form-group{margin-right:.5em;display:inline-block}.typo3-editPanel .typo3-adminPanel-btn-group,.typo3-editPanel .typo3-editPanel-btn-group{position:relative;display:inline-block;vertical-align:middle}.typo3-editPanel .typo3-adminPanel-btn-group .typo3-adminPanel-btn+.typo3-adminPanel-btn,.typo3-editPanel .typo3-adminPanel-btn-group .typo3-editPanel-btn+.typo3-editPanel-btn,.typo3-editPanel .typo3-editPanel-btn-group .typo3-adminPanel-btn+.typo3-adminPanel-btn,.typo3-editPanel .typo3-editPanel-btn-group .typo3-editPanel-btn+.typo3-editPanel-btn{margin-left:-1px}.typo3-adminPanel-btn,.typo3-editPanel-btn{display:inline-block!important}.typo3-feedit-element-hidden{border-color:#ebc975}.typo3-feedit-element-hidden .typo3-editPanel{border-top-color:#ebc975;background-color:#f8ecce}.typo3-feedit-element-hidden .typo3-editPanel .typo3-editPanel-btn-default{border-color:#e5b848;background-color:#f2dba1}.typo3-feedit-element-hidden .typo3-editPanel .typo3-editPanel-btn-default:hover{background-color:#eed28b}
\ No newline at end of file
+#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon,.typo3-editPanel-btn .icon,.typo3-editPanel-link .icon{position:relative;display:inline-block;overflow:hidden;white-space:nowrap;vertical-align:-22%}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon img,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon svg,.typo3-editPanel-btn .icon img,.typo3-editPanel-btn .icon svg,.typo3-editPanel-link .icon img,.typo3-editPanel-link .icon svg{display:block;height:100%;width:100%;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon *,.typo3-editPanel-btn .icon *,.typo3-editPanel-link .icon *{display:block;line-height:inherit}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-markup,.typo3-editPanel-btn .icon-markup,.typo3-editPanel-link .icon-markup{position:absolute;display:block;text-align:center;top:0;left:0;right:0;bottom:0}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-overlay,.typo3-editPanel-btn .icon-overlay,.typo3-editPanel-link .icon-overlay{position:absolute;bottom:0;right:0;height:68.75%;width:68.75%;text-align:center}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-color,.typo3-editPanel-btn .icon-color,.typo3-editPanel-link .icon-color{fill:currentColor}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-spin .icon-markup,.typo3-editPanel-btn .icon-spin .icon-markup,.typo3-editPanel-link .icon-spin .icon-markup{-webkit-animation:icon-spin 2s infinite linear;animation:icon-spin 2s infinite linear}@-webkit-keyframes icon-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes icon-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-state-disabled .icon-markup,.typo3-editPanel-btn .icon-state-disabled .icon-markup,.typo3-editPanel-link .icon-state-disabled .icon-markup{opacity:.5}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-small,.typo3-editPanel-btn .icon-size-small,.typo3-editPanel-link .icon-size-small{height:16px;width:16px;line-height:16px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-small .icon-unify,.typo3-editPanel-btn .icon-size-small .icon-unify,.typo3-editPanel-link .icon-size-small .icon-unify{line-height:16px;font-size:14px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-small .icon-overlay .icon-unify,.typo3-editPanel-btn .icon-size-small .icon-overlay .icon-unify,.typo3-editPanel-link .icon-size-small .icon-overlay .icon-unify{line-height:10px;font-size:9px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-default,.typo3-editPanel-btn .icon-size-default,.typo3-editPanel-link .icon-size-default{height:32px;width:32px;line-height:32px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-default .icon-unify,.typo3-editPanel-btn .icon-size-default .icon-unify,.typo3-editPanel-link .icon-size-default .icon-unify{line-height:32px;font-size:28px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-default .icon-overlay .icon-unify,.typo3-editPanel-btn .icon-size-default .icon-overlay .icon-unify,.typo3-editPanel-link .icon-size-default .icon-overlay .icon-unify{line-height:20px;font-size:18px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-large,.typo3-editPanel-btn .icon-size-large,.typo3-editPanel-link .icon-size-large{height:48px;width:48px;line-height:48px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-large .icon-unify,.typo3-editPanel-btn .icon-size-large .icon-unify,.typo3-editPanel-link .icon-size-large .icon-unify{line-height:48px;font-size:42px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-size-large .icon-overlay .icon-unify,.typo3-editPanel-btn .icon-size-large .icon-overlay .icon-unify,.typo3-editPanel-link .icon-size-large .icon-overlay .icon-unify{line-height:30px;font-size:26px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-actions-edit-copy-release,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-actions-edit-cut-release,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-dialog-error,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-status-current,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-status-permission-denied,.typo3-editPanel-btn .icon-actions-edit-copy-release,.typo3-editPanel-btn .icon-actions-edit-cut-release,.typo3-editPanel-btn .icon-status-dialog-error,.typo3-editPanel-btn .icon-status-status-current,.typo3-editPanel-btn .icon-status-status-permission-denied,.typo3-editPanel-link .icon-actions-edit-copy-release,.typo3-editPanel-link .icon-actions-edit-cut-release,.typo3-editPanel-link .icon-status-dialog-error,.typo3-editPanel-link .icon-status-status-current,.typo3-editPanel-link .icon-status-status-permission-denied{color:#c83c3c}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-status-sorting-light-asc,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-status-sorting-light-desc,.typo3-editPanel-btn .icon-status-status-sorting-light-asc,.typo3-editPanel-btn .icon-status-status-sorting-light-desc,.typo3-editPanel-link .icon-status-status-sorting-light-asc,.typo3-editPanel-link .icon-status-status-sorting-light-desc{color:#fff}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-status-sorting-asc,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-status-sorting-desc,.typo3-editPanel-btn .icon-status-status-sorting-asc,.typo3-editPanel-btn .icon-status-status-sorting-desc,.typo3-editPanel-link .icon-status-status-sorting-asc,.typo3-editPanel-link .icon-status-status-sorting-desc{color:#737373}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-dialog-information,.typo3-editPanel-btn .icon-status-dialog-information,.typo3-editPanel-link .icon-status-dialog-information{color:#6daae0}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-dialog-ok,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-status-permission-granted,.typo3-editPanel-btn .icon-status-dialog-ok,.typo3-editPanel-btn .icon-status-status-permission-granted,.typo3-editPanel-link .icon-status-dialog-ok,.typo3-editPanel-link .icon-status-status-permission-granted{color:#79a548}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-dialog-notification,.typo3-editPanel-btn .icon-status-dialog-notification,.typo3-editPanel-link .icon-status-dialog-notification{color:#333}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .icon-status-dialog-warning,.typo3-editPanel-btn .icon-status-dialog-warning,.typo3-editPanel-link .icon-status-dialog-warning{color:#e8a33d}@font-face{font-family:TYPO3FontAwesome;src:url(../../../../backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?v=4.6.3);src:url(../../../../backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.eot?#iefix&v=4.6.3) format("embedded-opentype"),url(../../../../backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff2?v=4.6.3) format("woff2"),url(../../../../backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.woff?v=4.6.3) format("woff"),url(../../../../backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.ttf?v=4.6.3) format("truetype"),url(../../../../backend/Resources/Public/Fonts/FontAwesome/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular) format("svg");font-weight:400;font-style:normal}#TSFE_ADMIN_PANEL_FORM .fa:before,.typo3-editPanel .fa:before,.typo3-feedit-element .fa:before{display:inline-block;font:normal normal normal 14px/1 TYPO3FontAwesome;font-size:15px;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transform:translate(0,0);transform:translate(0,0)}#TSFE_ADMIN_PANEL_FORM .fa-pencil:before,.typo3-editPanel .fa-pencil:before,.typo3-feedit-element .fa-pencil:before{content:"\f040"}#TSFE_ADMIN_PANEL_FORM .fa-angle-up:before,.typo3-editPanel .fa-angle-up:before,.typo3-feedit-element .fa-angle-up:before{content:"\f106"}#TSFE_ADMIN_PANEL_FORM .fa-angle-down:before,.typo3-editPanel .fa-angle-down:before,.typo3-feedit-element .fa-angle-down:before{content:"\f107"}#TSFE_ADMIN_PANEL_FORM .fa-toggle-off:before,.typo3-editPanel .fa-toggle-off:before,.typo3-feedit-element .fa-toggle-off:before{content:"\f204"}#TSFE_ADMIN_PANEL_FORM .fa-toggle-on:before,.typo3-editPanel .fa-toggle-on:before,.typo3-feedit-element .fa-toggle-on:before{content:"\f205"}#TSFE_ADMIN_PANEL_FORM .fa-google-plus-square:before,.typo3-editPanel .fa-google-plus-square:before,.typo3-feedit-element .fa-google-plus-square:before{content:"\f0d4"}#TSFE_ADMIN_PANEL_FORM .fa-trash:before,.typo3-editPanel .fa-trash:before,.typo3-feedit-element .fa-trash:before{content:"\f1f8"}#TSFE_ADMIN_PANEL_FORM .fa-history:before,.typo3-editPanel .fa-history:before,.typo3-feedit-element .fa-history:before{content:"\f1da"}#TSFE_ADMIN_PANEL_FORM .fa-list-alt:before,.typo3-editPanel .fa-list-alt:before,.typo3-feedit-element .fa-list-alt:before{content:"\f022"}#TSFE_ADMIN_PANEL_FORM .fa-plus-square:before,.typo3-editPanel .fa-plus-square:before,.typo3-feedit-element .fa-plus-square:before{content:"\f0fe"}#TSFE_ADMIN_PANEL_FORM .fa-arrows:before,.typo3-editPanel .fa-arrows:before,.typo3-feedit-element .fa-arrows:before{content:"\f047"}#TSFE_ADMIN_PANEL_FORM .fa-exclamation-circle:before,.typo3-editPanel .fa-exclamation-circle:before,.typo3-feedit-element .fa-exclamation-circle:before{content:"\f06a"}#TSFE_ADMIN_PANEL_FORM .fa-exclamation-triangle:before,.typo3-editPanel .fa-exclamation-triangle:before,.typo3-feedit-element .fa-exclamation-triangle:before{content:"\f071"}#TSFE_ADMIN_PANEL_FORM .fa-info-circle:before,.typo3-editPanel .fa-info-circle:before,.typo3-feedit-element .fa-info-circle:before{content:"\f05a"}#TSFE_ADMIN_PANEL_FORM .fa-caret-down:before,.typo3-editPanel .fa-caret-down:before,.typo3-feedit-element .fa-caret-down:before{content:"\f0d7"}#TSFE_ADMIN_PANEL_FORM .fa-caret-up:before,.typo3-editPanel .fa-caret-up:before,.typo3-feedit-element .fa-caret-up:before{content:"\f0d8"}#TSFE_ADMIN_PANEL_FORM .fa-bolt:before,.typo3-editPanel .fa-bolt:before,.typo3-feedit-element .fa-bolt:before{content:"\f0e7"}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-title-identifier:before{display:inline-block;font:normal normal normal 14px/1 TYPO3FontAwesome;font-size:15px;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transform:translate(0,0);transform:translate(0,0)}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel,.typo3-editPanel{background-color:#fafafa;color:#333;font-family:sans-serif;font-size:12px;line-height:1.35em}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel a,.typo3-editPanel a{color:inherit;text-decoration:none}#TSFE_ADMIN_PANEL_FORM{display:block!important;position:fixed;bottom:0;left:0;max-width:100%;max-height:100%;z-index:10002;padding:0;margin:0}#TSFE_ADMIN_PANEL_FORM *{box-sizing:border-box}#TSFE_ADMIN_PANEL_FORM *,#TSFE_ADMIN_PANEL_FORM :active,#TSFE_ADMIN_PANEL_FORM :focus,#TSFE_ADMIN_PANEL_FORM :hover{outline:0}#TSFE_ADMIN_PANEL_FORM :after,#TSFE_ADMIN_PANEL_FORM :before{box-sizing:border-box}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel{border:1px solid #cacaca;max-height:100vh;max-width:100%;min-width:280px;border-left:0;border-bottom:0;border-top-left-radius:2px;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column}#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelCollapse{display:none}#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelEnable:checked+#typo3AdminPanelCollapse+.typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-enable-enabled{display:inline}#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelEnable:checked+#typo3AdminPanelCollapse+.typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-collapse{display:block}#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelCollapse:checked+.typo3-adminPanel .typo3-adminPanel-actions,#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelCollapse:checked+.typo3-adminPanel .typo3-adminPanel-body{display:none}#TSFE_ADMIN_PANEL_FORM #typo3AdminPanelCollapse:checked+.typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-collapse-enabled{display:inline}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header{position:relative;background-color:#333;color:#fafafa;padding:1em 3em}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-user:before{content:':';margin-right:.5em}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-collapse,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-enable{position:absolute;cursor:pointer;top:50%;left:0;padding:1em;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-collapse{display:none;left:auto;right:0}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-enable-enabled{color:#79a548}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-enable-disabled{color:#c83c3c}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-header .typo3-adminPanel-header-collapse-enabled{display:none}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-actions{text-align:right;padding:0 1em .75em;background-color:#333;color:#fafafa}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-body{height:100%;overflow:auto}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-body>.typo3-adminPanel-section-title:first-child{border-top:none}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-title{position:relative;overflow:hidden;border-top:1px solid #bbb;background-color:#eee;padding:.75em 3em .75em 1em}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-title:hover{background-color:#ddd}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-title a{position:relative;display:block;padding:.75em 3em .75em 1em;margin:-.75em -3em -.75em -1em}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-title-identifier{position:absolute;top:50%;right:0;padding:1em;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-title-identifier:before{content:"\f105"}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-open .typo3-adminPanel-section-title-identifier:before{content:"\f107 "}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-section-body{padding:.75em 1em}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel label{display:block;font-weight:400;padding:0;margin:0;overflow:hidden}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel input[type=text],#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel select{display:block;width:100%;padding:.5em;border:1px solid #ccc;margin:.5em 0;font-size:inherit}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel input[type=text]:focus,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel input[type=text]:hover,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel select:focus,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel select:hover{border-color:#aaa}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group{margin:1em 0}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-checkbox,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-radio{margin:.5em 0}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-checkbox label,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-radio label{padding-left:20px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-checkbox input[type=checkbox],#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-checkbox input[type=radio],#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-radio input[type=checkbox],#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-form-group-radio input[type=radio]{float:left;padding:0;margin:1px 0 0 -20px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table-overflow{max-width:100%;margin:1em 0;overflow-x:auto}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table{width:100%;border:1px solid #ccc;border-collapse:collapse;border-spacing:0}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table td,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table th{text-align:left;overflow:hidden;position:relative;vertical-align:top;padding:.75em}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table thead tr{background-color:rgba(0,0,0,.15)}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table thead td,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table thead th{font-weight:400}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table-cell-content{word-wrap:break-word}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-table-cell-nowrap{white-space:nowrap}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-logRow-highlight{background-color:#fcd3cf}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .stackPointer{color:maroon;vertical-align:top}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn{display:inline-block;margin-bottom:0;padding:6px 8px;border:1px solid transparent;border-radius:0;font-weight:400;line-height:1.5;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn:active,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn:focus,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn:hover{outline:0}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn-default{color:#333;background-color:#eee;border-color:#bbb;cursor:pointer}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn-default:hover{background-color:#c4c4c4}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn-dark{color:#fafafa;background-color:#555;border-color:rgba(0,0,0,.5);cursor:pointer}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn-dark:hover{background-color:#444}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn-group{position:relative;display:inline-block;vertical-align:middle}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .typo3-adminPanel-btn-group .typo3-adminPanel-btn+.typo3-adminPanel-btn{margin-left:-1px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon{display:inline-block;margin-right:2px;padding:0;height:18px;width:16px;white-space:nowrap;overflow:hidden;vertical-align:middle}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon:after,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon:before{position:absolute;content:'';margin-left:7px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon:before{top:0;height:100%;width:2px;margin-left:7px;border-left:1px dotted #666}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon:after{border-top:1px dotted #666;height:2px;width:8px;margin-top:8px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon-jointop:before{top:50%}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon-joinbottom:before{height:26px;margin-top:-8px}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon-line:after{display:none}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon-blank{display:none}#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon-clear:after,#TSFE_ADMIN_PANEL_FORM .typo3-adminPanel .treeline-icon-clear:before{display:none}.typo3-feedit-element{border:1px solid #cacaca;margin:1em 0}.typo3-editPanel{display:block!important;border-top:1px solid #cacaca;padding:.5em}.typo3-editPanel .typo3-editPanel-label{margin-left:1.5em;display:inline-block;vertical-align:middle}.typo3-editPanel .typo3-adminPanel-btn,.typo3-editPanel .typo3-editPanel-btn{display:inline-block!important;margin-bottom:0;padding:6px 8px;line-height:1.5em;border:1px solid transparent;border-radius:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.typo3-editPanel .typo3-adminPanel-btn:active,.typo3-editPanel .typo3-adminPanel-btn:focus,.typo3-editPanel .typo3-adminPanel-btn:hover,.typo3-editPanel .typo3-editPanel-btn:active,.typo3-editPanel .typo3-editPanel-btn:focus,.typo3-editPanel .typo3-editPanel-btn:hover{outline:0}.typo3-editPanel .typo3-adminPanel-btn-default,.typo3-editPanel .typo3-editPanel-btn-default{color:#333;background-color:#eee;border-color:#bbb;cursor:pointer}.typo3-editPanel .typo3-adminPanel-btn-default:hover,.typo3-editPanel .typo3-editPanel-btn-default:hover{background-color:#c4c4c4}.typo3-editPanel .typo3-adminPanel-form-group,.typo3-editPanel .typo3-editPanel-form-group{margin-right:.5em;display:inline-block}.typo3-editPanel .typo3-adminPanel-btn-group,.typo3-editPanel .typo3-editPanel-btn-group{position:relative;display:inline-block;vertical-align:middle}.typo3-editPanel .typo3-adminPanel-btn-group .typo3-adminPanel-btn+.typo3-adminPanel-btn,.typo3-editPanel .typo3-adminPanel-btn-group .typo3-editPanel-btn+.typo3-editPanel-btn,.typo3-editPanel .typo3-editPanel-btn-group .typo3-adminPanel-btn+.typo3-adminPanel-btn,.typo3-editPanel .typo3-editPanel-btn-group .typo3-editPanel-btn+.typo3-editPanel-btn{margin-left:-1px}.typo3-adminPanel-btn,.typo3-editPanel-btn{display:inline-block!important}.typo3-feedit-element-hidden{border-color:#ebc975}.typo3-feedit-element-hidden .typo3-editPanel{border-top-color:#ebc975;background-color:#f8ecce}.typo3-feedit-element-hidden .typo3-editPanel .typo3-editPanel-btn-default{border-color:#e5b848;background-color:#f2dba1}.typo3-feedit-element-hidden .typo3-editPanel .typo3-editPanel-btn-default:hover{background-color:#eed28b}
\ No newline at end of file
diff --git a/typo3/sysext/adminpanel/Resources/Public/JavaScript/AdminPanel.js b/typo3/sysext/adminpanel/Resources/Public/JavaScript/AdminPanel.js
new file mode 100644 (file)
index 0000000..bac2194
--- /dev/null
@@ -0,0 +1,33 @@
+function sendAdminPanelForm(event) {
+  event.preventDefault();
+  this.innerText = 'Loading...';
+  var typo3AdminPanel = document.querySelector('[data-typo3-role=typo3-adminPanel]');
+  var formData = new FormData(typo3AdminPanel.querySelector('form'));
+  var request = new XMLHttpRequest();
+  request.open('POST', typo3AdminPanel.dataset.typo3AjaxUrl);
+  request.send(formData);
+  request.onload = function () {
+    location.reload();
+  };
+}
+
+function toggleAdminPanelState() {
+  var request = new XMLHttpRequest();
+  request.open('GET', this.dataset.typo3AjaxUrl);
+  request.send();
+  request.onload = function () {
+    location.reload();
+  };
+}
+
+function initializeAdminPanel() {
+  Array.from(document.querySelectorAll('[data-typo3-role=typo3-adminPanel-saveButton]')).forEach(function (elm) {
+    elm.addEventListener('click', sendAdminPanelForm);
+  });
+
+  Array.from(document.querySelectorAll('[data-typo3-role=typo3-adminPanel-trigger]')).forEach(function (trigger) {
+    trigger.addEventListener('click', toggleAdminPanelState);
+  });
+}
+
+window.addEventListener('load', initializeAdminPanel, false);