From 32b09d17f8e9d4e1e4f4bab81a7ae3fc97d56b5d Mon Sep 17 00:00:00 2001 From: Andreas Fernandez <a.fernandez@scripting-base.de> Date: Wed, 23 Sep 2015 17:18:12 +0200 Subject: [PATCH] [BUGFIX] Fix RequireJS resolution in FormEngine The FormInlineAjaxController expects a different array structure for RequireJS modules as FormResultCompiler does, which is incompatible to each other. Adopt the resolution of FormResultCompiler to fix JavaScript errors and load modules properly. Resolves: #69647 Releases: master Change-Id: I2f2730e7c482dbc4722791b995a88c3c1138385a Reviewed-on: http://review.typo3.org/43505 Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl> Tested-by: Wouter Wolters <typo3@wouterwolters.nl> Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de> Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de> Reviewed-by: Frans Saris <franssaris@gmail.com> Tested-by: Frans Saris <franssaris@gmail.com> Reviewed-by: Nicole Cordes <typo3@cordes.co> Tested-by: Nicole Cordes <typo3@cordes.co> --- .../Controller/FormInlineAjaxController.php | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/typo3/sysext/backend/Classes/Controller/FormInlineAjaxController.php b/typo3/sysext/backend/Classes/Controller/FormInlineAjaxController.php index 23560778b1bb..0167cfc1d362 100644 --- a/typo3/sysext/backend/Classes/Controller/FormInlineAjaxController.php +++ b/typo3/sysext/backend/Classes/Controller/FormInlineAjaxController.php @@ -439,19 +439,32 @@ class FormInlineAjaxController { $jsonResult['scriptCall'][] = $singleAdditionalJavaScriptPost; } $jsonResult['scriptCall'][] = $childResult['extJSCODE']; - foreach ($childResult['requireJsModules'] as $moduleName => $callbacks) { - if (!is_array($callbacks)) { - $callbacks = array($callbacks); - } - foreach ($callbacks as $callback) { - $inlineCodeKey = $moduleName; - $javaScriptCode = 'require(["' . $moduleName . '"]'; - if ($callback !== NULL) { - $inlineCodeKey .= sha1($callback); - $javaScriptCode .= ', ' . $callback; + if (!empty($childResult['requireJsModules'])) { + foreach ($childResult['requireJsModules'] as $module) { + $moduleName = NULL; + $callback = NULL; + if (is_string($module)) { + // if $module is a string, no callback + $moduleName = $module; + $callback = NULL; + } elseif (is_array($module)) { + // if $module is an array, callback is possible + foreach ($module as $key => $value) { + $moduleName = $key; + $callback = $value; + break; + } + } + if ($moduleName !== NULL) { + $inlineCodeKey = $moduleName; + $javaScriptCode = 'require(["' . $moduleName . '"]'; + if ($callback !== NULL) { + $inlineCodeKey .= sha1($callback); + $javaScriptCode .= ', ' . $callback; + } + $javaScriptCode .= ');'; + $jsonResult['scriptCall'][] = '/*RequireJS-Module-' . $inlineCodeKey . '*/' . LF . $javaScriptCode; } - $javaScriptCode .= ');'; - $jsonResult['scriptCall'][] = '/*RequireJS-Module-' . $inlineCodeKey . '*/' . LF . $javaScriptCode; } } return $jsonResult; -- GitLab