first commit
This commit is contained in:
301
plugins/editors/jce/jce.php
Normal file
301
plugins/editors/jce/jce.php
Normal file
@@ -0,0 +1,301 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @copyright Copyright (c) 2009-2022 Ryan Demmer. All rights reserved
|
||||
* @license GNU/GPL 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* JCE 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
|
||||
*/
|
||||
// Do not allow direct access
|
||||
defined('JPATH_PLATFORM') or die;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Component\ComponentHelper;
|
||||
use Joomla\CMS\Plugin\PluginHelper;
|
||||
use Joomla\CMS\Plugin\CMSPlugin;
|
||||
use Joomla\CMS\Layout\LayoutHelper;
|
||||
|
||||
/**
|
||||
* JCE WYSIWYG Editor Plugin.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
class plgEditorJCE extends CMSPlugin
|
||||
{
|
||||
protected static $instances = array();
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param object $subject The object to observe
|
||||
* @param array $config An array that holds the plugin configuration
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public function __construct(&$subject, $config)
|
||||
{
|
||||
parent::__construct($subject, $config);
|
||||
}
|
||||
|
||||
protected function getEditorInstance()
|
||||
{
|
||||
// pass config to WFEditor
|
||||
$config = array(
|
||||
'profile_id' => $this->params->get('profile_id', 0),
|
||||
'plugin' => $this->params->get('plugin', '')
|
||||
);
|
||||
|
||||
$signature = md5(serialize($config));
|
||||
|
||||
if (empty(self::$instances[$signature])) {
|
||||
// load base file
|
||||
require_once JPATH_ADMINISTRATOR . '/components/com_jce/includes/base.php';
|
||||
|
||||
// create editor
|
||||
self::$instances[$signature] = new WFEditor($config);
|
||||
}
|
||||
|
||||
return self::$instances[$signature];
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to handle the onInit event.
|
||||
* - Initializes the JCE WYSIWYG Editor.
|
||||
*
|
||||
* @param $toString Return javascript and css as a string
|
||||
*
|
||||
* @return string JavaScript Initialization string
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public function onInit()
|
||||
{
|
||||
if (!ComponentHelper::isEnabled('com_jce')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$language = Factory::getLanguage();
|
||||
$document = Factory::getDocument();
|
||||
|
||||
$language->load('plg_editors_jce', JPATH_ADMINISTRATOR);
|
||||
$language->load('com_jce', JPATH_ADMINISTRATOR);
|
||||
|
||||
$editor = $this->getEditorInstance();
|
||||
$editor->init();
|
||||
|
||||
foreach ($editor->getScripts() as $script) {
|
||||
$document->addScript($script);
|
||||
}
|
||||
|
||||
foreach ($editor->getStyleSheets() as $style) {
|
||||
$document->addStylesheet($style);
|
||||
}
|
||||
|
||||
$document->addScriptDeclaration(implode("\n", $editor->getScriptDeclaration()));
|
||||
}
|
||||
|
||||
/**
|
||||
* JCE WYSIWYG Editor - get the editor content.
|
||||
*
|
||||
* @vars string The name of the editor
|
||||
*/
|
||||
public function onGetContent($editor)
|
||||
{
|
||||
return $this->onSave($editor);
|
||||
}
|
||||
|
||||
/**
|
||||
* JCE WYSIWYG Editor - set the editor content.
|
||||
*
|
||||
* @vars string The name of the editor
|
||||
*/
|
||||
public function onSetContent($editor, $html)
|
||||
{
|
||||
return "WFEditor.setContent('" . $editor . "','" . $html . "');";
|
||||
}
|
||||
|
||||
/**
|
||||
* JCE WYSIWYG Editor - copy editor content to form field.
|
||||
*
|
||||
* @vars string The name of the editor
|
||||
*/
|
||||
public function onSave($editor)
|
||||
{
|
||||
return "WFEditor.getContent('" . $editor . "');";
|
||||
}
|
||||
|
||||
/**
|
||||
* JCE WYSIWYG Editor - Display the editor area.
|
||||
*
|
||||
* @param string $name The name of the editor area.
|
||||
* @param string $content The content of the field.
|
||||
* @param string $width The width of the editor area.
|
||||
* @param string $height The height of the editor area.
|
||||
* @param int $col The number of columns for the editor area.
|
||||
* @param int $row The number of rows for the editor area.
|
||||
* @param boolean $buttons True and the editor buttons will be displayed.
|
||||
* @param string $id An optional ID for the textarea. 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
|
||||
*/
|
||||
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';
|
||||
}
|
||||
|
||||
if (empty($id)) {
|
||||
$id = $name;
|
||||
}
|
||||
|
||||
// Data object for the layout
|
||||
$textarea = new stdClass;
|
||||
$textarea->name = $name;
|
||||
$textarea->id = $id;
|
||||
$textarea->class = 'mce_editable wf-editor';
|
||||
$textarea->cols = $col;
|
||||
$textarea->rows = $row;
|
||||
$textarea->width = $width;
|
||||
$textarea->height = $height;
|
||||
$textarea->content = $content;
|
||||
|
||||
$classes = version_compare(JVERSION, '4', 'ge') ? ' mb-2 joomla4' : '';
|
||||
|
||||
// Render Editor markup
|
||||
$html = '<div class="editor wf-editor-container' . $classes . '">';
|
||||
$html .= '<div class="wf-editor-header"></div>';
|
||||
$html .= LayoutHelper::render('editor.textarea', $textarea, __DIR__ . '/layouts');
|
||||
$html .= '</div>';
|
||||
|
||||
if (!ComponentHelper::isEnabled('com_jce')) {
|
||||
return $html;
|
||||
}
|
||||
|
||||
$editor = $this->getEditorInstance();
|
||||
|
||||
// no profile assigned or available
|
||||
if (!$editor->hasProfile()) {
|
||||
return $html;
|
||||
}
|
||||
|
||||
if (!$editor->hasPlugin('joomla')) {
|
||||
$html .= $this->displayButtons($id, $buttons, $asset, $author);
|
||||
} else {
|
||||
$list = $this->getXtdButtonsList($id, $buttons, $asset, $author);
|
||||
|
||||
if (!empty($list)) {
|
||||
$options = array(
|
||||
'joomla_xtd_buttons' => $list,
|
||||
);
|
||||
|
||||
Factory::getDocument()->addScriptOptions('plg_editor_jce', $options, true);
|
||||
}
|
||||
|
||||
// render empty container for dynamic buttons
|
||||
$html .= LayoutHelper::render('joomla.editors.buttons', array());
|
||||
}
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
public function onGetInsertMethod($name)
|
||||
{
|
||||
}
|
||||
|
||||
private function getXtdButtonsList($name, $buttons, $asset, $author)
|
||||
{
|
||||
$list = array();
|
||||
|
||||
$excluded = array('readmore', 'pagebreak', 'image');
|
||||
|
||||
if (!is_array($buttons)) {
|
||||
$buttons = !$buttons ? false : $excluded;
|
||||
} else {
|
||||
$buttons = array_merge($buttons, $excluded);
|
||||
}
|
||||
|
||||
$buttons = $this->getXtdButtons($name, $buttons, $asset, $author);
|
||||
|
||||
if (!empty($buttons)) {
|
||||
foreach ($buttons as $i => $button) {
|
||||
if ($button->get('name')) {
|
||||
// Set some vars
|
||||
$name = 'button-' . $i . '-' . str_replace(' ', '-', $button->get('text'));
|
||||
$title = $button->get('text');
|
||||
$onclick = $button->get('onclick') ?: '';
|
||||
$icon = $button->get('name');
|
||||
|
||||
if ($button->get('link') !== '#') {
|
||||
$href = JUri::base() . $button->get('link');
|
||||
} else {
|
||||
$href = '';
|
||||
}
|
||||
|
||||
$icon = 'none icon-' . $icon;
|
||||
|
||||
$list[] = array(
|
||||
'name' => $name,
|
||||
'title' => $title,
|
||||
'icon' => $icon,
|
||||
'href' => $href,
|
||||
'onclick' => $onclick,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
private function getXtdButtons($name, $buttons, $asset, $author)
|
||||
{
|
||||
$xtdbuttons = array();
|
||||
if (is_array($buttons) || (is_bool($buttons) && $buttons)) {
|
||||
$buttonsEvent = new Joomla\Event\Event(
|
||||
'getButtons',
|
||||
[
|
||||
'editor' => $name,
|
||||
'buttons' => $buttons,
|
||||
]
|
||||
);
|
||||
if (method_exists($this, 'getDispatcher')) {
|
||||
$buttonsResult = $this->getDispatcher()->dispatch('getButtons', $buttonsEvent);
|
||||
$xtdbuttons = $buttonsResult['result'];
|
||||
} else {
|
||||
$xtdbuttons = $this->_subject->getButtons($name, $buttons, $asset, $author);
|
||||
}
|
||||
}
|
||||
return $xtdbuttons;
|
||||
}
|
||||
|
||||
private function displayButtons($name, $buttons, $asset, $author)
|
||||
{
|
||||
$buttons = $this->getXtdButtons($name, $buttons, $asset, $author);
|
||||
|
||||
if (!empty($buttons)) {
|
||||
// fix some legacy buttons
|
||||
array_walk($buttons, function ($button) {
|
||||
$cls = $button->get('class', '');
|
||||
if (empty($cls) || strpos($cls, 'btn') === false) {
|
||||
$cls .= ' btn';
|
||||
$button->set('class', trim($cls));
|
||||
}
|
||||
});
|
||||
|
||||
return LayoutHelper::render('joomla.editors.buttons', $buttons);
|
||||
}
|
||||
}
|
||||
}
|
||||
26
plugins/editors/jce/jce.xml
Normal file
26
plugins/editors/jce/jce.xml
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<extension version="3.8" type="plugin" group="editors" method="upgrade">
|
||||
<name>plg_editors_jce</name>
|
||||
<version>2.9.32</version>
|
||||
<creationDate>01-11-2022</creationDate>
|
||||
<author>Ryan Demmer</author>
|
||||
<authorEmail>info@joomlacontenteditor.net</authorEmail>
|
||||
<authorUrl>http://www.joomlacontenteditor.net</authorUrl>
|
||||
<copyright>Copyright (C) 2006 - 2022 Ryan Demmer. All rights reserved</copyright>
|
||||
<license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license>
|
||||
<description>WF_EDITOR_PLUGIN_DESC</description>
|
||||
<files folder="plugins/editors/jce">
|
||||
<file plugin="jce">jce.php</file>
|
||||
<folder>layouts</folder>
|
||||
</files>
|
||||
|
||||
<!-- Media -->
|
||||
<media folder="media/jce" destination="jce">
|
||||
<folder>icons</folder>
|
||||
</media>
|
||||
|
||||
<languages folder="administrator/language/en-GB">
|
||||
<language tag="en-GB">en-GB.plg_editors_jce.ini</language>
|
||||
<language tag="en-GB">en-GB.plg_editors_jce.sys.ini</language>
|
||||
</languages>
|
||||
</extension>
|
||||
24
plugins/editors/jce/layouts/editor/textarea.php
Normal file
24
plugins/editors/jce/layouts/editor/textarea.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
/**
|
||||
* @package JCE
|
||||
* @subpackage Layout
|
||||
*
|
||||
* @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('JPATH_BASE') or die;
|
||||
|
||||
$data = $displayData;
|
||||
|
||||
?>
|
||||
<textarea
|
||||
spellcheck="false"
|
||||
autocomplete="off"
|
||||
name="<?php echo $data->name; ?>"
|
||||
id="<?php echo $data->id; ?>"
|
||||
cols="<?php echo $data->cols; ?>"
|
||||
rows="<?php echo $data->rows; ?>"
|
||||
style="width: <?php echo $data->width; ?>; height: <?php echo $data->height; ?>;"
|
||||
class="<?php echo empty($data->class) ? 'mce_editable' : $data->class; ?>"
|
||||
><?php echo $data->content; ?></textarea>
|
||||
Reference in New Issue
Block a user