- From: David Flanagan <david@davidflanagan.com>
- Date: Thu, 14 Oct 2010 13:25:16 -0700
- To: www-dom@w3.org
These comments are based on the 2010-10-06 Editor's Draft.
0) I suspect that this has already been debated at length, but does the
"textInput" event really have to be mixed case? With the deprecation of
the various DOM-prefixed event types, won't this be the only mixed-case
event type? Assuming that browsers expose this event with an "on"
handler property, JavaScript programmers are going to be confused when
typing "ontextInput" and will end up doing "onTextInput". If a
single-case name is good enough for genuinely hard-to-read things like
"compositionend", it should be fine to use "textinput" for this event!
1) This looks like a copy-and-paste error from KeyLocationCode:
> Definition group InputMethodCode
>
> This set of constants shall be used to indicate the origin of the text input. In case a DOM implementation wishes to provide a new location information, a value different from the following constant values must be used.
>
Change "wishes to provide a new location information" to "wishes to
define a new origin"
2) There are a couple of problems with initKeyboardEvent(). First, when
it first apperas in the gray box, it has a repeat argument. But down
below, where the method arguments are each explained the repeat argument
is missing. Second, I don't understand how the char and keyCode
properties of the KeyboardEvent are initialized. Are they derived from
the keyArg argument to initKeyboardEvent(). If so, perhaps you could
add a sentence to the description of that argument: "KeyboardEvent.char
and KeyboardEvent.keyCode are both derived from this argument." (Or
something to that effect).
3) In "Definition group KeyLocationCode", the constants are listed in
neither numerical order nor alphabetical order. I was confused for
awhile because I couldn't find the constant for KEY_LOCATION_STANDARD.
Please re-order this list so it matches the numerical order of the
constants shown in the gray box above. Also, three of these paragraphs
use a confusing "shall be in/on" wording. Maybe you could change these
to be parallel with the "originated on" wording of the other constants.
4) When you are describing the altKey, ctrlKey and similar attributes of
"KeyboardEvent" you use the word "activated" to mean "in effect". Just
above that, in the list of constants, you use the word "activation" to
mean "the key press or release that triggered this event". This wording
is confusing because it could be read to mean that ctrlKey, for example,
will only be true when the key is first pressed down. I suggest you
avoid "activated" here and use language like this:
"true if the control (Ctrl) modifier was active when this event
occurred."
I realize now that I actually don't know whether ctrlKey should be true
for the event generated when Ctrl is first pressed down. Or whether it
should be true when the Ctrl key is released. So maybe you could clarify
that here, too. Guessing at the proper settings for this modifier, you
might say something like:
"If this KeyboardEvent describes the press of a control key, then
this property will be true. If this KeyboardEvent describes the release
of a control key, and if no other control modifier is active, then this
property will be false."
5) In the description of the KeyboardEvent.char, I suggest you change
"The value must be a Unicode character string" to "If the key press has
a character representation, the value of this property will be a
non-empty Unicode character string".
6) In the description of KeyboardEvent.key, it says "If the value is a
character, it must match the value of the KeyboardEvent.char attribute."
First, is "character" formally defined somewhere, or you mean
something like "If the key has a printable representation". Second:
what about the case of keyboard macros? If I've somehow bound Ctrl-J to
insert the string "JavaScript", then I would expect a Ctrl-J
KeyboardEvent to have "JavaScript" as its char value and "J" as its key
value. If this is the correct behavior then the phrase "must match" in
the spec is a problem. If keyboard macros are supposed to get expanded
into the key property, then that allows us to fake out keys that we
don't have on our keyboards by defining keyboard macros. In that case,
if I define a macro to insert the string "Camera", then that macro might
cause a webapp to behave as if the Camera key had been pressed. (It
almost seems like there is a security issue there...)
7) After the description of KeyboardEvent and all its properties and
methods, there is a warning, followed by one sentence and a Note, and
then a segue into the next section. That one sentence ("Depending on
the character generation device...") seems like an orphan with no home
and no context. Can it and its note go at the beginning of the section?
Or in the section that follows?
8) In the boxes describing keydown, keyup and keypress, you describe the
altKey, and related event properties using the word "depressed".
Elsewhere you've used vaguer language like "activated", and I've assumed
that is to account for the possibility of locking modifier keys for
accessibility reasons. If so, you should probably change "key is
depressed" to "modifier is active" in these boxes. (Past tense might
actually be better: "modifier was active").
9) The keypress, keydown and keyup boxes don't list the char or keyCode
properties of KeyboardEvent. And they don't have values filled in for
key and location.
10) "Whether or not a keydown contributes to the generation of a text
event is implementation dependent." Do you mean specifically a
textInput event here?
11) The description of the keydown event says that the default action of
a keydown is to dispatch a textInput event for events that generate
text. But above, at the start of 5.2.6.1, it says that keypress is
generated before textInput. One or the other of these must be wrong.
12) Minor typo in the 3rd bullet after keydown: You should probably have
a little blue box around the Tab key. Also, is it okay to hardcode Tab,
Enter and Space here or do you need to do some kind of OS-dependent
hand-waving to account for the possibility of operating systems that use
different keys for moving keyboard focus and activating UI elements?
13) The 2nd sentence of the keypress and keydown event descriptions
reference the keydown event in an apparent copy-and-paste error.
14) The keypress box says that the keypress event can trigger textInput
as a default action. But that is never described in more detail after
the box.
David Flanagan
Received on Thursday, 14 October 2010 20:26:01 UTC