OSDN Git Service

Version 0.6.222, Fix the bug of X.TextRange.
[pettanr/clientJs.git] / 0.6.x / js / 11_hid / 01_KB.js
index 9d9646e..88df0ce 100644 (file)
@@ -4,10 +4,6 @@
  *  keydown について。Firefox では押している間中リスナの関数が実行される\r
  *  デフォルトイベントの制御・抑止 (opera)keypress を用いる。\r
  * \r
- * キーイベント処理の工夫\r
- * http://www.keynavi.net/ja/tipsj/kfunc.html\r
- *  keydown/up時にピリオドが文字化け (IE4-6) IE4+では「keypress」でキーコードを処理する 但しCtrlやALTが押されている場合は逆にkeydownで処理する必要があります\r
- * \r
  * \r
  * keydown をトリガーにイベントを発火するもの\r
  *  1. テンキーの 0~9 keyCode:96-105\r
@@ -25,8 +21,8 @@ var X_KB_SPECIALS = eval( // IE5- 対策
                "'33':'PAGE_UP','34':'PAGE_DOWN','35':'END','36':'HOME','37':'CSR_L','38':'CSR_U','39':'CSR_R','40':'CSR_D'," +\r
                "'44':'PRT_SCRN','45':'INS','46':'DEL'," +\r
                "'91':'LWIN','92':'RWIN','93':'APP'," +\r
-               "'96':48,'97':49,'98':50,'99':51,'100':52,'101':53,'102':54,'103':55,'104':56,'105':57,'106':42,'107':43,'109':45," +\r
-               "'111':47,'112':'F1','113':'F2','114':'F3','115':'F4','116':'F5','117':'F6','118':'F7','119':'F8','120':'F9','121':'F10','122':'F11','123':'F12'," +\r
+               "'96':48,'97':49,'98':50,'99':51,'100':52,'101':53,'102':54,'103':55,'104':56,'105':57,'106':42,'107':43,'109':45,'110':46,'111':47," +\r
+               "'112':'F1','113':'F2','114':'F3','115':'F4','116':'F5','117':'F6','118':'F7','119':'F8','120':'F9','121':'F10','122':'F11','123':'F12'," +\r
                "'144':'NUM_LOCK','145':'SCROLL_LOCK','208':'CAPS_LOCK','240':'CAPS_LOCK','242':'K/H','243':'H/Z','244':'H/Z'})" ),\r
        X_KB_DOWN_KEYS   = {},\r
        X_KB_CANCELED    = {},\r
@@ -34,6 +30,8 @@ var X_KB_SPECIALS = eval( // IE5- 対策
        X_KB_lastKeyCode = 0, \r
        X_KB_TRANSFOEM   = {},\r
        \r
+       // TODO keyevent のためには input 等にフォーカスが必要 -> iOS\r
+       \r
        X_kbManager    =\r
                X_Class_override(\r
                        X_EventDispatcher(),\r
@@ -42,14 +40,16 @@ var X_KB_SPECIALS = eval( // IE5- 対策
                                        var keyCode = e.keyCode,  // keyCode says something about the actual keyboard key the user pressed\r
                                                chrCode = e.charCode, // while charCode gives the ASCII value of the resulting character\r
                                                cb      = X_CALLBACK_NONE,\r
-                                               special, _keyCode;\r
+                                               special;\r
                                        \r
-                                       console.log( e.type + ' > keyCode:' + keyCode + ' chrCode:' + chrCode );\r
+                                       // console.log( e.type + ' > keyCode:' + keyCode + ' chrCode:' + chrCode );\r
                                        \r
                                        switch( e.type ){\r
                                                case 'keydown' :\r
                                                        if( X_KB_DOWN_KEYS[ keyCode ] ){\r
                                                                // 既に押されている、メタキー[shift,ctrl,alt]の変化はある?\r
+                                                               console.log( ' doen -- ' );\r
+                                                               \r
                                                                return X_KB_CANCELED[ keyCode ] ? X_CALLBACK_PREVENT_DEFAULT : cb;\r
                                                        } else\r
                                                        if( special = X_KB_SPECIALS[ keyCode ] ){\r
@@ -87,13 +87,32 @@ var X_KB_SPECIALS = eval( // IE5- 対策
                                                                }; */\r
                                                        } else {\r
                                                                X_KB_lastKeyCode = keyCode;\r
-                                                       };      \r
+                                                               \r
+                                                               if( e.ctrlKey || e.altKey || e.metaKey ){\r
+                                                                       cb = this[ 'dispatch' ]( {\r
+                                                                               type      : 'keydown',\r
+                                                                               keyCode   : 0,\r
+                                                                               charCode  : chrCode,\r
+                                                                               'keyName' : '',\r
+                                                                               'is10key' : false,\r
+                                                                               shiftKey  : !!X_KB_DOWN_KEYS[ 16 ],\r
+                                                                               ctrlKey   : !!X_KB_DOWN_KEYS[ 17 ],\r
+                                                                               altKey    : !!X_KB_DOWN_KEYS[ 18 ],\r
+                                                                               metaKey   : !!X_KB_DOWN_KEYS[ 224 ]\r
+                                                                       } );\r
+                                                                       \r
+                                                                       if( cb & X_CALLBACK_PREVENT_DEFAULT ){\r
+                                                                               X_KB_CANCELED[ keyCode ] = true;\r
+                                                                       };\r
+                                                               };\r
+                                                               console.log( ' keydown[' + keyCode + ']' + String.fromCharCode( chrCode ) + chrCode );\r
+                                                       };\r
                                                        return cb;\r
                                                        \r
                                                case 'keypress' :\r
                                                        // keydown 側で発火しているものは再び発火しない\r
-                                                       \r
                                                        if( X_KB_DOWN_KEYS[ chrCode ] ){\r
+                                                               // TODO keypress\r
                                                                return X_KB_CANCELED[ chrCode ] ? X_CALLBACK_PREVENT_DEFAULT : cb;\r
                                                        } else\r
                                                        if( keyCode === 32 ){\r
@@ -117,6 +136,8 @@ var X_KB_SPECIALS = eval( // IE5- 対策
                                                                X_KB_lastIs10Key = false;\r
                                                                \r
                                                                console.log( X_KB_lastKeyCode + 'keypress : chrCode:' + chrCode + ' down:' + X_KB_DOWN_KEYS[ chrCode ] + ( X_KB_CANCELED[ chrCode ] ? ' Cancel!' : '' ) );\r
+                                                       } else {\r
+                                                               console.log( '>> keypress : chrCode:' + chrCode + ' down:' + X_KB_DOWN_KEYS[ chrCode ] + ( X_KB_CANCELED[ chrCode ] ? ' Cancel!' : '' ) );\r
                                                        };\r
                                                        return cb;\r
                                                        \r
@@ -156,7 +177,7 @@ var X_KB_SPECIALS = eval( // IE5- 対策
                                                                chrCode = 0;\r
                                                        };\r
                                                        \r
-                                                       console.log( keyCode + ' keyup ' + chrCode );\r
+                                                       //console.log( keyCode + ' keyup ' + chrCode );\r
                                                        \r
                                                        cb |= this[ 'dispatch' ]( {\r
                                                                type      : 'keyup',\r