mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-08-25 21:17:03 +00:00
Some documentation. Eventually I will rewrite all of the key event stuff to work like Google Closure using this documentation
This commit is contained in:
@@ -19,6 +19,93 @@
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* THIS DOCUMENTATION STOLEN DIRECTLY FROM GOOGLE CLOSURE (licensed under Apache 2)
|
||||
*
|
||||
* Different web browsers have very different keyboard event handling. Most
|
||||
* importantly is that only certain browsers repeat keydown events:
|
||||
* IE, Opera, FF/Win32, and Safari 3 repeat keydown events.
|
||||
* FF/Mac and Safari 2 do not.
|
||||
*
|
||||
* For the purposes of this code, "Safari 3" means WebKit 525+, when WebKit
|
||||
* decided that they should try to match IE's key handling behavior.
|
||||
* Safari 3.0.4, which shipped with Leopard (WebKit 523), has the
|
||||
* Safari 2 behavior.
|
||||
*
|
||||
* Firefox, Safari, Opera prevent on keypress
|
||||
*
|
||||
* IE prevents on keydown
|
||||
*
|
||||
* Firefox does not fire keypress for shift, ctrl, alt
|
||||
* Firefox does fire keydown for shift, ctrl, alt, meta
|
||||
* Firefox does not repeat keydown for shift, ctrl, alt, meta
|
||||
*
|
||||
* Firefox does not fire keypress for up and down in an input
|
||||
*
|
||||
* Opera fires keypress for shift, ctrl, alt, meta
|
||||
* Opera does not repeat keypress for shift, ctrl, alt, meta
|
||||
*
|
||||
* Safari 2 and 3 do not fire keypress for shift, ctrl, alt
|
||||
* Safari 2 does not fire keydown for shift, ctrl, alt
|
||||
* Safari 3 *does* fire keydown for shift, ctrl, alt
|
||||
*
|
||||
* IE provides the keycode for keyup/down events and the charcode (in the
|
||||
* keycode field) for keypress.
|
||||
*
|
||||
* Mozilla provides the keycode for keyup/down and the charcode for keypress
|
||||
* unless it's a non text modifying key in which case the keycode is provided.
|
||||
*
|
||||
* Safari 3 provides the keycode and charcode for all events.
|
||||
*
|
||||
* Opera provides the keycode for keyup/down event and either the charcode or
|
||||
* the keycode (in the keycode field) for keypress events.
|
||||
*
|
||||
* Firefox x11 doesn't fire keydown events if a another key is already held down
|
||||
* until the first key is released. This can cause a key event to be fired with
|
||||
* a keyCode for the first key and a charCode for the second key.
|
||||
*
|
||||
* Safari in keypress
|
||||
*
|
||||
* charCode keyCode which
|
||||
* ENTER: 13 13 13
|
||||
* F1: 63236 63236 63236
|
||||
* F8: 63243 63243 63243
|
||||
* ...
|
||||
* p: 112 112 112
|
||||
* P: 80 80 80
|
||||
*
|
||||
* Firefox, keypress:
|
||||
*
|
||||
* charCode keyCode which
|
||||
* ENTER: 0 13 13
|
||||
* F1: 0 112 0
|
||||
* F8: 0 119 0
|
||||
* ...
|
||||
* p: 112 0 112
|
||||
* P: 80 0 80
|
||||
*
|
||||
* Opera, Mac+Win32, keypress:
|
||||
*
|
||||
* charCode keyCode which
|
||||
* ENTER: undefined 13 13
|
||||
* F1: undefined 112 0
|
||||
* F8: undefined 119 0
|
||||
* ...
|
||||
* p: undefined 112 112
|
||||
* P: undefined 80 80
|
||||
*
|
||||
* IE7, keydown
|
||||
*
|
||||
* charCode keyCode which
|
||||
* ENTER: undefined 13 undefined
|
||||
* F1: undefined 112 undefined
|
||||
* F8: undefined 119 undefined
|
||||
* ...
|
||||
* p: undefined 80 undefined
|
||||
* P: undefined 80 undefined
|
||||
*/
|
||||
|
||||
@import <Foundation/CPObject.j>
|
||||
@import <Foundation/CPRunLoop.j>
|
||||
@@ -61,7 +148,7 @@ var CPDOMEventGetClickCount,
|
||||
//might be mac only, we should investigate futher later.
|
||||
var KeyCodesToPrevent = {},
|
||||
CharacterKeysToPrevent = {},
|
||||
KeyCodesWithoutKeyPressEvents = { '8':1, '9':1, '16':1, '37':1, '38':1, '39':1, '40':1, '46':1, '33':1, '34':1 };
|
||||
KeyCodesWithoutKeyPressEvents = { '8':1, '9':1, '16':1, '33':1, '34':1, '35':1, '36':1, '37':1, '38':1, '39':1, '40':1, '46':1, '33':1, '34':1 };
|
||||
|
||||
var CTRL_KEY_CODE = 17;
|
||||
|
||||
@@ -461,7 +548,7 @@ var supportsNativeDragAndDrop = [CPPlatform supportsDragAndDrop];
|
||||
var isNativePasteEvent = NO,
|
||||
isNativeCopyOrCutEvent = NO,
|
||||
overrideCharacters = nil;
|
||||
|
||||
|
||||
switch (aDOMEvent.type)
|
||||
{
|
||||
case "keydown": // Grab and store the keycode now since it is correct and consistent at this point.
|
||||
@@ -552,7 +639,7 @@ var supportsNativeDragAndDrop = [CPPlatform supportsDragAndDrop];
|
||||
event._DOMEvent = aDOMEvent;
|
||||
|
||||
[CPApp sendEvent:event];
|
||||
|
||||
|
||||
if (isNativeCopyOrCutEvent)
|
||||
{
|
||||
var pasteboard = [CPPasteboard generalPasteboard],
|
||||
|
||||
Reference in New Issue
Block a user