- From: Cameron McCormack <cam@mcc.id.au>
- Date: Mon, 31 Mar 2008 14:55:52 +1100
- To: Web APIs WG <public-webapi@w3.org>
Hi Ian. Cameron McCormack: > > [explicit prototype chain stuff] Ian Hickson: > I understand what you're saying, but I'd still rather have any black box > behaviour be unambiguous. (Non-black-box behaviour is irrelevant.) Acknowledged. Ian Hickson: > > > It would be nice if the spec could suggest some boilerplate text for > > > other specs to include, in the way that RFC2119 does. For example: > > > > > > IDL sections in this specification must be interpreted and implemented > > > as required by the "Language Bindings for DOM Specifications" > > > specification. [DOMBIND] > > > > Good idea. I’ll put something like that in the conformance section > > when I get to it. > > Prod. :-) That has been added already, but in the “Referencing this specification” section. > > > Is there anything else that a spec would have to do other than say > > > something like the above and then use the various features you define? > > > e.g. is there ever a case where prose is necessary to fully define > > > something? > > > > There are some cases that aren’t covered by the spec currently, like > > the Image/Option/etc. constructor functions from HTML 5. I haven’t > > gone through HTML 5 in detail yet to check if I’ve missed anything > > else. > > It would be nice to define this. Can it be defined by just having a > [[Constructor]] property that specifies a particular name? Like this? [Constructor=Image] interface HTMLImageElement : … which would cause HTMLImageElement not to have [[Construct]] on HTMLImageElement, but for Image to exist with [[Construct]] and nothing else? Do these special constructors have any functionality other than [[Construct]]? > > But you could imagine a spec requiring a [[Get]] method that does > > something in particular, which wouldn’t really be worth putting in the > > Bindings spec because it’s too specific. > > How do you mean? I mean, perhaps some special [[Get]] behaviour would be wanted on some object that is not common enough to warrant special syntax in the IDL. > Also, is the "location" object and setter covered by this spec? I believe so, something like this: [Stringifies=href] interface Location { attribute DOMString href; void assign(in DOMString url); void replace(in DOMString url); void reload(); // URI decomposition attributes attribute DOMString protocol; attribute DOMString host; attribute DOMString hostname; attribute DOMString port; attribute DOMString pathname; attribute DOMString search; attribute DOMString hash; }; interface HTMLDocument : … { … [PutForwards=href] readonly attribute Location location; … }; interface Window : … { … [PutForwards=href] readonly attribute Location location; … }; But the assignment to href resulting in calling assign() isn’t handled by anything in the IDL. Something like [PutCalls=assign] could be added if needed, I guess. > > > Is it necessary to explicitly list the exceptions that a method, > > > getter, or setter can raise? > > > > Good question. OMG IDL says: > > > > The absence of a raises expression on an operation implies that there > > are no operation-specific exceptions. Invocations of such an operation > > are still liable to receive one of the standard system exceptions. > > > > ECMAScript 3rd ed doesn’t have any declarations for exceptions. Java > > does, but you need only list checked exceptions (and the Java bindings > > for DOM Core inherit from RuntimeExeption). > > > > Given that the IDL is meant to be language neutral though, and there are > > some languages where all exceptions thrown must be declared, it makes > > sense to require it. (It is somewhat informative, anyway.) > > Well, we're only ever going to be raising DOM Exceptions, right? I don't > want to have to put "raises DOMException" on every line of every IDL > block... Only for the ones that would throw it though, right? But as it stands, the spec would allow you to omit the raises clause but still raise a DOMException. > > > What's the purpose of the 'module' block? > > > > It’s used to group declarations together, much like namespaces in C++. > > In Java bindings for DOM specs, the names of the modules correspond to > > package names. In the ES binding defined here, they aren’t used. > > So do I have to mention them in the HTML5 spec? If not, I'd ideally like > to just drop it from this spec too. :-) I think it’d be fine not to include it in the in-line snippets that define the interface described in that section, but I think you should include them in an html5.idl that contains all of the IDL. (You’d only need one ‘module html { … }’ then.) > > > Is the idea that DOM Core will define an 'exception' block for > > > DOMExceptions? > > > > Yes, and it does already: > > > > http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-17189187 > > > > Or do you mean for the constants? The issue I have in the document at > > the moment is for associating constants with exceptions. In that DOM 3 > > Core section, the ExceptionCode constants are just declared at the > > module scope, but in the ES binding the constants are on the > > DOMException interface object, and in the Java binding they’re on the > > DOMException class. > > Right, I meant for exceptions. Right now DOM Core is rather vague on this > front. I think the two language binding appendices of DOM 3 Core are clear about where thoes particular exception code constants should live. > > OK so this brings up a point. Currently the document states that an ES > > native object can implement an interface by having a host object with > > properties (whose values are functions) for each operation on the > > interface. So if the interface had constants on it, these would not > > need to be put on the native object: > > > > // -- IDL -- > > interface B { > > const int x = 1; > > void f(); > > void g(); > > }; > > > > // -- ECMAScript -- > > var b { > > f: function() { }, > > g: function() { } > > }; > > > > First, is it a good idea to allow this? I don’t want to discriminate > > against being able to implement interfaces in ES just because there are > > constants defined on the interface, necessarily. It does mean though > > that you wouldn’t be able to refer to the constant of a native object > > implementing B, but you would of a host object implementing B. I > > don’t know if I like this discrepancy. > > I would just say that JS-implementable interfaces can't have constants. That’s probably a reasonable thing to start off with. > If someone comes up with a usecase for it, we can revisit it. OK. > In fact, are there any JS-implementable objects that do more than one > operation? That I don’t know. There aren’t really any issues with a native object implementing an interface that has multiple operations, so I think it’s safe to leave it at that. -- Cameron McCormack, http://mcc.id.au/ xmpp:heycam@jabber.org ▪ ICQ 26955922 ▪ MSN cam@mcc.id.au
Received on Monday, 31 March 2008 03:56:44 UTC