Fixed bug #11003: htmlArea RTE: empty mutuallyExclusiveClasses array may cause js...
authorStanislas Rolland <typo3@sjbr.ca>
Tue, 28 Apr 2009 20:11:30 +0000 (20:11 +0000)
committerStanislas Rolland <typo3@sjbr.ca>
Tue, 28 Apr 2009 20:11:30 +0000 (20:11 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@5374 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
typo3/sysext/rtehtmlarea/ChangeLog
typo3/sysext/rtehtmlarea/class.tx_rtehtmlarea_base.php
typo3/sysext/rtehtmlarea/htmlarea/htmlarea.js

index a2b29ff..3361ac5 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2009-04-28  Stanislas Rolland  <typo3@sjbr.ca>
+
+       * Fixed bug #11003: htmlArea RTE: empty mutuallyExclusiveClasses array may cause js error
+
 2009-04-28  Steffen Kamper  <info@sk-typo3.de>
 
        * Fixed bug #9991: Localize versioning module
index 5a62e66..bd5a350 100644 (file)
@@ -1,3 +1,7 @@
+2009-04-28  Stanislas Rolland  <typo3@sjbr.ca>
+
+       * Fixed bug #11003: htmlArea RTE: empty mutuallyExclusiveClasses array may cause js error
+
 2009-04-09  Stanislas Rolland  <typo3@sjbr.ca>
 
        * Fixed issue #10847: htmlArea RTE: undo/redo is erratic in IE8
index 49d9f32..6a59bb9 100644 (file)
@@ -1089,7 +1089,7 @@ class tx_rtehtmlarea_base extends t3lib_rteapi {
                                $classSet = t3lib_div::trimExplode(',', $conf, 1);
                                $classList = implode(',', $classSet);
                                foreach ($classSet as $className) {
-                                       $classesArray['XOR'][$className] = '/^(' . implode('|', t3lib_div::trimExplode(',', t3lib_div::rmFromList($className, $classList), 1)) . ')$/i';
+                                       $classesArray['XOR'][$className] = '/^(' . implode('|', t3lib_div::trimExplode(',', t3lib_div::rmFromList($className, $classList), 1)) . ')$/';
                                }
                        }
                }
@@ -1101,13 +1101,16 @@ class tx_rtehtmlarea_base extends t3lib_rteapi {
 
        /**
         * Translate Page TS Config array in JS nested array definition
+        * Replace 0 values with false
+        * Unquote regular expression values
+        * Replace empty arrays with empty objects
         *
         * @param       array           $conf: Page TSConfig configuration array
         *
         * @return      string          nested JS array definition
         */
        function buildNestedJSArray($conf) {
-               return str_replace(array(':"0"', ':"\/^(', ')$\/i"'), array(':false', ':/^(', ')$/i'), json_encode(t3lib_div::removeDotsFromTS($conf)));
+               return str_replace(array(':"0"', ':"\/^(', ')$\/i"', ':"\/^(', ')$\/"', '[]'), array(':false', ':/^(', ')$/i', ':/^(', ')$/', '{}'), json_encode(t3lib_div::removeDotsFromTS($conf)));
        }
 
        /**
index 88a038d..e2563b5 100644 (file)
@@ -2119,10 +2119,10 @@ HTMLArea._removeClass = function(el, className, substring) {
  */
 HTMLArea._addClass = function(el, addClassName) {
        HTMLArea._removeClass(el, addClassName);
-       if (el.className && HTMLArea.classesXOR) {
+       if (el.className && HTMLArea.classesXOR && HTMLArea.classesXOR.hasOwnProperty(addClassName) && typeof(HTMLArea.classesXOR[addClassName].test) == "function") {
                var classNames = el.className.trim().split(" ");
                for (var i = classNames.length; --i >= 0;) {
-                       if (HTMLArea.classesXOR[addClassName] && HTMLArea.classesXOR[addClassName].test(classNames[i])) {
+                       if (HTMLArea.classesXOR[addClassName].test(classNames[i])) {
                                HTMLArea._removeClass(el, classNames[i]);
                        }
                }