getCfg('debug') ? '-uncompressed' : ''; JHtml::_('script', $this->_basePath . 'js/codemirror' . $uncompressed . '.js', false, false, false, false); JHtml::_('stylesheet', $this->_basePath . 'css/codemirror.css'); return ''; } /** * Copy editor content to form field. * * @param string $id The id of the editor field. * * @return string Javascript */ public function onSave($id) { return "document.getElementById('$id').value = Joomla.editors.instances['$id'].getCode();\n"; } /** * Get the editor content. * * @param string $id The id of the editor field. * * @return string Javascript */ public function onGetContent($id) { return "Joomla.editors.instances['$id'].getCode();\n"; } /** * Set the editor content. * * @param string $id The id of the editor field. * @param string $content The content to set. * * @return string Javascript */ public function onSetContent($id, $content) { return "Joomla.editors.instances['$id'].setCode($content);\n"; } /** * Adds the editor specific insert method. * * @return boolean */ public function onGetInsertMethod() { static $done = false; // Do this only once. if (!$done) { $done = true; $doc = JFactory::getDocument(); $js = "\tfunction jInsertEditorText(text, editor) { Joomla.editors.instances[editor].replaceSelection(text);\n }"; $doc->addScriptDeclaration($js); } return true; } /** * Display the editor area. * * @param string $name The control name. * @param string $content The contents of the text area. * @param string $width The width of the text area (px or %). * @param string $height The height of the text area (px or %). * @param integer $col The number of columns for the textarea. * @param integer $row The number of rows for the textarea. * @param boolean $buttons True and the editor buttons will be displayed. * @param string $id An optional ID for the textarea (note: since 1.6). If not supplied the name is used. * @param string $asset The object asset * @param object $author The author. * @param array $params Associative array of editor parameters. * * @return string HTML */ public function onDisplay($name, $content, $width, $height, $col, $row, $buttons = true, $id = null, $asset = null, $author = null, $params = array()) { if (empty($id)) { $id = $name; } // Only add "px" to width and height if they are not given as a percentage if (is_numeric($width)) { $width .= 'px'; } if (is_numeric($height)) { $height .= 'px'; } // Must pass the field id to the buttons in this editor. $buttons = $this->_displayButtons($id, $buttons, $asset, $author); $compressed = JFactory::getApplication()->getCfg('debug') ? '-uncompressed' : ''; // Default syntax $parserFile = 'parsexml.js'; $styleSheet = array('xmlcolors.css'); // Look if we need special syntax coloring. $syntax = JFactory::getApplication()->getUserState('editor.source.syntax'); if ($syntax) { switch ($syntax) { case 'css': $parserFile = 'parsecss.js'; $styleSheet = array('csscolors.css'); break; case 'js': $parserFile = array('tokenizejavascript.js', 'parsejavascript.js'); $styleSheet = array('jscolors.css'); break; case 'html': $parserFile = array('parsexml.js', 'parsecss.js', 'tokenizejavascript.js', 'parsejavascript.js', 'parsehtmlmixed.js'); $styleSheet = array('xmlcolors.css', 'jscolors.css', 'csscolors.css'); break; case 'php': $parserFile = array('parsexml.js', 'parsecss.js', 'tokenizejavascript.js', 'parsejavascript.js', 'tokenizephp.js', 'parsephp.js', 'parsephphtmlmixed.js'); $styleSheet = array('xmlcolors.css', 'jscolors.css', 'csscolors.css', 'phpcolors.css'); break; default: break; } } foreach ($styleSheet as &$style) { $style = JUri::root(true) . '/' . $this->_basePath . 'css/' . $style; } $options = new stdClass; $options->basefiles = array('basefiles' . $compressed . '.js'); $options->path = JUri::root(true) . '/' . $this->_basePath . 'js/'; $options->parserfile = $parserFile; $options->stylesheet = $styleSheet; $options->height = $height; $options->width = $width; $options->continuousScanning = 500; if ($this->params->get('linenumbers', 0)) { $options->lineNumbers = true; $options->textWrapping = false; } if ($this->params->get('tabmode', '') == 'shift') { $options->tabMode = 'shift'; } $html = array(); $html[] = ""; $html[] = $buttons; $html[] = ''; return implode("\n", $html); } /** * Displays the editor buttons. * * @param string $name Name of the button * @param mixed $buttons [array with button objects | boolean true to display buttons] * @param string $asset The object asset * @param object $author The author. * * @return string HTML */ protected function _displayButtons($name, $buttons, $asset, $author) { // Load modal popup behavior JHtml::_('behavior.modal', 'a.modal-button'); $args['name'] = $name; $args['event'] = 'onGetInsertMethod'; $html = array(); $results[] = $this->update($args); foreach ($results as $result) { if (is_string($result) && trim($result)) { $html[] = $result; } } if (is_array($buttons) || (is_bool($buttons) && $buttons)) { $results = $this->_subject->getButtons($name, $buttons, $asset, $author); // This will allow plugins to attach buttons or change the behavior on the fly using AJAX $html[] = '
'; $html[] = '
'; foreach ($results as $button) { // Results should be an object if ($button->get('name')) { $modal = ($button->get('modal')) ? 'class="modal-button btn"' : null; $href = ($button->get('link')) ? ' class="btn" href="' . JUri::base() . $button->get('link') . '"' : null; $onclick = ($button->get('onclick')) ? 'onclick="' . $button->get('onclick') . '"' : null; $title = ($button->get('title')) ? $button->get('title') : $button->get('text'); $html[] = ''; $html[] = ' '; $html[] = $button->get('text') . ''; } } $html[] = '
'; $html[] = '
'; } return implode("\n", $html); } }