magento2-Ho_Templatehints
magento2-Ho_Templatehints copied to clipboard
Problem with HTML parsing
We have the following HTML
<!--Authentication Pop-Up-->
</div></header><div x-data="initHeaderNavigation()"
x-init="$watch('activeSubmenuId', value => activateSubmenuMobile(value))"
The module inserts the hint like this
<!--Authentication Pop-Up-->
</div></header><div x-data="initHeaderNavigation()"
x-init="$watch('activeSubmenuId', value = data-ho-hinttype="block" ....
@menu-back.window="back"
class="relative z-50 font-bold bg-gray-200 lg:block lg:z-40"
Reason: We should not parse HTML with regex https://github.com/ho-nl/magento2-Ho_Templatehints/blob/master/Plugin/View/LayoutPlugin.php#L117
Related to Hyvä, because we use Alpine JS there and these notations are common
https://gitlab.hyva.io/hyva-themes/hyva-compat/magento2-ho-templatehints/-/issues/2
https://stackoverflow.com/a/3983057/288568
I tried
public function decorateOuterElement($html, $attributes)
{
if (! $html) {
return $html;
}
$dom = new \DOMDocument();
@$dom->loadHTML($html);
foreach($dom->childNodes as $child) {
if ($child instanceof \DOMDocumentType) {
continue;
}
foreach ($attributes as $key => $value) {
$child->setAttribute($key, $value);
}
}
return $dom->saveHtml();;
}
but this does not work, as we have Parts of HTML, not full DOMdocuments - this leads to new nodes everywhere
Regexp
'/(<\b[^><=]*)>/i'
as suggests by Vinai would probably work