From c1d150d4bac388df3f5a9f562d70e65e69d0207a Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Thu, 1 May 2025 13:38:17 -0400 Subject: [PATCH] Minor TinyMCE updates plus make a method hookable for more configuration options --- .../InputfieldTinyMCE.module.php | 2 +- .../InputfieldTinyMCEClass.php | 5 ++++- .../InputfieldTinyMCESettings.php | 17 +++++++++++++++-- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/wire/modules/Inputfield/InputfieldTinyMCE/InputfieldTinyMCE.module.php b/wire/modules/Inputfield/InputfieldTinyMCE/InputfieldTinyMCE.module.php index d96787cf..06792934 100644 --- a/wire/modules/Inputfield/InputfieldTinyMCE/InputfieldTinyMCE.module.php +++ b/wire/modules/Inputfield/InputfieldTinyMCE/InputfieldTinyMCE.module.php @@ -135,7 +135,7 @@ class InputfieldTinyMCE extends InputfieldTextarea implements ConfigurableModule * * field: setting names populated by init(). * module: setting names populated by __construct(). - * defult: setting names that had the value 'default' set prior to init(). + * default: setting names that had the value 'default' set prior to init(). * tinymce: setting names are those native to TinyMCE. * optionals: settings that can be configured with module OR field. * diff --git a/wire/modules/Inputfield/InputfieldTinyMCE/InputfieldTinyMCEClass.php b/wire/modules/Inputfield/InputfieldTinyMCE/InputfieldTinyMCEClass.php index 33422179..773c6bbe 100644 --- a/wire/modules/Inputfield/InputfieldTinyMCE/InputfieldTinyMCEClass.php +++ b/wire/modules/Inputfield/InputfieldTinyMCE/InputfieldTinyMCEClass.php @@ -7,6 +7,8 @@ * * ProcessWire 3.x, Copyright 2022 by Ryan Cramer * https://processwire.com + * + * @property InputfieldTinyMCE $inputfield * */ abstract class InputfieldTinyMCEClass extends Wire { @@ -38,6 +40,7 @@ abstract class InputfieldTinyMCEClass extends Wire { */ public function __get($name) { switch($name) { + case 'inputfield': return $this->inputfield; case 'tools': case 'settings': case 'configs': @@ -78,4 +81,4 @@ abstract class InputfieldTinyMCEClass extends Wire { public function formats() { return $this->inputfield->helper('formats'); } -} \ No newline at end of file +} diff --git a/wire/modules/Inputfield/InputfieldTinyMCE/InputfieldTinyMCESettings.php b/wire/modules/Inputfield/InputfieldTinyMCE/InputfieldTinyMCESettings.php index 36f9e952..b34088fe 100644 --- a/wire/modules/Inputfield/InputfieldTinyMCE/InputfieldTinyMCESettings.php +++ b/wire/modules/Inputfield/InputfieldTinyMCE/InputfieldTinyMCESettings.php @@ -7,6 +7,8 @@ * * ProcessWire 3.x, Copyright 2023 by Ryan Cramer * https://processwire.com + * + * @method array prepareSettingsForOutput(array $settings) * */ class InputfieldTinyMCESettings extends InputfieldTinyMCEClass { @@ -68,6 +70,7 @@ class InputfieldTinyMCESettings extends InputfieldTinyMCEClass { $value = $inputfield->get('content_css_url'); if(empty($value)) continue; } + $value = $this->getContentCssUrl($value); } else if($name === 'directionality') { $value = $inputfield->getDirectionality(); } else if($name === 'style_formats') { @@ -379,7 +382,12 @@ class InputfieldTinyMCESettings extends InputfieldTinyMCEClass { } else if(strpos($content_css, '/') !== false) { // custom file - $url = $rootUrl . ltrim($content_css, '/'); + if(strpos($content_css, $rootUrl) === 0) { + $url = $content_css; + } else { + $url = $rootUrl . ltrim($content_css, '/'); + } + // $url = $rootUrl . ltrim($content_css, '/'); } else if($content_css === 'custom') { // custom file (alternate/fallback) @@ -398,6 +406,10 @@ class InputfieldTinyMCESettings extends InputfieldTinyMCEClass { } else { $url = $defaultUrl; } + + if(strpos($url, '.css') === false) { + $url = rtrim($url, '/') . '/content.css'; + } return $url; } @@ -411,7 +423,7 @@ class InputfieldTinyMCESettings extends InputfieldTinyMCEClass { * @return array * */ - public function prepareSettingsForOutput(array $settings) { + public function ___prepareSettingsForOutput(array $settings) { $config = $this->wire()->config; $rootUrl = $config->urls->root; //$inline = $this->inputfield->inlineMode > 0; @@ -721,6 +733,7 @@ class InputfieldTinyMCESettings extends InputfieldTinyMCEClass { // remove settings that cannot be set for field/template context unset($mergedSettings['style_formats'], $mergedSettings['content_style'], $mergedSettings['content_css']); $dataSettings = $this->getSettings($mergedSettings); + $this->applySkin($dataSettings, $defaults); } else { // no configName in use, data-settings attribute will hold all non-default settings