[!!!][TASK] Remove deprecated IMGMENU and GMENU 80/59280/4
authorChristian Kuhn <lolli@schwarzbu.ch>
Sat, 22 Dec 2018 16:29:38 +0000 (17:29 +0100)
committerBenni Mack <benni@typo3.org>
Sun, 23 Dec 2018 10:34:39 +0000 (11:34 +0100)
Change-Id: Ie2ee4ea69ff3cdc67155d292bfd3fccbe1d7ad09
Resolves: #87279
Releases: master
Reviewed-on: https://review.typo3.org/59280
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
15 files changed:
typo3/sysext/core/Classes/Utility/ArrayUtility.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-87193-DeprecatedFunctionalityRemoved.rst
typo3/sysext/frontend/Classes/ContentObject/HierarchicalMenuContentObject.php
typo3/sysext/frontend/Classes/ContentObject/Menu/AbstractMenuContentObject.php
typo3/sysext/frontend/Classes/ContentObject/Menu/GraphicalMenuContentObject.php [deleted file]
typo3/sysext/frontend/Classes/ContentObject/Menu/ImageMenuContentObject.php [deleted file]
typo3/sysext/frontend/Classes/ContentObject/Menu/MenuContentObjectFactory.php
typo3/sysext/frontend/Classes/ContentObject/Menu/TextMenuContentObject.php
typo3/sysext/frontend/Classes/Imaging/GifBuilder.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/ClassNameMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/PropertyProtectedMatcher.php
typo3/sysext/t3editor/Resources/Private/tsref.xml
typo3/sysext/t3editor/Resources/Public/JavaScript/Addon/Hint/TsParser.js
typo3/sysext/t3editor/Resources/Public/JavaScript/Mode/typoscript/typoscript.js

index 165bc61..e9b1cdb 100644 (file)
@@ -766,7 +766,7 @@ class ArrayUtility
      * @param array $setupArr TypoScript array with numerical array in
      * @param bool $acceptAnyKeys If set, then a value is not required - the properties alone will be enough.
      * @return array An array with all integer properties listed in numeric order.
