mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-09-07 11:17:12 +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
|
* License along with this library; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* 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/CPObject.j>
|
||||||
@import <Foundation/CPRunLoop.j>
|
@import <Foundation/CPRunLoop.j>
|
||||||
@@ -61,7 +148,7 @@ var CPDOMEventGetClickCount,
|
|||||||
//might be mac only, we should investigate futher later.
|
//might be mac only, we should investigate futher later.
|
||||||
var KeyCodesToPrevent = {},
|
var KeyCodesToPrevent = {},
|
||||||
CharacterKeysToPrevent = {},
|
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;
|
var CTRL_KEY_CODE = 17;
|
||||||
|
|
||||||
@@ -461,7 +548,7 @@ var supportsNativeDragAndDrop = [CPPlatform supportsDragAndDrop];
|
|||||||
var isNativePasteEvent = NO,
|
var isNativePasteEvent = NO,
|
||||||
isNativeCopyOrCutEvent = NO,
|
isNativeCopyOrCutEvent = NO,
|
||||||
overrideCharacters = nil;
|
overrideCharacters = nil;
|
||||||
|
|
||||||
switch (aDOMEvent.type)
|
switch (aDOMEvent.type)
|
||||||
{
|
{
|
||||||
case "keydown": // Grab and store the keycode now since it is correct and consistent at this point.
|
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;
|
event._DOMEvent = aDOMEvent;
|
||||||
|
|
||||||
[CPApp sendEvent:event];
|
[CPApp sendEvent:event];
|
||||||
|
|
||||||
if (isNativeCopyOrCutEvent)
|
if (isNativeCopyOrCutEvent)
|
||||||
{
|
{
|
||||||
var pasteboard = [CPPasteboard generalPasteboard],
|
var pasteboard = [CPPasteboard generalPasteboard],
|
||||||
|
|||||||
Reference in New Issue
Block a user