Fixed bug #9613: htmlArea RTE uses JScodeLibArray to insert CSS
authorStanislas Rolland <typo3@sjbr.ca>
Thu, 23 Oct 2008 16:13:12 +0000 (16:13 +0000)
committerStanislas Rolland <typo3@sjbr.ca>
Thu, 23 Oct 2008 16:13:12 +0000 (16:13 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@4350 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
t3lib/class.t3lib_tceforms.php
typo3/sysext/rtehtmlarea/ChangeLog
typo3/sysext/rtehtmlarea/class.tx_rtehtmlarea_base.php
typo3/sysext/rtehtmlarea/pi2/class.tx_rtehtmlarea_pi2.php
typo3/template.php

index d5f8503..aea849b 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-10-23  Stanislas Rolland  <typo3@sjbr.ca>
+
+       * Fixed bug #9613: htmlArea RTE uses JScodeLibArray to insert CSS
+
 2008-10-22  Jeff Segars  <jeff@webempoweredchurch.org>
 
        * Fixed bug #8636: Hardcoded labels in Configuration module (thanks to Christopher Stelmaszyk)
index a36def2..359729b 100755 (executable)
@@ -6015,6 +6015,19 @@ class t3lib_TCEforms     {
                        );
                }
        }
+
+       /**
+        * Insert additional style sheet link
+        *
+        * @param       string          $key: some key identifying the style sheet
+        * @param       string          $href: uri to the style sheet file
+        * @param       string          $title: value for the title attribute of the link element
+        * @return      string          $relation: value for the rel attribute of the link element
+        * @return      void
+        */
+       public function addStyleSheet($key, $href, $title='', $relation='stylesheet') {
+               $GLOBALS['SOBE']->doc->addStyleSheet($key, $href, $title, $relation);
+        }
 }
 
 
@@ -6107,6 +6120,21 @@ class t3lib_TCEforms_FE extends t3lib_TCEforms {
                        $GLOBALS['TSFE']->additionalHeaderData[$lib] = '<script type="text/javascript" src="' . $this->backPath . $lib . '"></script>';
                }
        }
+       
+       /**
+        * Insert additional style sheet link
+        *
+        * @param       string          $key: some key identifying the style sheet
+        * @param       string          $href: uri to the style sheet file
+        * @param       string          $title: value for the title attribute of the link element
+        * @return      string          $relation: value for the rel attribute of the link element
+        * @return      void
+        */
+       public function addStyleSheet($key, $href, $title='', $relation='stylesheet') {
+               if (!isset($GLOBALS['TSFE']->additionalHeaderData[$key])) {
+                       $GLOBALS['TSFE']->additionalHeaderData[$key] = '<link rel="' . $relation . '" type="text/css" href="' . $href . '"' . ($title ? (' title="' . $title . '"') : '') . ' />';
+               }
+        }
 }
 
 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_tceforms.php']) {
index 069d9c3..ea208f1 100644 (file)
@@ -1,3 +1,7 @@
+2008-10-23  Stanislas Rolland  <typo3@sjbr.ca>
+
+       * Fixed bug #9613: htmlArea RTE uses JScodeLibArray to insert CSS
+
 2008-10-22  Stanislas Rolland  <typo3@sjbr.ca>
 
        * Fixed bug #5019: htmlARea RTE hangs while editing link in Firefox
