Added feature #15950: Use t3editor in file_edit to edit files in fileadmin
[Packages/TYPO3.CMS.git] / typo3 / sysext / t3editor / classes / class.tx_t3editor.php
index b550544..7c5cda2 100644 (file)
@@ -40,9 +40,12 @@ class tx_t3editor implements t3lib_Singleton {
        const MODE_JAVASCRIPT = 'javascript';
        const MODE_CSS = 'css';
        const MODE_XML = 'xml';
+       const MODE_HTML = 'html';
 
        protected $mode = '';
 
+       protected $ajaxSaveType = '';
+
        /**
         * counts the editors on the current page
         *
@@ -68,6 +71,47 @@ class tx_t3editor implements t3lib_Singleton {
                return $this;
        }
 
+       /**
+        *
+        * @param       $ajaxSaveType
+        * @return      tx_t3editor
+        */
+       public function setAjaxSaveType($ajaxSaveType) {
+               $this->ajaxSaveType = $ajaxSaveType;
+               return $this;
+       }
+
+       public function setModeByFile($file) {
+               $fileInfo = t3lib_div::split_fileref($file);
+               switch ($fileInfo['fileext']) {
+                       case 'html':
+                       case 'htm':
+                       case 'tmpl':
+                               $mode = self::MODE_HTML;
+                               break;
+                       case 'js':
+                               $mode = self::MODE_JAVASCRIPT;
+                               break;
+                       case 'xml':
+                       case 'svg':
+                               $mode = self::MODE_XML;
+                               break;
+                       case 'css':
+                               $mode = self::MODE_CSS;
+                               break;
+                       case 'ts':
+                               $mode = self::MODE_TYPOSCRIPT;
+                               break;
+                       default:
+                               $mode = FALSE;
+               }
+               $this->setMode($mode);
+       }
+
+       public function getMode() {
+               return $this->mode;
+       }
+
        /**
         * @return      boolean         true if the t3editor is enabled
         */
@@ -120,8 +164,8 @@ class tx_t3editor implements t3lib_Singleton {
                        $path_codemirror = 'contrib/codemirror/js/';
 
                                // include needed javascript-frameworks
-                       /** @var $pageRenderer t3lib_PageRenderer */
                        $pageRenderer = $doc->getPageRenderer();
+                       /** @var $pageRenderer t3lib_PageRenderer */
                        $pageRenderer->loadPrototype();
                        $pageRenderer->loadScriptaculous();
 
@@ -136,13 +180,6 @@ class tx_t3editor implements t3lib_Singleton {
                        $doc->loadJavascriptLib($path_codemirror . 'codemirror.js');
                        $doc->loadJavascriptLib($path_t3e . 'res/jslib/t3editor.js');
 
-                       if ($this->mode == self::MODE_TYPOSCRIPT) {
-                               $doc->loadJavascriptLib($path_t3e . 'res/jslib/ts_codecompletion/tsref.js');
-                               $doc->loadJavascriptLib($path_t3e . 'res/jslib/ts_codecompletion/completionresult.js');
-                               $doc->loadJavascriptLib($path_t3e . 'res/jslib/ts_codecompletion/tsparser.js');
-                               $doc->loadJavascriptLib($path_t3e . 'res/jslib/ts_codecompletion/tscodecompletion.js');
-                       }
-
                        $content .= t3lib_div::wrapJS(
                                'T3editor = T3editor || {};' .
                                'T3editor.lang = ' . json_encode($this->getJavaScriptLabels()) .';' . LF.
@@ -150,16 +187,39 @@ class tx_t3editor implements t3lib_Singleton {
                                'T3editor.PATH_codemirror = "' . $GLOBALS['BACK_PATH'] . $path_codemirror . '"; ' . LF.
                                'T3editor.URL_typo3 = "' . htmlspecialchars(t3lib_div::getIndpEnv('TYPO3_SITE_URL') . TYPO3_mainDir) . '"; ' .LF.
                                'T3editor.template = '. $this->getPreparedTemplate() .';' .LF.
-                               'T3editor.parserfile = ' . $this->getParserfileByMode($this->mode) . ';' .LF.
-                               'T3editor.stylesheet = ' . $this->getStylesheetByMode($this->mode) . ';'
+                               ($this->ajaxSaveType ? 'T3editor.ajaxSavetype = "' . $this->ajaxSaveType . '";' . LF : '') .
+                               ($this->mode ? 'T3editor.parserfile = ' . $this->getParserfileByMode($this->mode) . ';' . LF : '') .
+                               ($this->mode ? 'T3editor.stylesheet = ' . $this->getStylesheetByMode($this->mode) . ';' : '')
                        );
+            $content .= $this->getModeSpecificJavascriptCode();
                }
 
                return $content;
        }
 
+    public function getModeSpecificJavascriptCode() {
+        if (empty($this->mode)) {
+            return '';
+        }
+
+        $path_t3e = t3lib_extmgm::extRelPath('t3editor');
+
+        if ($this->mode == self::MODE_TYPOSCRIPT) {
+                       $content .= '<script type="text/javascript" src="' . $path_t3e . 'res/jslib/ts_codecompletion/tsref.js' . '"></script>';
+                       $content .= '<script type="text/javascript" src="' . $path_t3e . 'res/jslib/ts_codecompletion/completionresult.js' . '"></script>';
+                       $content .= '<script type="text/javascript" src="' . $path_t3e . 'res/jslib/ts_codecompletion/tsparser.js' . '"></script>';
+                       $content .= '<script type="text/javascript" src="' . $path_t3e . 'res/jslib/ts_codecompletion/tscodecompletion.js' . '"></script>';
+               }
+
+               $content .= t3lib_div::wrapJS(
+                       'T3editor.parserfile = ' . $this->getParserfileByMode($this->mode) . ';' . LF .
+                       'T3editor.stylesheet = ' . $this->getStylesheetByMode($this->mode) . ';'
+               );
+        return $content;
+    }
+
        /**
-        * get the template code, prepared for javascript (no line breaks, quoted in slinge quotes)
+        * get the template code, prepared for javascript (no line breaks, quoted in single quotes)
         *
         * @return      string  the template code, prepared to use in javascript
         */
@@ -199,6 +259,10 @@ class tx_t3editor implements t3lib_Singleton {
                        case tx_t3editor::MODE_XML:
                                $parserfile = '"parsexml.js"';
                        break;
+
+                       case tx_t3editor::MODE_HTML:
+                               $parserfile = '["tokenizejavascript.js", "parsejavascript.js", "parsecss.js", "parsexml.js", "parsehtmlmixed.js"]';
+                       break;
                }
                return $parserfile;
        }
@@ -226,8 +290,13 @@ class tx_t3editor implements t3lib_Singleton {
                        case tx_t3editor::MODE_XML:
                                $stylesheet = '"res/css/xmlcolors.css"';
                        break;
+
+                       case tx_t3editor::MODE_HTML:
+                               $stylesheet = '"res/css/xmlcolors.css"';
+                               // FIXME add css and js files
+                       break;
                }
-               return '[T3editor.PATH_t3e + "res/css/t3editor_inner.css", T3editor.PATH_t3e + ' . $stylesheet . ']';
+               return '[T3editor.PATH_t3e + ' . $stylesheet . ', T3editor.PATH_t3e + "res/css/t3editor_inner.css"]';
        }
 
        /**
@@ -363,7 +432,8 @@ class tx_t3editor implements t3lib_Singleton {
                        if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/t3editor/classes/class.tx_t3editor.php']['ajaxSaveCode'])) {
                                $_params = array(
                                        'pObj' => &$this,
-                                       'type' => $codeType
+                                       'type' => $codeType,
+                                       'ajaxObj' => &$ajaxObj,
                                );
                                foreach($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/t3editor/classes/class.tx_t3editor.php']['ajaxSaveCode'] as $key => $_funcRef)   {
                                        $savingsuccess = t3lib_div::callUserFunction($_funcRef,$_params,$this) || $savingsuccess;
@@ -394,6 +464,7 @@ class tx_t3editor implements t3lib_Singleton {
                $ajaxObj->setContent($result);
                $ajaxObj->setContentFormat('jsonbody');
        }
+
 }