- From: Adam Sobieski <notifications@github.com>
- Date: Wed, 08 Nov 2023 09:24:40 -0800
- To: whatwg/dom <dom@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/dom/issues/1233@github.com>
### What problem are you trying to solve?
What if DOM and HTML server-sent events could be filtered and/or selected using CSS-based selectors, e.g., for purposes of determining which to log or to otherwise process?
### What solutions exist today?
The DOM interface for events is [`Event`](https://dom.spec.whatwg.org/#interface-event) and the HTML interface for server-sent events is [`EventSource`](https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface).
As far as I know, neither model supports filtering and/or selecting events with CSS-based selectors.
### How would you solve it?
With respect to representing events, a number of non-mutually-exclusive options can be considered:
1. Events implement [`Event`](https://dom.spec.whatwg.org/#interface-event).
2. Events implement [`DocumentFragment`](https://dom.spec.whatwg.org/#interface-documentfragment).
3. Events implement [`boolean matches(DOMString selectors)`](https://dom.spec.whatwg.org/#dom-element-matches).
4. Other
Events could each have one or more classes, resembling the [publish-subscribe pattern](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern). In markup, this might resemble:
```xml
<event class="cls1 cls2" />
```
Events could have attributes. In markup, this might resemble:
```xml
<event class="cls1 cls2" attr="value" />
```
Events could be raised or dispatched with argument objects. These argument objects could be child elements of their events. In markup, this might resemble:
```xml
<event class="cls1 cls2">
<argument key1="value1" key2="value2" />
</event>
```
Kinds of events could be identified by URI's. In markup, this might resemble:
```xml
<html:progressevent class="cls1 cls2" xmlns:html="http://www.w3.org/1999/xhtml">
<argument key1="value1" key2="value2" />
</html:progressevent>
```
A special-purpose CSS property, `log`, could be used to indicate whether or not to log selected events.
```css
.cls1 { log: true; }
```
```css
.cls1:has(> [key1='value1']) { log: true; }
```
A multi-valued special-purpose CSS property, `subscribe`, could, similarly, be used to indicate which logs to log selected events to.
```css
.cls1:has(> [key1='value1']) { subscribe: log1 log2; }
```
Syntax could be explored with which to enable expressiveness to select events and patterns thereof as occurring in event streams.
### Anything else?
Thank you.
--
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/dom/issues/1233
You are receiving this because you are subscribed to this thread.
Message ID: <whatwg/dom/issues/1233@github.com>
Received on Wednesday, 8 November 2023 17:24:46 UTC