/plugins/editors/xstandard.php
PHP | 286 lines | 165 code | 42 blank | 79 comment | 11 complexity | 2c26ca4cb1be248700a933a906e1e3f3 MD5 | raw file
- <?php
- /**
- * @version $Id: xstandard.php 14401 2010-01-26 14:10:00Z louis $
- * @package Joomla
- * @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
- * @license GNU/GPL, see LICENSE.php
- * Joomla! is free software. This version may have been modified pursuant
- * to the GNU General Public License, and as distributed it includes or
- * is derivative of works licensed under the GNU General Public License or
- * other free or open source software licenses.
- * See COPYRIGHT.php for copyright notices and details.
- */
- // Do not allow direct access
- defined( '_JEXEC' ) or die( 'Restricted access' );
- jimport( 'joomla.plugin.plugin' );
- /**
- * XStandard Lite for Joomla! WYSIWYG Editor Plugin
- *
- * @package Editors
- * @since 1.5
- */
- class plgEditorXstandard extends JPlugin
- {
- /**
- * Constructor
- *
- * For php4 compatability we must not use the __constructor as a constructor for plugins
- * because func_get_args ( void ) returns a copy of all passed arguments NOT references.
- * This causes problems with cross-referencing necessary for the observer design pattern.
- *
- * @param object $subject The object to observe
- * @param array $config An array that holds the plugin configuration
- * @since 1.5
- */
- function plgEditorXstandard(& $subject, $config)
- {
- parent::__construct($subject, $config);
- }
- /**
- * Method to handle the onInitEditor event.
- * - Initializes the XStandard Lite WYSIWYG Editor
- *
- * @access public
- * @return string JavaScript Initialization string
- * @since 1.5
- */
- function onInit()
- {
- $html = '';
- ob_start();
- ?>
- <script type="text/javascript" src="<?php echo JURI::root() ?>/plugins/editors/xstandard/xstandard.js"></script>
- <?php
- $html = ob_get_contents();
- ob_end_clean();
- return $html;
- }
- /**
- * XStandard Lite WYSIWYG Editor - get the editor content
- *
- * @param string The name of the editor
- */
- function onGetContent( $editor ) {
- return "$('xstandard').value;";
- }
- /**
- * XStandard Lite WYSIWYG Editor - set the editor content
- *
- * @param string The name of the editor
- */
- function onSetContent( $editor, $html ) {
- return "$('xstandard').value =". $html .";";
- }
- /**
- * XStandard Lite WYSIWYG Editor - copy editor content to form field
- *
- * @param string The name of the editor
- */
- function onSave( $editor ) {
- $js = "var editor = $('xstandard');\n";
- $js .= "editor.EscapeUnicode = true;";
- $js .= "$('".$editor."').value = editor.value;";
- return $js;
- }
- /**
- * XStandard 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 )
- {
- // Load modal popup behavior
- JHTML::_('behavior.modal', 'a.modal-button');
- // 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';
- }
- jimport('joomla.environment.browser');
- $instance =& JBrowser::getInstance();
- $language =& JFactory::getLanguage();
- $db =& JFactory::getDBO();
- $url = JURI::root();
- $lang = substr( $language->getTag(), 0, strpos( $language->getTag(), '-' ) );
- if ($language->isRTL()) {
- $direction = 'rtl';
- } else {
- $direction = 'ltr';
- }
- /*
- * Lets get the default template for the site application
- */
- $query = 'SELECT template'
- . ' FROM #__templates_menu'
- . ' WHERE client_id = 0'
- . ' AND menuid = 0'
- ;
- $db->setQuery( $query );
- $template = $db->loadResult();
- $file_path = JPATH_SITE .'/templates/'. $template .'/css/';
- if ( !file_exists( $file_path .DS. 'editor.css' ) ) {
- $template = 'system';
- }
- $css = JURI::root() .'/templates/'. $template . '/css/editor.css';
- $html = '';
- ob_start();
- ?>
- <div style="border: 1px solid #D5D5D5">
- <object type="application/x-xstandard" id="xstandard" class="<?php echo $name ?>" width="<?php echo $width ?>" height="<?php echo $height ?>">
- <param name="Value" value="<?php echo $content ?>" />
- <param name="Lang" value="<?php echo $lang ?>" />
- <param name="Dir" value="<?php echo $direction ?>" />
- <param name="EditorCSS" value="<?php echo $css ?>" />
- <param name="EnablePasteMarkup" value="yes" />
- <param name="EnableTimestamp" value="no" />
- <param name="EscapeUnicode" value="no" />
- <param name="ToolbarWysiwyg" value="line, hyperlink, attachment, directory, undo, , wysiwyg, source, screen-reader, ,expand; strong, em, underline, strikethrough, , align-left, align-center, align-right, , blockquote, undo-blockquote, ,numbering, bullets, , undo, redo, ,layout-table, data-table, draw-layout-table, draw-data-table" />
- <param name="ToolbarSource" value="indent, whitespace, word-wrap, dim-tags, validate,, wysiwyg, source, screen-reader, , expand" />
- <param name="ToolbarPreview" value="wysiwyg, source, screen-reader, ,expand" />
- <param name="ToolbarScreenReader" value="wysiwyg, source, screen-reader, , expand" />
- <param name="BackgroundColor" value="#F9F9F9" />
- <param name="Mode" value="<?php echo $this->params->get('mode', 'wysiwyg'); ?>" />
- <param name="IndentOutput" value="yes" />
- <param name="Options" value="<?php echo $this->params->get('wrap', '0'); ?>" />
- <param name="BorderColor" value="#FFF" />
- <param name="Base" value="<?php echo $url ?>" />
- <param name="ExpandWidth" value="800" />
- <param name="ExpandHeight" value="600" />
- <param name="LatestVersion" value="2.0.0.0" />
- <param name="CMSCode" value="065126D6-357D-46FC-AF74-A1F5B2D5036E" />
- <param name="CMSImageLibraryURL" value="<?php echo $url ?>plugins/editors/xstandard/imagelibrary.php" />
- <param name="CMSAttachmentLibraryURL" value="<?php echo $url ?>plugins/editors/xstandard/attachmentlibrary.php" />
- <param name="CMSDirectoryURL" value="<?php echo $url ?>plugins/editors/xstandard/directory.php" />
- <param name="PreviewXSLT" value="<?php echo $url ?>plugins/editors/xstandard/preview.xsl" />
- <param name="CSS" value="<?php echo $this->_getTemplateCss(); ?>" />
- <textarea name="alternate1" id="alternate1" cols="60" rows="15"><?php echo $content ?></textarea>
- </object>
- <input type="hidden" id="<?php echo $name ?>" name="<?php echo $name ?>" value="" />
- </div>
- <?php
- $html = ob_get_contents();
- ob_end_clean();
- $html .= $this->_displayButtons($name, $buttons);
- return $html;
- }
- function onGetInsertMethod($name)
- {
- $doc = & JFactory::getDocument();
- $js= "function jInsertEditorText( text ) {
- var editor = document.getElementById('xstandard');
- editor.InsertXML(text);
- }";
- $doc->addScriptDeclaration($js);
- return true;
- }
- function _getTemplateCss()
- {
- $db =& JFactory::getDBO();
- /*
- * Lets get the default template for the site application
- */
- $query = 'SELECT template'
- . ' FROM #__templates_menu'
- . ' WHERE client_id = 0'
- . ' AND menuid = 0'
- ;
- $db->setQuery( $query );
- $template = $db->loadResult();
- $content_css = JURI::root() .'/templates/'. $template .'/css/';
- $file_path = JPATH_SITE .'/templates/'. $template .'/css/';
- if ( file_exists( $file_path .DS. 'editor.css' ) ) {
- $content_css = $content_css . 'editor.css' .'", ';
- } else {
- $content_css = $content_css . 'template_css.css", ';
- }
- return $content_css;
- }
- function _displayButtons($name, $buttons)
- {
- // Load modal popup behavior
- JHTML::_('behavior.modal', 'a.modal-button');
- $args['name'] = $name;
- $args['event'] = 'onGetInsertMethod';
- $return = '';
- $results[] = $this->update($args);
- foreach ($results as $result) {
- if (is_string($result) && trim($result)) {
- $return .= $result;
- }
- }
- if(!empty($buttons))
- {
- $results = $this->_subject->getButtons($name, $buttons);
- /*
- * This will allow plugins to attach buttons or change the behavior on the fly using AJAX
- */
- $return .= "\n<div id=\"editor-xtd-buttons\">\n";
- foreach ($results as $button)
- {
- /*
- * Results should be an object
- */
- if ( $button->get('name') )
- {
- $modal = ($button->get('modal')) ? 'class="modal-button"' : null;
- $href = ($button->get('link')) ? 'href="'.$button->get('link').'"' : null;
- $onclick = ($button->get('onclick')) ? 'onclick="'.$button->get('onclick').'"' : null;
- $return .= "<div class=\"button2-left\"><div class=\"".$button->get('name')."\"><a ".$modal." title=\"".$button->get('text')."\" ".$href." ".$onclick." rel=\"".$button->get('options')."\">".$button->get('text')."</a></div></div>\n";
- }
- }
- $return .= "</div>\n";
- }
- return $return;
- }
- }