index 6944262..1afd3d1 100644 (file)
@@ -339,10 +339,10 @@ class tx_rtehtmlarea_base extends t3lib_rteapi {
                         * LOAD CSS AND JAVASCRIPT
                         * =======================================
                         */
-                               // Preloading the pageStyle
-                       $GLOBALS['SOBE']->doc->JScodeLibArray['rtehtmlarea-contentCSS'] = $this->getPageStyle();
-                               // Including RTE skin stylesheets
-                       $GLOBALS['SOBE']->doc->JScodeLibArray['rtehtmlarea-skin'] = $this->getSkin();
+                               // Preloading the pageStyle and including RTE skin stylesheets
+                       $this->addPageStyle();
+                       $this->addSkin();
+                       
                                // Loading JavaScript files and code
                        $this->TCEform->additionalCode_pre['rtehtmlarea-loadJSfiles'] = $this->loadJSfiles($this->TCEform->RTEcounter);
                        $this->TCEform->additionalJS_pre['rtehtmlarea-loadJScode'] = $this->loadJScode($this->TCEform->RTEcounter);
@@ -406,22 +406,27 @@ class tx_rtehtmlarea_base extends t3lib_rteapi {
        }
 
        /**
-        * Get links to content style sheet(s)
+        * Add link to content style sheet to document header
         *
-        * @return      string  link tag referenceing the content stylesheet
+        * @return      void
         */
-       protected function getPageStyle() {
+       protected function addPageStyle() {
                        // Get stylesheet file name from Page TSConfig if any
                $filename = trim($this->thisConfig['contentCSS']) ? trim($this->thisConfig['contentCSS']) : 'EXT:' . $this->ID . '/res/contentcss/default.css';
-               return '<link rel="alternate stylesheet" type="text/css" href="' . $this->getFullFileName($filename) . '" title="HTMLArea RTE Content CSS" />';
+               $this->addStyleSheet(
+                       'rtehtmlarea-page-style',
+                       $this->getFullFileName($filename),
+                       'htmlArea RTE Content CSS',
+                       'alternate stylesheet'
+                       );
        }
 
        /**
-        * Get links to skin style sheet(s)
+        * Add links to skin style sheet(s) to document header
         *
-        * @return      string  link tags referenceing the skin stylesheets
+        * @return      void
         */
-       protected function getSkin() {
+       protected function addSkin() {
                        // Get skin file name from Page TSConfig if any
                $skinFilename = trim($this->thisConfig['skin']) ? trim($this->thisConfig['skin']) : 'EXT:' . $this->ID . '/htmlarea/skins/default/htmlarea.css';
                if($this->client['BROWSER'] == 'gecko' && $this->client['VERSION'] == '1.3' && substr($skinFilename,0,4) == 'EXT:')  {
@@ -444,21 +449,44 @@ class tx_rtehtmlarea_base extends t3lib_rteapi {
                $this->editorCSS = $skinFilename;
                        // Editing area style sheet
                $this->editedContentCSS = $skinDir . '/htmlarea-edited-content.css';
-               $skin = '<link rel="alternate stylesheet" type="text/css" href="' . $this->editedContentCSS . '" title="HTMLArea RTE Editing Area CSS" />';
+               $this->addStyleSheet(
+                       'rtehtmlarea-editing-area-skin',
+                       $this->editedContentCSS,
+                       'htmlArea RTE Editing Area Skin',
+                       'alternate stylesheet'
+                       );
                        // Main skin
-               $skin .= '
-<link rel="stylesheet" type="text/css" href="' . $this->editorCSS . '" title="HTMLArea RTE Skin" />';
+               $this->addStyleSheet(
+                       'rtehtmlarea-skin',
+                       $this->editorCSS,
+                       'htmlArea RTE Skin'
+                       );
                        // Additional icons from registered plugins
                foreach ($this->pluginEnabledCumulativeArray[$this->TCEform->RTEcounter] as $pluginId) {
                        if (is_object($this->registeredPlugins[$pluginId])) {
                                $pathToSkin = $this->registeredPlugins[$pluginId]->getPathToSkin();
                                if ($pathToSkin) {
-                                       $skin .= '
-<link rel="stylesheet" type="text/css" href="' . $this->httpTypo3Path . t3lib_extMgm::siteRelPath($this->registeredPlugins[$pluginId]->getExtensionKey()) . $pathToSkin . '" />';
+                                       $this->addStyleSheet(
+                                               'rtehtmlarea-plugin-' . $pluginId . '-skin',
+                                               $this->httpTypo3Path . t3lib_extMgm::siteRelPath($this->registeredPlugins[$pluginId]->getExtensionKey()) . $pathToSkin,
+                                               'htmlArea RTE ' . $pluginId . ' Skin'
+                                               );
                                }
                        }
                }
-               return $skin;
+       }
+
+       /**
+        * Add style sheet file to document header
+        *
+        * @param       string          $key: some key identifying the style sheet
+        * @param       string          $href: uri to the style sheet file
+        * @param       string          $title: value for the title attribute of the link element
+        * @return      string          $relation: value for the rel attribute of the link element
+        * @return      void
+        */
+       protected function addStyleSheet($key, $href, $title='', $relation='stylesheet') {
+               $this->TCEform->addStyleSheet($key, $href, $title, $relation);
        }
 
        /**
index 8964015..ac7d64e 100644 (file)
@@ -212,10 +212,9 @@ class tx_rtehtmlarea_pi2 extends tx_rtehtmlarea_base {
                 * LOAD JS, CSS and more
                 * =======================================
                 */
-                       // Preloading the pageStyle
-               $GLOBALS['TSFE']->additionalHeaderData['rtehtmlarea-contentCSS'] = $this->getPageStyle();
-                       // Loading RTE skin style sheets
-               $GLOBALS['TSFE']->additionalHeaderData['rtehtmlarea-skin'] = $this->getSkin();
+                       // Preloading the pageStyle and including RTE skin stylesheets
+               $this->addPageStyle();
+               $this->addSkin();
                        // Loading JavaScript files and code
                $this->TCEform->additionalJS_initial = $this->loadJSfiles($this->TCEform->RTEcounter);
                $this->TCEform->additionalJS_pre['rtehtmlarea-loadJScode'] = $this->loadJScode($this->TCEform->RTEcounter);
@@ -255,6 +254,21 @@ class tx_rtehtmlarea_pi2 extends tx_rtehtmlarea_base {
        }
        
        /**
+        * Add style sheet file to document header
+        *
+        * @param       string          $key: some key identifying the style sheet
+        * @param       string          $href: uri to the style sheet file
+        * @param       string          $title: value for the title attribute of the link element
+        * @return      string          $relation: value for the rel attribute of the link element
+        * @return      void
+        */
+       protected function addStyleSheet($key, $href, $title='', $relation='stylesheet') {
+               if (!isset($GLOBALS['TSFE']->additionalHeaderData[$key])) {
+                       $GLOBALS['TSFE']->additionalHeaderData[$key] = '<link rel="' . $relation . '" type="text/css" href="' . $href . '"' . ($title ? (' title="' . $title . '"') : '') . ' />';
+               }
+       }
+       
+       /**
         * Return the JS-Code for copy the HTML-Code from the editor in the hidden input field.
         * This is for submit function from the form.
         *
index 5a2934b..0150166 100755 (executable)
@@ -187,6 +187,7 @@ class template {
        var $form_rowsToStylewidth = 9.58;      // Multiplication factor for formWidth() input size (default is 48* this value).
        var $form_largeComp = 1.33;             // Compensation for large documents (used in class.t3lib_tceforms.php)
        var $endJS=1;                                   // If set, then a JavaScript section will be outputted in the bottom of page which will try and update the top.busy session expiry object.
+       protected $additionalStyleSheets=array();       // Links to additional style sheets
 
                // TYPO3 Colorscheme.
                // If you want to change this, please do so through a skin using the global var $TBE_STYLES
@@ -937,7 +938,8 @@ $str.=$this->docBodyTagBegin().
                                        /*###POSTCSSMARKER###*/
                                /*]]>*/
                        </style>
-                       '.($this->styleSheetFile_post?'<link rel="stylesheet" type="text/css" href="'.$this->backPath.$this->styleSheetFile_post.'" />':'')
+                       '.($this->styleSheetFile_post?'<link rel="stylesheet" type="text/css" href="'.$this->backPath.$this->styleSheetFile_post.'" />':'').'
+                       '.implode("\n", $this->additionalStyleSheets)
                )
                ;
                $this->inDocStyles='';
@@ -948,6 +950,21 @@ $str.=$this->docBodyTagBegin().
        }
 
        /**
+        * Insert additional style sheet link
+        *
+        * @param       string          $key: some key identifying the style sheet
+        * @param       string          $href: uri to the style sheet file
+        * @param       string          $title: value for the title attribute of the link element
+        * @return      string          $relation: value for the rel attribute of the link element
+        * @return      void
+        */
+       function addStyleSheet($key, $href, $title='', $relation='stylesheet') {
+               if (!isset($this->additionalStyleSheets[$key])) {
+                       $this->additionalStyleSheets[$key] = '<link rel="' . $relation . '" type="text/css" href="' . $href . '"' . ($title ? (' title="' . $title . '"') : '') . ' />';
+               }
+        }
+
+       /**
         * Insert post rendering document style into already rendered content
         * This is needed for extobjbase
         *