static function EditorTextArea($id, $name, $content, $buttons, $context, $arributes = array(), $asset = null, $author = null) { $html = JCKHtmlwriter::textarea($id, $name, $content, $arributes); //load CKEditor script $javascript = new JCKJavascript(); $id = JCKOutput::fixId($id); $javascript->addScriptDeclaration('window.addDomReadyEvent.add(function() { CKEDITOR.config.expandedToolbar = true; CKEDITOR.tools.callHashFunction("' . $id . '","' . $id . '"); });'); $javascript->addToHead(); //set event handlers $args['name'] = $id; $args['event'] = 'onGetInsertMethod'; $results[] = $context->update($args); foreach ($results as $result) { if (is_string($result) && trim($result)) { $html .= $result; } } //Get buttons if (!empty($buttons) || is_array($buttons) && !array_key_exists(0, $buttons)) { // Load modal popup behavior JHTML::_('behavior.modal', 'a.modal-button'); $editor = JFactory::getEditor('jckeditor'); $plugins = $editor->getButtons($id, $buttons, $asset, $author); $buttons = ''; $container = ''; if (version_compare(JVERSION, '3.0', 'ge')) { foreach ($plugins as $plugin) { $className = $plugin->get('modal') ? "modal-button btn" : 'btn'; $url = $plugin->get('link') ? JURI::base() . $plugin->get('link') : ''; $click = $plugin->get('onclick') ? $plugin->get('onclick') : 'IeCursorFix(); return false;'; $options = $plugin->get('options'); $content = $plugin->get('text'); $buttonName = $plugin->get('name'); $content = '<i class="icon-' . $buttonName . '"></i>' . $content; $linkAttributes = array("rel" => $options, 'onclick' => $click); $buttons .= JCKHtmlwriter::link($url, $content, '', $className, $linkAttributes); } $innerContainer = JCKHtmlwriter::DivContainer($buttons, '', 'btn-toolbar'); $container = JCKHtmlwriter::DivContainer($innerContainer, 'editor-xtd-buttons', 'btn-toolbar pull-left'); } else { foreach ($plugins as $plugin) { $className = $plugin->get('modal') ? "modal-button" : ''; $url = $plugin->get('link') ? JURI::base() . $plugin->get('link') : ''; $click = $plugin->get('onclick') ? $plugin->get('onclick') : ''; $options = $plugin->get('options'); $content = $plugin->get('text'); $buttonName = $plugin->get('name'); $buttons .= JCKHtmlwriter::buttonModalLink($url, $content, $options, $buttonName, $className, $click, array("class" => "button2-left")); } $container = JCKHtmlwriter::DivContainer($buttons, 'editor-xtd-buttons'); } $html .= $container; } return $html; }
static function _HtmlElement($tagName, $id, $name = '', $content = '', $attributes = array()) { $attributes["id"] = JCKOutput::fixId($id); if ($name) { $attributes["name"] = $name; } $attrStr = ""; if (!empty($attributes)) { $attrStr = JArrayHelper::toString($attributes); } $html = chr(13) . "<{$tagName} {$attrStr}>{$content}</{$tagName}>"; return $html; }
static function EditorTextArea($name, $content, $buttons, $context) { $html = JCKHtmlwriter::textarea($name, $content); //load CKEditor script $javascript = new JCKJavascript(); $filtername = JCKOutput::cleanString($name); $name = JCKOutput::fixId($name); $javascript->addScriptDeclaration('window.addDomReadyEvent.add(function() { CKEDITOR.config.expandedToolbar = true; CKEDITOR.tools.callHashFunction("' . $name . '","' . $name . '"); });'); $html .= $javascript->toString(); //Get buttons if (!empty($buttons) || is_array($buttons) && !array_key_exists(0, $buttons)) { // Load modal popup behavior JHTML::_('behavior.modal', 'a.modal-button'); $editor = JFactory::getEditor('jckeditor'); //set event handlers $args['name'] = $name; $args['event'] = 'onGetInsertMethod'; $results[] = $context->update($args); foreach ($results as $result) { if (is_string($result) && trim($result)) { $html .= $result; } } $plugins = $editor->getButtons($name, $buttons); $buttons = ''; foreach ($plugins as $plugin) { $className = $plugin->get('modal') ? "modal-button" : ''; $url = $plugin->get('link') ? $plugin->get('link') : ''; $click = $plugin->get('onclick') ? $plugin->get('onclick') : ''; $options = $plugin->get('options'); $content = $plugin->get('text'); $buttonName = $plugin->get('name'); $buttons .= JCKHtmlwriter::buttonModalLink($url, $content, $options, $buttonName, $className, $click, array("class" => "button2-left")); } $container = JCKHtmlwriter::DivContainer($buttons, 'editor-xtd-buttons'); $html .= $container; } return $html; }
static function getHeadJavascript(&$params, &$errors, &$excludeEventHandlers) { global $option; //lets get JS object $javascript =& JCKJavascript::getInstance(); //now Add intialisation scripts $mainframe = JFactory::getApplication(); $path_root = '../'; if ($mainframe->isSite()) { $path_root = ''; } jimport('joomla.environment.browser'); $instance = JBrowser::getInstance(); $language = JFactory::getLanguage(); if ($language->isRTL()) { $direction = 'rtl'; } else { $direction = 'ltr'; } /* Load the CK's Parameters */ $skin = $params->def('skin', 'office2007'); $hheight = $params->def('hheight', 480); $wwidth = $params->def('wwidth', '100%'); $lang_mode = $params->def('lang_mode', 1); $lang = $params->def('lang_code', 'en'); $entermode = $params->def('entermode', 1); $shiftentermode = $params->def('shiftentermode', 2); $uicolor = $params->def('uicolor', '#D6E6F4'); $imagepath = $params->def('magePath', 'images/stories'); $returnScript = $params->get('returnScript', true); $editorname = $params->get('editorname'); $bgcolor = $params->get('bgcolor', '#ffffff'); $ftcolor = $params->get('ftcolor', ''); $textalign = $params->get('textalign', 0); $entities = $params->get('entities', 0); $formatsource = $params->get('formatsource', 1); $minify = $params->get('minify', 1); //override autoLoad value if set in config jckimport('ckeditor.autoload.startconfig'); $startConfig = new JCKStartConfig(); if (isset($startConfig->{$option})) { $excludeEventHandlers = $startConfig->{$option}; } else { $excludeEventHandlers = $returnScript; } // If language mode set // set default Joomla language setting switch ($lang_mode) { case 0: $AutoDetectLanguage = $lang; // User selection break; case 1: $AutoDetectLanguage = ""; // Joomla Default $lang = substr($language->getTag(), 0, strpos($language->getTag(), '-')); //access joomlas global configuation and get the language setting from there break; case 2: $AutoDetectLanguage = ""; // Browser default $lang = ""; break; } $params->set('JoomlaLang', $lang); $stylesheet =& JCKStylesheet::getInstance($params, $path_root); $content_css = $stylesheet->getPath($errors); $content_css = JURI::root() . $content_css; $content_css = str_replace(DS, '/', $content_css); $stylesheetJSO = $stylesheet->getJSObject(); //Get toolbar plugins object jckimport('ckeditor.plugins'); jckimport('ckeditor.plugins.toolbarplugins'); $plugins = new JCKtoolbarPlugins(); if ($textalign) { $textalign = "text-align:{$textalign};"; } else { $textalign = ""; } if (!$formatsource) { $formatsource = "\n\t\t\t\tvar format = [];\n\t\t\t\tformat['indent'] = false;\n\t\t\t\tformat['breakBeforeOpen'] = false; \n\t\t\t\tformat['breakAfterOpen'] = false;\n\t\t\t\tformat['breakBeforeClose'] = false;\n\t\t\t\tformat['breakAfterClose'] = false;\n\t\t\t\tvar dtd = CKEDITOR.dtd;\n\t\t\t\tfor ( var e in CKEDITOR.tools.extend( {}, dtd.\$nonBodyContent, dtd.\$block, dtd.\$listItem, dtd.\$tableContent ) ) {\n\t\t\t\t\t\teditor.dataProcessor.writer.setRules( e, format); \n\t\t\t\t} \n\t\t\n\t\t\t\teditor.dataProcessor.writer.setRules( 'pre',\n\t\t\t\t{\n\t\t\t\t\tindent: false\n\t\t\t\t}); \n\t\t\t"; } else { $formatsource = "\n\t\t\t\teditor.dataProcessor.writer.setRules( 'pre',\n\t\t\t\t{\n\t\t\t\t\tindent : false,\n\t\t\t\t\tbreakAfterOpen : false,\t\n\t\t\t\t breakBeforeClose: false\n\t\t\t\t}); \n\t\t\t"; } $javascript->addScriptDeclaration("\n\t\t\t\n " . self::addDomReadyEventHandler() . " \n \n window.addDomReadyEvent.add(function() \n\t\t\t{\n\t\t\t\n\t\t\t\tCKEDITOR.on('instanceCreated',function(evt)\n\t\t\t\t{\n\t\t\t\t\t var editor = evt.editor;\n\t\t\t\t\t \n\t\t\t\t\t editor.on( 'customConfigLoaded', function()\n\t\t\t\t\t {\n\t\t\t\t\t\t CKEDITOR.tools.extend( editor.config, \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tremovePlugins : '" . $plugins->getRemovedPlugins() . "', \n\t\t\t\t\t\t\textraPlugins :\t'" . $plugins->getExtraPlugins() . "'\n\t\t\t\t\t\t}, true );\n\t\t\n\t\t\t\t\t });\t \n\t\t\t\t\t \n\t\t\t\t\t //addCustom CSS\n\t\t\t\t\t editor.addCss( 'body { background: " . $bgcolor . " none;" . $textalign . ";}' );\n\t\t\t\t\t " . ($ftcolor ? "editor.addCss( 'body { color: " . $ftcolor . "; }' )" : "") . "\n\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\n\t\t\t});"); jckimport('ckeditor.plugins.helper'); //import core plugins first JCKPluginsHelper::storePlugins('toolbar'); JCKPluginsHelper::importPlugin('toolbar'); $mainframe->triggerEvent('load', array(&$params)); $toolbar = $params->def('toolbar', 'Publisher'); $toolbar_ft = $params->def('toolbar_ft', 'Basic'); //set default view for toolabar $toolbar = $toolbar == 'Default' ? 'Full' : $toolbar; $toolbar_ft = $toolbar_ft == 'Default' ? 'Full' : $toolbar_ft; if (!$path_root) { //set toolbar to compact mode $toolbar = $toolbar_ft; } //add JS for selected toolbar jckimport('ckeditor.toolbar'); $toolbarFileName = strtolower($toolbar); jckimport('ckeditor.toolbar.' . $toolbarFileName); $toolbarClassName = 'JCK' . $toolbar; $toolbarObj = new $toolbarClassName(); $jsonToolbarArray = $toolbarObj->toString(); //set session $clientid = $mainframe->getClientId(); $_GET['client'] = $clientid; //set jck_toolbar param $params->set('jck_toolbar', $toolbar); //import core plugins first JCKPluginsHelper::storePlugins('core'); JCKPluginsHelper::importPlugin('core'); $results = $mainframe->triggerEvent('intialize', array(&$params)); JCKPluginsHelper::storePlugins('editor'); JCKPluginsHelper::importPlugin('editor'); $beforeloadResult = $mainframe->triggerEvent('beforeLoad', array(&$params)); $afterloadResult = $mainframe->triggerEvent('afterLoad', array(&$params)); $javascript->addScriptDeclaration("window.addDomReadyEvent.add(function() \n\t\t{\n\t\n\t\t\t" . (!empty($results) ? implode(chr(13), $results) : '') . "\t\n\t\t\t\n\t\t\tCKEDITOR.on('instanceCreated',function(evt)\n\t\t\t{\n\t\t\t\t var editor = evt.editor;\n\t\t\t\t editor.on( 'customConfigLoaded', function()\n\t\t\t\t {\n\t\t\t\t\teditor.config.toolbar_{$toolbar} = {$jsonToolbarArray};\n\t\n\t\t\t\t });\n\t\t\t" . (!empty($beforeloadResult) ? implode(chr(13), $beforeloadResult) : '') . "\t\n\t\t\t\t\t \n\t\t\t});\n\t\t});"); $javascript->addScriptDeclaration("window.addDomReadyEvent.add(function() \n\t\t{\n\t\t\tCKEDITOR.on('instanceReady',function(evt)\n\t\t\t{\n\t\t\t\t var editor = evt.editor;\n\t\t\t\t {$formatsource}\n\t\t\t\t \t\t\t\t \n\t\t\t\t " . (!empty($afterloadResult) ? implode(chr(13), $afterloadResult) : '') . "\t\n\t\t\t});\n\t\t});"); $javascript->addScriptDeclaration("var oEditor;\n\t\t\t\t\t\t\t\t \n\t\t\t\tfunction ReplaceTextContainer(div,autoHeight)\n\t\t\t\t{\n\t\t\t\t\t//destroy editor instance if one already exist \n\t\t\t\t\tif ( oEditor )\n\t\t\t\t\t\toEditor.destroy();\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\tCKEDITOR.config.startupFocus = true;\t\t\n\t\t\t\t\t//create editor instance\n\t\t\t\t\toEditor = CKEDITOR.replace(div,\n\t\t\t\t\t{ \n\t\t\t\t\t\t baseHref : '" . JURI::root() . "',\n\t\t\t\t\t\t imagePath : '{$imagepath}', \n\t\t\t\t\t\t toolbar : CKEDITOR.config.expandedToolbar ? '{$toolbar}' : 'Image',\n\t\t\t\t\t\t toolbarStartupExpanded : CKEDITOR.config.expandedToolbar,\n\t\t\t\t\t\t uiColor\t: '{$uicolor}',\n\t\t\t\t\t\t skin : '{$skin}',\t\n\t\t\t\t\t\t contentsCss :['{$content_css}'],\n\t\t\t\t\t\t contentsLangDirection : '{$direction}',\n\t\t\t\t\t\t language : '{$lang}',\n\t\t\t\t\t\t defaultLanguage :'{$AutoDetectLanguage}', \n\t\t\t\t\t\t enterMode : '{$entermode}',\n\t\t\t\t\t\t shiftEnterMode : '{$shiftentermode}',\n\t\t\t\t\t\t stylesSet : " . $stylesheetJSO . ",\n\t\t\t\t\t\t " . ($wwidth ? "width : '{$wwidth}'" : "") . ",\n\t\t\t\t\t\t height: autoHeight ? div.clientHeight +28 : '{$hheight}',\n\t\t\t\t\t\t entities : " . (int) $entities . "\n\t\t\t\t\t});\n\t\t\t\t}"); $editorname = JCKOutput::fixId($editorname); $javascript->addScriptDeclaration("\n\t\t\t\t\t\t\t\t \n\t\t\t\t\n\t\twindow.addDomReadyEvent.add(function() \n\t\t{\n \t\t\tCKEDITOR.tools.addHashFunction(function(div)\n\t\t\t{\n\t\t\t\t//create editor instance\n\t\t\t\tvar oEditor = CKEDITOR.replace(div,\n\t\t\t\t{ \n\t\t\t\t\t baseHref : '" . JURI::root() . "',\n\t\t\t\t\t imagePath : '{$imagepath}', \n\t\t\t\t\t toolbar : CKEDITOR.config.expandedToolbar ? '{$toolbar}' : 'Image',\n\t\t\t\t\t toolbarStartupExpanded : CKEDITOR.config.expandedToolbar,\n\t\t\t\t\t uiColor\t: '{$uicolor}',\n\t\t\t\t\t skin : '{$skin}',\t\n\t\t\t\t\t contentsCss :['{$content_css}'],\n\t\t\t\t\t contentsLangDirection : '{$direction}',\n\t\t\t\t\t language : '{$lang}',\n\t\t\t\t\t defaultLanguage :'{$AutoDetectLanguage}', \n\t\t\t\t\t enterMode : '{$entermode}',\n\t\t\t\t\t shiftEnterMode : '{$shiftentermode}',\n\t\t\t\t\t stylesSet : " . $stylesheetJSO . ",\n\t\t\t\t\t " . ($wwidth ? "width : '{$wwidth}'" : "") . ",\n\t\t\t\t\t " . ($hheight ? "height : '{$hheight}'" : "") . ",\n\t\t\t\t\t entities : " . (int) $entities . "\n\t\t\t\t});\n\t\t\t},'" . $editorname . "');\n\t\t});"); $handlerjs = "\n\t\t\n\t\tfunction editor_onDoubleClick( ev )\n\t\t{\n\t\t\t// Get the element which fired the event. This is not necessarily the\n\t\t\t// element to which the event has been attached.\n\t\t\tvar element = ev.target || ev.srcElement;\n\t\t\t// Find out the divtext container that holds this element.\n\t\t\t\n\t\t\twhile( !(element.nodeName.toLowerCase() == 'div' && (element.hasAttribute('ckid') || element.className.indexOf( 'editable' ) != -1 )) && element.nodeName.toLowerCase() != 'textarea'\n\t\t\t\t\t&& (element.parentNode && element.parentNode.nodeName.toLowerCase() != 'body'))\n\t\t\t\telement = element.parentNode;\n\t\t\t\n\t\t\tif ( (element.nodeName.toLowerCase() == 'div' && (element.hasAttribute('ckid') || element.className.indexOf( 'editable' ) != -1 )) || element.nodeName.toLowerCase() == 'textarea')\n\t\t\t{\n\t\t\t\tif(element.hasAttribute('ckid') && element.getAttribute('ckid') == 'image'){\n\t\t\t\t\n\t\t\t\t\tCKEDITOR.config.expandedToolbar = false;\n\t\t\t\t\tReplaceTextContainer( element,true);\n\t\t\t\t}else{\n\t\t\t\t\tCKEDITOR.config.expandedToolbar = true;\n\t\t\t\t\tReplaceTextContainer( element,false);}\n\t\t\t}\t\t\n\t\t}\n\n\t\tvar editor_implementOnInstanceReady = function() \n\t\t{\n\t\t\t//CKEDITOR.config.expandedToolbar = false;\n\t\t\t\n\t\t\tCKEDITOR.on('instanceReady',function(evt)\n\t\t\t{\n\t\t\t\t\n\t\t\t\tevt.editor.focus(); // why do we need to do this?\n\t\t\t\tif(!CKEDITOR.config.expandedToolbar)\n\t\t\t\t{\n\t\t\t\t\tvar editor = evt.editor;\n\t\t\t\t\tvar imgElement = editor.document.getBody().getElementsByTag('img').getItem(0);\n\t\t\t\t\tif(imgElement)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(editor.getSelection())\n\t\t\t\t\t\t\teditor.getSelection().selectElement(imgElement);\n\t\t\t\t\t}\t\t\n\t\t\t\t\t//add double click\n\t\t\t\t\teditor.document.on('dblclick', function(evt)\n\t\t\t\t\t{\n\t\t\t\t\t\tevt.listenerData.editor.getCommand('ImageManager').exec(evt.listenerData.editor);\t\n\t\t\t\t\t},null,{editor : editor});\n\t\t\t\t\n\t\t\t\t\tif(editor.getSelection())\n\t\t\t\t\t\teditor.getCommand('ImageManager').exec(editor);\t\n\t\t\t\t\t\t\n\t\t\t\t}\t\n\n\t\t\t});\n\t\t\t\n\t\t}\t\t\n\t\tif ( window.addEventListener )\n\t\t{\n\t\t\twindow.addEventListener( 'load', editor_implementOnInstanceReady, false );\t\n\t\t\twindow.addEventListener( 'dblclick', editor_onDoubleClick, false );\n\t\t}\n\t\telse if ( window.attachEvent )\n\t\t{\n\t\t\twindow.attachEvent( 'onload', editor_implementOnInstanceReady);\n\t\t\twindow.document.attachEvent( 'ondblclick', editor_onDoubleClick );\n\t\t}"; if (!$excludeEventHandlers) { $javascript->addScriptDeclaration($handlerjs); } $javascript->setMinify($minify); return $javascript; }
static function getHeadJavascript(&$params, &$errors, &$excludeEventHandlers) { global $option; //lets get JS object $javascript =& JCKJavascript::getInstance(); //now Add intialisation scripts $mainframe = JFactory::getApplication(); $path_root = '../'; if ($mainframe->isSite()) { $path_root = ''; } jimport('joomla.environment.browser'); $instance = JBrowser::getInstance(); $language = JFactory::getLanguage(); if ($language->isRTL()) { $direction = 'rtl'; } else { $direction = 'ltr'; } /* Load the CK's Parameters */ $toolbar = $params->def('toolbar', 'Full'); $toolbar_ft = $params->def('toolbar_ft', 'Full'); $skin = $params->def('skin', 'office2007'); $hheight = $params->def('hheight', 480); $wwidth = $params->def('wwidth', '100%'); $lang_mode = $params->def('lang_mode', 0); $lang = $params->def('lang_code', 'en'); $entermode = $params->def('entermode', 1); $shiftentermode = $params->def('shiftentermode', 0); $uicolor = $params->def('uicolor', '#D6E6F4'); $imagepath = $params->def('magePath', 'images/stories'); $returnScript = $params->get('returnScript', true); $editorname = $params->get('editorname'); $bgcolor = $params->get('bgcolor', '#ffffff'); $textalign = $params->get('textalign', 0); $entities = $params->get('entities', 0); $formatsource = $params->get('formatsource', 1); //override autoLoad value if set in config jckimport('ckeditor.autoload.startconfig'); $startConfig = new JCKStartConfig(); if (isset($startConfig->{$option})) { $excludeEventHandlers = $startConfig->{$option}; } else { $excludeEventHandlers = $returnScript; } //set default view for toolabar $toolbar = $toolbar == 'Default' ? 'Full' : $toolbar; $toolbar_ft = $toolbar_ft == 'Default' ? 'Full' : $toolbar_ft; if (!$path_root) { //set toolbar to compact mode $toolbar = $toolbar_ft; } // If language mode set // set default Joomla language setting switch ($lang_mode) { case 0: $AutoDetectLanguage = $lang; // User selection break; case 1: $AutoDetectLanguage = ""; // Joomla Default $lang = substr($language->getTag(), 0, strpos($language->getTag(), '-')); //access joomlas global configuation and get the language setting from there break; case 2: $AutoDetectLanguage = ""; // Browser default $lang = ""; break; } $stylesheet =& JCKStylesheet::getInstance($path_root); $content_css = $stylesheet->getPath($params, $errors); $stylesheetJSO = $stylesheet->getJSObject(); /* $jsloadJSO = 'var ckstyles_template; window.addDomReadyEvent.add(function() { CKEDITOR.on("instanceReady",function(evt) { ckstyles_template = '.$stylesheetJSO .'; }); });'; $javascript->addScriptDeclaration($jsloadJSO); */ //Get toolbar plugins object jckimport('ckeditor.plugins'); jckimport('ckeditor.plugins.toolbarplugins'); $plugins = new JCKtoolbarPlugins(); if ($textalign) { $textalign = "text-align:{$textalign};"; } else { $textalign = ""; } if (!$formatsource) { $formatsource = "\r\n\t\t\t\tvar format = [];\r\n\t\t\t\tformat['indent'] = false;\r\n\t\t\t\tformat['breakBeforeOpen'] = false; \r\n\t\t\t\tformat['breakAfterOpen'] = false;\r\n\t\t\t\tformat['breakBeforeClose'] = false;\r\n\t\t\t\tformat['breakAfterClose'] = false;\r\n\t\t\t\tvar dtd = CKEDITOR.dtd;\r\n\t\t\t\tfor ( var e in CKEDITOR.tools.extend( {}, dtd.\$nonBodyContent, dtd.\$block, dtd.\$listItem, dtd.\$tableContent ) ) {\r\n\t\t\t\t\t\teditor.dataProcessor.writer.setRules( e, format); \r\n\t\t\t\t} \r\n\t\t\r\n\t\t\t\teditor.dataProcessor.writer.setRules( 'pre',\r\n\t\t\t\t{\r\n\t\t\t\t\tindent: false\r\n\t\t\t\t}); \r\n\t\t\t"; } else { $formatsource = ''; } $javascript->addScriptDeclaration("\r\n\t\r\n\t\t\tif (typeof JCKEvent == 'undefined') {\r\n\t\t\t\r\n\t\t\tvar JCKEvent = {};\r\n\t\t\t\r\n\t\t\tJCKEvent.domReady = {\r\n\t\t\t add: function(fn) {\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tif (JCKEvent.domReady.loaded) return fn();\r\n\t\t\t\t\r\n\t\t\r\n\t\t\t\tvar observers = JCKEvent.domReady.observers;\r\n\t\t\t\tif (!observers) observers = JCKEvent.domReady.observers = [];\r\n\t\t\t\tobservers[observers.length] = fn;\r\n\t\t\r\n\t\t\t\tif (typeof JCKEvent.domReady.callback != 'undefined') return;\r\n\t\t\r\n\t\t\t\tJCKEvent.domReady.callback = function() {\r\n\t\t\t\t if (JCKEvent.domReady.loaded) return;\r\n\t\t\t\t \r\n\t\t\t\t JCKEvent.domReady.loaded = true;\r\n\t\t\t\t if (JCKEvent.domReady.timer) {\r\n\t\t\t\t\tclearInterval(JCKEvent.domReady.timer);\r\n\t\t\t\t\tJCKEvent.domReady.timer = null;\r\n\t\t\t\t }\r\n\t\t\t\t \r\n\t\t\t\t var observers = JCKEvent.domReady.observers;\r\n\t\t\t\t for (var i = 0, length = observers.length; i < length; i++) {\r\n\t\t\t\t\tvar fn = observers[i];\r\n\t\t\t\t\tobservers[i] = null;\r\n\t\t\t\t\tfn(); // make 'this' as window\r\n\t\t\t\t }\r\n\t\t\t\t JCKEvent.domReady.callback = JCKEvent.domReady.observers = null;\r\n\t\t\t\t};\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tvar ie = !!(window.attachEvent && !window.opera);\r\n\t\t\t\tvar webkit = navigator.userAgent.indexOf('AppleWebKit/') > -1;\r\n\t\t\t\t\r\n\t\t\t\tif (document.readyState && webkit) {\r\n\t\t\t\t \r\n\t\t\t\t // Apple WebKit (Safari, OmniWeb, ...)\r\n\t\t\t\t JCKEvent.domReady.timer = setInterval(function() {\r\n\t\t\t\t\tvar state = document.readyState;\r\n\t\t\t\t\tif (state == 'loaded' || state == 'complete') {\r\n\t\t\t\t\t JCKEvent.domReady.callback();\r\n\t\t\t\t\t}\r\n\t\t\t\t }, 50);\r\n\t\t\t\t \r\n\t\t\t\t} else if (document.readyState && ie) {\r\n\t\t\t\t \r\n\t\t\t\t // Windows IE \r\n\t\t\t\t var src = (window.location.protocol == 'https:') ? '://0' : 'javascript:void(0)';\r\n\t\t\t\t document.write(\r\n\t\t\t\t\t'<script type=\"text/javascript\" defer=\"defer\" src=\"' + src + '\" ' + \r\n\t\t\t\t\t'onreadystatechange=\"if (this.readyState == \\'complete\\') JCKEvent.domReady.callback();\"' + \r\n\t\t\t\t\t'><\\/script>');\r\n\t\t\t\t \r\n\t\t\t\t} else {\r\n\t\t\t\t \r\n\t\t\t\t if (window.addEventListener) {\r\n\t\t\t\t\t// for Mozilla browsers, Opera 9\r\n\t\t\t\t\tdocument.addEventListener(\"DOMContentLoaded\", JCKEvent.domReady.callback, false);\r\n\t\t\t\t\t// Fail safe \r\n\t\t\t\t\twindow.addEventListener(\"load\", JCKEvent.domReady.callback, false);\r\n\t\t\t\t } else if (window.attachEvent) {\r\n\t\t\t\t\twindow.attachEvent('onload', JCKEvent.domReady.callback);\r\n\t\t\t\t } else {\r\n\t\t\t\t\t// Legacy browsers (e.g. Mac IE 5)\r\n\t\t\t\t\tvar fn = window.onload;\r\n\t\t\t\t\twindow.onload = function() {\r\n\t\t\t\t\t JCKEvent.domReady.callback();\r\n\t\t\t\t\t if (fn) fn();\r\n\t\t\t\t\t}\r\n\t\t\t\t }\r\n\t\t\t\t \r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t }\r\n\t\t\t}\r\n\t\t\r\n\t\t\twindow.addDomReadyEvent = {};\r\n\t\t\tif(typeof window.addDomReadyEvent.add == 'undefined')\r\n\t\t\t\twindow.addDomReadyEvent.add = JCKEvent.domReady.add;\r\n\t\t}\r\n\t\t\r\n\t\twindow.addDomReadyEvent.add(function() \r\n\t\t{\r\n\t\t\r\n\t\t\tCKEDITOR.on('instanceCreated',function(evt)\r\n\t\t\t{\r\n\t\t\t\t var editor = evt.editor;\r\n\t\t\t\t \r\n\t\t\t\t \r\n\t\t\t\t \r\n\t\t\t\t editor.on( 'customConfigLoaded', function()\r\n\t\t\t\t {\r\n\t\t\t\t\t CKEDITOR.tools.extend( editor.config, \r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tremovePlugins : '" . $plugins->getRemovedPlugins() . "', \r\n\t\t\t\t\t\t\t\t\t\t\t\textraPlugins :\t'" . $plugins->getExtraPlugins() . "'\r\n\t\t\t\t\t\t\t\t\t\t\t}, true );\r\n\t\r\n\t\t\t\t });\t \r\n\t\t\t\t \r\n\t\t\t\t //addCustom CSS\r\n\t\t\t\t editor.addCss( 'body { background: " . $bgcolor . " none;" . $textalign . "}' );\r\n\t\t\t \r\n\t\t\t});\r\n\t\t\t\t\t\t\t\t\r\n\t\t});"); //add JS for selected toolbar jckimport('ckeditor.toolbar'); $toolbarFileName = strtolower($toolbar); jckimport('ckeditor.toolbar.' . $toolbarFileName); $toolbarClassName = 'JCK' . $toolbar; $toolbarObj = new $toolbarClassName(); $jsonToolbarArray = $toolbarObj->toString(); jckimport('ckeditor.plugins.helper'); //import core plugins first JCKPluginsHelper::storePlugins('core'); JCKPluginsHelper::importPlugin('core'); $results = $mainframe->triggerEvent('intialize', array(&$params)); $_GET['client'] = $mainframe->getClientId(); /* $session =& JFactory::getSession(); //clear stored jckplugins $session->clear('jckplugins'); */ JCKPluginsHelper::storePlugins('editor'); JCKPluginsHelper::importPlugin('editor'); $beforeloadResult = $mainframe->triggerEvent('beforeLoad', array(&$params)); $afterloadResult = $mainframe->triggerEvent('afterLoad', array(&$params)); $javascript->addScriptDeclaration("window.addDomReadyEvent.add(function() \r\n\t\t{\r\n\t\r\n\t\t\t" . (!empty($results) ? implode(chr(13), $results) : '') . "\t\r\n\t\t\t\r\n\t\t\tCKEDITOR.on('instanceCreated',function(evt)\r\n\t\t\t{\r\n\t\t\t\t var editor = evt.editor;\r\n\t\t\t\t editor.on( 'customConfigLoaded', function()\r\n\t\t\t\t {\r\n\t\t\t\t\teditor.config.toolbar_{$toolbar} = {$jsonToolbarArray};\r\n\t\r\n\t\t\t\t });\r\n\t\t\t" . (!empty($beforeloadResult) ? implode(chr(13), $beforeloadResult) : '') . "\t\r\n\t\t\t\t\t \r\n\t\t\t});\r\n\t\t});"); $javascript->addScriptDeclaration("window.addDomReadyEvent.add(function() \r\n\t\t{\r\n\t\t\tCKEDITOR.on('instanceReady',function(evt)\r\n\t\t\t{\r\n\t\t\t\t var editor = evt.editor;\r\n\t\t\t\t {$formatsource}\r\n\t\t\t\t \t\t\t\t \r\n\t\t\t\t " . (!empty($afterloadResult) ? implode(chr(13), $afterloadResult) : '') . "\t\r\n\t\t\t});\r\n\t\t});"); $javascript->addScriptDeclaration("var oEditor;\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\tfunction ReplaceTextContainer(div,autoHeight)\r\n\t\t\t\t{\r\n\t\t\t\t\t//destroy editor instance if one already exist \r\n\t\t\t\t\tif ( oEditor )\r\n\t\t\t\t\t\toEditor.destroy();\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\tCKEDITOR.config.startupFocus = true;\t\t\r\n\t\t\t\t\t//create editor instance\r\n\t\t\t\t\toEditor = CKEDITOR.replace(div,\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\t baseHref : '" . JURI::root() . "',\r\n\t\t\t\t\t\t imagePath : '{$imagepath}', \r\n\t\t\t\t\t\t toolbar : CKEDITOR.config.expandedToolbar ? '{$toolbar}' : 'Image',\r\n\t\t\t\t\t\t toolbarStartupExpanded : CKEDITOR.config.expandedToolbar,\r\n\t\t\t\t\t\t uiColor\t: '{$uicolor}',\r\n\t\t\t\t\t\t skin : '{$skin}',\t\r\n\t\t\t\t\t\t contentsCss :'{$content_css}',\r\n\t\t\t\t\t\t contentsLangDirection : '{$direction}',\r\n\t\t\t\t\t\t language : '{$lang}',\r\n\t\t\t\t\t\t defaultLanguage :'{$AutoDetectLanguage}', \r\n\t\t\t\t\t\t enterMode : '{$entermode}',\r\n\t\t\t\t\t\t shiftEnterMode : '{$shiftentermode}',\r\n\t\t\t\t\t\t stylesSet : " . $stylesheetJSO . ",\r\n\t\t\t\t\t\t width : '{$wwidth}',\r\n\t\t\t\t\t\t height: autoHeight ? div.clientHeight +28 : '{$hheight}',\r\n\t\t\t\t\t\t entities : " . (int) $entities . "\r\n\t\t\t\t\t});\r\n\t\t\t\t}"); $editorname = JCKOutput::fixId($editorname); $javascript->addScriptDeclaration("\r\n\t\t\t\t\t\t\t\t \r\n\t\t\t\t\r\n\t\twindow.addDomReadyEvent.add(function() \r\n\t\t{\r\n \t\t\tCKEDITOR.tools.addHashFunction(function(div)\r\n\t\t\t{\r\n\t\t\t\t//create editor instance\r\n\t\t\t\tvar oEditor = CKEDITOR.replace(div,\r\n\t\t\t\t{ \r\n\t\t\t\t\t baseHref : '" . JURI::root() . "',\r\n\t\t\t\t\t imagePath : '{$imagepath}', \r\n\t\t\t\t\t toolbar : CKEDITOR.config.expandedToolbar ? '{$toolbar}' : 'Image',\r\n\t\t\t\t\t toolbarStartupExpanded : CKEDITOR.config.expandedToolbar,\r\n\t\t\t\t\t uiColor\t: '{$uicolor}',\r\n\t\t\t\t\t skin : '{$skin}',\t\r\n\t\t\t\t\t contentsCss :'{$content_css}',\r\n\t\t\t\t\t contentsLangDirection : '{$direction}',\r\n\t\t\t\t\t language : '{$lang}',\r\n\t\t\t\t\t defaultLanguage :'{$AutoDetectLanguage}', \r\n\t\t\t\t\t enterMode : '{$entermode}',\r\n\t\t\t\t\t shiftEnterMode : '{$shiftentermode}',\r\n\t\t\t\t\t stylesSet : " . $stylesheetJSO . ",\r\n\t\t\t\t\t width : '{$wwidth}',\r\n\t\t\t\t\t height: '{$hheight}',\r\n\t\t\t\t\t entities : " . (int) $entities . "\r\n\t\t\t\t});\r\n\t\t\t},'" . $editorname . "');\r\n\t\t});"); $handlerjs = "\r\n\t\t\r\n\t\tfunction editor_onDoubleClick( ev )\r\n\t\t{\r\n\t\t\t// Get the element which fired the event. This is not necessarily the\r\n\t\t\t// element to which the event has been attached.\r\n\t\t\tvar element = ev.target || ev.srcElement;\r\n\t\t\t// Find out the divtext container that holds this element.\r\n\t\t\t\r\n\t\t\twhile( !(element.nodeName.toLowerCase() == 'div' && (element.hasAttribute('ckid') || element.className.indexOf( 'editable' ) != -1 )) && element.nodeName.toLowerCase() != 'textarea'\r\n\t\t\t\t\t&& (element.parentNode && element.parentNode.nodeName.toLowerCase() != 'body'))\r\n\t\t\t\telement = element.parentNode;\r\n\t\t\t\r\n\t\t\tif ( (element.nodeName.toLowerCase() == 'div' && (element.hasAttribute('ckid') || element.className.indexOf( 'editable' ) != -1 )) || element.nodeName.toLowerCase() == 'textarea')\r\n\t\t\t{\r\n\t\t\t\tif(element.hasAttribute('ckid') && element.getAttribute('ckid') == 'image'){\r\n\t\t\t\t\r\n\t\t\t\t\tCKEDITOR.config.expandedToolbar = false;\r\n\t\t\t\t\tReplaceTextContainer( element,true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tCKEDITOR.config.expandedToolbar = true;\r\n\t\t\t\t\tReplaceTextContainer( element,false);}\r\n\t\t\t}\t\t\r\n\t\t}\r\n\r\n\t\tvar editor_implementOnInstanceReady = function() \r\n\t\t{\r\n\t\t\t//CKEDITOR.config.expandedToolbar = false;\r\n\t\t\t\r\n\t\t\tCKEDITOR.on('instanceReady',function(evt)\r\n\t\t\t{\r\n\t\t\t\t\r\n\t\t\t\tevt.editor.focus(); // why do we need to do this?\r\n\t\t\t\tif(!CKEDITOR.config.expandedToolbar)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar editor = evt.editor;\r\n\t\t\t\t\tvar imgElement = editor.document.getBody().getElementsByTag('img').getItem(0);\r\n\t\t\t\t\tif(imgElement)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif(editor.getSelection())\r\n\t\t\t\t\t\t\teditor.getSelection().selectElement(imgElement);\r\n\t\t\t\t\t}\t\t\r\n\t\t\t\t\t//add double click\r\n\t\t\t\t\teditor.document.on('dblclick', function(evt)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tevt.listenerData.editor.getCommand('ImageManager').exec(evt.listenerData.editor);\t\r\n\t\t\t\t\t},null,{editor : editor});\r\n\t\t\t\t\r\n\t\t\t\t\tif(editor.getSelection())\r\n\t\t\t\t\t\teditor.getCommand('ImageManager').exec(editor);\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t}\t\r\n\r\n\t\t\t});\r\n\t\t\t\r\n\t\t}\t\t\r\n\t\tif ( window.addEventListener )\r\n\t\t{\r\n\t\t\twindow.addEventListener( 'load', editor_implementOnInstanceReady, false );\t\r\n\t\t\twindow.addEventListener( 'dblclick', editor_onDoubleClick, false );\r\n\t\t}\r\n\t\telse if ( window.attachEvent )\r\n\t\t{\r\n\t\t\twindow.attachEvent( 'onload', editor_implementOnInstanceReady);\r\n\t\t\twindow.document.attachEvent( 'ondblclick', editor_onDoubleClick );\r\n\t\t}"; if (!$excludeEventHandlers) { $javascript->addScriptDeclaration($handlerjs); } return $javascript; }
/** * ckeditor Lite WYSIWYG Editor - display the editor * * @param string The name of the editor area * @param string The content of the field * @param string The name of the form field * @param string The width of the editor area * @param string The height of the editor area * @param int The number of columns for the editor area * @param int The number of rows for the editor area * @param mixed Can be boolean or array. */ function onDisplay($name, $content, $width, $height, $col, $row, $buttons = true, $id = null, $asset = null, $author = null) { // Load modal popup behavior JHTML::_('behavior.modal', 'a.modal-button'); // initialise $error varable $errors = ''; static $loaded; if (empty($id)) { $id = $name; } if (!$width) { $width = "100%"; } if (!$height) { $height = "350px"; } $skin = $this->params->get('skin'); if ($skin == 'kama' && $width == '100%') { $width = '99%'; } $arributes = array("rows" => $row, 'cols' => $col, "style" => "width:{$width};height:{$height}"); if (!$loaded) { /* Generate the Output */ $this->params->set('editorname', $id); if (!$this->params->get('hheight', '')) { $this->params->set('hheight', $height); } if (!$this->params->get('wwidth', '')) { $this->params->set('wwidth', $width); } $javascript = JCKJavascriptHelper::getHeadJavascript($this->params, $errors, $return_script); $javascript->addToHead(); $loaded = JCKOutput::fixId($id); if (!$return_script) { return; } //Here we will use JFCKJavascript output to screen //html element as well jckimport('ckeditor.htmlwriter.helper'); return $errors . JCKHtmlwriterHelper::EditorTextArea($id, $name, $content, $buttons, $this, $arributes, $asset, $author); } //end if return JCKHtmlwriter::TextArea($id, $name, $content, $arributes) . '<script>window.addDomReadyEvent.add( function(){ CKEDITOR.on("instanceReady",function(evt) { if(evt.editor.name == "' . $loaded . '") { var editor = CKEDITOR.replace( "' . JCKOutput::fixId($id) . '", CKEDITOR.instances["' . $loaded . '"].config ); var xtdbuttons = CKEDITOR.document.getById("editor-xtd-buttons"); if(xtdbuttons) { buttonsHtml = xtdbuttons.getOuterHtml().replace(/' . $loaded . '/g,"' . JCKOutput::fixId($id) . '"); var buttonsElement = CKEDITOR.dom.element.createFromHtml(buttonsHtml); editor.container.getParent().append(buttonsElement); var elements = buttonsElement.getElementsByTag("a"); for(i= 0; i < elements.count();i++) { //override mootools model click event if(elements.getItem(i).hasClass("modal-button")) { (function() { var el = $(elements.getItem(i).$); el.addEvent("click", function(e) { new Event(e).stop(); SqueezeBox.fromElement(el, { parse: "rel" }); }); })(); } } } } }) });</script>'; }
static function fixId($id) { $str = $id == "description" ? 'description_id' : $id; return JCKOutput::cleanString($str); }
static function fixId($id) { return JCKOutput::cleanString($id); }