[whatwg] link.sizes and [PutForwards=value]

Ian Hickson ian at hixie.ch
Thu Jul 28 18:15:51 PDT 2011

On Mon, 2 May 2011, Jonas Sicking wrote:
> On Mon, May 2, 2011 at 4:37 PM, Ian Hickson <ian at hixie.ch> wrote:
> > On Wed, 5 Jan 2011, Mounir Lamouri wrote:
> >> On 01/05/2011 02:29 AM, Ian Hickson wrote:
> >> > On Thu, 14 Oct 2010, Olli Pettay wrote:
> >> >>
> >> >> may I wonder why on earth any new API, like link.sizes uses 
> >> >> PutForwards? IMHO, PutForwards should be limited to the awkward 
> >> >> DOM0 APIs like window.location.
> >> >
> >> > On Fri, 15 Oct 2010, Olli Pettay wrote:
> >> >>
> >> >> It makes getters and setters work in a very different way. 
> >> >> Inconsistency in APIs isn't a good thing.
> >> >
> >> > The idea is to make the attribute appear to work like a DOMString 
> >> > for most purposes, but to allow methods to be invoked on it. (All 
> >> > the attributes that have [PutForwards] set also have a stringifier 
> >> > on their object's interface.)
> >>
> >> Is there a use case for [PutForwards] (except saving a few characters 
> >> for the authors) that could justify the inconsistency?
> >
> > The idea is to be consistent with all the other reflecting attributes, 
> > which can mostly all be treated as either strings or numbers. Contrast 
> > this with the way attributes are reflected in SVG, where there's a 
> > step of indirection to get to the string value due to the animation 
> > API. I think this is a case where [PutForwards] and stringification 
> > makes sense.
> It's inconsistent in that all other objects in javascript stringify to 
> "[Object Foo]", whereas this object doesn't.

[PutForwards] doesn't affect that, that's the stringifier. Location, <a>, 
and <area> all already have stringifiers, as do lots of objects in JS.

Are we really concerned about objects stringifying to "[Object Foo]"?

It seems that the usefulness of such stringification is far outweighed by 
the usefulness of being able to treat the attribute as a string attribute 
like any other reflecting attribute while also being able to use methods 
on it. In fact, it is consistent with every DOMString attribute: they 
don't stringify to "[Object String]", yet you can call methods on them. 
What's the difference?

> If the concern is that link.sizes should be consistent with other 
> attribute-mapping properties then you're only half-way there since 
> typeof tests still behaves differently.

I'm not particularly concerned about such edge cases (who does typeof on 
reflecting attributes in a way where the difference here would matter?). 
It's the common use that I'm concerned about.

> I definitely agree that the way SVG does it is not ideal. How about 
> simply creating a second property, like link.parsedSizes which returns 
> the tokenlist?

That's what we're doing (for legacy reasons) with className/classList and 
rel/relList, but I consider that an ugly and unfortunate wart on the API. 
As much as possible, attributes that take space-separated lists are using 
DOMSettableTokenList to avoid this (including a few legacy ones that 
aren't as high-profile as class and rel).

On Mon, 2 May 2011, Jonas Sicking wrote:
> Of course, an even simpler solution is to remove access to a 
> DOMTokenList representing link.sizes entirely. What is the use case? Is 
> it really that common to modify link.sizes that we need syntax sugar for 
> it?

All the space-separated lists are exposed this way. It would be rather odd 
to exclude just one on the basis that we couldn't think of a reason why 
this particular one would get changed much.

Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'

More information about the whatwg mailing list