diff --git a/php-transformer/src/HtmlToBlocks/HtmlTransformer.php b/php-transformer/src/HtmlToBlocks/HtmlTransformer.php index adb60df..bf3584a 100644 --- a/php-transformer/src/HtmlToBlocks/HtmlTransformer.php +++ b/php-transformer/src/HtmlToBlocks/HtmlTransformer.php @@ -1483,7 +1483,6 @@ private function convertElement(DOMElement $element, array &$fallbacks, bool $ca $controls = $this->formControls($element); $readableFormBlock = $this->readableFormBlockFromForm($element, true); - $boundedHtml = $this->boundedFallbackHtml($this->safeFallbackHtml($element)); $this->recordRuntimeIsland($element, 'form', 'form_requires_runtime', 'server_or_client_form_handler', array( 'form' => $this->formMetadata($element), 'controls' => $controls, @@ -1502,28 +1501,7 @@ private function convertElement(DOMElement $element, array &$fallbacks, bool $ca // Carrying the generic control list (tag/type/name/required/options) // keeps the transformer free of any provider or plugin knowledge. if ( null === $readableFormBlock || $this->formHasDataEntryControls($element) ) { - $fallbacks[] = FallbackDiagnostic::build(array( - 'type' => 'html', - 'reason' => 'form_requires_runtime', - 'diagnostic_code' => 'html_form_fallback', - 'message' => 'Form HTML requires runtime behavior and was preserved as safe fallback metadata.', - 'source_format' => 'html', - 'tag' => $tagName, - 'selector' => $this->elementSelector($element), - 'attributes' => $this->htmlAttributes($element), - 'form' => $this->formMetadata($element), - 'context' => $this->sourceContext($element), - 'classification' => $this->fallbackEmitter->classifyFallbackSubtree($element), - 'events' => $this->eventMetadata($element), - 'readable_blocks' => null !== $readableFormBlock ? array( $readableFormBlock ) : array(), - 'controls' => $controls, - 'control_count' => count($controls), - 'text_length' => strlen(trim($element->textContent ?? '')), - 'child_count' => $this->childElementCount($element), - 'html' => $boundedHtml['html'], - 'html_bytes' => $boundedHtml['bytes'], - 'html_truncated' => $boundedHtml['truncated'], - ), $this->fallbackProvenance); + $fallbacks[] = $this->formFallbackFinding($element, $readableFormBlock); } return $readableFormBlock; @@ -1537,6 +1515,19 @@ private function convertElement(DOMElement $element, array &$fallbacks, bool $ca } if ( in_array($tagName, array( 'article', 'aside', 'body', 'center', 'div', 'footer', 'header', 'main', 'nav', 'section' ), true) ) { + // Div-based pseudo-form (issue #315 follow-up): some signup/contact + // widgets pair data-entry controls with a submit-like control inside a + // plain container and never wrap them in a