Re: [DOM4] NodeList should be deprecated
On Wed, Mar 14, 2012 at 5:32 AM, Anne van Kesteren ann...@opera.com wrote: On Wed, 14 Mar 2012 09:03:23 +0100, Cameron McCormack c...@mcc.id.au wrote: Anne van Kesteren: Wasn't there a compatibility constrain with doing that? I don't remember -- the only difference it would make is that Object.getPrototypeOf(**NodeList.prototype) == Array.prototype. Okay, annotated NodeList with [ArrayClass]. What about HTMLCollection? Should I add it there too? Could you take a look at NodeList and HTMLCollection for accuracy? Should HTMLCollection inherit from NodeList? All the APIs I can think of that you'd want to add to NodeList you'd want on HTMLCollection as well. To be clear, array methods that modify the array in-place would silently do nothing because the properties on NodeLists/HTMLCollections are read-only. But you'd be able to use things like forEach and filter.
Re: [DOM4] NodeList should be deprecated
Anne van Kesteren: Okay, annotated NodeList with [ArrayClass]. What about HTMLCollection? Should I add it there too? Could you take a look at NodeList and HTMLCollection for accuracy? It is probably not feasible to add to HTMLCollection, because it has a named property getter which is not [OverrideBuiltins]. That means that all the new properties on the prototype like concat, push, etc. would begin to shadow any named elements on the collection.
Re: [DOM4] NodeList should be deprecated
Cameron McCormack: It is probably not feasible to add to HTMLCollection, because it has a named property getter which is not [OverrideBuiltins]. That means that all the new properties on the prototype like concat, push, etc. would begin to shadow any named elements on the collection. On the other hand it would be great to be able to do things like: document.getElementsByTagName(span) .map(function(x) { return x.clientWidth }); :( I am a bit reluctant to special case the visibility of named properties on HTMLCollection to be something other than the current [OverrideBuiltins] or non-[OverrideBuiltins] behaviour.
[DOM4] Question about using sequenceT v.s., NodeList for (was [DOM4] NodeList should be deprecated )
Hello, I am working on a proposal (http://wiki.csswg.org/spec/css3-regions/css-om) to update the CSS Regions CSS OM APIs, and one of the changes is to make various lists static. I see that the thread at http://lists.w3.org/Archives/Public/public-webapps/2012JanMar/1068.html stemmed from the CSS Regions OM implementation in WebKit. It seems that the thread resulted in an agreement to keep using NodeList and make it inherit from Array. I also see that change in the latest editor draft of DOM4. For the changes we are proposing, we have a need to return a static array of Nodes. We can follow the pattern discussed in this thread and use NodeList, but we also need to return arrays of Range instances (static list) and arrays of Region objects (static list). I am wondering if it would be better to define a RegionList class and a RangeList class, to be consistent with NodeList, or would it be better to use sequenceRegion and sequenceRange? I think we have three options: a. Use sequenceT everywhere we have static lists in the CSS regions APIs. This is consistent within the spec., but would be inconsistent with DOM4 NodeList and its usage. b. Use sequenceT everywhere except where T=Node, in which case we would use NodeList. This is consistent with DOM4 and inconsistent within the spec. c. Use NodeList and define RegionList/RangeList. This is consistent in the region spec. and with DOM4. But it introduces new interfaces with little added functionality (and they would have to be kept in sync. with NodeList if new features were added to the interface). All in all, I think I prefer option b. but I would appreciate feedback. Thanks, Vincent
Re: [DOM4] NodeList should be deprecated
On Wed, 14 Mar 2012 03:44:16 +0100, Cameron McCormack c...@mcc.id.au wrote: Ojan Vafai: We should make static NodeList inherit from Array though so that you can do regular array operations on it. Web IDL has the means to make (all) NodeList objects inherit from Array by annotating them with [ArrayClass], if we want to do that. Wasn't there a compatibility constrain with doing that? -- Anne van Kesteren http://annevankesteren.nl/
Re: [DOM4] NodeList should be deprecated
Anne van Kesteren: Wasn't there a compatibility constrain with doing that? I don't remember -- the only difference it would make is that Object.getPrototypeOf(NodeList.prototype) == Array.prototype.
Re: [DOM4] NodeList should be deprecated
On Wed, 14 Mar 2012 09:03:23 +0100, Cameron McCormack c...@mcc.id.au wrote: Anne van Kesteren: Wasn't there a compatibility constrain with doing that? I don't remember -- the only difference it would make is that Object.getPrototypeOf(NodeList.prototype) == Array.prototype. Okay, annotated NodeList with [ArrayClass]. What about HTMLCollection? Should I add it there too? Could you take a look at NodeList and HTMLCollection for accuracy? Cheers, -- Anne van Kesteren http://annevankesteren.nl/
Re: [DOM4] NodeList should be deprecated
On Mon, 12 Mar 2012 21:06:00 +0100, Rick Waldron waldron.r...@gmail.com wrote: On Mar 12, 2012, at 3:06 PM, Anne van Kesteren ann...@opera.com wrote: On Mon, 12 Mar 2012 19:07:31 +0100, Rick Waldron waldron.r...@gmail.com wrote: The NodeList item() method is a blocker. Blocker in what way? As I've always understood it - the item() method is what differentiates NodeList from Array and blocks it from being just an array. Is this incorrect? I think there is more, such as arrays being mutable, but the suggestion was to change two accessors from mutation observers to return platform array objects rather than NodeLists, which is a change we can still make given that mutation observers is not widely deployed yet. -- Anne van Kesteren http://annevankesteren.nl/
Re: [DOM4] NodeList should be deprecated
On Mar 13, 2012, at 4:29 AM, Anne van Kesteren ann...@opera.com wrote: On Mon, 12 Mar 2012 21:06:00 +0100, Rick Waldron waldron.r...@gmail.com wrote: On Mar 12, 2012, at 3:06 PM, Anne van Kesteren ann...@opera.com wrote: On Mon, 12 Mar 2012 19:07:31 +0100, Rick Waldron waldron.r...@gmail.com wrote: The NodeList item() method is a blocker. Blocker in what way? As I've always understood it - the item() method is what differentiates NodeList from Array and blocks it from being just an array. Is this incorrect? I think there is more, such as arrays being mutable, but the suggestion was to change two accessors from mutation observers to return platform array objects rather than NodeLists, which is a change we can still make given that mutation observers is not widely deployed yet. I that case, very cool. Thanks for the clarification. -- Anne van Kesteren http://annevankesteren.nl/
Re: [DOM4] NodeList should be deprecated
Upon further thought, I take this suggestion back. Static NodeList as it currently exists is just an underpowered array, but that doesn't mean that's what it always has to be. In the future, we should add methods to NodeList that operate on Nodes, e.g. add a remove method to NodeList that call remove on all the Nodes in the NodeList. Also, in theory, browser may be able to optimize common cases of NodeLists (e.g. cache frequently accessed NodeLists). We should make static NodeList inherit from Array though so that you can do regular array operations on it. On Tue, Mar 13, 2012 at 5:59 AM, Rick Waldron waldron.r...@gmail.comwrote: On Mar 13, 2012, at 4:29 AM, Anne van Kesteren ann...@opera.com wrote: On Mon, 12 Mar 2012 21:06:00 +0100, Rick Waldron waldron.r...@gmail.com wrote: On Mar 12, 2012, at 3:06 PM, Anne van Kesteren ann...@opera.com wrote: On Mon, 12 Mar 2012 19:07:31 +0100, Rick Waldron waldron.r...@gmail.com wrote: The NodeList item() method is a blocker. Blocker in what way? As I've always understood it - the item() method is what differentiates NodeList from Array and blocks it from being just an array. Is this incorrect? I think there is more, such as arrays being mutable, but the suggestion was to change two accessors from mutation observers to return platform array objects rather than NodeLists, which is a change we can still make given that mutation observers is not widely deployed yet. I that case, very cool. Thanks for the clarification. -- Anne van Kesteren http://annevankesteren.nl/
Re: [DOM4] NodeList should be deprecated
On Tue, Mar 13, 2012 at 10:24 PM, Ojan Vafai o...@chromium.org wrote: Upon further thought, I take this suggestion back. Static NodeList as it currently exists is just an underpowered array, but that doesn't mean that's what it always has to be. In the future, we should add methods to NodeList that operate on Nodes, e.g. add a remove method to NodeList that call remove on all the Nodes in the NodeList. Also, in theory, browser may be able to optimize common cases of NodeLists (e.g. cache frequently accessed NodeLists). We should make static NodeList inherit from Array though so that you can do regular array operations on it. In the future, it will be incredibly easy to make a NodeList into an Array with the spread operator: [ ...NodeList ] // [ node, node, node ] Rick On Tue, Mar 13, 2012 at 5:59 AM, Rick Waldron waldron.r...@gmail.comwrote: On Mar 13, 2012, at 4:29 AM, Anne van Kesteren ann...@opera.com wrote: On Mon, 12 Mar 2012 21:06:00 +0100, Rick Waldron waldron.r...@gmail.com wrote: On Mar 12, 2012, at 3:06 PM, Anne van Kesteren ann...@opera.com wrote: On Mon, 12 Mar 2012 19:07:31 +0100, Rick Waldron waldron.r...@gmail.com wrote: The NodeList item() method is a blocker. Blocker in what way? As I've always understood it - the item() method is what differentiates NodeList from Array and blocks it from being just an array. Is this incorrect? I think there is more, such as arrays being mutable, but the suggestion was to change two accessors from mutation observers to return platform array objects rather than NodeLists, which is a change we can still make given that mutation observers is not widely deployed yet. I that case, very cool. Thanks for the clarification. -- Anne van Kesteren http://annevankesteren.nl/
Re: [DOM4] NodeList should be deprecated
Ojan Vafai: We should make static NodeList inherit from Array though so that you can do regular array operations on it. Web IDL has the means to make (all) NodeList objects inherit from Array by annotating them with [ArrayClass], if we want to do that.
Re: [DOM4] NodeList should be deprecated
On Thu, Mar 8, 2012 at 11:57 PM, Anne van Kesteren ann...@opera.com wrote: On Thu, 08 Mar 2012 23:24:45 +0100, Ojan Vafai o...@chromium.org wrote: Dynamic NodeLists have a significant memory and performance cost. Static NodeLists are basically just under-powered arrays. We should just return Node arrays from any new APIs that return a list of Nodes. I'd like to see NodeList get similar treatment to hasFeature, i.e. a note that it not be used for new APIs and possibly even the explicitly list the APIs allowed to return them. I don't see the Dynamic/Static distinction in DOM4 or the HTML spec. Is this specified anywhere? We use the words live and static. For reference, this came up in WebKit with some new Regions APIs https://bugs.webkit.org/show_**bug.cgi?id=80638https://bugs.webkit.org/show_bug.cgi?id=80638 . Mutation observers uses NodeList too. Though there's no reason they couldn't use arrays instead (they're not live). In fact, that would make the API more self-consistent, since arrays (of MutationRecords) are already part of the interface. - Adam
Re: [DOM4] NodeList should be deprecated
On Mon, Mar 12, 2012 at 2:00 PM, Adam Klein ad...@chromium.org wrote: On Thu, Mar 8, 2012 at 11:57 PM, Anne van Kesteren ann...@opera.comwrote: On Thu, 08 Mar 2012 23:24:45 +0100, Ojan Vafai o...@chromium.org wrote: Dynamic NodeLists have a significant memory and performance cost. Static NodeLists are basically just under-powered arrays. We should just return Node arrays from any new APIs that return a list of Nodes. I'd like to see NodeList get similar treatment to hasFeature, i.e. a note that it not be used for new APIs and possibly even the explicitly list the APIs allowed to return them. I don't see the Dynamic/Static distinction in DOM4 or the HTML spec. Is this specified anywhere? We use the words live and static. For reference, this came up in WebKit with some new Regions APIs https://bugs.webkit.org/show_**bug.cgi?id=80638https://bugs.webkit.org/show_bug.cgi?id=80638 . Mutation observers uses NodeList too. Though there's no reason they couldn't use arrays instead (they're not live). In fact, that would make the API more self-consistent, since arrays (of MutationRecords) are already part of the interface. The NodeList item() method is a blocker. Rick - Adam
Re: [DOM4] NodeList should be deprecated
On Mon, 12 Mar 2012 19:07:31 +0100, Rick Waldron waldron.r...@gmail.com wrote: The NodeList item() method is a blocker. Blocker in what way? -- Anne van Kesteren http://annevankesteren.nl/
Re: [DOM4] NodeList should be deprecated
On Mar 12, 2012, at 3:06 PM, Anne van Kesteren ann...@opera.com wrote: On Mon, 12 Mar 2012 19:07:31 +0100, Rick Waldron waldron.r...@gmail.com wrote: The NodeList item() method is a blocker. Blocker in what way? As I've always understood it - the item() method is what differentiates NodeList from Array and blocks it from being just an array. Is this incorrect? Rick -- Anne van Kesteren http://annevankesteren.nl/
[DOM4] NodeList should be deprecated
Dynamic NodeLists have a significant memory and performance cost. Static NodeLists are basically just under-powered arrays. We should just return Node arrays from any new APIs that return a list of Nodes. I'd like to see NodeList get similar treatment to hasFeature, i.e. a note that it not be used for new APIs and possibly even the explicitly list the APIs allowed to return them. I don't see the Dynamic/Static distinction in DOM4 or the HTML spec. Is this specified anywhere? For reference, this came up in WebKit with some new Regions APIs https://bugs.webkit.org/show_bug.cgi?id=80638.
Re: [DOM4] NodeList should be deprecated
On Thu, 08 Mar 2012 23:24:45 +0100, Ojan Vafai o...@chromium.org wrote: Dynamic NodeLists have a significant memory and performance cost. Static NodeLists are basically just under-powered arrays. We should just return Node arrays from any new APIs that return a list of Nodes. I'd like to see NodeList get similar treatment to hasFeature, i.e. a note that it not be used for new APIs and possibly even the explicitly list the APIs allowed to return them. I don't see the Dynamic/Static distinction in DOM4 or the HTML spec. Is this specified anywhere? We use the words live and static. For reference, this came up in WebKit with some new Regions APIs https://bugs.webkit.org/show_bug.cgi?id=80638. Mutation observers uses NodeList too. -- Anne van Kesteren http://annevankesteren.nl/