Added feature #13580: htmlArea RTE: Extjize the RTE
[Packages/TYPO3.CMS.git] / typo3 / sysext / rtehtmlarea / pi2 / class.tx_rtehtmlarea_pi2.php
index 8964015..3e324c3 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 2005-2008 Stanislas Rolland <typo3(arobas)sjbr.ca>
+*  (c) 2005-2010 Stanislas Rolland <typo3(arobas)sjbr.ca>
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
@@ -33,8 +33,6 @@
  */
 
 require_once(t3lib_extMgm::extPath('rtehtmlarea').'class.tx_rtehtmlarea_base.php');
-require_once(PATH_t3lib.'class.t3lib_parsehtml_proc.php');
-require_once(PATH_t3lib.'class.t3lib_befunc.php');
 
 class tx_rtehtmlarea_pi2 extends tx_rtehtmlarea_base {
 
@@ -75,16 +73,16 @@ class tx_rtehtmlarea_pi2 extends tx_rtehtmlarea_base {
         */
        function drawRTE($parentObject,$table,$field,$row,$PA,$specConf,$thisConfig,$RTEtypeVal,$RTErelPath,$thePidValue) {
                global $TSFE, $TYPO3_CONF_VARS, $TYPO3_DB;
-               
-               $this->TCEform =& $parentObject;
+
+               $this->TCEform = $parentObject;
                $this->client = $this->clientInfo();
                $this->typoVersion = t3lib_div::int_from_ver(TYPO3_version);
-               
+
                /* =======================================
                 * INIT THE EDITOR-SETTINGS
                 * =======================================
                 */
-                
+
                        // first get the http-path to typo3:
                $this->httpTypo3Path = substr( substr( t3lib_div::getIndpEnv('TYPO3_SITE_URL'), strlen( t3lib_div::getIndpEnv('TYPO3_REQUEST_HOST') ) ), 0, -1 );
                if (strlen($this->httpTypo3Path) == 1) {
@@ -98,39 +96,39 @@ class tx_rtehtmlarea_pi2 extends tx_rtehtmlarea_base {
                $this->siteURL = t3lib_div::getIndpEnv('TYPO3_SITE_URL');
                        // Get the host URL
                $this->hostURL = t3lib_div::getIndpEnv('TYPO3_REQUEST_HOST');
-               
+
                        // Element ID + pid
                $this->elementId = $PA['itemFormElName'];
                $this->elementParts[0] = $table;
                $this->elementParts[1] = $row['uid'];
                $this->tscPID = $thePidValue;
                $this->thePid = $thePidValue;
-               
+
                        // Record "type" field value:
                $this->typeVal = $RTEtypeVal; // TCA "type" value for record
-               
+
                        // RTE configuration
                $pageTSConfig = $TSFE->getPagesTSconfig();
                if (is_array($pageTSConfig) && is_array($pageTSConfig['RTE.'])) {
                        $this->RTEsetup = $pageTSConfig['RTE.'];
                }
-               
+
                if (is_array($thisConfig) && !empty($thisConfig)) {
                        $this->thisConfig = $thisConfig;
                } else if (is_array($this->RTEsetup['default.']) && is_array($this->RTEsetup['default.']['FE.'])) {
                        $this->thisConfig = $this->RTEsetup['default.']['FE.'];
                }
-               
+
                        // Special configuration (line) and default extras:
                $this->specConf = $specConf;
-               
+
                if ($this->thisConfig['forceHTTPS']) {
                        $this->httpTypo3Path = preg_replace('/^(http|https)/', 'https', $this->httpTypo3Path);
                        $this->extHttpPath = preg_replace('/^(http|https)/', 'https', $this->extHttpPath);
                        $this->siteURL = preg_replace('/^(http|https)/', 'https', $this->siteURL);
                        $this->hostURL = preg_replace('/^(http|https)/', 'https', $this->hostURL);
                }
-               
+
                /* =======================================
                 * LANGUAGES & CHARACTER SETS
                 * =======================================
@@ -142,8 +140,6 @@ class tx_rtehtmlarea_pi2 extends tx_rtehtmlarea_base {
                if ($this->language == 'default' || !$this->language)   {
                        $this->language = 'en';
                }
-               
-               $this->contentISOLanguage = $TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['defaultDictionary'];
                $this->contentLanguageUid = ($row['sys_language_uid'] > 0) ? $row['sys_language_uid'] : 0;
                if (t3lib_extMgm::isLoaded('static_info_tables')) {
                        if ($this->contentLanguageUid) {
@@ -161,7 +157,7 @@ class tx_rtehtmlarea_pi2 extends tx_rtehtmlarea_base {
                                        $this->contentTypo3Language = strtolower(trim($languageRow['lg_typo3']));
                                }
                        } else {
-                               $this->contentISOLanguage = trim($TYPO3_CONF_VARS['EXTCONF'][$this->ID]['defaultDictionary']) ? trim($TYPO3_CONF_VARS['EXTCONF'][$this->ID]['defaultDictionary']) : 'en';
+                               $this->contentISOLanguage = $GLOBALS['TSFE']->sys_language_isocode ? $GLOBALS['TSFE']->sys_language_isocode : 'en';
                                $selectFields = 'lg_iso_2, lg_typo3';
                                $tableAB = 'static_languages';
                                $whereClause = 'lg_iso_2 = ' . $TYPO3_DB->fullQuoteStr(strtoupper($this->contentISOLanguage), $tableAB);
@@ -171,17 +167,16 @@ class tx_rtehtmlarea_pi2 extends tx_rtehtmlarea_base {
                                }
                        }
                }
-               
-               $this->contentISOLanguage = $this->contentISOLanguage?$this->contentISOLanguage:$this->language;
-               $this->contentTypo3Language = $this->contentTypo3Language?$this->contentTypo3Language:$TSFE->lang;
+               $this->contentISOLanguage = $this->contentISOLanguage ? $this->contentISOLanguage : ($GLOBALS['TSFE']->sys_language_isocode ? $GLOBALS['TSFE']->sys_language_isocode : 'en');
+               $this->contentTypo3Language = $this->contentTypo3Language ? $this->contentTypo3Language : $GLOBALS['TSFE']->lang;
                if ($this->contentTypo3Language == 'default') {
                        $this->contentTypo3Language = 'en';
                }
-               
+
                        // Character set
                $this->charset = $TSFE->renderCharset;
                $this->OutputCharset  = $TSFE->metaCharset ? $TSFE->metaCharset : $TSFE->renderCharset;
-               
+
                        // Set the charset of the content
                $this->contentCharset = $TSFE->csConvObj->charSetArray[$this->contentTypo3Language];
                $this->contentCharset = $this->contentCharset ? $this->contentCharset : 'iso-8859-1';
@@ -197,28 +192,53 @@ class tx_rtehtmlarea_pi2 extends tx_rtehtmlarea_base {
                 * SET STYLES
                 * =======================================
                 */
-                
-               $RTEWidth = 460+($this->TCEform->docLarge ? 150 : 0);
-               $RTEHeight = 380;
+
+               $width = 460+($this->TCEform->docLarge ? 150 : 0);
+               if (isset($this->thisConfig['RTEWidthOverride'])) {
+                       if (strstr($this->thisConfig['RTEWidthOverride'], '%')) {
+                               if ($this->client['BROWSER'] != 'msie') {
+                                       $width = (intval($this->thisConfig['RTEWidthOverride']) > 0) ? $this->thisConfig['RTEWidthOverride'] : '100%';
+                               }
+                       } else {
+                               $width = (intval($this->thisConfig['RTEWidthOverride']) > 0) ? intval($this->thisConfig['RTEWidthOverride']) : $width;
+                       }
+               }
+               $RTEWidth = strstr($width, '%') ? $width : $width . 'px';
+               $editorWrapWidth = strstr($width, '%') ? $width :  ($width+2) . 'px';
+               $height = 380;
                $RTEHeightOverride = intval($this->thisConfig['RTEHeightOverride']);
-               $RTEHeight = ($RTEHeightOverride > 0) ? $RTEHeightOverride : $RTEHeight;
-               $editorWrapWidth = $RTEWidth . 'px';
-               $editorWrapHeight = $RTEHeight . 'px';
-               $this->RTEWrapStyle = $this->RTEWrapStyle ? $this->RTEWrapStyle : ($this->RTEdivStyle ? $this->RTEdivStyle : ('height:' . ($RTEHeight+2) . 'px; width:'. ($RTEWidth+2) . 'px;'));               
-               $this->RTEdivStyle = $this->RTEdivStyle ? $this->RTEdivStyle : 'position:relative; left:0px; top:0px; height:' . $RTEHeight . 'px; width:'.$RTEWidth.'px; border: 1px solid black;';
-               $this->toolbar_level_size = $RTEWidth;
+               $height = ($RTEHeightOverride > 0) ? $RTEHeightOverride : $height;
+               $RTEHeight = $height . 'px';
+               $editorWrapHeight = ($height+2) . 'px';
+               $this->RTEWrapStyle = $this->RTEWrapStyle ? $this->RTEWrapStyle : ($this->RTEdivStyle ? $this->RTEdivStyle : ('height:' . $editorWrapHeight . '; width:'. $editorWrapWidth . ';'));
+               $this->RTEdivStyle = $this->RTEdivStyle ? $this->RTEdivStyle : 'position:relative; left:0px; top:0px; height:' . $RTEHeight . '; width:'.$RTEWidth.'; border: 1px solid black;';
 
                /* =======================================
                 * 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();
+               $pageRenderer = $GLOBALS['TSFE']->getPageRenderer();
+               $pageRenderer->setBackPath(TYPO3_mainDir);
+                       // Preloading the pageStyle and including RTE skin stylesheets
+               $this->addPageStyle();
+               $this->addSkin();
+               $pageRenderer->addCssFile($this->hostURL . '/t3lib/js/extjs/ux/resize.css');
                        // Loading JavaScript files and code
+               $pageRenderer->loadExtJs();
+               $pageRenderer->enableExtJSQuickTips();
+               if (!$GLOBALS['TYPO3_CONF_VARS']['EXTCONF'][$this->ID]['enableCompressedScripts']) {
+                       $pageRenderer->enableExtJsDebug();
+               }
+               $pageRenderer->addJsFile($this->hostURL . '/t3lib/js/extjs/ux/ext.resizable.js');
+               if ($this->TCEform->RTEcounter == 1) {
+                       $this->TCEform->additionalJS_pre['rtehtmlarea-loadJScode'] = $this->loadJScode($this->TCEform->RTEcounter);
+               }
                $this->TCEform->additionalJS_initial = $this->loadJSfiles($this->TCEform->RTEcounter);
-               $this->TCEform->additionalJS_pre['rtehtmlarea-loadJScode'] = $this->loadJScode($this->TCEform->RTEcounter);
+               $resizableSettings = array(
+                       'textareaResize' => true,
+                       'textareaMaxHeight' => '600'
+               );
+               $pageRenderer->addInlineSettingArray('', $resizableSettings);
 
                /* =======================================
                 * DRAW THE EDITOR
@@ -226,24 +246,24 @@ class tx_rtehtmlarea_pi2 extends tx_rtehtmlarea_base {
                 */
                        // Transform value:
                $value = $this->transformContent('rte',$PA['itemFormElValue'],$table,$field,$row,$specConf,$thisConfig,$RTErelPath,$thePidValue);
-               
+
                        // Further content transformation by registered plugins
                foreach ($this->registeredPlugins as $pluginId => $plugin) {
                        if ($this->isPluginEnabled($pluginId) && method_exists($plugin, "transformContent")) {
                                $value = $plugin->transformContent($value);
                        }
                }
-               
+
                        // Register RTE windows:
                $this->TCEform->RTEwindows[] = $PA['itemFormElName'];
                $textAreaId = htmlspecialchars($PA['itemFormElName']);
-               
+
                        // Register RTE in JS:
                $this->TCEform->additionalJS_post[] = $this->registerRTEinJS($this->TCEform->RTEcounter, '', '', '',$textAreaId);
-               
+
                        // Set the save option for the RTE:
                $this->TCEform->additionalJS_submit[] = $this->setSaveRTE($this->TCEform->RTEcounter, $this->TCEform->formName, $textAreaId);
-               
+
                        // draw the textarea
                $item = $this->triggerField($PA['itemFormElName']).'
                        <div id="pleasewait' . $textAreaId . '" class="pleasewait" style="display: block;" >' . $TSFE->csConvObj->conv($TSFE->getLLL('Please wait',$this->LOCAL_LANG), $this->charset, $TSFE->renderCharset) . '</div>
@@ -253,42 +273,48 @@ class tx_rtehtmlarea_pi2 extends tx_rtehtmlarea_base {
                        ';
                return $item;
        }
-       
+
+       /**
+        * 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.
         *
         * @param       integer         $RTEcounter: The index number of the RTE editing area.
         * @param       string          $form: the name of the form
-        * @param       string          $textarea: the name of the textarea
+        * @param       string          $textareaId: the id of the textarea
         *
         * @return      string          the JS-Code
         */
-       function setSaveRTE($RTEcounter, $form, $textarea) {
+       function setSaveRTE($RTEcounter, $form, $textareaId) {
                return '
-               rteFound = false;
-               for (editornumber = 1; editornumber < RTEarea.length; editornumber++) {
-                       if (RTEarea[editornumber].textAreaId == \'' . $textarea . '\') {
-                               if (!RTEarea[editornumber].deleted) {
-                       fields = document.getElementsByName(\'' . $textarea . '\');
+               if (RTEarea[\'' . $textareaId . '\'] && !RTEarea[\'' . $textareaId . '\'].deleted) {
+                       fields = document.getElementsByName(\'' . $textareaId . '\');
                        field = fields.item(0);
-                       if(field && field.tagName.toLowerCase() == \'textarea\') field.value = RTEarea[editornumber][\'editor\'].getHTML();
-               }
-                               rteFound = true;
-                               break;
+                       if (field && field.nodeName.toLowerCase() == \'textarea\') {
+                               field.value = RTEarea[\'' . $textareaId . '\'][\'editor\'].getHTML();
                        }
-               }
-               if (!rteFound) {
+               } else {
                        OK = 0;
-               }
-               ';
+               }';
        }
-       
-
 }
 
 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/pi2/class.tx_rtehtmlarea_pi2.php'])       {
        include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/pi2/class.tx_rtehtmlarea_pi2.php']);
 }
 
-?>
+?>
\ No newline at end of file