W3C home > Mailing lists > Public > public-webapps@w3.org > January to March 2013

Re: Custom elements ES6/ES5 syntax compromise, was: document.register and ES6

From: Scott Miles <sjmiles@google.com>
Date: Tue, 19 Feb 2013 20:26:16 -0800
Message-ID: <CAHbmOLZNXQ17kFUVVtGtp96-wN4kjHEwFaE8oQJabTWrDdtp+Q@mail.gmail.com>
To: Daniel Buchner <daniel@mozilla.com>
Cc: Dimitri Glazkov <dglazkov@google.com>, Anne van Kesteren <annevk@annevk.nl>, public-webapps <public-webapps@w3.org>, Erik Arvidsson <arv@chromium.org>, Boris Zbarsky <bzbarsky@mit.edu>
Question: if I do

FancyHeaderPrototype = Object.create(HTMLElement.prototype);
document.register('fancy-header', {
  prototype: FancyHeaderPrototype
...

In this case, I intend to extend "header". I expect my custom elements to
look like <header is="fancy-header">, but how does the system know what
localName to use? I believe the notion was that the localName would be
inferred from the prototype, but there are various semantic tags that share
prototypes, so it seems ambiguous in these cases.

S


On Tue, Feb 19, 2013 at 1:01 PM, Daniel Buchner <daniel@mozilla.com> wrote:

> What is the harm in returning the same constructor that is being input for
> this form of invocation? The output constructor is simply a pass-through of
> the input constructor, right?
>
> FOO_CONSTRUCTOR = document.register(‘x-foo’, {
>   constructor: FOO_CONSTRUCTOR
> });
>
> I guess this isn't a big deal though, I'll certainly defer to you all on
> the best course :)
>
> Daniel J. Buchner
> Product Manager, Developer Ecosystem
> Mozilla Corporation
>
>
> On Tue, Feb 19, 2013 at 12:51 PM, Scott Miles <sjmiles@google.com> wrote:
>
>> >> I'd be a much happier camper if I didn't have to think about handling
>> different return values.
>>
>> I agree, and If it were up to me, there would be just one API for
>> document.register.
>>
>> However, the argument given for dividing the API is that it is improper
>> to have a function return a value that is only important on some platforms. If
>> that's the winning argument, then isn't it pathological to make the 'non
>> constructor-returning API' return a constructor?
>>
>>
>> On Mon, Feb 18, 2013 at 12:59 PM, Daniel Buchner <daniel@mozilla.com>wrote:
>>
>>> I agree with your approach on staging the two specs for this, but the
>>> last part about returning a constructor in one circumstance and undefined
>>> in the other is something developers would rather not deal with (in my
>>> observation). If I'm a downstream consumer or library author who's going to
>>> wrap this function (or any function for that matter), I'd be a much happier
>>> camper if I didn't have to think about handling different return values. Is
>>> there a clear harm in returning a constructor reliably that would make us
>>> want to diverge from an expected and reliable return value? It seems to me
>>> that the unexpected return value will be far more annoying than a little
>>> less mental separation between the two invocation setups.
>>>
>>> Daniel J. Buchner
>>> Product Manager, Developer Ecosystem
>>> Mozilla Corporation
>>>
>>>
>>> On Mon, Feb 18, 2013 at 12:47 PM, Dimitri Glazkov <dglazkov@google.com>wrote:
>>>
>>>> On Fri, Feb 15, 2013 at 8:42 AM, Daniel Buchner <daniel@mozilla.com>
>>>> wrote:
>>>> > I'm not sure I buy the idea that "two ways of doing the same thing
>>>> does not
>>>> > seem like a good approach" - the web platform's imperative and
>>>> declarative
>>>> > duality is, by nature, two-way. Having two methods or an option that
>>>> takes
>>>> > multiple input types is not an empirical negative, you may argue it
>>>> is an
>>>> > ugly pattern, but that is largely subjective.
>>>>
>>>> For what it's worth, I totally agree with Anne that two-prong API is a
>>>> huge wart and I feel shame for proposing it. But I would rather feel
>>>> shame than waiting for Godot.
>>>>
>>>> >
>>>> > Is this an accurate summary of what we're looking at for possible
>>>> solutions?
>>>> > If so, can we at least get a decision on whether or not _this_ route
>>>> is
>>>> > acceptable?
>>>> >
>>>> > FOO_CONSTRUCTOR = document.register(‘x-foo’, {
>>>> >   prototype: ELEMENT_PROTOTYPE,
>>>> >   lifecycle: {
>>>> >      created: CALLBACK
>>>> >   }
>>>> > });
>>>>
>>>> I will spec this first.
>>>>
>>>> >
>>>> > FOO_CONSTRUCTOR = document.register(‘x-foo’, {
>>>> >   constructor: FOO_CONSTRUCTOR
>>>> > });
>>>> >
>>>>
>>>> When we have implementers who can handle it, I'll spec that.
>>>>
>>>> Eventually, we'll work to deprecate the first approach.
>>>>
>>>> One thing that Scott suggested recently is that the second API variant
>>>> always returns undefined, to better separate the two APIs and their
>>>> usage patterns.
>>>>
>>>> :DG<
>>>>
>>>
>>>
>>
>
Received on Wednesday, 20 February 2013 04:26:46 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 18:49:57 GMT