From b36fe403c400bc5ca0d891bc0cd4835d632af4d4 Mon Sep 17 00:00:00 2001 From: Chris Huber Date: Sun, 7 Jun 2026 15:46:42 -0400 Subject: [PATCH] vendor: refresh html converter snapshot --- composer.lock | 8 +-- .../includes/class-transform-registry.php | 53 +++++++++++++++++++ .../tests/smoke-static-site-chrome.php | 13 +++++ 3 files changed, 70 insertions(+), 4 deletions(-) diff --git a/composer.lock b/composer.lock index b0751d5..24a79fe 100644 --- a/composer.lock +++ b/composer.lock @@ -726,12 +726,12 @@ "source": { "type": "git", "url": "https://github.com/chubes4/html-to-blocks-converter.git", - "reference": "5afe78315a77ccae5ddef74e5967e476aa7a615d" + "reference": "c4f9418c8fbf5d13ebf619f654a7209ea05f7989" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/chubes4/html-to-blocks-converter/zipball/5afe78315a77ccae5ddef74e5967e476aa7a615d", - "reference": "5afe78315a77ccae5ddef74e5967e476aa7a615d", + "url": "https://api.github.com/repos/chubes4/html-to-blocks-converter/zipball/c4f9418c8fbf5d13ebf619f654a7209ea05f7989", + "reference": "c4f9418c8fbf5d13ebf619f654a7209ea05f7989", "shasum": "" }, "require": { @@ -759,7 +759,7 @@ "source": "https://github.com/chubes4/html-to-blocks-converter/tree/main", "issues": "https://github.com/chubes4/html-to-blocks-converter/issues" }, - "time": "2026-06-07T18:18:54+00:00" + "time": "2026-06-07T19:43:57+00:00" }, { "name": "fidry/console", diff --git a/vendor_prefixed/chubes4/html-to-blocks-converter/includes/class-transform-registry.php b/vendor_prefixed/chubes4/html-to-blocks-converter/includes/class-transform-registry.php index bfb6de9..8db4398 100644 --- a/vendor_prefixed/chubes4/html-to-blocks-converter/includes/class-transform-registry.php +++ b/vendor_prefixed/chubes4/html-to-blocks-converter/includes/class-transform-registry.php @@ -876,6 +876,10 @@ private static function get_button_transforms() return self::is_static_visual_button_container($element); }, 'transform' => function ($element) { return self::create_static_visual_button_group($element); + }), array('blockName' => 'core/group', 'priority' => 8, 'selector' => 'button', 'isMatch' => function ($element) { + return self::is_static_toggle_button_chrome($element); + }, 'transform' => function ($element) { + return self::create_static_toggle_button_group($element); }), array('blockName' => 'core/paragraph', 'priority' => 8, 'selector' => 'button', 'isMatch' => function ($element) { return self::is_static_navigation_toggle_button($element); }, 'transform' => function ($element) { @@ -1070,6 +1074,55 @@ private static function is_static_visual_button($element): bool $class_name = $element->has_attribute('class') ? $element->get_attribute('class') : ''; return \preg_match('/(?:^|[-_\s])(?:tabs?|chips?|filters?|pills?|segmented|selector|use[-_]?case)(?:$|[-_\s])/i', $class_name) === 1; } + /** + * Checks whether a button is inert navigation toggle chrome. + * + * @param HTML_To_Blocks_HTML_Element $element Element to inspect. + * @return bool True when the button can safely become native visual chrome. + */ + private static function is_static_toggle_button_chrome($element): bool + { + if ('BUTTON' !== $element->get_tag_name()) { + return \false; + } + if ($element->has_attribute('form') || $element->has_attribute('name') || $element->has_attribute('value')) { + return \false; + } + $type = \strtolower(\trim((string) ($element->get_attribute('type') ?? ''))); + if ('' !== $type && 'button' !== $type) { + return \false; + } + $class_name = $element->has_attribute('class') ? $element->get_attribute('class') : ''; + if (\preg_match('/(?:^|[-_\s])(?:nav[-_\s]?toggle|menu[-_\s]?toggle|hamburger)(?:$|[-_\s])/i', $class_name) !== 1) { + return \false; + } + $children = $element->get_child_elements(); + if (empty($children)) { + return \trim($element->get_text_content()) === ''; + } + foreach ($children as $child) { + if (!\in_array($child->get_tag_name(), array('SPAN', 'DIV'), \true)) { + return \false; + } + if (self::is_empty_element($child)) { + continue; + } + if (!self::class_matches($child, '/(?:^|\s)sr-only(?:\s|$)/i') || array() !== $child->get_child_elements()) { + return \false; + } + } + return \true; + } + /** + * Creates native visual chrome for an inert navigation toggle button. + * + * @param HTML_To_Blocks_HTML_Element $element Button element. + * @return array Block array. + */ + private static function create_static_toggle_button_group($element): array + { + return HTML_To_Blocks_Block_Factory::create_block('core/group', self::get_common_layout_attributes($element)); + } /** * Creates a native group from a static visual button row. * diff --git a/vendor_prefixed/chubes4/html-to-blocks-converter/tests/smoke-static-site-chrome.php b/vendor_prefixed/chubes4/html-to-blocks-converter/tests/smoke-static-site-chrome.php index 1058006..e103d38 100644 --- a/vendor_prefixed/chubes4/html-to-blocks-converter/tests/smoke-static-site-chrome.php +++ b/vendor_prefixed/chubes4/html-to-blocks-converter/tests/smoke-static-site-chrome.php @@ -173,6 +173,19 @@ function html_to_blocks_smoke_block_names(array $blocks): array $assert(\str_contains($salt_star_serialized, 'href="#our-bakes"'), 'salt-star-nav-preserves-our-bakes-href', $salt_star_serialized); $assert(\str_contains($salt_star_serialized, 'href="#visit"'), 'salt-star-nav-preserves-visit-href', $salt_star_serialized); $assert(\str_contains($salt_star_serialized, 'href="#order"'), 'salt-star-nav-preserves-order-href', $salt_star_serialized); +$restaurant_nav_html = << + Ember & RyeWood-Fired Pizza + + + +HTML; +$restaurant_nav_serialized = serialize_blocks(html_to_blocks_raw_handler(['HTML' => $restaurant_nav_html])); +$assert(!\str_contains($restaurant_nav_serialized, ''), 'restaurant-nav-toggle-avoids-core-html-fallback', $restaurant_nav_serialized); +$assert(\str_contains($restaurant_nav_serialized, '