- From: <bugzilla@jessica.w3.org>
- Date: Tue, 07 May 2013 21:12:16 +0000
- To: public-webapps-bugzilla@w3.org
https://www.w3.org/Bugs/Public/show_bug.cgi?id=21888
--- Comment #1 from Dimitri Glazkov <dglazkov@chromium.org> ---
(In reply to comment #0)
> This bookmark "#dfn-custom-element-definition" is referred to from Step 1 of
> the element initialization algorithm but does not seem to be defined
> anywhere.
>
> What I'm trying to close in on is a simplification of the spec.
> Specifically, there's an asymmetry between document.register, which seems to
> admit setting up a type extension of a custom tag, for example:
>
> XA = document.register('x-a');
> XB = document.register('x-b', {prototype: XA.prototype});
>
> and createElement/parsing which says that:
>
> "After a custom element is instantiated, changing the value of the is
> attribute must not affect this element's custom element name.
>
> If both types of custom element names are provided at the time of element's
> instantiation, the custom tag must win over the type extension."
>
> I'm specifically worried about the difference in meaning between parsing
> <x-a is="x-b"></x-a> and simply calling new XB().
In <x-a is="x-b">, the "is" value is simply ignored. It has no meaning, right
(since the custom tag won)?
>
> For example, could this create a constructor XB that is almost an alias of
> XA, but has subtly different lifecycle callbacks?
>
> p = Object.create(HTMLElement.prototype, {
> readyCallback: {value: t}
> });
> XA = document.register('x-a', {prototype: p});
> XA.prototype.readyCallback = u;
> XB = document.register('x-b', {prototype: XA.prototype});
>
> Then:
>
> document.body.innerHTML = '<x-a></x-a>'
>
> will call t. This is unsurprising.
>
> document.createElement('x-a', 'x-b')
>
> will call t (because "If both types of custom element names are provided at
> the time of element's instantiation, the custom tag must win over the type
> extension.")
Yes, because the author simply created an instance of XA here. The "is" value
is ignored.
>
> new XB()
>
> may call u, or t, depending on what the meaning of "Let DEFINITION be
> ELEMENT's definition" (from the element initialization algorithm) is.
>
> It seems extending a custom tag with another custom tag is reasonably well
> defined. Similarly, extending a type extension with another type extension
> squirrels up the prototype chain past the parent type extension to a
> built-in interface which isn't complicated with lifecycle callbacks.
>
> But extending a custom tag with a type extension begets ambiguity. I think
> it should be disallowed. I think that is what the intent of "If both types
> of custom element names are provided at the time of element's instantiation,
> the custom tag must win over the type extension" is, but the generated
> constructor is a loophole.
I don't see where there's ambiguity. You simply can't use "is" with a custom
tag. Can you help me understand better where the problem is?
--
You are receiving this mail because:
You are the QA Contact for the bug.
Received on Tuesday, 7 May 2013 21:12:17 UTC