Hi Larry
On 18/02/2024 18:25, Larry Garfield wrote:
> On Sat, Feb 17, 2024, at 5:11 PM, Niels Dossche wrote:
>> Hi internals
>>
>> After (and if) my current in-voting RFC about spec-compliance DOM
>> passes, some features become more easily possible to implement due to
>> the necessary building blocks becoming in place in the extension code.
>>
>> I would like to start implementing those. Therefore, I'd like to gauge
>> the opinion of the community on the following two features before
>> making an actual RFC and sitting through the process again.
>>
>> 1) Helper functions for CSS classes (i.e. classList). Requested here:
>> https://github.com/php/php-src/issues/11688
>>
>> This feature would add the DOMTokenList class along with the classList
>> property to the Element class.
>> It exists to ease the managing of CSS classes on elements, i.e. it
>> deals with whitespace, duplicate class names, etc all for you using a
>> simple set-like API.
>>
>> I expect that implementing this into the DOM extension is not too
>> difficult, as the spec steps are really straight-forward [1] and we
>> just have to reuse the internal APIs to manage attributes.
>>
>> 2) Built-in CSS selector API support
>>
>> In particular, Element::querySelector(All), Element::matches, and
>> Element::closest support.
>> For "old DOM" there is a trick to at least implement querySelector(All)
>> in userland, and that is to translate the selector to XPath and use
>> XPath queries internally. However, that's slower and more cumbersome
>> than a native implementation. It's also just silly to not have this
>> natively available since it's so commonly used.
>>
>> I have a prototype implementation of this already actually, because I
>> got bored while fixing spec-compliance issues and wanted some funner
>> stuff to do. It's based on Lexbor's CSS support.
>>
>>
>> Kind regards
>> Niels
>>
>> [1] https://dom.spec.whatwg.org/#interface-domtokenlist
>
> I feel like the CSS-based querySelector() was discussed not that long ago. Was it by you? Lexbor sounds familiar.
I have mentioned it in the past, I couldn't find another discussion specifically about it on externals.io.
So it was probably me :-)
As for Lexbor, I did mention it both in my current RFC and previous RFC.
In short: it's the library allowing us to have HTML5 support.
Cheers
Niels