- From: Cameron McCormack <cam@mcc.id.au>
- Date: Thu, 18 Dec 2008 10:05:08 +1100
Continuing a conversation from IRC (http://krijnhoetmer.nl/irc-logs/whatwg/20081217#l-187): Cameron McCormack: > <heycam> Hixie, i think it would be better if DOMStringMap still > had operations annotated with [NameGetter] etc., and then for me to > introduce something in Web IDL to indicate that the operations don't > correspond to functions, and then for you to use that functionality > <heycam> Hixie, so something like http://paste.lisp.org/display/72289 > <heycam> it'd have the advantage of both making the description of the > named property accessors simpler (since you'd just do your usual > description of operations) and also makes the interfaces suitable > for languages that don't support object indexing > <heycam> s/makes/making/ > ? > <heycam> Hixie, > http://dev.w3.org/2006/webapi/WebIDL/#NoIndexingOperations Ian Hickson: > <Hixie> heycam: i'm scared that that's like giving implementors a > loaded gun and telling them to point it at their foot and set the > safety and then pull the trigger -- implementors who aren't paying > attention will shoot themselves > <Hixie> heycam: i.e. they'll think "what's NoIndexingOperations? oh > well let's ignore it for now" and we'll get the functions exposed Is that a valid concern? There are many requirements that Web IDL makes that aren?t immediately obvious just by looking at an IDL fragment. Such a concern could easily be mitigated with a small note. > [19:38] <Hixie> heycam: i'd much rather have the idl look like the js > object and have [IndexSetter] etc take arguments to provide names > for the other languages But would you add those names? :) You?d need to specify the type of the values, too, so that the implicit name getter operation can have a return type (and to give the type of the name setter/creator operation?s second argument). This is how I would recommend the section read: The DOMStringMap interface represents a set of name-value pairs. When a DOMStringMap object is instantiated, it is associated with three algorithms: one for getting the list of name-value pairs, one for setting names to certain values, and one for deleting names. [NoIndexingOperations] interface DOMStringMap { [NameGetter] DOMString get(in DOMString name); [NameSetter, NameCreator] void put(in DOMString name, in DOMString value); [NameDeleter] void delete(in DOMString name); }; <!-- green note --> Note that due to the use of the [NoIndexingOperations] extended attribute, the interface prototype object for DOMStringMap will not have properties named get, set and remove; the only way to access the strings stored in a DOMStringMap is by accessing them via properties directly on the object. The names of the supported named properties on a DOMStringMap object are the names of each pair returned by the algorithm for getting the list of name-value pairs. The get(name) method must run the following algorithm: 1. Let /pairs/ be the list returned from the algorithm for getting the list of name-value pairs. 2. Let /pair/ be the entry in /pairs/ whose name component is equal to /name/. 3. Return the value component of /pair/. The set(name, value) method must run the algorithm for setting names to certain values, passing /name/ as the name and /value/ as the value. The delete(name) method must run the algorithm for deleting names, passing /name/ as the name. If you definitely don?t want to use [NoIndexingOperations], then the section should look like the following: The DOMStringMap interface represents a set of name-value pairs. When a DOMStringMap object is instantiated, it is associated with three algorithms: one for getting the list of name-value pairs, one for setting names to certain values, and one for deleting names. [NameGetter, NameSetter, NameCreator, NameDeleter] interface DOMStringMap { }; The names of the supported named properties on a DOMStringMap object are the names of each pair returned by the algorithm for getting the list of name-value pairs. When a DOMStringMap object is indexed to retrieve a named property /name/, the following algorithm must be run: 1. Let /pairs/ be the list returned from the algorithm for getting the list of name-value pairs. 2. Let /pair/ be the entry in /pairs/ whose name component is equal to /name/. 3. Return the value component of /pair/. When a DOMStringMap object is indexed to create or modify a named property /name/ with value /value/, the algorithm for setting names to certain values must be run, passing /name/ as the name and the result of converting /value/ to a DOMString as the value. When a DOMStringMap object is indexed to delete a named property named /name/, the algorithm for deleting names must be run, passing /name/ as the name. If you go without [NoIndexingOperations], then I suggest specifying somehow that HTMLElement::dataset only exist in language bindings that support object indexing, or only in ECMAScript. -- Cameron McCormack ? http://mcc.id.au/
Received on Wednesday, 17 December 2008 15:05:08 UTC