-     * @see \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::cObjGet(), \TYPO3\CMS\Frontend\Imaging\GifBuilder, \TYPO3\CMS\Frontend\ContentObject\Menu\ImageMenuContentObject::makeImageMap()
+     * @see \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::cObjGet(), \TYPO3\CMS\Frontend\Imaging\GifBuilder
      */
     public static function filterAndSortByNumericKeys($setupArr, $acceptAnyKeys = false)
     {
index 8e67c7d..d8c36e4 100644 (file)
@@ -55,6 +55,8 @@ The following PHP classes that have been previously deprecated for v9 have been
 * :php:`TYPO3\CMS\Extbase\Tests\Unit\Validation\Validator\AbstractValidatorTestcase`
 * :php:`TYPO3\CMS\Extbase\Validation\Validator\RawValidator`
 * :php:`TYPO3\CMS\Extensionmanager\Command\ExtensionCommandController`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\ImageMenuContentObject`
 * :php:`TYPO3\CMS\Frontend\Http\EidRequestHandler`
 * :php:`TYPO3\CMS\Frontend\Page\ExternalPageUrlHandler`
 * :php:`TYPO3\CMS\Frontend\Page\PageGenerator`
@@ -313,6 +315,9 @@ The following PHP class methods that have been previously deprecated for v9 have
 * :php:`TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->stdWrap_addParams()`
 * :php:`TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->stdWrap_filelink()`
 * :php:`TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->stdWrap_filelist()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_beforeAllWrap()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_beforeLinking()`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_init()`
 * :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->addTempContentHttpHeaders()`
 * :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->checkAlternativeIdMethods()`
 * :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->checkPageForMountpointRedirect()`
@@ -460,6 +465,9 @@ The following public class properties have been dropped:
 * :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->sys_language_mode`
 * :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->sys_language_uid`
 * :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->workspacePreview`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->debug`
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->GMENU_fixKey`
+* :php:`TYPO3C\MS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMfreezePrefix`
 * :php:`TYPO3\CMS\Frontend\Page\PageRepository->error_getRootLine_failPid`
 * :php:`TYPO3\CMS\Frontend\Page\PageRepository->error_getRootLine`
 * :php:`TYPO3\CMS\Frontend\Page\PageRepository->versioningPreview`
@@ -548,6 +556,26 @@ The following class methods have changed visibility:
 * :php:`TYPO3\CMS\Core\TypoScript\TemplateService->processIncludes()` changed from public to protected
 * :php:`TYPO3\CMS\Core\TypoScript\TemplateService->substituteConstants()` changed from public to protected
 * :php:`TYPO3\CMS\Core\TypoScript\TemplateService->versionOL()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->accessKey()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->changeLinksForAccessRestrictedPages()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getBannedUids()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getDoktypeExcludeWhere()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getMPvar()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getPageTitle()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isActive()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isCurrent()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isItemState()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isNext()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isSubMenu()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->link()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuTypoLink()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->procesItemStates()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->setATagParts()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->subMenu()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->userProcess()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_afterLinking()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_finish()` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->getBeforeAfter()` changed from public to protected
 * :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->clearPageCacheContent_pidList()` changed from public to protected
 * :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->contentStrReplace()` changed from public to protected
 * :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->realPageCacheContent()` changed from public to protected
@@ -715,6 +743,33 @@ The following class properties have changed visibility:
 * :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->tempContent` changed from public to protected
 * :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->uniqueCounter` changed from public to protected
 * :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->uniqueString` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->alternativeMenuTempArray` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->alwaysActivePIDlist` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->conf` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->doktypeExcludeList` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->entryLevel` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->hash` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->id` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->I` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->imgNameNotRandom` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->imgNamePrefix` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->INPfixMD5` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->mconf` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuArr` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuNumber` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->nameAttribute` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->nextActive` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->MP_array` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->result` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->rL_uidRegister` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->spacerIDList` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->sys_page` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->tmpl` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMcObj` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMextraScript` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMmenuItems` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMresult` changed from public to protected
+* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMsubmenuObjSuffixes` changed from public to protected
 * :php:`TYPO3\CMS\Frontend\Page\PageRepository->sys_language_uid` changed from public to protected
 * :php:`TYPO3\CMS\Frontend\Page\PageRepository->versioningWorkspaceId` changed from public to protected
 * :php:`TYPO3\CMS\Impexp\Controller\ImportExportController->id` changed from public to protected
@@ -797,6 +852,10 @@ The following TypoScript options have been dropped:
 * `stdWrap.addParams`
 * `stdWrap.filelink`
 * `stdWrap.filelist`
+* `GMENU`
+* `GMENUITEMS`
+* `IMGMENU`
+* `IMGMENUITEMS`
 
 
 The following constants have been dropped:
index cbd0e7b..484c4aa 100644 (file)
@@ -42,8 +42,6 @@ class HierarchicalMenuContentObject extends AbstractContentObject
             $GLOBALS['TSFE']->register['count_HMENU']++;
             $GLOBALS['TSFE']->register['count_HMENU_MENUOBJ'] = 0;
             $GLOBALS['TSFE']->register['count_MENUOBJ'] = 0;
-            $GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMid'] = [];
-            $GLOBALS['TSFE']->applicationData['GMENU_LAYERS']['WMparentId'] = [];
             $menu->parent_cObj = $this->cObj;
             $menu->start($GLOBALS['TSFE']->tmpl, $GLOBALS['TSFE']->sys_page, '', $conf, 1);
             $menu->makeMenu();
index 6397324..edd1cfd 100644 (file)
@@ -15,8 +15,6 @@ namespace TYPO3\CMS\Frontend\ContentObject\Menu;
  */
 
 use TYPO3\CMS\Core\Cache\CacheManager;
-use TYPO3\CMS\Core\Compatibility\PublicMethodDeprecationTrait;
-use TYPO3\CMS\Core\Compatibility\PublicPropertyDeprecationTrait;
 use TYPO3\CMS\Core\Context\Context;
 use TYPO3\CMS\Core\Context\LanguageAspect;
 use TYPO3\CMS\Core\Database\ConnectionPool;
@@ -39,73 +37,10 @@ use TYPO3\CMS\Frontend\Typolink\PageLinkBuilder;
  *
  * The HMENU content object uses this (or more precisely one of the extension classes).
  * Among others the class generates an array of menu items. Thereafter functions from the subclasses are called.
- * The class is always used through extension classes (like GraphicalMenuContentObject or TextMenuContentObject).
+ * The class is always used through extension classes like TextMenuContentObject.
  */
 abstract class AbstractMenuContentObject
 {
-    use PublicPropertyDeprecationTrait;
-    use PublicMethodDeprecationTrait;
-
-    protected $deprecatedPublicProperties = [
-        'menuNumber' => 'Using $menuNumber of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'entryLevel' => 'Using $entryLevel of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'spacerIDList' => 'Using $spacerIDList of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'doktypeExcludeList' => 'Using $doktypeExcludeList of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'alwaysActivePIDlist' => 'Using $alwaysActivePIDlist of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'imgNamePrefix' => 'Using $imgNamePrefix of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
-        'imgNameNotRandom' => 'Using $imgNameNotRandom of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
-        'debug' => 'Using $debug of cObject HMENU from the outside is discouraged, as this variable is not in use anymore and will be removed in TYPO3 v10.0.',
-        'GMENU_fixKey' => 'Using $GMENU_fixKey of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
-        'MP_array' => 'Using $MP_array of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'conf' => 'Using $conf of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'mconf' => 'Using $mconf of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'tmpl' => 'Using $tmpl of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'sys_page' => 'Using $sys_page of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'id' => 'Using $id of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'nextActive' => 'Using $nextActive of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'menuArr' => 'Using $menuArr of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'hash' => 'Using $hash of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'result' => 'Using $result of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'rL_uidRegister' => 'Using $rL_uidRegister of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'INPfixMD5' => 'Using $INPfixMD5 of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
-        'I' => 'Using $I of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'WMresult' => 'Using $WMresult of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
-        'WMfreezePrefix' => 'Using $WMfreezePrefix of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
-        'WMmenuItems' => 'Using $WMmenuItems of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
-        'WMsubmenuObjSuffixes' => 'Using $WMsubmenuObjSuffixes of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
-        'WMextraScript' => 'Using $WMextraScript of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
-        'WMcObj' => 'Using $WMcObj of cObject HMENU is discouraged, as all graphical-related functionality will be removed in TYPO3 v10.0.',
-        'alternativeMenuTempArray' => 'Using $alternativeMenuTempArray of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-        'nameAttribute' => 'Using $nameAttribute of cObject HMENU from the outside is discouraged, as this variable is only used for internal storage.',
-    ];
-
-    protected $deprecatedPublicMethods = [
-        'subMenu' => 'Using subMenu() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'link' => 'Using link() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'procesItemStates' => 'Using procesItemStates() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'changeLinksForAccessRestrictedPages' => 'Using changeLinksForAccessRestrictedPages() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'isNext' => 'Using isNext() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'isActive' => 'Using isActive() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'isCurrent' => 'Using isCurrent() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'isSubMenu' => 'Using isSubMenu() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'isItemState' => 'Using isItemState() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'accessKey' => 'Using accessKey() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'userProcess' => 'Using userProcess() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'setATagParts' => 'Using setATagParts() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'getPageTitle' => 'Using getPageTitle() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'getMPvar' => 'Using getMPvar() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'getDoktypeExcludeWhere' => 'Using getDoktypeExcludeWhere() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'getBannedUids' => 'Using getBannedUids() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'menuTypoLink' => 'Using menuTypoLink() within HMENU is discouraged, as this is internal functionality that should not be exposed to the public.',
-        'extProc_RO' => 'Using extProc_RO() within HMENU extensions is discouraged, as rollover functionality will be removed in TYPO3 v10.0.',
-        'extProc_init' => 'Using extProc_init() within HMENU extensions is discouraged, as extending HMENU should only happens via userFunc options.',
-        'extProc_beforeLinking' => 'Using extProc_beforeLinking() within HMENU extensions is discouraged, as extending HMENU should only happens via userFunc options.',
-        'extProc_afterLinking' => 'Using extProc_afterLinking() within HMENU extensions is discouraged, as extending HMENU should only happens via userFunc options.',
-        'extProc_beforeAllWrap' => 'Using extProc_beforeAllWrap() within HMENU extensions is discouraged, as extending HMENU should only happens via userFunc options.',
-        'extProc_finish' => 'Using extProc_finish() within HMENU extensions is discouraged, as extending HMENU should only happens via userFunc options.',
-        'getBeforeAfter' => 'Using getBeforeAfter() within HMENU extensions is discouraged, as extending HMENU should only happens via userFunc options.',
-    ];
-
     /**
      * tells you which menu number this is. This is important when getting data from the setup
      *
@@ -150,11 +85,6 @@ abstract class AbstractMenuContentObject
     protected $imgNameNotRandom = 0;
 
     /**
-     * @var bool
-     */
-    protected $debug = false;
-
-    /**
      * Loaded with the parent cObj-object when a new HMENU is made
      *
      * @var \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
@@ -162,11 +92,6 @@ abstract class AbstractMenuContentObject
     public $parent_cObj;
 
     /**
-     * @var string
-     */
-    protected $GMENU_fixKey = 'gmenu';
-
-    /**
      * accumulation of mount point data
      *
      * @var string[]
@@ -181,7 +106,7 @@ abstract class AbstractMenuContentObject
     protected $conf = [];
 
     /**
-     * xMENU configuration (TMENU, GMENU etc)
+     * xMENU configuration (TMENU etc)
      *
      * @var array
      */
@@ -253,11 +178,6 @@ abstract class AbstractMenuContentObject
     protected $WMresult;
 
     /**
-     * @var string
-     */
-    protected $WMfreezePrefix;
-
-    /**
      * @var int
      */
     protected $WMmenuItems;
@@ -330,7 +250,6 @@ abstract class AbstractMenuContentObject
         $this->conf = $conf;
         $this->menuNumber = $menuNumber;
         $this->mconf = $conf[$this->menuNumber . $objSuffix . '.'];
-        $this->debug = !empty($tsfe->config['config']['debug']);
         $this->WMcObj = GeneralUtility::makeInstance(ContentObjectRenderer::class);
         // In XHTML and HTML5 there is no "name" attribute anymore
         switch ($tsfe->xhtmlDoctype) {
@@ -2084,7 +2003,7 @@ abstract class AbstractMenuContentObject
     }
 
     /**
-     * Creates an access-key for a TMENU/GMENU menu item based on the menu item titles first letter
+     * Creates an access-key for a TMENU menu item based on the menu item titles first letter
      *
      * @param string $title Menu item title.
      * @return array Returns an array with keys "code" ("accesskey" attribute for the img-tag) and "alt" (text-addition to the "alt" attribute) if an access key was defined. Otherwise array was empty
diff --git a/typo3/sysext/frontend/Classes/ContentObject/Menu/GraphicalMenuContentObject.php b/typo3/sysext/frontend/Classes/ContentObject/Menu/GraphicalMenuContentObject.php
deleted file mode 100644 (file)
index e1d8190..0000000
+++ /dev/null
@@ -1,569 +0,0 @@
-<?php
-namespace TYPO3\CMS\Frontend\ContentObject\Menu;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Core\Environment;
-use TYPO3\CMS\Core\Type\File\ImageInfo;
-use TYPO3\CMS\Core\TypoScript\TypoScriptService;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
-use TYPO3\CMS\Frontend\Imaging\GifBuilder;
-
-/**
- * Extension class creating graphic based menus (PNG or GIF files)
- *
- * @deprecated since TYPO3 v9.4, will be removed in TYPO3 v10.0
- */
-class GraphicalMenuContentObject extends AbstractMenuContentObject
-{
-    public function __construct()
-    {
-        trigger_error('GMENU and GraphicalMenuContentObject will be removed in TYPO3 v10.0, you should build accessible websites with TMENU/Text, and optional images on top, which can be achieved with TypoScript.', E_USER_DEPRECATED);
-    }
-
-    /**
-     * Calls procesItemStates() so that the common configuration for the menu items are resolved into individual configuration per item.
-     * Calls makeGifs() for all "normal" items and if configured for, also the "rollover" items.
-     *
-     * @see AbstractMenuContentObject::procesItemStates(), makeGifs()
-     */
-    public function generate()
-    {
-        $splitCount = count($this->menuArr);
-        if ($splitCount) {
-            list($NOconf, $ROconf) = $this->procesItemStates($splitCount);
-            //store initial count value
-            $tsfe = $this->getTypoScriptFrontendController();
-            $temp_HMENU_MENUOBJ = $tsfe->register['count_HMENU_MENUOBJ'];
-            $temp_MENUOBJ = $tsfe->register['count_MENUOBJ'];
-            // Now we generate the giffiles:
-            $this->makeGifs($NOconf, 'NO');
-            // store count from NO obj
-            $tempcnt_HMENU_MENUOBJ = $tsfe->register['count_HMENU_MENUOBJ'];
-            $tempcnt_MENUOBJ = $tsfe->register['count_MENUOBJ'];
-            if ($this->mconf['debugItemConf']) {
-                echo '<h3>$NOconf:</h3>';
-                debug($NOconf);
-            }
-            // RollOver
-            if ($ROconf) {
-                // Start recount for rollover with initial values
-                $tsfe->register['count_HMENU_MENUOBJ'] = $temp_HMENU_MENUOBJ;
-                $tsfe->register['count_MENUOBJ'] = $temp_MENUOBJ;
-                $this->makeGifs($ROconf, 'RO');
-                if ($this->mconf['debugItemConf']) {
-                    echo '<h3>$ROconf:</h3>';
-                    debug($ROconf);
-                }
-            }
-            // Use count from NO obj
-            $tsfe->register['count_HMENU_MENUOBJ'] = $tempcnt_HMENU_MENUOBJ;
-            $tsfe->register['count_MENUOBJ'] = $tempcnt_MENUOBJ;
-        }
-    }
-
-    /**
-     * Will traverse input array with configuration per-item and create corresponding GIF files for the menu.
-     * The data of the files are stored in $this->result
-     *
-     * @param array $conf Array with configuration for each item.
-     * @param string $resKey Type of images: normal ("NO") or rollover ("RO"). Valid values are "NO" and "RO
-     * @internal
-     * @see generate()
-     */
-    public function makeGifs($conf, $resKey)
-    {
-        $isGD = $GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib'];
-        if (!is_array($conf)) {
-            $conf = [];
-        }
-        $totalWH = [];
-        $items = count($conf);
-        $minDim = 0;
-        $maxDim = 0;
-        $Hcounter = 0;
-        $Wcounter = 0;
-        $Hobjs = [];
-        $Wobjs = [];
-        if ($isGD) {
-            // Generate the gif-files. the $menuArr is filled with some values like output_w, output_h, output_file
-            $Hobjs = $this->mconf['applyTotalH'];
-            if ($Hobjs) {
-                $Hobjs = GeneralUtility::intExplode(',', $Hobjs);
-            }
-            $Wobjs = $this->mconf['applyTotalW'];
-            if ($Wobjs) {
-                $Wobjs = GeneralUtility::intExplode(',', $Wobjs);
-            }
-            $minDim = $this->mconf['min'];
-            if ($minDim) {
-                $minDim = $this->calcIntExplode($minDim . ',');
-            }
-            $maxDim = $this->mconf['max'];
-            if ($maxDim) {
-                $maxDim = $this->calcIntExplode($maxDim . ',');
-            }
-            if ($minDim) {
-                $conf[$items] = $conf[$items - 1];
-                $this->menuArr[$items] = [];
-                $items = count($conf);
-            }
-            // TOTAL width
-            if ($this->mconf['useLargestItemX'] || $this->mconf['useLargestItemY'] || $this->mconf['distributeX'] || $this->mconf['distributeY']) {
-                $totalWH = $this->findLargestDims($conf, $items, $Hobjs, $Wobjs, $minDim, $maxDim);
-            }
-        }
-        $c = 0;
-        $maxFlag = 0;
-        $distributeAccu = ['H' => 0, 'W' => 0];
-        foreach ($conf as $key => $val) {
-            $this->getTypoScriptFrontendController()->register['count_HMENU_MENUOBJ']++;
-            $this->getTypoScriptFrontendController()->register['count_MENUOBJ']++;
-            if ($items === $c + 1 && $minDim) {
-                $Lobjs = $this->mconf['removeObjectsOfDummy'];
-                if ($Lobjs) {
-                    $Lobjs = GeneralUtility::intExplode(',', $Lobjs);
-                    foreach ($Lobjs as $remItem) {
-                        unset($val[$remItem]);
-                        unset($val[$remItem . '.']);
-                    }
-                }
-                $flag = 0;
-                $tempXY = explode(',', $val['XY']);
-                if ($Wcounter < $minDim[0]) {
-                    $tempXY[0] = $minDim[0] - $Wcounter;
-                    $flag = 1;
-                }
-                if ($Hcounter < $minDim[1]) {
-                    $tempXY[1] = $minDim[1] - $Hcounter;
-                    $flag = 1;
-                }
-                $val['XY'] = implode(',', $tempXY);
-                if (!$flag) {
-                    break;
-                }
-            }
-            $c++;
-            $gifCreator = null;
-            if ($isGD) {
-                // Pre-working the item
-                $gifCreator = GeneralUtility::makeInstance(GifBuilder::class);
-                $gifCreator->start($val, $this->menuArr[$key]);
-                // If useLargestItemH/W is specified
-                if (!empty($totalWH) && ($this->mconf['useLargestItemX'] || $this->mconf['useLargestItemY'])) {
-                    $tempXY = explode(',', $gifCreator->setup['XY']);
-                    if ($this->mconf['useLargestItemX']) {
-                        $tempXY[0] = max($totalWH['W']);
-                    }
-                    if ($this->mconf['useLargestItemY']) {
-                        $tempXY[1] = max($totalWH['H']);
-                    }
-                    // Regenerate the new values...
-                    $val['XY'] = implode(',', $tempXY);
-                    $gifCreator = GeneralUtility::makeInstance(GifBuilder::class);
-                    $gifCreator->start($val, $this->menuArr[$key]);
-                }
-                // If distributeH/W is specified
-                if (!empty($totalWH) && ($this->mconf['distributeX'] || $this->mconf['distributeY'])) {
-                    $tempXY = explode(',', $gifCreator->setup['XY']);
-                    if ($this->mconf['distributeX']) {
-                        $diff = $this->mconf['distributeX'] - $totalWH['W_total'] - $distributeAccu['W'];
-                        $compensate = round($diff / ($items - $c + 1));
-                        $distributeAccu['W'] += $compensate;
-                        $tempXY[0] = $totalWH['W'][$key] + $compensate;
-                    }
-                    if ($this->mconf['distributeY']) {
-                        $diff = $this->mconf['distributeY'] - $totalWH['H_total'] - $distributeAccu['H'];
-                        $compensate = round($diff / ($items - $c + 1));
-                        $distributeAccu['H'] += $compensate;
-                        $tempXY[1] = $totalWH['H'][$key] + $compensate;
-                    }
-                    // Regenerate the new values...
-                    $val['XY'] = implode(',', $tempXY);
-                    $gifCreator = GeneralUtility::makeInstance(GifBuilder::class);
-                    $gifCreator->start($val, $this->menuArr[$key]);
-                }
-                // If max dimensions are specified
-                if ($maxDim) {
-                    $tempXY = explode(',', $val['XY']);
-                    if ($maxDim[0] && $Wcounter + $gifCreator->XY[0] >= $maxDim[0]) {
-                        $tempXY[0] = $maxDim[0] - $Wcounter;
-                        $maxFlag = 1;
-                    }
-                    if ($maxDim[1] && $Hcounter + $gifCreator->XY[1] >= $maxDim[1]) {
-                        $tempXY[1] = $maxDim[1] - $Hcounter;
-                        $maxFlag = 1;
-                    }
-                    if ($maxFlag) {
-                        $val['XY'] = implode(',', $tempXY);
-                        $gifCreator = GeneralUtility::makeInstance(GifBuilder::class);
-                        $gifCreator->start($val, $this->menuArr[$key]);
-                    }
-                }
-                // displace
-                if ($Hobjs) {
-                    foreach ($Hobjs as $index) {
-                        if ($gifCreator->setup[$index] && $gifCreator->setup[$index . '.']) {
-                            $oldOffset = explode(',', $gifCreator->setup[$index . '.']['offset']);
-                            $gifCreator->setup[$index . '.']['offset'] = implode(',', $gifCreator->applyOffset($oldOffset, [0, -$Hcounter]));
-                        }
-                    }
-                }
-                if ($Wobjs) {
-                    foreach ($Wobjs as $index) {
-                        if ($gifCreator->setup[$index] && $gifCreator->setup[$index . '.']) {
-                            $oldOffset = explode(',', $gifCreator->setup[$index . '.']['offset']);
-                            $gifCreator->setup[$index . '.']['offset'] = implode(',', $gifCreator->applyOffset($oldOffset, [-$Wcounter, 0]));
-                        }
-                    }
-                }
-            }
-            // Finding alternative GIF names if any (by altImgResource)
-            $gifFileName = '';
-            if ($conf[$key]['altImgResource'] || is_array($conf[$key]['altImgResource.'])) {
-                $cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class);
-                $cObj->start($this->menuArr[$key], 'pages');
-                $altImgInfo = $cObj->getImgResource($conf[$key]['altImgResource'], $conf[$key]['altImgResource.']);
-                $gifFileName = $altImgInfo[3];
-            }
-            // If an alternative name was NOT given, find the GIFBUILDER name.
-            if (!$gifFileName && $isGD) {
-                GeneralUtility::mkdir_deep(Environment::getPublicPath() . '/typo3temp/assets/menu/');
-                $gifFileName = $gifCreator->fileName('assets/menu/');
-            }
-            $this->result[$resKey][$key] = $conf[$key];
-            // Generation of image file:
-            // File exists
-            if (file_exists($gifFileName)) {
-                $imageInfo = GeneralUtility::makeInstance(ImageInfo::class, $gifFileName);
-                $this->result[$resKey][$key]['output_w'] = (int)$imageInfo->getWidth();
-                $this->result[$resKey][$key]['output_h'] = (int)$imageInfo->getHeight();
-                $this->result[$resKey][$key]['output_file'] = $gifFileName;
-            } elseif ($isGD) {
-                // file is generated
-                $gifCreator->make();
-                $this->result[$resKey][$key]['output_w'] = $gifCreator->w;
-                $this->result[$resKey][$key]['output_h'] = $gifCreator->h;
-                $this->result[$resKey][$key]['output_file'] = $gifFileName;
-                $gifCreator->output($this->result[$resKey][$key]['output_file']);
-                $gifCreator->destroy();
-            }
-            // counter is increased
-            $Hcounter += $this->result[$resKey][$key]['output_h'];
-            // counter is increased
-            $Wcounter += $this->result[$resKey][$key]['output_w'];
-            if ($maxFlag) {
-                break;
-            }
-        }
-    }
-
-    /**
-     * Function searching for the largest width and height of the menu items to be generated.
-     * Uses some of the same code as makeGifs and even instantiates some gifbuilder objects BUT does not render the images - only reading out which width they would have.
-     * Remember to upgrade the code in here if the makeGifs function is updated.
-     *
-     * @param array $conf Same configuration array as passed to makeGifs()
-     * @param int $items The number of menu items
-     * @param array $Hobjs Array with "applyTotalH" numbers (unused)
-     * @param array $Wobjs Array with "applyTotalW" numbers (unused)
-     * @param array $minDim Array with "min" x/y
-     * @param array $maxDim Array with "max" x/y
-     * @return array Array with keys "H" and "W" which are in themselves arrays with the heights and widths of menu items inside. This can be used to find the max/min size of the menu items.
-     * @internal
-     * @see makeGifs()
-     */
-    public function findLargestDims($conf, $items, $Hobjs, $Wobjs, $minDim, $maxDim)
-    {
-        $items = (int)$items;
-        $totalWH = [
-            'W' => [],
-            'H' => [],
-            'W_total' => 0,
-            'H_total' => 0
-        ];
-        $Hcounter = 0;
-        $Wcounter = 0;
-        $c = 0;
-        $maxFlag = 0;
-        foreach ($conf as $key => $val) {
-            // SAME CODE AS makeGifs()! BEGIN
-            if ($items === $c + 1 && $minDim) {
-                $Lobjs = $this->mconf['removeObjectsOfDummy'];
-                if ($Lobjs) {
-                    $Lobjs = GeneralUtility::intExplode(',', $Lobjs);
-                    foreach ($Lobjs as $remItem) {
-                        unset($val[$remItem]);
-                        unset($val[$remItem . '.']);
-                    }
-                }
-                $flag = 0;
-                $tempXY = explode(',', $val['XY']);
-                if ($Wcounter < $minDim[0]) {
-                    $tempXY[0] = $minDim[0] - $Wcounter;
-                    $flag = 1;
-                }
-                if ($Hcounter < $minDim[1]) {
-                    $tempXY[1] = $minDim[1] - $Hcounter;
-                    $flag = 1;
-                }
-                $val['XY'] = implode(',', $tempXY);
-                if (!$flag) {
-                    break;
-                }
-            }
-            $c++;
-            $gifCreator = GeneralUtility::makeInstance(GifBuilder::class);
-            $gifCreator->start($val, $this->menuArr[$key]);
-            if ($maxDim) {
-                $tempXY = explode(',', $val['XY']);
-                if ($maxDim[0] && $Wcounter + $gifCreator->XY[0] >= $maxDim[0]) {
-                    $tempXY[0] = $maxDim[0] - $Wcounter;
-                    $maxFlag = 1;
-                }
-                if ($maxDim[1] && $Hcounter + $gifCreator->XY[1] >= $maxDim[1]) {
-                    $tempXY[1] = $maxDim[1] - $Hcounter;
-                    $maxFlag = 1;
-                }
-                if ($maxFlag) {
-                    $val['XY'] = implode(',', $tempXY);
-                    $gifCreator = GeneralUtility::makeInstance(GifBuilder::class);
-                    $gifCreator->start($val, $this->menuArr[$key]);
-                }
-            }
-            // SAME CODE AS makeGifs()! END
-            // Setting the width/height
-            $totalWH['W'][$key] = $gifCreator->XY[0];
-            $totalWH['H'][$key] = $gifCreator->XY[1];
-            $totalWH['W_total'] += $gifCreator->XY[0];
-            $totalWH['H_total'] += $gifCreator->XY[1];
-            // counter is increased
-            $Hcounter += $gifCreator->XY[1];
-            // counter is increased
-            $Wcounter += $gifCreator->XY[0];
-            if ($maxFlag) {
-                break;
-            }
-        }
-        return $totalWH;
-    }
-
-    /**
-     * Traverses the ->result['NO'] array of menu items configuration (made by ->generate()) and renders the HTML of each item (the images themselves was made with makeGifs() before this. See ->generate())
-     * During the execution of this function many internal methods prefixed "extProc_" from this class is called and many of these are for now dummy functions. But they can be used for processing as they are used by the GMENU_LAYERS
-     *
-     * @return string The HTML for the menu (returns result through $this->extProc_finish(); )
-     */
-    public function writeMenu()
-    {
-        if (!is_array($this->menuArr) || empty($this->result) || !is_array($this->result['NO'])) {
-            return '';
-        }
-        $this->WMresult = '';
-        $this->INPfixMD5 = substr(md5(microtime() . $this->GMENU_fixKey), 0, 4);
-        $this->WMmenuItems = count($this->result['NO']);
-        $typoScriptService = GeneralUtility::makeInstance(TypoScriptService::class);
-        $this->WMsubmenuObjSuffixes = $typoScriptService->explodeConfigurationForOptionSplit(['sOSuffix' => $this->mconf['submenuObjSuffixes']], $this->WMmenuItems);
-        $this->extProc_init();
-        $tsfe = $this->getTypoScriptFrontendController();
-        if (!isset($tsfe->additionalJavaScript['JSImgCode'])) {
-            $tsfe->additionalJavaScript['JSImgCode'] = '';
-        }
-        for ($key = 0; $key < $this->WMmenuItems; $key++) {
-            if ($this->result['NO'][$key]['output_file']) {
-                // Initialize the cObj with the page record of the menu item
-                $this->WMcObj->start($this->menuArr[$key], 'pages');
-                $this->I = [];
-                $this->I['key'] = $key;
-                $this->I['INPfix'] = ($this->imgNameNotRandom ? '' : '_' . $this->INPfixMD5) . '_' . $key;
-                $this->I['val'] = $this->result['NO'][$key];
-                $this->I['title'] = $this->getPageTitle($this->menuArr[$key]['title'], $this->menuArr[$key]['nav_title']);
-                $this->I['uid'] = $this->menuArr[$key]['uid'];
-                $this->I['mount_pid'] = $this->menuArr[$key]['mount_pid'];
-                $this->I['pid'] = $this->menuArr[$key]['pid'];
-                $this->I['spacer'] = $this->menuArr[$key]['isSpacer'];
-                if (!$this->I['uid'] && !$this->menuArr[$key]['_OVERRIDE_HREF']) {
-                    $this->I['spacer'] = 1;
-                }
-                $this->I['noLink'] = $this->I['spacer'] || $this->I['val']['noLink'] || empty($this->menuArr[$key]);
-                // !count($this->menuArr[$key]) means that this item is a dummyItem
-                $this->I['name'] = '';
-                // Set access key
-                if ($this->mconf['accessKey']) {
-                    $this->I['accessKey'] = $this->accessKey($this->I['title']);
-                } else {
-                    $this->I['accessKey'] = [];
-                }
-                // Make link tag
-                $this->I['val']['ATagParams'] = $this->WMcObj->getATagParams($this->I['val']);
-                if (isset($this->I['val']['additionalParams.'])) {
-                    $this->I['val']['additionalParams'] = $this->WMcObj->stdWrap($this->I['val']['additionalParams'], $this->I['val']['additionalParams.']);
-                }
-                $this->I['linkHREF'] = $this->link($key, $this->I['val']['altTarget'], $this->mconf['forceTypeValue']);
-                // Title attribute of links:
-                $titleAttrValue = isset($this->I['val']['ATagTitle.']) ? $this->WMcObj->stdWrap($this->I['val']['ATagTitle'], $this->I['val']['ATagTitle.']) . $this->I['accessKey']['alt'] : $this->I['val']['ATagTitle'] . $this->I['accessKey']['alt'];
-                if ($titleAttrValue !== '') {
-                    $this->I['linkHREF']['title'] = $titleAttrValue;
-                }
-                // Set rollover
-                if ($this->result['RO'][$key] && !$this->I['noLink']) {
-                    $this->I['theName'] = $this->imgNamePrefix . $this->I['uid'] . $this->I['INPfix'];
-                    $this->I['name'] = ' ' . $this->nameAttribute . '="' . $this->I['theName'] . '"';
-                    $this->I['linkHREF']['onMouseover'] = $this->WMfreezePrefix . 'over(' . GeneralUtility::quoteJSvalue($this->I['theName']) . ');';
-                    $this->I['linkHREF']['onMouseout'] = $this->WMfreezePrefix . 'out(' . GeneralUtility::quoteJSvalue($this->I['theName']) . ');';
-                    $tsfe->additionalJavaScript['JSImgCode'] .= LF . $this->I['theName'] . '_n=new Image(); ' . $this->I['theName'] . '_n.src = ' . GeneralUtility::quoteJSvalue($tsfe->absRefPrefix . $this->I['val']['output_file']) . '; ';
-                    $tsfe->additionalJavaScript['JSImgCode'] .= LF . $this->I['theName'] . '_h=new Image(); ' . $this->I['theName'] . '_h.src = ' . GeneralUtility::quoteJSvalue($tsfe->absRefPrefix . $this->result['RO'][$key]['output_file']) . '; ';
-                    $tsfe->imagesOnPage[] = $this->result['RO'][$key]['output_file'];
-                    $tsfe->setJS('mouseOver');
-                    $this->extProc_RO($key);
-                }
-                // Set altText
-                $this->I['altText'] = $this->I['title'] . $this->I['accessKey']['alt'];
-                // Calling extra processing function
-                $this->extProc_beforeLinking($key);
-                // Set linking
-                if (!$this->I['noLink']) {
-                    $this->setATagParts();
-                } else {
-                    $this->I['A1'] = '';
-                    $this->I['A2'] = '';
-                }
-                $this->I['IMG'] = '<img src="' . $tsfe->absRefPrefix . $this->I['val']['output_file'] . '" width="' . $this->I['val']['output_w'] . '" height="' . $this->I['val']['output_h'] . '" ' . $this->parent_cObj->getBorderAttr('border="0"') . ($this->mconf['disableAltText'] ? '' : ' alt="' . htmlspecialchars($this->I['altText']) . '"') . $this->I['name'] . ($this->I['val']['imgParams'] ? ' ' . $this->I['val']['imgParams'] : '') . ' />';
-                // Make before, middle and after parts
-                $this->I['parts'] = [];
-                $this->I['parts']['ATag_begin'] = $this->I['A1'];
-                $this->I['parts']['image'] = $this->I['IMG'];
-                $this->I['parts']['ATag_end'] = $this->I['A2'];
-                // Passing I to a user function
-                if ($this->mconf['IProcFunc']) {
-                    $this->I = $this->userProcess('IProcFunc', $this->I);
-                }
-                // Putting the item together.
-                // Merge parts + beforeAllWrap
-                $this->I['theItem'] = implode('', $this->I['parts']);
-                $this->I['theItem'] = $this->extProc_beforeAllWrap($this->I['theItem'], $key);
-                // wrap:
-                $this->I['theItem'] = $this->WMcObj->wrap($this->I['theItem'], $this->I['val']['wrap']);
-                // allWrap:
-                $allWrap = isset($this->I['val']['allWrap.']) ? $this->WMcObj->stdWrap($this->I['val']['allWrap'], $this->I['val']['allWrap.']) : $this->I['val']['allWrap'];
-                $this->I['theItem'] = $this->WMcObj->wrap($this->I['theItem'], $allWrap);
-                if ($this->I['val']['subst_elementUid']) {
-                    $this->I['theItem'] = str_replace('{elementUid}', $this->I['uid'], $this->I['theItem']);
-                }
-                // allStdWrap:
-                if (is_array($this->I['val']['allStdWrap.'])) {
-                    $this->I['theItem'] = $this->WMcObj->stdWrap($this->I['theItem'], $this->I['val']['allStdWrap.']);
-                }
-                $tsfe->imagesOnPage[] = $this->I['val']['output_file'];
-                $this->extProc_afterLinking($key);
-            }
-        }
-        return $this->extProc_finish();
-    }
-
-    /**
-     * Called right before the traversing of $this->result begins.
-     * Can be used for various initialization
-     *
-     * @see writeMenu()
-     */
-    protected function extProc_init()
-    {
-    }
-
-    /**
-     * Called after all processing for RollOver of an element has been done.
-     *
-     * @param int $key Pointer to $this->menuArr[$key] where the current menu element record is found OR $this->result['RO'][$key] where the configuration for that elements RO version is found!
-     * @see writeMenu()
-     */
-    protected function extProc_RO($key)
-    {
-    }
-
-    /**
-     * Called right before the creation of the link for the menu item
-     *
-     * @param int $key Pointer to $this->menuArr[$key] where the current menu element record is found
-     * @see writeMenu()
-     */
-    protected function extProc_beforeLinking($key)
-    {
-    }
-
-    /**
-     * Called right after the creation of links for the menu item. This is also the last function call before the
-     * for-loop traversing menu items goes to the next item.
-     * This function MUST set $this->WMresult.=[HTML for menu item] to add the generated menu item to the internal accumulation of items.
-     * Further this calls the subMenu function in the parent class to create any submenu there might be.
-     *
-     * @param int $key Pointer to $this->menuArr[$key] where the current menu element record is found
-     * @see writeMenu(), AbstractMenuContentObject::subMenu()
-     */
-    protected function extProc_afterLinking($key)
-    {
-        // Add part to the accumulated result + fetch submenus
-        if (!$this->I['spacer']) {
-            $this->I['theItem'] .= $this->subMenu($this->I['uid'], $this->WMsubmenuObjSuffixes[$key]['sOSuffix']);
-        }
-        $part = isset($this->I['val']['wrapItemAndSub.']) ? $this->WMcObj->stdWrap($this->I['val']['wrapItemAndSub'], $this->I['val']['wrapItemAndSub.']) : $this->I['val']['wrapItemAndSub'];
-        $this->WMresult .= $part ? $this->WMcObj->wrap($this->I['theItem'], $part) : $this->I['theItem'];
-    }
-
-    /**
-     * Called before the "wrap" happens on the menu item.
-     *
-     * @param string $item The current content of the menu item, $this->I['theItem'], passed along.
-     * @param int $key Pointer to $this->menuArr[$key] where the current menu element record is found (unused)
-     * @return string The modified version of $item, going back into $this->I['theItem']
-     * @see writeMenu()
-     */
-    protected function extProc_beforeAllWrap($item, $key)
-    {
-        return $item;
-    }
-
-    /**
-     * Called before the writeMenu() function returns (only if a menu was generated)
-     *
-     * @return string The total menu content should be returned by this function
-     * @see writeMenu()
-     */
-    protected function extProc_finish()
-    {
-        // stdWrap:
-        if (is_array($this->mconf['stdWrap.'])) {
-            $this->WMresult = $this->WMcObj->stdWrap($this->WMresult, $this->mconf['stdWrap.']);
-        }
-        return $this->WMcObj->wrap($this->WMresult, $this->mconf['wrap']) . $this->WMextraScript;
-    }
-
-    /**
-     * This explodes a comma-list into an array where the values are parsed through ContentObjectRender::calc() and cast to (int)(so you are sure to have integers in the output array)
-     * Used to split and calculate min and max values for GMENUs.
-     *
-     * @param string $string The string with parts in (where each part is evaluated by ->calc())
-     * @return array And array with evaluated values.
-     * @see ContentObjectRenderer::calc(), makeGifs()
-     */
-    protected function calcIntExplode($string)
-    {
-        $temp = explode(',', $string);
-        foreach ($temp as $key => $val) {
-            $temp[$key] = (int)$this->parent_cObj->calc($val);
-        }
-        return $temp;
-    }
-}
diff --git a/typo3/sysext/frontend/Classes/ContentObject/Menu/ImageMenuContentObject.php b/typo3/sysext/frontend/Classes/ContentObject/Menu/ImageMenuContentObject.php
deleted file mode 100644 (file)
index 2cd05ec..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-<?php
-namespace TYPO3\CMS\Frontend\ContentObject\Menu;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Core\Environment;
-use TYPO3\CMS\Core\Type\File\ImageInfo;
-use TYPO3\CMS\Core\Utility\ArrayUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
-use TYPO3\CMS\Frontend\Imaging\GifBuilder;
-
-/**
- * ImageMap based menus
- *
- * @deprecated since TYPO3 v9.4, will be removed in TYPO3 v10.0
- */
-class ImageMenuContentObject extends AbstractMenuContentObject
-{
-    public function __construct()
-    {
-        trigger_error('IMGMENU and ImageMenuContentObject will be removed in TYPO3 v10.0, you should build accessible websites with TMENU/Text, and optional images on top, which can be achieved with TypoScript.', E_USER_DEPRECATED);
-    }
-
-    /**
-     * Calls procesItemStates() so that the common configuration for the menu items are resolved into individual configuration per item.
-     * Calls makeImageMap() to generate the image map image-file
-     *
-     * @see AbstractMenuContentObject::procesItemStates(), makeImageMap()
-     */
-    public function generate()
-    {
-        $NOconf = [];
-        $splitCount = count($this->menuArr);
-        if ($splitCount) {
-            list($NOconf) = $this->procesItemStates($splitCount);
-        }
-        if (!empty($this->mconf['debugItemConf'])) {
-            echo '<h3>$NOconf:</h3>';
-            debug($NOconf);
-        }
-        $this->makeImageMap($NOconf);
-    }
-
-    /**
-     * Will traverse input array with configuration per-item and create corresponding GIF files for the menu.
-     * The data of the files are stored in $this->result
-     *
-     * @param array $conf Array with configuration for each item.
-     * @internal
-     * @see generate()
-     */
-    public function makeImageMap($conf)
-    {
-        if (!is_array($conf)) {
-            $conf = [];
-        }
-        if (is_array($this->mconf['main.'])) {
-            $gifCreator = GeneralUtility::makeInstance(GifBuilder::class);
-            $itemsConf = $conf;
-            $conf = $this->mconf['main.'];
-            if (is_array($conf)) {
-                $sKeyArray = ArrayUtility::filterAndSortByNumericKeys($conf);
-                $gifObjCount = (int)end($sKeyArray);
-                // Now we add graphical objects to the gifbuilder-setup
-                $waArr = [];
-                foreach ($itemsConf as $key => $val) {
-                    if (is_array($val)) {
-                        $gifObjCount++;
-                        $waArr[$key]['free'] = $gifObjCount;
-                        $sKeyArray = ArrayUtility::filterAndSortByNumericKeys($val);
-                        foreach ($sKeyArray as $theKey) {
-                            $theValue = $val[$theKey];
-                            if ((int)$theKey && ($theValArr = $val[$theKey . '.'])) {
-                                $cObjData = $this->menuArr[$key] ?: [];
-                                $gifObjCount++;
-                                if ($theValue === 'TEXT') {
-                                    $waArr[$key]['textNum'] = $gifObjCount;
-                                    $gifCreator->data = $cObjData;
-                                    $theValArr = $gifCreator->checkTextObj($theValArr);
-                                    // if this is not done it seems that imageMaps will be rendered wrong!!
-                                    unset($theValArr['text.']);
-                                    // check links
-                                    $LD = $this->menuTypoLink($this->menuArr[$key], $this->mconf['target'], '', '', [], '', $this->mconf['forceTypeValue']);
-                                    // If access restricted pages should be shown in menus, change the link of such pages to link to a redirection page:
-                                    $this->changeLinksForAccessRestrictedPages($LD, $this->menuArr[$key], $this->mconf['target'], $this->mconf['forceTypeValue']);
-                                    // Overriding URL / Target if set to do so:
-                                    if ($this->menuArr[$key]['_OVERRIDE_HREF']) {
-                                        $LD['totalURL'] = $this->menuArr[$key]['_OVERRIDE_HREF'];
-                                        if ($this->menuArr[$key]['_OVERRIDE_TARGET']) {
-                                            $LD['target'] = $this->menuArr[$key]['_OVERRIDE_TARGET'];
-                                        }
-                                    }
-                                    // Setting target/url for Image Map:
-                                    if ($theValArr['imgMap.']['url'] === '') {
-                                        $theValArr['imgMap.']['url'] = $LD['totalURL'];
-                                    }
-                                    if ($theValArr['imgMap.']['target'] === '') {
-                                        $theValArr['imgMap.']['target'] = $LD['target'];
-                                    }
-                                    if (is_array($theValArr['imgMap.']['altText.'])) {
-                                        $cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class);
-                                        $cObj->start($cObjData, 'pages');
-                                        if (isset($theValArr['imgMap.']['altText.'])) {
-                                            $theValArr['imgMap.']['altText'] = $cObj->stdWrap($theValArr['imgMap.']['altText'], $theValArr['imgMap.']['altText.']);
-                                        }
-                                        unset($theValArr['imgMap.']['altText.']);
-                                    }
-                                    if (is_array($theValArr['imgMap.']['titleText.'])) {
-                                        $cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class);
-                                        $cObj->start($cObjData, 'pages');
-                                        if (isset($theValArr['imgMap.']['titleText.'])) {
-                                            $theValArr['imgMap.']['titleText'] = $cObj->stdWrap($theValArr['imgMap.']['titleText'], $theValArr['imgMap.']['titleText.']);
-                                        }
-                                        unset($theValArr['imgMap.']['titleText.']);
-                                    }
-                                }
-                                // This code goes one level in if the object is an image. If 'file' and/or 'mask' appears to be GIFBUILDER-objects, they are both searched for TEXT objects, and if a textobj is found, it's checked with the currently loaded record!!
-                                if ($theValue === 'IMAGE') {
-                                    if ($theValArr['file'] === 'GIFBUILDER') {
-                                        $temp_sKeyArray = ArrayUtility::filterAndSortByNumericKeys($theValArr['file.']);
-                                        foreach ($temp_sKeyArray as $temp_theKey) {
-                                            if ($theValArr['mask.'][$temp_theKey] === 'TEXT') {
-                                                $gifCreator->data = $this->menuArr[$key] ?: [];
-                                                $theValArr['mask.'][$temp_theKey . '.'] = $gifCreator->checkTextObj($theValArr['mask.'][$temp_theKey . '.']);
-                                                // If this is not done it seems that imageMaps will be rendered wrong!!
-                                                unset($theValArr['mask.'][$temp_theKey . '.']['text.']);
-                                            }
-                                        }
-                                    }
-                                    if ($theValArr['mask'] === 'GIFBUILDER') {
-                                        $temp_sKeyArray = ArrayUtility::filterAndSortByNumericKeys($theValArr['mask.']);
-                                        foreach ($temp_sKeyArray as $temp_theKey) {
-                                            if ($theValArr['mask.'][$temp_theKey] === 'TEXT') {
-                                                $gifCreator->data = $this->menuArr[$key] ?: [];
-                                                $theValArr['mask.'][$temp_theKey . '.'] = $gifCreator->checkTextObj($theValArr['mask.'][$temp_theKey . '.']);
-                                                // if this is not done it seems that imageMaps will be rendered wrong!!
-                                                unset($theValArr['mask.'][$temp_theKey . '.']['text.']);
-                                            }
-                                        }
-                                    }
-                                }
-                                // Checks if disabled is set...
-                                $setObjFlag = 1;
-                                if ($theValArr['if.']) {
-                                    /** @var ContentObjectRenderer $cObj */
-                                    $cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class);
-                                    $cObj->start($cObjData, 'pages');
-                                    if (!empty($theValArr['if.']) && !$cObj->checkIf($theValArr['if.'])) {
-                                        $setObjFlag = 0;
-                                    }
-                                    unset($theValArr['if.']);
-                                }
-                                // Set the object!
-                                if ($setObjFlag) {
-                                    $conf[$gifObjCount] = $theValue;
-                                    $conf[$gifObjCount . '.'] = $theValArr;
-                                }
-                            }
-                        }
-                    }
-                }
-                $gifCreator->start($conf, $this->getTypoScriptFrontendController()->page);
-                // calculations
-                $dConf = [];
-                foreach ($waArr as $key => $val) {
-                    if ($dConf[$key] = $itemsConf[$key]['distrib']) {
-                        $textBB = $gifCreator->objBB[$val['textNum']];
-                        $dConf[$key] = str_replace(
-                            ['textX', 'textY'],
-                            [$textBB[0], $textBB[1]],
-                            $dConf[$key]
-                        );
-                        $dConf[$key] = GeneralUtility::intExplode(',', $gifCreator->calcOffset($dConf[$key]));
-                    }
-                }
-                $workArea = GeneralUtility::intExplode(',', $gifCreator->calcOffset($this->mconf['dWorkArea']));
-                foreach ($waArr as $key => $val) {
-                    $index = $val['free'];
-                    $gifCreator->setup[$index] = 'WORKAREA';
-                    $workArea[2] = $dConf[$key][2] ?: $dConf[$key][0];
-                    $workArea[3] = $dConf[$key][3] ?: $dConf[$key][1];
-                    $gifCreator->setup[$index . '.']['set'] = implode(',', $workArea);
-                    $workArea[0] += $dConf[$key][0];
-                    $workArea[1] += $dConf[$key][1];
-                }
-                if ($this->mconf['debugRenumberedObject']) {
-                    echo '<h3>Renumbered GIFBUILDER object:</h3>';
-                    debug($gifCreator->setup);
-                }
-                GeneralUtility::mkdir_deep(Environment::getPublicPath() . '/typo3temp/assets/menu/');
-                $gifFileName = $gifCreator->fileName('assets/menu/');
-                // Gets the ImageMap from the cache...
-                $cache = $this->getCache();
-                $imgHash = md5($gifFileName);
-                $imgMap = $cache->get($imgHash);
-                // File exists
-                if ($imgMap && file_exists($gifFileName)) {
-                    $imageInfo = GeneralUtility::makeInstance(ImageInfo::class, $gifFileName);
-                    $w = $imageInfo->getWidth();
-                    $h = $imageInfo->getHeight();
-                } else {
-                    // file is generated
-                    $gifCreator->make();
-                    $w = $gifCreator->w;
-                    $h = $gifCreator->h;
-                    $gifCreator->output($gifFileName);
-                    $gifCreator->destroy();
-                    $imgMap = $gifCreator->map;
-                    $cache->set($imgHash, $imgMap, ['ident_MENUIMAGEMAP'], 0);
-                }
-                $imgMap .= $this->mconf['imgMapExtras'];
-                $this->result = ['output_file' => $gifFileName, 'output_w' => $w, 'output_h' => $h, 'imgMap' => $imgMap];
-            }
-        }
-    }
-
-    /**
-     * Returns the HTML for the image map menu.
-     * If ->result is TRUE it will create the HTML for the image map menu.
-     *
-     * @return string The HTML for the menu
-     */
-    public function writeMenu()
-    {
-        if ($this->result) {
-            $res = $this->result;
-            // shortMD5 260900
-            $menuName = 'menu_' . GeneralUtility::shortMD5($res['imgMap']);
-            $result = '<img src="' . $this->getTypoScriptFrontendController()->absRefPrefix . $res['output_file'] . '" width="' . $res['output_w'] . '" height="' . $res['output_h'] . '" usemap="#' . $menuName . '" border="0" ' . $this->mconf['params'];
-            // Adding alt attribute if not set.
-            if (!strstr($result, 'alt="')) {
-                $result .= ' alt="Menu Image Map"';
-            }
-            $result .= ' /><map name="' . $menuName . '" id="' . $menuName . '">' . $res['imgMap'] . '</map>';
-            $this->getTypoScriptFrontendController()->imagesOnPage[] = $res['output_file'];
-            return $this->WMcObj->wrap($result, $this->mconf['wrap']);
-        }
-        return '';
-    }
-}
index 3f4a0f6..9b956e7 100644 (file)
@@ -19,7 +19,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /**
  * Factory for menu content objects. Allows overriding the default
- * types like 'GMENU' with an own implementation (only one possible)
+ * types like 'TMENU' with an own implementation (only one possible)
  * and new types can be registered.
  * @internal this is only used for internal purposes and solely used for EXT:frontend and not part of TYPO3's Core API.
  */
