[BUGFIX] Fix RTE in Inline Elements 54/50954/6
authorHelmut Hummel <info@helhum.io>
Tue, 13 Dec 2016 23:57:05 +0000 (00:57 +0100)
committerNicole Cordes <typo3@cordes.co>
Wed, 14 Dec 2016 22:16:53 +0000 (23:16 +0100)
HTMLArea needs a global JavaScript variable to work correctly.
Before the change done for #77600, this variable was always initialized
by including a JS file when any backend editing form was rendered.

In this mentioned cleanup, this initialization code was moved to
the place where the RTE is actually rendered. But because this can
also happen in an Ajax request, where the needed JS calls are returned
as array and evaluated line by line with `eval`, the code to initialize
the global variable did not work, because it was prefixed with `var`

This lead to a JS error at a later point where the global var is accessed.

To fix this, we force to set/ initialize the global variable, by prefixing
it with the "super global" object `window`. Now the global `HTMLArea` variable
is also initialized when this code is executed in a `eval` context,
when loading RTE fields of IRRE records via Ajax.

Resolves: #78972
Related: #77600
Releases: master
Change-Id: I7bf1386d3f6f395223bb82d870de0c7868733f67
Reviewed-on: https://review.typo3.org/50954
Reviewed-by: David Greiner <hallo@davidgreiner.de>
Tested-by: David Greiner <hallo@davidgreiner.de>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Nicole Cordes <typo3@cordes.co>
Tested-by: Nicole Cordes <typo3@cordes.co>
typo3/sysext/rtehtmlarea/Classes/Form/Element/RichTextElement.php

index 0895138..cf7fe82 100644 (file)
@@ -641,7 +641,7 @@ class RichTextElement extends AbstractFormElement
         $backendUser = $this->getBackendUserAuthentication();
 
         $jsArray = [];
-        $jsArray[] = 'var HTMLArea = HTMLArea || {};';
+        $jsArray[] = 'window.HTMLArea = window.HTMLArea || {};';
         $jsArray[] = 'if (typeof configureEditorInstance === "undefined") {';
         $jsArray[] = ' configureEditorInstance = new Object();';
         $jsArray[] = '}';