From 89b5cdcd882e456f3937c4b827bed997a90e3841 Mon Sep 17 00:00:00 2001 From: CHARLIE ETIENNE Date: Tue, 26 Aug 2025 12:42:16 +0200 Subject: [PATCH 1/8] introduce processNodesUsing method --- .../RichEditor/RichContentRenderer.php | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/forms/src/Components/RichEditor/RichContentRenderer.php b/packages/forms/src/Components/RichEditor/RichContentRenderer.php index 559d99700a..b21724b1be 100644 --- a/packages/forms/src/Components/RichEditor/RichContentRenderer.php +++ b/packages/forms/src/Components/RichEditor/RichContentRenderer.php @@ -83,6 +83,13 @@ class RichContentRenderer implements Htmlable */ protected array $cachedMergeTagValues = []; + protected ?Closure $nodeProcessor = null; + + /** + * @var array> + */ + protected array $nodeAttributes = []; + /** * @param string | array | null $content */ @@ -236,6 +243,22 @@ class RichContentRenderer implements Htmlable }); } + public function processNodesUsing(Closure $callback): static + { + $this->nodeProcessor = $callback; + + return $this; + } + + protected function processNodes(Editor $editor): void + { + if (blank($this->nodeProcessor)) { + return; + } + + $editor->descendants($this->nodeProcessor); + } + /** * @return array */ @@ -341,6 +364,7 @@ class RichContentRenderer implements Htmlable $this->processCustomBlocks($editor); $this->processFileAttachments($editor); $this->processMergeTags($editor); + $this->processNodes($editor); return $editor->getHTML(); } From b1603b371c9dbb5ccc4ebfb841981449312849f9 Mon Sep 17 00:00:00 2001 From: CHARLIE ETIENNE Date: Tue, 26 Aug 2025 12:59:29 +0200 Subject: [PATCH 2/8] remove useless property --- .../forms/src/Components/RichEditor/RichContentRenderer.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/forms/src/Components/RichEditor/RichContentRenderer.php b/packages/forms/src/Components/RichEditor/RichContentRenderer.php index b21724b1be..1cdfb1ba08 100644 --- a/packages/forms/src/Components/RichEditor/RichContentRenderer.php +++ b/packages/forms/src/Components/RichEditor/RichContentRenderer.php @@ -85,11 +85,6 @@ class RichContentRenderer implements Htmlable protected ?Closure $nodeProcessor = null; - /** - * @var array> - */ - protected array $nodeAttributes = []; - /** * @param string | array | null $content */ From 4ecf65f3981ce6b5e76a74e5510fa81fdbd8226a Mon Sep 17 00:00:00 2001 From: CharlieEtienne Date: Tue, 26 Aug 2025 16:45:31 +0000 Subject: [PATCH 3/8] chore: fix code style --- packages/support/resources/js/sortable.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/support/resources/js/sortable.js b/packages/support/resources/js/sortable.js index 912f0a3d14..6252f75c7e 100644 --- a/packages/support/resources/js/sortable.js +++ b/packages/support/resources/js/sortable.js @@ -22,7 +22,8 @@ export default (Alpine) => { const { item: draggedNode, to: parentNode, newIndex } = event const draggableSelector = this.options.draggable - const previousNode = parentNode.querySelectorAll(draggableSelector)[newIndex - 1] + const previousNode = + parentNode.querySelectorAll(draggableSelector)[newIndex - 1] if (previousNode) { parentNode.insertBefore( From d841136de865c7d1ceae8b3bb3da432fb8785ce7 Mon Sep 17 00:00:00 2001 From: CHARLIE ETIENNE Date: Wed, 27 Aug 2025 08:47:13 +0200 Subject: [PATCH 4/8] allow multiple node processors in RichContentRenderer --- .../Components/RichEditor/RichContentRenderer.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/forms/src/Components/RichEditor/RichContentRenderer.php b/packages/forms/src/Components/RichEditor/RichContentRenderer.php index 1cdfb1ba08..d4e76ba2f8 100644 --- a/packages/forms/src/Components/RichEditor/RichContentRenderer.php +++ b/packages/forms/src/Components/RichEditor/RichContentRenderer.php @@ -83,7 +83,11 @@ class RichContentRenderer implements Htmlable */ protected array $cachedMergeTagValues = []; - protected ?Closure $nodeProcessor = null; + /** + * @var array + */ + protected array $nodeProcessors = []; + /** * @param string | array | null $content @@ -240,18 +244,20 @@ class RichContentRenderer implements Htmlable public function processNodesUsing(Closure $callback): static { - $this->nodeProcessor = $callback; + $this->nodeProcessors[] = $callback; return $this; } protected function processNodes(Editor $editor): void { - if (blank($this->nodeProcessor)) { + if (empty($this->nodeProcessors)) { return; } - $editor->descendants($this->nodeProcessor); + foreach ($this->nodeProcessors as $processor) { + $editor->descendants($processor); + } } /** From 6cc303bc206e175fce5be21eb4a58fd622b18b6d Mon Sep 17 00:00:00 2001 From: CharlieEtienne Date: Wed, 27 Aug 2025 07:02:00 +0000 Subject: [PATCH 5/8] chore: fix code style --- packages/forms/src/Components/RichEditor/RichContentRenderer.php | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/forms/src/Components/RichEditor/RichContentRenderer.php b/packages/forms/src/Components/RichEditor/RichContentRenderer.php index d4e76ba2f8..baff79d595 100644 --- a/packages/forms/src/Components/RichEditor/RichContentRenderer.php +++ b/packages/forms/src/Components/RichEditor/RichContentRenderer.php @@ -88,7 +88,6 @@ class RichContentRenderer implements Htmlable */ protected array $nodeProcessors = []; - /** * @param string | array | null $content */ From 34f7d1a2c30ae1585ddadb9a8c7142b25dc511fc Mon Sep 17 00:00:00 2001 From: CHARLIE ETIENNE Date: Sun, 7 Sep 2025 23:05:44 +0200 Subject: [PATCH 6/8] add support for loading attribute in Image extension --- .../RichEditor/TipTapExtensions/ImageExtension.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/forms/src/Components/RichEditor/TipTapExtensions/ImageExtension.php b/packages/forms/src/Components/RichEditor/TipTapExtensions/ImageExtension.php index 84463cb90a..7586ebd4f8 100644 --- a/packages/forms/src/Components/RichEditor/TipTapExtensions/ImageExtension.php +++ b/packages/forms/src/Components/RichEditor/TipTapExtensions/ImageExtension.php @@ -32,6 +32,13 @@ class ImageExtension extends BaseImage 'parseHTML' => fn ($DOMNode) => $DOMNode->getAttribute('data-id') ?: null, 'renderHTML' => fn ($attributes) => ['data-id' => $attributes->id ?? null], ], + 'loading' => [ + 'default' => null, + 'parseHTML' => fn ($DOMNode) => $DOMNode->getAttribute('loading') ?: null, + 'renderHTML' => fn ($attributes) => [ + 'loading' => $attributes->loading ?? null, + ], + ], ]; } } From c1f0b72f75254ef84b852e0c918ae856ec51e123 Mon Sep 17 00:00:00 2001 From: CHARLIE ETIENNE Date: Mon, 8 Sep 2025 22:09:09 +0200 Subject: [PATCH 7/8] simplify implementation --- .../RichEditor/TipTapExtensions/ImageExtension.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/forms/src/Components/RichEditor/TipTapExtensions/ImageExtension.php b/packages/forms/src/Components/RichEditor/TipTapExtensions/ImageExtension.php index 7586ebd4f8..3cf29e6540 100644 --- a/packages/forms/src/Components/RichEditor/TipTapExtensions/ImageExtension.php +++ b/packages/forms/src/Components/RichEditor/TipTapExtensions/ImageExtension.php @@ -32,13 +32,7 @@ class ImageExtension extends BaseImage 'parseHTML' => fn ($DOMNode) => $DOMNode->getAttribute('data-id') ?: null, 'renderHTML' => fn ($attributes) => ['data-id' => $attributes->id ?? null], ], - 'loading' => [ - 'default' => null, - 'parseHTML' => fn ($DOMNode) => $DOMNode->getAttribute('loading') ?: null, - 'renderHTML' => fn ($attributes) => [ - 'loading' => $attributes->loading ?? null, - ], - ], + 'loading' => [], ]; } } From 576a9bd50baaacaa76a9d818d16b72ac1491ed1c Mon Sep 17 00:00:00 2001 From: CHARLIE ETIENNE Date: Mon, 8 Sep 2025 22:10:19 +0200 Subject: [PATCH 8/8] remove useless check --- .../forms/src/Components/RichEditor/RichContentRenderer.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/forms/src/Components/RichEditor/RichContentRenderer.php b/packages/forms/src/Components/RichEditor/RichContentRenderer.php index 4dfdd5289f..c456bef040 100644 --- a/packages/forms/src/Components/RichEditor/RichContentRenderer.php +++ b/packages/forms/src/Components/RichEditor/RichContentRenderer.php @@ -250,10 +250,6 @@ class RichContentRenderer implements Htmlable protected function processNodes(Editor $editor): void { - if (empty($this->nodeProcessors)) { - return; - } - foreach ($this->nodeProcessors as $processor) { $editor->descendants($processor); }