From 8da8e500b9b1f93ead9cd71c7bbba8969bcfca22 Mon Sep 17 00:00:00 2001 From: Florent Torregrosa <florent.torregrosa@gmail.com> Date: Mon, 24 Mar 2025 14:24:34 +0100 Subject: [PATCH] Issue #3515034 by grimreaper: Layout Builder Reorder support --- src/Element/ElementPreRenderLayoutBuilder.php | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/Element/ElementPreRenderLayoutBuilder.php b/src/Element/ElementPreRenderLayoutBuilder.php index da7143ff..c9e54cae 100644 --- a/src/Element/ElementPreRenderLayoutBuilder.php +++ b/src/Element/ElementPreRenderLayoutBuilder.php @@ -17,7 +17,32 @@ class ElementPreRenderLayoutBuilder implements TrustedCallbackInterface { /** * Weight to ensure the section label is placed first. */ - public const SECTION_LABEL_WEIGHT = -1; + public const SECTION_LABEL_WEIGHT = -50; + + /** + * Weight to ensure the remove link is placed second. + */ + public const REMOVE_WEIGHT = -45; + + /** + * Weight to ensure the configure link is placed third. + */ + public const CONFIGURE_WEIGHT = -40; + + /** + * Weight to ensure the Section Library add to library link is placed fourth. + */ + public const SECTION_LIBRARY_ADD_WEIGHT = -35; + + /** + * Weight to ensure the Layout Builder Reorder up link is placed fifth. + */ + public const LAYOUT_BUILDER_REORDER_UP_WEIGHT = -30; + + /** + * Weight to ensure the Layout Builder Reorder down link is placed sixth. + */ + public const LAYOUT_BUILDER_REORDER_DOWN_WEIGHT = -25; /** * Handle styling for layout builder element. @@ -76,6 +101,7 @@ class ElementPreRenderLayoutBuilder implements TrustedCallbackInterface { $layoutBuilderArea->remove->addClass('mx-1'); $layoutBuilderArea->remove->setIcon(Bootstrap::icon('trash')); $layoutBuilderArea->remove->setProperty('icon_position', 'icon_only'); + $layoutBuilderArea->remove->setProperty('weight', static::REMOVE_WEIGHT); } } @@ -86,6 +112,7 @@ class ElementPreRenderLayoutBuilder implements TrustedCallbackInterface { $layoutBuilderArea->configure->addClass('mx-1'); $layoutBuilderArea->configure->setIcon(Bootstrap::icon('pencil-fill')); $layoutBuilderArea->configure->setProperty('icon_position', 'icon_only'); + $layoutBuilderArea->configure->setProperty('weight', static::CONFIGURE_WEIGHT); } } @@ -169,6 +196,29 @@ class ElementPreRenderLayoutBuilder implements TrustedCallbackInterface { $layoutBuilderArea->add_to_library->addClass('mx-1'); $layoutBuilderArea->add_to_library->setIcon(Bootstrap::icon('folder-plus')); $layoutBuilderArea->add_to_library->setProperty('icon_position', 'icon_only'); + $layoutBuilderArea->add_to_library->setProperty('weight', static::SECTION_LIBRARY_ADD_WEIGHT); + } + } + + // Layout Builder Reorder: Move section up. + if (isset($layoutBuilderArea->rearrange_up) && $layoutBuilderArea->rearrange_up->isType('link')) { + $url = $layoutBuilderArea->rearrange_up->getProperty('url'); + if ($url instanceof Url) { + $layoutBuilderArea->rearrange_up->addClass('mx-1'); + $layoutBuilderArea->rearrange_up->setIcon(Bootstrap::icon('arrow-up')); + $layoutBuilderArea->rearrange_up->setProperty('icon_position', 'icon_only'); + $layoutBuilderArea->rearrange_up->setProperty('weight', static::LAYOUT_BUILDER_REORDER_UP_WEIGHT); + } + } + + // Layout Builder Reorder: Move section down. + if (isset($layoutBuilderArea->rearrange_down) && $layoutBuilderArea->rearrange_down->isType('link')) { + $url = $layoutBuilderArea->rearrange_down->getProperty('url'); + if ($url instanceof Url) { + $layoutBuilderArea->rearrange_down->addClass('mx-1'); + $layoutBuilderArea->rearrange_down->setIcon(Bootstrap::icon('arrow-down')); + $layoutBuilderArea->rearrange_down->setProperty('icon_position', 'icon_only'); + $layoutBuilderArea->rearrange_down->setProperty('weight', static::LAYOUT_BUILDER_REORDER_DOWN_WEIGHT); } } } -- GitLab