@@ -31,9 +31,7 @@ class MenuContentObjectFactory implements SingletonInterface
      * @var array
      */
     protected $menuTypeToClassMapping = [
-        'GMENU' => GraphicalMenuContentObject::class,
         'TMENU' => TextMenuContentObject::class,
-        'IMGMENU' => ImageMenuContentObject::class,
     ];
 
     /**
@@ -47,6 +45,7 @@ class MenuContentObjectFactory implements SingletonInterface
     {
         $upperCasedClassName = strtoupper($type);
         if (array_key_exists($upperCasedClassName, $this->menuTypeToClassMapping)) {
+            /** @var AbstractMenuContentObject $object */
             $object = GeneralUtility::makeInstance($this->menuTypeToClassMapping[$upperCasedClassName]);
         } else {
             throw new Exception\NoSuchMenuTypeException(
index 0d5fd17..e14dfaa 100644 (file)
@@ -62,7 +62,6 @@ class TextMenuContentObject extends AbstractMenuContentObject
         $this->WMmenuItems = count($this->result);
         $typoScriptService = GeneralUtility::makeInstance(TypoScriptService::class);
         $this->WMsubmenuObjSuffixes = $typoScriptService->explodeConfigurationForOptionSplit(['sOSuffix' => $this->mconf['submenuObjSuffixes']], $this->WMmenuItems);
-        $this->extProc_init();
         foreach ($this->result as $key => $val) {
             $GLOBALS['TSFE']->register['count_HMENU_MENUOBJ']++;
             $GLOBALS['TSFE']->register['count_MENUOBJ']++;
@@ -98,8 +97,6 @@ class TextMenuContentObject extends AbstractMenuContentObject
                 $this->I['linkHREF']['title'] = $titleAttrValue;
             }
 
-            // Calling extra processing function
-            $this->extProc_beforeLinking($key);
             // stdWrap for doNotLinkIt
             if (isset($this->I['val']['doNotLinkIt.'])) {
                 $this->I['val']['doNotLinkIt'] = $this->WMcObj->stdWrap($this->I['val']['doNotLinkIt'], $this->I['val']['doNotLinkIt.']);
@@ -153,7 +150,6 @@ class TextMenuContentObject extends AbstractMenuContentObject
             }
             // Merge parts + beforeAllWrap
             $this->I['theItem'] = implode('', $this->I['parts']);
-            $this->I['theItem'] = $this->extProc_beforeAllWrap($this->I['theItem'], $key);
             // allWrap:
             $allWrap = isset($this->I['val']['allWrap.']) ? $this->WMcObj->stdWrap($this->I['val']['allWrap'], $this->I['val']['allWrap.']) : $this->I['val']['allWrap'];
             $this->I['theItem'] = $this->WMcObj->wrap($this->I['theItem'], $allWrap);
@@ -201,26 +197,6 @@ class TextMenuContentObject extends AbstractMenuContentObject
     }
 
     /**
-     * Called right before the traversing of $this->result begins.
-     * Can be used for various initialization
-     *
-     * @see writeMenu()
-     */
-    protected function extProc_init()
-    {
-    }
-
-    /**
-     * Called right before the creation of the link for the menu item
-     *
-     * @param int $key Pointer to $this->menuArr[$key] where the current menu element record is found
-     * @see writeMenu()
-     */
-    protected function extProc_beforeLinking($key)
-    {
-    }
-
-    /**
      * Called right after the creation of links for the menu item. This is also the last function call before the while-loop traversing menu items goes to the next item.
      * This function MUST set $this->WMresult.=[HTML for menu item] to add the generated menu item to the internal accumulation of items.
      *
@@ -238,19 +214,6 @@ class TextMenuContentObject extends AbstractMenuContentObject
     }
 
     /**
-     * Called before the "allWrap" happens on the menu item.
-     *
-     * @param string $item The current content of the menu item, $this->I['theItem'], passed along.
-     * @param int $key Pointer to $this->menuArr[$key] where the current menu element record is found
-     * @return string The modified version of $item, going back into $this->I['theItem']
-     * @see writeMenu()
-     */
-    protected function extProc_beforeAllWrap($item, $key)
-    {
-        return $item;
-    }
-
-    /**
      * Called before the writeMenu() function returns (only if a menu was generated)
      *
      * @return string The total menu content should be returned by this function
index 5fc73b1..4592712 100644 (file)
@@ -105,11 +105,10 @@ class GifBuilder extends GraphicalFunctions
      * Initialization of the GIFBUILDER objects, in particular TEXT and IMAGE. This includes finding the bounding box, setting dimensions and offset values before the actual rendering is started.
      * Modifies the ->setup, ->objBB internal arrays
      * Should be called after the ->init() function which initializes the parent class functions/variables in general.
-     * The class \TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject also uses gifbuilder and here there is an interesting use since the function findLargestDims() from that class calls the init() and start() functions to find the total dimensions before starting the rendering of the images.
      *
      * @param array $conf TypoScript properties for the GIFBUILDER session. Stored internally in the variable ->setup
      * @param array $data The current data record from \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer. Stored internally in the variable ->data
-     * @see ContentObjectRenderer::getImgResource(), \TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject::makeGifs(), \TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject::findLargestDims()
+     * @see ContentObjectRenderer::getImgResource()
      */
     public function start($conf, $data)
     {
index 04ccf06..d972914 100644 (file)
@@ -921,11 +921,13 @@ return [
     'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\ImageMenuContentObject' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Extbase\Command\CoreCommand' => [
index a73586a..b884a94 100644 (file)
@@ -729,6 +729,7 @@ return [
         'maximumNumberOfArguments' => 2,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->link' => [
@@ -736,6 +737,7 @@ return [
         'maximumNumberOfArguments' => 3,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->procesItemStates' => [
@@ -743,6 +745,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->changeLinksForAccessRestrictedPages' => [
@@ -750,6 +753,7 @@ return [
         'maximumNumberOfArguments' => 4,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isNext' => [
@@ -757,6 +761,7 @@ return [
         'maximumNumberOfArguments' => 2,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isActive' => [
@@ -764,6 +769,7 @@ return [
         'maximumNumberOfArguments' => 2,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isCurrent' => [
@@ -771,6 +777,7 @@ return [
         'maximumNumberOfArguments' => 2,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isSubMenu' => [
@@ -778,6 +785,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isItemState' => [
@@ -785,6 +793,7 @@ return [
         'maximumNumberOfArguments' => 2,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->accessKey' => [
@@ -792,6 +801,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->userProcess' => [
@@ -799,6 +809,7 @@ return [
         'maximumNumberOfArguments' => 2,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->setATagParts' => [
@@ -806,6 +817,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getPageTitle' => [
@@ -813,6 +825,7 @@ return [
         'maximumNumberOfArguments' => 2,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getMPvar' => [
@@ -820,6 +833,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getDoktypeExcludeWhere' => [
@@ -827,6 +841,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getBannedUids' => [
@@ -834,6 +849,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuTypoLink' => [
@@ -841,6 +857,7 @@ return [
         'maximumNumberOfArguments' => 7,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_RO' => [
@@ -848,6 +865,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-80700-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_init' => [
@@ -855,6 +873,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-80700-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_beforeLinking' => [
@@ -862,6 +881,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-80700-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_afterLinking' => [
@@ -869,6 +889,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-80700-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_beforeAllWrap' => [
@@ -876,6 +897,7 @@ return [
         'maximumNumberOfArguments' => 2,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-80700-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_fisish' => [
@@ -883,6 +905,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-80700-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer->URLqMark' => [
@@ -1083,6 +1106,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_init' => [
@@ -1090,6 +1114,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_beforeLinking' => [
@@ -1097,6 +1122,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_afterLinking' => [
@@ -1104,6 +1130,7 @@ return [
         'maximumNumberOfArguments' => 1,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_beforeAllWrap' => [
@@ -1111,6 +1138,7 @@ return [
         'maximumNumberOfArguments' => 2,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_finish' => [
@@ -1118,6 +1146,7 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->beLoginLinkIPList' => [
index 9a3836a..833dab4 100644 (file)
@@ -766,141 +766,169 @@ return [
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuNumber' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->entryLevel' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->spacerIDList' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->doktypeExcludeList' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->alwaysActivePIDList' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->imgNamePrefix' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->imgNameNotRandom' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->debug' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->GMENU_fixKey' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->MP_array' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->conf' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->mconf' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->sys_page' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->nextActive' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuArr' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->hash' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->result' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->rL_uidRegister' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->INPfixMD5' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->I' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMresult' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMfreezePrefix' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMmenuItems' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMsubmenuObjSuffixes' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMextraScript' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMcObj' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->alternativeMenuTempArray' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->nameAttribute' => [
         'restFiles' => [
             'Deprecation-85902-IMGMENUGMENU.rst',
+            'Breaking-87193-DeprecatedFunctionalityRemoved.rst',
         ],
     ],
     'TYPO3\CMS\Backend\FrontendBackendUserAuthentication->adminPanel' => [
index 50c939a..0c6dfd8 100644 (file)
@@ -2212,7 +2212,7 @@ Example:
                </property>
                <property name="text" type="stdWrap">
                        <description><![CDATA[This is text text-string on the gif-file. The item is rendered only if this string is not empty.
-The cObj->data-array is loaded with the page-record, if for example the GIFBUILDER-object is used by GMENU or IMGMENU]]></description>
+The cObj->data-array is loaded with the page-record, if for the GIFBUILDER-object is used]]></description>
                        <default><![CDATA[
 ]]></default>
                </property>
@@ -2249,7 +2249,7 @@ Defines which menuObj that should render the menuitems on the various levels.
 
 Example:
 temp.sidemenu = HMENU
-temp.sidemenu.1 = GMENU  ]]></description>
+temp.sidemenu.1 = TMENU  ]]></description>
                        <default><![CDATA[ (no menu)]]></default>
                </property>
                <property name="2" type="mObj">
@@ -2258,7 +2258,7 @@ temp.sidemenu.1 = GMENU  ]]></description>
 
 Example:
 temp.sidemenu = HMENU
-temp.sidemenu.1 = GMENU  ]]></description>
+temp.sidemenu.1 = TMENU  ]]></description>
                        <default><![CDATA[ (no menu)]]></default>
                </property>
                <property name="3" type="mObj">
@@ -2267,7 +2267,7 @@ temp.sidemenu.1 = GMENU  ]]></description>
 
 Example:
 temp.sidemenu = HMENU
-temp.sidemenu.1 = GMENU  ]]></description>
+temp.sidemenu.1 = TMENU  ]]></description>
                        <default><![CDATA[ (no menu)]]></default>
                </property>
                <property name="4" type="mObj">
