diff --git a/typo3/sysext/backend/Classes/Template/DocumentTemplate.php b/typo3/sysext/backend/Classes/Template/DocumentTemplate.php index 8d0870bc9798bb0d3be0b06bc23eef92c62f28a6..9320f69d61cf582a3c70d1f8fa38a9a02f38ee01 100644 --- a/typo3/sysext/backend/Classes/Template/DocumentTemplate.php +++ b/typo3/sysext/backend/Classes/Template/DocumentTemplate.php @@ -615,7 +615,6 @@ function jumpToUrl(URL) { * @return string HTML content */ public function makeShortcutIcon($gvList, $setList, $modName, $motherModName = '') { - $backPath = $this->backPath; $storeUrl = $this->makeShortcutUrl($gvList, $setList); $pathInfo = parse_url(GeneralUtility::getIndpEnv('REQUEST_URI')); // Add the module identifier automatically if typo3/mod.php is used: @@ -629,9 +628,9 @@ function jumpToUrl(URL) { } else { $mMN = ''; } - $onClick = 'top.ShortcutManager.createShortcut(' . GeneralUtility::quoteJSvalue($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:labels.makeBookmark')) . ', ' . '\'' . $backPath . '\', ' . '\'' . rawurlencode($modName) . '\', ' . '\'' . rawurlencode(($pathInfo['path'] . '?' . $storeUrl)) . $mMN . '\'' . ');return false;'; - $sIcon = '<a href="#" onclick="' . htmlspecialchars($onClick) . '" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:labels.makeBookmark', TRUE) . '">' . IconUtility::getSpriteIcon('actions-system-shortcut-new') . '</a>'; - return $sIcon; + $confirmationText = GeneralUtility::quoteJSvalue($GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:labels.makeBookmark')); + $onClick = 'top.TYPO3.ShortcutMenu.createShortcut(\'' . rawurlencode($modName) . '\', ' . '\'' . rawurlencode(($pathInfo['path'] . '?' . $storeUrl)) . $mMN . '\', ' . $confirmationText . ');return false;'; + return '<a href="#" onclick="' . htmlspecialchars($onClick) . '" title="' . $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:labels.makeBookmark', TRUE) . '">' . IconUtility::getSpriteIcon('actions-system-shortcut-new') . '</a>'; } /** diff --git a/typo3/sysext/backend/Classes/Toolbar/ShortcutToolbarItem.php b/typo3/sysext/backend/Classes/Toolbar/ShortcutToolbarItem.php index 93311d6e6f812b067f3e4efdf8e9e8138f338dd7..13efcdbc6d4ef00d490dec77d568cade8fff4394 100644 --- a/typo3/sysext/backend/Classes/Toolbar/ShortcutToolbarItem.php +++ b/typo3/sysext/backend/Classes/Toolbar/ShortcutToolbarItem.php @@ -112,7 +112,7 @@ class ShortcutToolbarItem implements ToolbarItemInterface { */ public function render() { $title = $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.xlf:toolbarItems.bookmarks', TRUE); - $this->addJavascriptToBackend(); + $this->backendReference->getPageRenderer()->loadRequireJsModule('TYPO3/CMS/Backend/Toolbar/ShortcutMenu'); $shortcutMenu = array(); $shortcutMenu[] = '<a href="#" class="dropdown-toggle" data-toggle="dropdown">' . IconUtility::getSpriteIcon('apps-toolbar-menu-shortcut', array('title' => $title)) . '</a>'; $shortcutMenu[] = '<div class="dropdown-menu" role="menu">'; @@ -138,12 +138,12 @@ class ShortcutToolbarItem implements ToolbarItemInterface { $noGroupShortcuts = $this->getShortcutsByGroup(0); foreach ($noGroupShortcuts as $shortcut) { $shortcutMenu[] = ' - <tr id="shortcut-' . $shortcut['raw']['uid'] . '" class="shortcut"> + <tr class="shortcut" data-shortcutid="' . $shortcut['raw']['uid'] . '"> <td class="shortcut-icon">' . $shortcut['icon'] . '</td> <td class="shortcut-label"> - <a id="shortcut-label-' . $shortcut['raw']['uid'] . '" href="#" onclick="' . $shortcut['action'] . '; return false;">' . htmlspecialchars($shortcut['label']) . '</a> + <a href="#" onclick="' . $shortcut['action'] . '; return false;">' . htmlspecialchars($shortcut['label']) . '</a> </td> - <td class="shortcut-edit">' . $editIcon . ' id="shortcut-edit-' . $shortcut['raw']['uid'] . '" /></td> + <td class="shortcut-edit">' . $editIcon . ' /></td> <td class="shortcut-delete">' . $deleteIcon . '</td> </tr>'; } @@ -167,12 +167,12 @@ class ShortcutToolbarItem implements ToolbarItemInterface { $firstRow = ' first-row'; } $shortcutGroup .= ' - <tr id="shortcut-' . $shortcut['raw']['uid'] . '" class="shortcut' . $firstRow . '"> + <tr class="shortcut' . $firstRow . '" data-shortcutid="' . $shortcut['raw']['uid'] . '" data-shortcutgroup="' . $groupId . '"> <td class="shortcut-icon">' . $shortcut['icon'] . '</td> <td class="shortcut-label"> - <a id="shortcut-label-' . $shortcut['raw']['uid'] . '" href="#" onclick="' . $shortcut['action'] . '; return false;">' . htmlspecialchars($shortcut['label']) . '</a> + <a href="#" onclick="' . $shortcut['action'] . '; return false;">' . htmlspecialchars($shortcut['label']) . '</a> </td> - <td class="shortcut-edit">' . $editIcon . ' id="shortcut-edit-' . $shortcut['raw']['uid'] . '" /></td> + <td class="shortcut-edit">' . $editIcon . ' /></td> <td class="shortcut-delete">' . $deleteIcon . '</td> </tr>'; } @@ -200,20 +200,11 @@ class ShortcutToolbarItem implements ToolbarItemInterface { * @param \TYPO3\CMS\Core\Http\AjaxRequestHandler $ajaxObj Object of type AjaxRequestHandler * @return void */ - public function renderAjax($params = array(), \TYPO3\CMS\Core\Http\AjaxRequestHandler &$ajaxObj = NULL) { + public function renderAjaxMenu($params = array(), \TYPO3\CMS\Core\Http\AjaxRequestHandler &$ajaxObj = NULL) { $menuContent = $this->renderMenu(); $ajaxObj->addContent('shortcutMenu', $menuContent); } - /** - * Adds the necessary JavaScript to the backend - * - * @return void - */ - protected function addJavascriptToBackend() { - $this->backendReference->addJavascriptFile('sysext/backend/Resources/Public/JavaScript/shortcutmenu.js'); - } - /** * Returns additional attributes for the list item in the toolbar * @@ -446,13 +437,17 @@ class ShortcutToolbarItem implements ToolbarItemInterface { } /** - * gets the available shortcut groups + * gets the available shortcut groups, renders a form so it can be saved lateron * * @param array $params Array of parameters from the AJAX interface, currently unused * @param \TYPO3\CMS\Core\Http\AjaxRequestHandler $ajaxObj Object of type AjaxRequestHandler * @return void */ - public function getAjaxShortcutGroups($params = array(), \TYPO3\CMS\Core\Http\AjaxRequestHandler &$ajaxObj = NULL) { + public function getAjaxShortcutEditForm($params = array(), \TYPO3\CMS\Core\Http\AjaxRequestHandler &$ajaxObj = NULL) { + $selectedShortcutId = (int)GeneralUtility::_GP('shortcutId'); + $selectedShortcutGroupId = (int)GeneralUtility::_GP('shortcutGroup'); + $selectedShortcut = $this->getShortcutById($selectedShortcutId); + $shortcutGroups = $this->shortcutGroups; if (!$GLOBALS['BE_USER']->isAdmin()) { foreach ($shortcutGroups as $groupId => $groupName) { @@ -461,8 +456,18 @@ class ShortcutToolbarItem implements ToolbarItemInterface { } } } - $ajaxObj->addContent('shortcutGroups', $shortcutGroups); - $ajaxObj->setContentFormat('json'); + + // build the form + $content = '<form class="shortcut-form">' . + '<input type="text" name="shortcut-title" value="' . htmlspecialchars($selectedShortcut['label']) . '">'; + + $content .= '<select name="shortcut-group">'; + foreach ($shortcutGroups as $shortcutGroupId => $shortcutGroupTitle) { + $content .= '<option value="' . (int)$shortcutGroupId . '"' . ($selectedShortcutGroupId == $shortcutGroupId ? ' selected="selected"' : '') . '>' . htmlspecialchars($shortcutGroupTitle) . '</option>'; + } + $content .= '</select><input type="button" class="shortcut-form-save" value="Save"><input type="button" class="shortcut-form-cancel" value="Cancel"></form>'; + + $ajaxObj->addContent('data', $content); } /** @@ -501,6 +506,7 @@ class ShortcutToolbarItem implements ToolbarItemInterface { $module = GeneralUtility::_POST('module'); $motherModule = GeneralUtility::_POST('motherModName'); // Determine shortcut type + $url = rawurldecode($url); $queryParts = parse_url($url); $queryParameters = GeneralUtility::explodeUrl2Array($queryParts['query'], 1); // Proceed only if no scheme is defined, as URL is expected to be relative @@ -567,8 +573,8 @@ class ShortcutToolbarItem implements ToolbarItemInterface { */ public function setAjaxShortcut($params = array(), \TYPO3\CMS\Core\Http\AjaxRequestHandler &$ajaxObj = NULL) { $shortcutId = (int)GeneralUtility::_POST('shortcutId'); - $shortcutName = strip_tags(GeneralUtility::_POST('value')); - $shortcutGroupId = (int)GeneralUtility::_POST('shortcut-group'); + $shortcutName = strip_tags(GeneralUtility::_POST('shortcutTitle')); + $shortcutGroupId = (int)GeneralUtility::_POST('shortcutGroup'); if ($shortcutGroupId > 0 || $GLOBALS['BE_USER']->isAdmin()) { // Users can delete only their own shortcuts (except admins) $addUserWhere = !$GLOBALS['BE_USER']->isAdmin() ? ' AND userid=' . (int)$GLOBALS['BE_USER']->user['uid'] : ''; diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/Toolbar/ShortcutMenu.js b/typo3/sysext/backend/Resources/Public/JavaScript/Toolbar/ShortcutMenu.js new file mode 100644 index 0000000000000000000000000000000000000000..e9fcdc10cdf6fdf1d4926d320e93ebb22eff7f07 --- /dev/null +++ b/typo3/sysext/backend/Resources/Public/JavaScript/Toolbar/ShortcutMenu.js @@ -0,0 +1,171 @@ +/** + * 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! + */ +/** + * shortcut menu logic to add new shortcut, remove a shortcut + * and edit a shortcut + */ +define('TYPO3/CMS/Backend/Toolbar/ShortcutMenu', ['jquery'], function($) { + + var ShortcutMenu = { + $spinnerElement: $('<span>', { + class: 't3-icon fa fa-circle-o-notch fa-spin' + }), + options: { + containerSelector: '#shortcut-menu', + toolbarIconSelector: '.dropdown-toggle span.t3-icon', + toolbarMenuSelector: '.dropdown-menu', + shortcutItemSelector: '.dropdown-menu .shortcut', + shortcutLabelSelector: '.shortcut-label', + shortcutDeleteSelector: '.shortcut-delete', + shortcutEditSelector: '.shortcut-edit', + shortcutFormTitleSelector: 'input[name="shortcut-title"]', + shortcutFormGroupSelector: 'select[name="shortcut-group"]', + shortcutFormSaveSelector: '.shortcut-form-save', + shortcutFormCancelSelector: '.shortcut-form-cancel' + } + }; + + /** + * build the in-place-editor for a shortcut + */ + ShortcutMenu.editShortcut = function($shortcutRecord) { + $shortcutRecord.find(ShortcutMenu.options.shortcutEditSelector).hide(); + // load the form + $.ajax({ + url: TYPO3.settings.ajaxUrls['ShortcutMenu::getShortcutEditForm'], + data: { + shortcutId: $shortcutRecord.data('shortcutid'), + shortcutGroup: $shortcutRecord.data('shortcutgroup') + }, + cache: false + }).done(function(data) { + $shortcutRecord.find(ShortcutMenu.options.shortcutLabelSelector).html(data); + }); + }; + + /** + * save the data from the in-place-editor for a shortcut + */ + ShortcutMenu.saveShortcutForm = function($shortcutRecord) { + $.ajax({ + url: TYPO3.settings.ajaxUrls['ShortcutMenu::saveShortcut'], + data: { + shortcutId: $shortcutRecord.data('shortcutid'), + shortcutTitle: $shortcutRecord.find(ShortcutMenu.options.shortcutFormTitleSelector).val(), + shortcutGroup: $shortcutRecord.find(ShortcutMenu.options.shortcutFormGroupSelector).val() + }, + type: 'post', + cache: false + }).done(function(data) { + // @todo: we can evaluate here, but what to do? a message? + ShortcutMenu.refreshMenu(); + }); + }; + + /** + * removes an existing short by sending an AJAX call + */ + ShortcutMenu.deleteShortcut = function($shortcutRecord) { + // @todo: translations + if (confirm('Do you really want to remove this bookmark?')) { + $.ajax({ + url: TYPO3.settings.ajaxUrls['ShortcutMenu::delete'], + data: { + shortcutId: $shortcutRecord.data('shortcutid') + }, + type: 'post', + cache: false + }).done(function() { + // a reload is used in order to restore the original behaviour + // e.g. remove groups that are now empty because the last one in the group + // was removed + ShortcutMenu.refreshMenu(); + }); + } + }; + + /** + * makes a call to the backend class to create a new shortcut, + * when finished it reloads the menu + */ + ShortcutMenu.createShortcut = function(moduleName, url, confirmationText) { + var shouldCreateShortcut = true; + if (typeof confirmationText !== 'undefined') { + shouldCreateShortcut = window.confirm(confirmationText); + } + + if (shouldCreateShortcut) { + var $toolbarItemIcon = $(ShortcutMenu.options.toolbarIconSelector, ShortcutMenu.options.containerSelector); + var $spinner = ShortcutMenu.$spinnerElement.clone(); + var $existingItem = $toolbarItemIcon.replaceWith($spinner); + + $.ajax({ + url: TYPO3.settings.ajaxUrls['ShortcutMenu::create'], + type: 'post', + data: { + module: moduleName, + url: url + }, + cache: false + }).done(function() { + ShortcutMenu.refreshMenu(); + $spinner.replaceWith($existingItem); + }); + } + }; + + /** + * reloads the menu after an update + */ + ShortcutMenu.refreshMenu = function() { + $.ajax({ + url: TYPO3.settings.ajaxUrls['ShortcutMenu::render'], + type: 'get', + cache: false + }).done(function(data) { + $(ShortcutMenu.options.toolbarMenuSelector, ShortcutMenu.options.containerSelector).html(data); + }); + }; + + /** + * Registers listeners + */ + ShortcutMenu.initializeEvents = function() { + $(ShortcutMenu.options.containerSelector).on('click', ShortcutMenu.options.shortcutDeleteSelector, function(evt) { + evt.preventDefault(); + evt.stopImmediatePropagation(); + ShortcutMenu.deleteShortcut($(this).closest(ShortcutMenu.options.shortcutItemSelector)); + }).on('click', ShortcutMenu.options.shortcutEditSelector, function(evt) { + evt.preventDefault(); + evt.stopImmediatePropagation(); + ShortcutMenu.editShortcut($(this).closest(ShortcutMenu.options.shortcutItemSelector)); + }).on('click', ShortcutMenu.options.shortcutFormSaveSelector, function(evt) { + ShortcutMenu.saveShortcutForm($(this).closest(ShortcutMenu.options.shortcutItemSelector)); + }).on('click', ShortcutMenu.options.shortcutFormCancelSelector, function() { + // re-render the menu on canceling the update of a shortcut + ShortcutMenu.refreshMenu(); + }); + }; + + /** + * initialize and return the ShortcutMenu object + */ + return function() { + $(document).ready(function() { + ShortcutMenu.initializeEvents(); + }); + + TYPO3.ShortcutMenu = ShortcutMenu; + return ShortcutMenu; + }(); +}); \ No newline at end of file diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/backend.js b/typo3/sysext/backend/Resources/Public/JavaScript/backend.js index 057c9e9ef16f0474a194e524b1f2d71af4cf02f3..96a7d320727597c8125b5ae94588a62fb1ed15b4 100644 --- a/typo3/sysext/backend/Resources/Public/JavaScript/backend.js +++ b/typo3/sysext/backend/Resources/Public/JavaScript/backend.js @@ -45,13 +45,15 @@ var ShortcutManager = { /** * central entry point to create a shortcut, delegates the call to correct endpoint + * kept for backwards compatibility, use top.TYPO3.ShortcutMenu.createShortcut directly + * in the future */ createShortcut: function(confirmQuestion, backPath, moduleName, url) { - if(confirm(confirmQuestion)) { - if (typeof TYPO3BackendShortcutMenu !== undefined) { - // backend.php - TYPO3BackendShortcutMenu.createShortcut('', moduleName, url); - } + if (console) { + console.debug('ShortcutManager.createShortcut is deprecated since TYPO3 CMS 7, use TYPO3.ShortcutMenu directly.'); + } + if (TYPO3.ShortcutMenu !== undefined) { + TYPO3.ShortcutMenu.createShortcut(moduleName, url, confirmQuestion); } } } diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/shortcutmenu.js b/typo3/sysext/backend/Resources/Public/JavaScript/shortcutmenu.js deleted file mode 100644 index ea089ce564ae783856da77cfb968c8a54b0b4896..0000000000000000000000000000000000000000 --- a/typo3/sysext/backend/Resources/Public/JavaScript/shortcutmenu.js +++ /dev/null @@ -1,205 +0,0 @@ -/** - * 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! - */ - - -/** - * class to handle the shortcut menu - */ -var ShortcutMenu = Class.create({ - - /** - * registers for resize event listener and executes on DOM ready - */ - initialize: function() { - Ext.onReady(function() { - this.toolbarItemIcon = $$('#shortcut-menu .dropdown-toggle span.t3-icon')[0]; - this.initControls(); - }, this); - }, - - /** - * initializes the controls to follow, edit, and delete shortcuts - * - */ - initControls: function() { - - $$('.shortcut-label a').each(function(element) { - var shortcutId = element.up('tr.shortcut').identify().slice(9); - - // map InPlaceEditor to edit icons - var edit = new Ajax.InPlaceEditor('shortcut-label-' + shortcutId, TYPO3.settings.ajaxUrls['ShortcutMenu::saveShortcut'], { - externalControl : 'shortcut-edit-' + shortcutId, - externalControlOnly : true, - highlightcolor : 'transparent', - highlightendcolor : 'transparent', - onFormCustomization : this.addGroupSelect, - onComplete : this.reRenderMenu.bind(this), - callback : function(form, nameInputFieldValue) { - var params = form.serialize(true); - params.shortcutId = shortcutId; - return params; - }, - textBetweenControls : ' ', - cancelControl : 'button', - clickToEditText : '', - htmlResponse : true - }); - - // follow/execute shortcuts - element.observe('click', function(event) { - this.toggleMenu(); - }.bind(this)); - - }.bind(this)); - - // activate delete icon - $$('.shortcut-delete img').each(function(element) { - element.observe('click', function(event) { - if (confirm('Do you really want to remove this bookmark?')) { - var deleteControl = event.element(); - var shortcutId = deleteControl.up('tr.shortcut').identify().slice(9); - - var del = new Ajax.Request(TYPO3.settings.ajaxUrls['ShortcutMenu::delete'], { - parameters : '&shortcutId=' + shortcutId, - onComplete : this.reRenderMenu.bind(this) - }); - } - }.bind(this)); - }.bind(this)); - - }, - - /** - * toggles the visibility of the menu and places it under the toolbar icon - */ - toggleMenu: function(event) {}, - - /** - * adds a select field for the groups - */ - addGroupSelect: function(inPlaceEditor, inPlaceEditorForm) { - var selectField = $(document.createElement('select')); - - // determine the shortcut id - var shortcutId = inPlaceEditorForm.identify().slice(9, -14); - - // now determine the shortcut's group id - var shortcut = $('shortcut-' + shortcutId).up('tr.shortcut'); - var firstInGroup = null; - var shortcutGroupId = 0; - - if (shortcut.hasClassName('first-row')) { - firstInGroup = shortcut; - } else { - firstInGroup = shortcut.previous('.first-row'); - } - - if (undefined !== firstInGroup) { - shortcutGroupId = firstInGroup.previous().identify().slice(15); - } - - selectField.name = 'shortcut-group'; - selectField.id = 'shortcut-group-select-' + shortcutId; - selectField.size = 1; - selectField.setStyle({marginBottom: '5px'}); - - // create options - var option; - // first create an option for "no group" - option = document.createElement('option'); - option.value = 0; - option.selected = (shortcutGroupId === 0 ? true : false); - option.appendChild(document.createTextNode('No Group')); - selectField.appendChild(option); - - // get the groups - var getGroups = new Ajax.Request(TYPO3.settings.ajaxUrls['ShortcutMenu::getGroups'], { - method: 'get', - asynchronous: false, // needs to be synchronous to build the options before adding the selectfield - requestHeaders: {Accept: 'application/json'}, - onSuccess: function(transport, json) { - var shortcutGroups = transport.responseText.evalJSON(true); - - // explicitly make the object a Hash - shortcutGroups = $H(json.shortcutGroups); - shortcutGroups.each(function(group) { - option = document.createElement('option'); - option.value = group.key - option.selected = (shortcutGroupId === group.key ? true : false); - option.appendChild(document.createTextNode(group.value)); - selectField.appendChild(option); - }); - - } - }); - - inPlaceEditor._form.appendChild(document.createElement('br')); - inPlaceEditor._form.appendChild(selectField); - inPlaceEditor._form.appendChild(document.createElement('br')); - }, - - /** - * gets called when the update was succesfull, fetches the complete menu to - * honor changes in group assignments - */ - reRenderMenu: function(transport, element, backPath) { - var container = $$('#shortcut-menu .dropdown-menu')[0]; - if (!backPath) { - var backPath = ''; - } - - container.setStyle({ - height: container.getHeight() + 'px' - }); - container.update('LOADING'); - - var render = new Ajax.Updater( - container, - backPath + TYPO3.settings.ajaxUrls['ShortcutMenu::render'], - { - asynchronous : false - } - ); - - container.setStyle({ - height: 'auto' - }); - - this.initControls(); - }, - - /** - * makes a call to the backend class to create a new shortcut, - * when finished it reloads the menu - */ - createShortcut: function(backPath, moduleName, url) { - var toolbarItemIcon = $$('#shortcut-menu .dropdown-toggle span.t3-icon')[0]; - - var parent = Element.up(toolbarItemIcon); - var spinner = new Element('span').addClassName('spinner'); - var oldIcon = toolbarItemIcon.replace(spinner); - - // synchrous call to wait for it to complete and call the render - // method with backpath _afterwards_ - var call = new Ajax.Request(backPath + TYPO3.settings.ajaxUrls['ShortcutMenu::create'], { - parameters : 'module=' + moduleName + '&url=' + url, - asynchronous : false - }); - - this.reRenderMenu(null, null, backPath); - spinner.replace(oldIcon); - } - -}); - -var TYPO3BackendShortcutMenu = new ShortcutMenu(); diff --git a/typo3/sysext/core/Configuration/DefaultConfiguration.php b/typo3/sysext/core/Configuration/DefaultConfiguration.php index 57298f70a70d8b88c5583a18927f1f2e4edaa893..ce3b05835b90ba50c8982d4ba12229c914346cad 100644 --- a/typo3/sysext/core/Configuration/DefaultConfiguration.php +++ b/typo3/sysext/core/Configuration/DefaultConfiguration.php @@ -634,8 +634,8 @@ return array( 'callbackMethod' => 'TYPO3\\CMS\\Backend\\Form\\Element\\SuggestElement->processAjaxRequest', 'csrfTokenCheck' => TRUE ), - 'ShortcutMenu::getGroups' => array( - 'callbackMethod' => 'TYPO3\\CMS\\Backend\\Toolbar\\ShortcutToolbarItem->getAjaxShortcutGroups', + 'ShortcutMenu::getShortcutEditForm' => array( + 'callbackMethod' => 'TYPO3\\CMS\\Backend\\Toolbar\\ShortcutToolbarItem->getAjaxShortcutEditForm', 'csrfTokenCheck' => TRUE ), 'ShortcutMenu::saveShortcut' => array( @@ -643,7 +643,7 @@ return array( 'csrfTokenCheck' => TRUE ), 'ShortcutMenu::render' => array( - 'callbackMethod' => 'TYPO3\\CMS\\Backend\\Toolbar\\ShortcutToolbarItem->renderAjax', + 'callbackMethod' => 'TYPO3\\CMS\\Backend\\Toolbar\\ShortcutToolbarItem->renderAjaxMenu', 'csrfTokenCheck' => TRUE ), 'ShortcutMenu::delete' => array(