first commit
This commit is contained in:
118
plugins/editors/tinymce/src/PluginTraits/XTDButtons.php
Normal file
118
plugins/editors/tinymce/src/PluginTraits/XTDButtons.php
Normal file
@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Plugin
|
||||
* @subpackage Editors.tinymce
|
||||
*
|
||||
* @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
namespace Joomla\Plugin\Editors\TinyMCE\PluginTraits;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Layout\LayoutHelper;
|
||||
use Joomla\CMS\Uri\Uri;
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
\defined('_JEXEC') or die;
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
|
||||
/**
|
||||
* Resolves the XTD Buttons for the current TinyMCE editor.
|
||||
*
|
||||
* @since 4.1.0
|
||||
*/
|
||||
trait XTDButtons
|
||||
{
|
||||
/**
|
||||
* Get the XTD buttons and render them inside tinyMCE
|
||||
*
|
||||
* @param mixed $buttons the buttons that should be hidden
|
||||
* @param array $options Associative array with additional parameters
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @since 4.1.0
|
||||
*/
|
||||
private function tinyButtons($buttons, array $options = []): array
|
||||
{
|
||||
// Get buttons from plugins
|
||||
$buttonsList = $this->getButtons($buttons, $options);
|
||||
|
||||
if (!$buttonsList) {
|
||||
return [];
|
||||
}
|
||||
|
||||
/** @var \Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->application->getDocument()->getWebAssetManager();
|
||||
$editorId = $options['editorId'] ?? '';
|
||||
|
||||
Text::script('PLG_TINY_CORE_BUTTONS');
|
||||
|
||||
// Build a buttons option for TinyMCE
|
||||
$tinyButtons = [];
|
||||
|
||||
foreach ($buttonsList as $button) {
|
||||
$title = $button->get('title') ?: $button->get('text', '');
|
||||
$icon = $button->get('icon');
|
||||
$link = $button->get('link');
|
||||
$action = $button->get('action', '');
|
||||
$options = (array) $button->get('options');
|
||||
|
||||
$btnAsset = 'editor-button.' . $button->getButtonName();
|
||||
|
||||
// Enable the button assets if any
|
||||
if ($wa->assetExists('style', $btnAsset)) {
|
||||
$wa->useStyle($btnAsset);
|
||||
}
|
||||
if ($wa->assetExists('script', $btnAsset)) {
|
||||
$wa->useScript($btnAsset);
|
||||
}
|
||||
|
||||
// Correct the link
|
||||
if ($link && $link[0] !== '#') {
|
||||
$link = str_contains($link, '&') ? htmlspecialchars_decode($link) : $link;
|
||||
$link = Uri::base(true) . '/' . $link;
|
||||
$options['src'] = $options['src'] ?? $link;
|
||||
}
|
||||
|
||||
// Set action to "modal" for legacy buttons, when possible
|
||||
$legacyModal = $button->get('modal');
|
||||
|
||||
// Prepare default values for modal
|
||||
if ($action === 'modal') {
|
||||
$wa->useScript('joomla.dialog');
|
||||
$legacyModal = false;
|
||||
|
||||
$options['popupType'] = $options['popupType'] ?? 'iframe';
|
||||
$options['textHeader'] = $options['textHeader'] ?? $title;
|
||||
$options['iconHeader'] = $options['iconHeader'] ?? 'icon-' . $icon;
|
||||
}
|
||||
|
||||
$coreButton = [];
|
||||
$coreButton['name'] = $title;
|
||||
$coreButton['icon'] = $icon;
|
||||
$coreButton['click'] = $button->get('onclick');
|
||||
$coreButton['iconSVG'] = $button->get('iconSVG');
|
||||
$coreButton['action'] = $action;
|
||||
$coreButton['options'] = $options;
|
||||
|
||||
if ($legacyModal) {
|
||||
$coreButton['bsModal'] = true;
|
||||
$coreButton['id'] = $editorId . '_' . $button->name;
|
||||
|
||||
$button->id = $editorId . '_' . $button->name . '_modal';
|
||||
|
||||
echo LayoutHelper::render('joomla.editors.buttons.modal', $button);
|
||||
}
|
||||
|
||||
// The array with the toolbar buttons
|
||||
$tinyButtons[] = $coreButton;
|
||||
}
|
||||
|
||||
sort($tinyButtons);
|
||||
|
||||
return ['names' => $tinyButtons];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user