@@ -2276,7 +2276,7 @@ temp.sidemenu.1 = GMENU  ]]></description>
 
 Example:
 temp.sidemenu = HMENU
-temp.sidemenu.1 = GMENU  ]]></description>
+temp.sidemenu.1 = TMENU  ]]></description>
                        <default><![CDATA[ (no menu)]]></default>
                </property>
                <property name="addQueryString" type="string">
@@ -2827,699 +2827,7 @@ The result can be seen in the image below (applied on the testsite package):
 
 
 
-Applies to GMENU, TMENU on >= 2nd level in a menu.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-       </type>
-       <type id="GMENU" extends="mObj">
-               <property name="ACT" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which are found in the rootLine]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="ACTRO" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which are found in the rootLine]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="ACTIFSUB" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which are found in the rootLine and has subpages]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="ACTIFSUBRO" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which are found in the rootLine and has subpages]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="CUR" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for a menu item if the item is the current page.]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="CURRO" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for a menu item if the item is the current page.]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="CURIFSUB" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for a menu item if the item is the current page and has subpages.]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="CURIFSUBRO" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for a menu item if the item is the current page and has subpages.]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="IFSUB" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which has subpages]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="IFSUBRO" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which has subpages]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="NO" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       The default "Normal" state rendering of Item. This is required for all menus.
-If you specify properties for the "NO" property you do not have to set it "1". Otherwise with no properties setting "NO=1" will render the menu anyways (for TMENU this may make sense).
-
-The simplest menu TYPO3 can generate is then:
-
-page.20 = HMENU
-page.20.1 = TMENU
-page.20.1.NO = 1
-
-That will be pure <a> tags wrapped around page titles.]]></description>
-                       <default><![CDATA[1]]></default>
-               </property>
-               <property name="SPC" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for 'Spacer' pages.
-Spacers are pages of the doktype "Spacer". These are not viewable pages but "placeholders" which can be used to divide menuitems.
-
-Note: Rollovers doesn't work with spacers, if you use GMENU!]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="USERDEF1" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Userdefined, see .itemArrayProcFunc for details on how to use this.
-You can set the ITEM_STATE values USERDEF1 and USERDEF2 (+...RO) from a script/userfunction processing the menu item array. See HMENU/special=userdefined or the property .itemArrayProcFunc of the menu objects.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="USERDEF1RO" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Userdefined, see .itemArrayProcFunc for details on how to use this.
-You can set the ITEM_STATE values USERDEF1 and USERDEF2 (+...RO) from a script/userfunction processing the menu item array. See HMENU/special=userdefined or the property .itemArrayProcFunc of the menu objects.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="USERDEF2" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       (See above)]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="USERDEF2RO" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       (See above)]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="USR" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which are access restricted pages that a user has access to.]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="USRRO" type="GMENU_itemState">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which are access restricted pages that a user has access to.]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="IProcFunc" type="string">
-                       <description><![CDATA[The internal array "I" is passed to this function and expected returned as well. Subsequent to this function call the menu item is compiled by implode()'ing the array $I[parts] in the passed array. Thus you may modify this if you need to.
-See example on the testsite and in media/scripts/example_itemArrayProcFunc.php]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="RO" type="boolean">
-                       <description><![CDATA[RollOver configuration enabled / disabled.
-If this is true, RO becomes a GIFBUILDER-object defining the layout of the menuitem when the mouse rolls over it]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="accessKey" type="boolean">
-                       <description><![CDATA[If set access-keys are set on the menu-links]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="applyTotalH" type="string">
-                       <description><![CDATA[objNumsList (offset)
-
-                       This adds the total height of the previously generated menuitems to the offset of the GifBuilderObj's mentioned in this list.
-
-Example:
-This is useful it you want to create a menu with individual items but a common background image that extends to the whole area behind the menu. Then you should setup the background image in each GIFBUILDER-object and include the object-number in this list.
-]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="applyTotalW" type="string">
-                       <description><![CDATA[objNumsList (offset)
-                       This adds the total width of the previously generated menuitems to the offset of the GifBuilderObj's mentioned in this list.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="collapse" type="boolean">
-                       <description><![CDATA[If set, "active" menuitems that has expanded the next level on the menu will now collapse that menu again.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="debugItemConf" type="string">
-                       <description><![CDATA[Outputs (by the debug()-function) the configuration arrays for each menuitem. Useful to debug optionSplit things and such...
-Applies to GMENU, TMENU, IMGMENU]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="disableAltText" type="boolean">
-                       <description><![CDATA[If set, the alt-parameter of the images are not set. You can do it manually by "imgParams" (see below)]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="distributeX" type="int">
-                       <description><![CDATA[int+
-                       If set, the total width of all the menuitems will be equal to this number of pixels by adding/subtracting an equal amount of pixels to each menu items width.
-Will overrule any setting for ".useLargestItemX"]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="distributeY" type="int">
-                       <description><![CDATA[int+
-                       If set, the total height of all the menuitems will be equal to this number of pixels by adding/subtracting an equal amount of pixels to each menu items height.
-Will overrule any setting for ".useLargestItemY"]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="expAll" type="Boolean">
-                       <description><![CDATA[If this is true, the menu will always show the menu on the level underneath the menuitem. This corresponds to a situation where a user has clicked a menuitem and the menu folds out the next level. This can enable that to happen on all items as default.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="forceTypeValue" type="int">
-                       <description><![CDATA[If set, the &type parameter of the link is forced to this value regardless of target. Overrides the global equivalent in 'config' if set.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="JSWindow" type="boolean">
-                       <description><![CDATA[If set, the links of the menu-items will open by JavaScript in a pop-up window.
-
-.newWindow boolean, that lets every menuitem open in its own window opposite to opening in the same window for each click.
-
-.params is the list of parameters sent to the JavaScript open-window function, eg:
-width=200,height=300,status=0,menubar=0
-]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="max" type="string">
-                       <description><![CDATA[x,y (calcInt)"
-
-                       Forces the menu as a whole to these maximum dimensions]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="min" type="x,y (calcInt)">
-                       <description><![CDATA[Forces the menu as a whole to these minimum dimensions]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="overrideId" type="int">
-                       <description><![CDATA[integer (page-id)
-                       If set, then all links in the menu will point to this pageid. Instead the real uid of the page is sent by the parameter "&real_uid=[uid]".
-This feature is smart, if you have inserted a menu from somewhere else, perhaps a shared menu, but wants the menuitems to call the same page, which then generates a proper output based on the real_uid.
-Applies to GMENU, TMENU, IMGMENU]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="removeObjectsOfDummy" type="string">
-                       <description><![CDATA[objNumsList
-
-                       If the menu is forced to a certain minimum dimension, this is a list of objects in the gifbuilder-object that is removed for this last item. This is important to do if the menuitems has elements that should only be applied if the item is actually a menuitem!!]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="stdWrap" type="stdWrap">
-                       <description><![CDATA[Wraps the whole item using stdWrap
-
-Example:
-2 = TMENU
-2 {
-  stdWrap.dataWrap = <ul class="{register :
-     parentProperty}"> | </ul>
-  NO {
-    ...
-  }
-}]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="target" type="string">
-                       <description><![CDATA[target
-
-                       Target of the menulinks]]></description>
-                       <default><![CDATA[self]]></default>
-               </property>
-               <property name="submenuObjSuffixes" type="string">
-                       <description><![CDATA[Defines a suffix for alternative sub-level menu objects. Useful to create special submenus depending on their parent menu element. See example below.
-
-Example:
-This example will generate a menu where the menu objects for the second level will differ depending on the number of the first level item for which the submenu is rendered. The second level objects used are "2" (the default), "2a" and "2b" (the alternatives). Which of them is used is defined by "1.submenuObjSuffixes" which has the configuration "a |*| |*| b". This configuration means that the first menu element will use configuration "2a" and the last will use "2b" while anything in between will use "2" (no suffix applied)
-
-page.200 = HMENU
-page.200 {
-  1 = TMENU
-  1.wrap = <div style="width:200px; border: 1px solid;">|</div>
-  1.expAll = 1
-  1.submenuObjSuffixes = a |*|  |*| b
-  1.NO.allWrap = <b>|</b><br/>
-
-  2 = TMENU
-  2.NO.allWrap = <div style="background:red;">|</div>
-
-  2a = TMENU
-  2a.NO.allWrap = <div style="background:yellow;">|</div>
-
-  2b = TMENU
-  2b.NO.allWrap = <div style="background:green;">|</div>
-}
-
-The result can be seen in the image below (applied on the testsite package):
-
-
-
-Applies to GMENU, TMENU on >= 2nd level in a menu.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="useLargestItemX" type="boolean">
-                       <description><![CDATA[If set, then the width of all menuitems will be equal to the largest of them all.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="useLargestItemY" type="boolean">
-                       <description><![CDATA[If set, then the height of all menuitems will be equal to the largest of them all.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="wrap" type="wrap">
-                       <description><![CDATA[Wraps only if there were items in the menu!]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-       </type>
-       <type id="GMENU_itemState" extends="GIFBUILDER">
-               <property name="ATagParams" type="string">
-                       <description><![CDATA[Additional parameters]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="ATagTitle" type="stdWrap">
-                       <description><![CDATA[string /stdWrap
-
-                       which defines the title attribute of the a-tag. (See TMENUITEM also)]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="additionalParams" type="string">
-                       <description><![CDATA[string /stdWrap
-
-                       Define parameters that are added to the end of the URL. This must be code ready to insert after the last parameter.
-
-For details, see typolink->additionalParams]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="allStdWrap" type="stdWrap">
-                       <description><![CDATA[stdWrap of the whole item]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="allWrap" type="stdWrap">
-                       <description><![CDATA[wrap /stdWrap
-
-                       Wraps the whole item]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="altImgResource" type="imgResouce">
-                       <description><![CDATA[Defines an alternative image to use. If an image returns here, it will override any GIFBUILDER configuration.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="altTarget" type="string">
-                       <description><![CDATA[Alternative target which overrides the target defined for the GMENU]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="imgParams" type="string">
-                       <description><![CDATA[params
-
-                       Parameters for the <img>-tag]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="noLink" type="boolean">
-                       <description><![CDATA[If set, the item is NOT linked!]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="subst_elementUid" type="boolean">
-                       <description><![CDATA[If set, "{elementUid}" is substituted with the item uid.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="wrap" type="wrap">
-                       <description><![CDATA[Wrap of the menu item]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-       </type>
-       <type id="IMGMENU" extends="mObj">
-               <property name="ACT" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which are found in the rootLine]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="ACTRO" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which are found in the rootLine]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="ACTIFSUB" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which are found in the rootLine and has subpages]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="ACTIFSUBRO" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which are found in the rootLine and has subpages]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="CUR" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for a menu item if the item is the current page.]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="CURRO" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for a menu item if the item is the current page.]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="CURIFSUB" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for a menu item if the item is the current page and has subpages.]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="CURIFSUBRO" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for a menu item if the item is the current page and has subpages.]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="IFSUB" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which has subpages]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="IFSUBRO" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which has subpages]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="NO" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       The default "Normal" state rendering of Item. This is required for all menus.
-If you specify properties for the "NO" property you do not have to set it "1". Otherwise with no properties setting "NO=1" will render the menu anyways (for TMENU this may make sense).
-
-The simplest menu TYPO3 can generate is then:
-
-page.20 = HMENU
-page.20.1 = TMENU
-page.20.1.NO = 1
-
-That will be pure <a> tags wrapped around page titles.]]></description>
-                       <default><![CDATA[1]]></default>
-               </property>
-               <property name="SPC" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for 'Spacer' pages.
-Spacers are pages of the doktype "Spacer". These are not viewable pages but "placeholders" which can be used to divide menuitems.
-
-Note: Rollovers doesn't work with spacers, if you use GMENU!]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="USERDEF1" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Userdefined, see .itemArrayProcFunc for details on how to use this.
-You can set the ITEM_STATE values USERDEF1 and USERDEF2 (+...RO) from a script/userfunction processing the menu item array. See HMENU/special=userdefined or the property .itemArrayProcFunc of the menu objects.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="USERDEF1RO" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Userdefined, see .itemArrayProcFunc for details on how to use this.
-You can set the ITEM_STATE values USERDEF1 and USERDEF2 (+...RO) from a script/userfunction processing the menu item array. See HMENU/special=userdefined or the property .itemArrayProcFunc of the menu objects.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="USERDEF2" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       (See above)]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="USERDEF2RO" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       (See above)]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="USR" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which are access restricted pages that a user has access to.]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="USRRO" type="IMGMENUITEM">
-                       <description><![CDATA[Boolean / (config)
-                       Enable/Configuration for menu items which are access restricted pages that a user has access to.]]></description>
-                       <default><![CDATA[0]]></default>
-               </property>
-               <property name="dWorkArea" type="string">
-                       <description><![CDATA[offset + calc
-                       Main offset of the GIFBUILDER-items (also called the "distribution")]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="debugItemConf" type="string">
-                       <description><![CDATA[Outputs (by the debug()-function) the configuration arrays for each menuitem. Useful to debug optionSplit things and such...
-Applies to GMENU, TMENU, IMGMENU]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="debugRenumberedObject" type="boolean">
-                       <description><![CDATA[if set, the final GIFBUILDER object configuration is output in order for you to debug your configuration]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="forceTypeValue" type="int">
-                       <description><![CDATA[If set, the &type parameter of the link is forced to this value regardless of target.]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="imgMapExtras" type="string">
-                       <description><![CDATA[<area...>-tags
-                       Extra <area...>tags for the image-map]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="JSWindow" type="boolean">
-                       <description><![CDATA[If set, the links of the menu-items will open by JavaScript in a pop-up window.
-
-.newWindow boolean, that lets every menuitem open in its own window opposite to opening in the same window for each click.
-
-.params is the list of parameters sent to the JavaScript open-window function, eg:
-width=200,height=300,status=0,menubar=0
-]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="main" type="GIFBUILDER">
-                       <description><![CDATA[Main configuration of the image-map! This defines the "underlay"!]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="overrideId" type="int">
-                       <description><![CDATA[integer (page-id)
-                       If set, then all links in the menu will point to this pageid. Instead the real uid of the page is sent by the parameter "&real_uid=[uid]".
-This feature is smart, if you have inserted a menu from somewhere else, perhaps a shared menu, but wants the menuitems to call the same page, which then generates a proper output based on the real_uid.
-Applies to GMENU, TMENU, IMGMENU]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="params" type="string">
-                       <description><![CDATA[<img>-params
-]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="target" type="string">
-                       <description><![CDATA[target
-                       Target of the menulinks]]></description>
-                       <default><![CDATA[self]]></default>
-               </property>
-               <property name="wrap" type="wrap">
-                       <description><![CDATA[
-]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-       </type>
-       <type id="IMGMENUITEM">
-               <property name="1" type="GifBuilderObj">
-                       <description><![CDATA[NOTE:
-The way a imagemap is made is this; All IMGMENUITEMS are included in one big Gifbuilderobj (and renumbered!!). Because of this, Gifbuilderobjects on the next level will not be able to access the data of each menuitem.
-Also the feature of using [##.w] and [##.h] with +calc is currently not supported by IMGMENUITEMs.
-Therefore all IMAGE-objects on the first level is checked; if "file" or "mask" for any IMAGE-objects are set to "GIFBUILDER", the Gifbuilder-object is parsed to see if any TEXT-objects are present and if so, the TEXT-object is "checked" - which means, that the stdWrap-function is called at a time where the $cObj->data-array is set to the actual menuitem.
-In the example below, the text of each menuitem is rendered by letting the title be rendered on a mask instead of directly on the image. Please observe that the "NO.10"-object is present in order for the image-map coordinates to be generated!!
-
-  NO.6 = IMAGE
-  NO.6.file = masked_pencolor*.gif
-  NO.6.mask = GIFBUILDER
-  NO.6.mask {
-    XY = 500, 200
-    backColor = black
-    10 = TEXT
-    10 {
-      text.field = title
-      fontFile = fileadmin/fonts/caflisch.ttf
-      fontSize = 34
-      fontColor = white
-      angle = 15
-      offset = 48,110
-    }
-    20 = EFFECT
-    20.value = blur=80
-  }
-  NO.10 = TEXT
-  NO.10 {
-    text.field = title
-    fontFile = fileadmin/fonts/caflisch.ttf
-    fontSize = 34
-    angle = 15
-    offset = 48,110
-    hideButCreateMap = 1
-  }]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="2" type="GifBuilderObj">
-                       <description><![CDATA[NOTE:
-The way a imagemap is made is this; All IMGMENUITEMS are included in one big Gifbuilderobj (and renumbered!!). Because of this, Gifbuilderobjects on the next level will not be able to access the data of each menuitem.
-Also the feature of using [##.w] and [##.h] with +calc is currently not supported by IMGMENUITEMs.
-Therefore all IMAGE-objects on the first level is checked; if "file" or "mask" for any IMAGE-objects are set to "GIFBUILDER", the Gifbuilder-object is parsed to see if any TEXT-objects are present and if so, the TEXT-object is "checked" - which means, that the stdWrap-function is called at a time where the $cObj->data-array is set to the actual menuitem.
-In the example below, the text of each menuitem is rendered by letting the title be rendered on a mask instead of directly on the image. Please observe that the "NO.10"-object is present in order for the image-map coordinates to be generated!!
-
-  NO.6 = IMAGE
-  NO.6.file = masked_pencolor*.gif
-  NO.6.mask = GIFBUILDER
-  NO.6.mask {
-    XY = 500, 200
-    backColor = black
-    10 = TEXT
-    10 {
-      text.field = title
-      fontFile = fileadmin/fonts/caflisch.ttf
-      fontSize = 34
-      fontColor = white
-      angle = 15
-      offset = 48,110
-    }
-    20 = EFFECT
-    20.value = blur=80
-  }
-  NO.10 = TEXT
-  NO.10 {
-    text.field = title
-    fontFile = fileadmin/fonts/caflisch.ttf
-    fontSize = 34
-    angle = 15
-    offset = 48,110
-    hideButCreateMap = 1
-  }]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="3" type="GifBuilderObj">
-                       <description><![CDATA[NOTE:
-The way a imagemap is made is this; All IMGMENUITEMS are included in one big Gifbuilderobj (and renumbered!!). Because of this, Gifbuilderobjects on the next level will not be able to access the data of each menuitem.
-Also the feature of using [##.w] and [##.h] with +calc is currently not supported by IMGMENUITEMs.
-Therefore all IMAGE-objects on the first level is checked; if "file" or "mask" for any IMAGE-objects are set to "GIFBUILDER", the Gifbuilder-object is parsed to see if any TEXT-objects are present and if so, the TEXT-object is "checked" - which means, that the stdWrap-function is called at a time where the $cObj->data-array is set to the actual menuitem.
-In the example below, the text of each menuitem is rendered by letting the title be rendered on a mask instead of directly on the image. Please observe that the "NO.10"-object is present in order for the image-map coordinates to be generated!!
-
-  NO.6 = IMAGE
-  NO.6.file = masked_pencolor*.gif
-  NO.6.mask = GIFBUILDER
-  NO.6.mask {
-    XY = 500, 200
-    backColor = black
-    10 = TEXT
-    10 {
-      text.field = title
-      fontFile = fileadmin/fonts/caflisch.ttf
-      fontSize = 34
-      fontColor = white
-      angle = 15
-      offset = 48,110
-    }
-    20 = EFFECT
-    20.value = blur=80
-  }
-  NO.10 = TEXT
-  NO.10 {
-    text.field = title
-    fontFile = fileadmin/fonts/caflisch.ttf
-    fontSize = 34
-    angle = 15
-    offset = 48,110
-    hideButCreateMap = 1
-  }]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="4" type="GifBuilderObj">
-                       <description><![CDATA[NOTE:
-The way a imagemap is made is this; All IMGMENUITEMS are included in one big Gifbuilderobj (and renumbered!!). Because of this, Gifbuilderobjects on the next level will not be able to access the data of each menuitem.
-Also the feature of using [##.w] and [##.h] with +calc is currently not supported by IMGMENUITEMs.
-Therefore all IMAGE-objects on the first level is checked; if "file" or "mask" for any IMAGE-objects are set to "GIFBUILDER", the Gifbuilder-object is parsed to see if any TEXT-objects are present and if so, the TEXT-object is "checked" - which means, that the stdWrap-function is called at a time where the $cObj->data-array is set to the actual menuitem.
-In the example below, the text of each menuitem is rendered by letting the title be rendered on a mask instead of directly on the image. Please observe that the "NO.10"-object is present in order for the image-map coordinates to be generated!!
-
-  NO.6 = IMAGE
-  NO.6.file = masked_pencolor*.gif
-  NO.6.mask = GIFBUILDER
-  NO.6.mask {
-    XY = 500, 200
-    backColor = black
-    10 = TEXT
-    10 {
-      text.field = title
-      fontFile = fileadmin/fonts/caflisch.ttf
-      fontSize = 34
-      fontColor = white
-      angle = 15
-      offset = 48,110
-    }
-    20 = EFFECT
-    20.value = blur=80
-  }
-  NO.10 = TEXT
-  NO.10 {
-    text.field = title
-    fontFile = fileadmin/fonts/caflisch.ttf
-    fontSize = 34
-    angle = 15
-    offset = 48,110
-    hideButCreateMap = 1
-  }]]></description>
-                       <default><![CDATA[
-]]></default>
-               </property>
-               <property name="distrib" type="string">
-                       <description><![CDATA[.distrib is (x,y,v,h +calc) of the distribution of the menuitems. This provides a way to space each item from the other. The codes "textX" and "textY" can be used for the width (X) and height (Y) dimension of each link.
-This works by adding a WORKAREA-GifBuilderObj between each of the IMGMENUITEM ("subset" of a GIFBUILDER-object) and this workarea defines where the text should be printed. As such the "x,y" defines the offset the next item will have (this should be the width of the previous in many cases!) and "v,h" defines the dimensions of the current item.
-In the future TypoScript may provide better ways to position GIFBUILDER-objects on the image-maps! ]]></description>
+Applies to TMENU on >= 2nd level in a menu.]]></description>
                        <default><![CDATA[
 ]]></default>
                </property>
@@ -3592,9 +2900,7 @@ That will be pure <a> tags wrapped around page titles.]]></description>
                <property name="SPC" type="TMENUITEM">
                        <description><![CDATA[Boolean / (config)
                        Enable/Configuration for 'Spacer' pages.
-Spacers are pages of the doktype "Spacer". These are not viewable pages but "placeholders" which can be used to divide menuitems.
-
-Note: Rollovers doesn't work with spacers, if you use GMENU!]]></description>
+Spacers are pages of the doktype "Spacer". These are not viewable pages but "placeholders" which can be used to divide menuitems.]]></description>
                        <default><![CDATA[0]]></default>
                </property>
                <property name="USERDEF1" type="TMENUITEM">
@@ -3652,7 +2958,7 @@ See example on the testsite and in media/scripts/example_itemArrayProcFunc.php]]
                </property>
                <property name="debugItemConf" type="string">
                        <description><![CDATA[Outputs (by the debug()-function) the configuration arrays for each menuitem. Useful to debug optionSplit things and such...
-Applies to GMENU, TMENU, IMGMENU]]></description>
+Applies to TMENU]]></description>
                        <default><![CDATA[
 ]]></default>
                </property>
@@ -3681,14 +2987,13 @@ width=200,height=300,status=0,menubar=0
                        <description><![CDATA[integer (page-id)
                        If set, then all links in the menu will point to this pageid. Instead the real uid of the page is sent by the parameter "&real_uid=[uid]".
 This feature is smart, if you have inserted a menu from somewhere else, perhaps a shared menu, but wants the menuitems to call the same page, which then generates a proper output based on the real_uid.
-Applies to GMENU, TMENU, IMGMENU]]></description>
+Applies to TMENU]]></description>
                        <default><![CDATA[
 ]]></default>
                </property>
                <property name="stdWrap" type="stdWrap">
                        <description><![CDATA[Wraps the whole item using stdWrap
-
-Example: see GMENU.stdWrap]]></description>
+]]></description>
                        <default><![CDATA[
 ]]></default>
                </property>
@@ -3720,7 +3025,7 @@ The result can be seen in the image below (applied on the testsite package):
 
 
 
-Applies to GMENU, TMENU on >= 2nd level in a menu.]]></description>
+Applies to TMENU on >= 2nd level in a menu.]]></description>
                        <default><![CDATA[
 ]]></default>
                </property>
@@ -4184,7 +3489,7 @@ Additional Note: ONLY active if linkWrap is NOT set and file is NOT GIFBUILDER (
                </property>
                <property name="target" type="target">
                        <description><![CDATA[target for link]]></description>
-                       <default><![CDATA[For IMGMENU menu objects provided automatically]]></default>
+                       <default><![CDATA[]]></default>
                </property>
                <property name="titleText" type="string">
                        <description><![CDATA[Value of the title attribute.
@@ -4195,7 +3500,7 @@ Additional Note: ONLY active if linkWrap is NOT set and file is NOT GIFBUILDER (
                </property>
                <property name="url" type="string">
                        <description><![CDATA[url to link]]></description>
-                       <default><![CDATA[For IMGMENU menu objects provided automatically]]></default>
+                       <default><![CDATA[]]></default>
                </property>
        </type>
        <type id="IMGTEXT" extends="cObjArray">
index 4487648..23774e7 100644 (file)
@@ -426,10 +426,10 @@ define([
   TsParser.setTreeNodeValue = function(path, value) {
     var treeNode = TsParser.getTreeNode(path);
     // if we are inside a GIFBUILDER Object
-    if (treeNode.parent !== null && (treeNode.parent.value === "GIFBUILDER" || treeNode.parent.getValue() === "GMENU_itemState") && value === "TEXT") {
+    if (treeNode.parent !== null && treeNode.parent.value === "GIFBUILDER" && value === "TEXT") {
       value = 'GB_TEXT';
     }
-    if (treeNode.parent !== null && (treeNode.parent.value === "GIFBUILDER" || treeNode.parent.getValue() === "GMENU_itemState") && value === "IMAGE") {
+    if (treeNode.parent !== null && treeNode.parent.value === "GIFBUILDER" && value === "IMAGE") {
       value = 'GB_IMAGE';
     }
 
index f46a6c9..c7a5093 100644 (file)
         'globalNesting': kw('globalNesting'),
         'globalString': kw('globalString'),
         'globalVar': kw('globalVar'),
-        'GMENU': kw('GMENU'),
         'GP': kw('GP'),
         'gray': kw('gray'),
         'group': kw('group'),
         'imgMap': kw('imgMap'),
         'imgMapExtras': kw('imgMapExtras'),
         'imgMax': kw('imgMax'),
-        'IMGMENU': kw('IMGMENU'),
-        'IMGMENUITEM': kw('IMGMENUITEM'),
         'imgNameNotRandom': kw('imgNameNotRandom'),
         'imgNamePrefix': kw('imgNamePrefix'),
         'imgObjNum': kw('imgObjNum'),