- From: Shiba <notifications@github.com>
- Date: Wed, 29 Jan 2025 03:18:30 -0800
- To: WICG/webcomponents <webcomponents@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <WICG/webcomponents/issues/1029/2621364132@github.com>
Some little type-safety can be achieved.
```ts
declare global {
interface CustomAttributeRegistry<T extends Element> {
define<TAttr extends Attr>(
name: string,
attribute: T extends TAttr["ownerElement"] ? { new (): TAttr } : never
): void
}
}
declare var HTMLVideoElement: {
prototype: HTMLVideoElement
new (): HTMLVideoElement
customAttributes: CustomAttributeRegistry<HTMLVideoElement>
}
declare var HTMLImageElement: {
prototype: HTMLImageElement
new (): HTMLImageElement
customAttributes: CustomAttributeRegistry<HTMLImageElement>
}
class AutoPlayWhenVisibleAttr extends Attr {
public override readonly ownerElement: HTMLVideoElement | null
public override value: "true" | "false"
// When element is connected to DOM and attribute is added to the element
connectedCallback() {
/* start logic */
}
// When element is disconnected from the DOM or "before" attribute is removed from the element
disconnectedCallback() {
/* cleanup logic */
}
}
HTMLVideoElement.customAttributes.define("autoplay-on-visible", AutoPlayWhenVisibleAttr)
HTMLImageElement.customAttributes.define("autoplay-on-visible", AutoPlayWhenVisibleAttr) // type error
```
Also something to get/set/remove attribute by not name, but constructor would be infinitely helpful.
I'm not sure how it should look but something like this.
```ts
element.attributes.getItemByConstructor(MyAttribute) satisfies MyAttribute | null
element.getAttributeNodeByConstructor(MyAttribute) satisfies MyAttribute | null
// It can be overloaded to already existing methods as well
element.getAttributeNode(MyAttribute) satisfies MyAttribute | null
```
--
Reply to this email directly or view it on GitHub:
https://github.com/WICG/webcomponents/issues/1029#issuecomment-2621364132
You are receiving this because you are subscribed to this thread.
Message ID: <WICG/webcomponents/issues/1029/2621364132@github.com>
Received on Wednesday, 29 January 2025 11:18:34 UTC