forked from Botanical/BotanJS
Wrapping keyboardevent with InputEvent
This commit is contained in:
parent
75662e6d04
commit
5f5e0604fa
@ -5,8 +5,6 @@
|
||||
var debug = __import( "System.Debug" );
|
||||
|
||||
var Mesg = __import( "Components.Vim.Message" );
|
||||
/** @type {Components.Vim.Controls} */
|
||||
var Controls = __import( "Components.Vim.Controls" );
|
||||
|
||||
/** @type {Components.Vim.Cursor.IAction} */
|
||||
var YANK = ns[ NS_INVOKE ]( "YANK" );
|
||||
@ -41,15 +39,15 @@
|
||||
{
|
||||
e.preventDefault();
|
||||
|
||||
if( Controls.ModKeys( e ) ) return;
|
||||
if( e.ModKeys ) return;
|
||||
|
||||
var Action = null;
|
||||
switch( true )
|
||||
{
|
||||
case Controls.KMap( e, "y" ):
|
||||
case e.kMap( "y" ):
|
||||
Action = new YANK( this.__cursor );
|
||||
break;
|
||||
case Controls.KMap( e, "d" ):
|
||||
case e.kMap( "d" ):
|
||||
Action = new DELETE( this.__cursor );
|
||||
break;
|
||||
}
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
var SHIFT = 1 << 9;
|
||||
var CTRL = 1 << 10;
|
||||
var ALT = 1 << 11;
|
||||
|
||||
var KEY_SHIFT = 16;
|
||||
var KEY_CTRL = 17;
|
||||
@ -139,7 +140,7 @@
|
||||
if( compReg.i == keys.length )
|
||||
{
|
||||
compReg.handler();
|
||||
compReg = null;
|
||||
this.__compReg = null;
|
||||
this.__cMovement = false;
|
||||
}
|
||||
|
||||
@ -153,13 +154,13 @@
|
||||
return false;
|
||||
};
|
||||
|
||||
Controls.prototype.__actionCommand = function( e, kCode )
|
||||
Controls.prototype.__actionCommand = function( e )
|
||||
{
|
||||
var ActionHandled = true;
|
||||
var ccur = this.__ccur;
|
||||
|
||||
// Action Command
|
||||
switch( kCode )
|
||||
switch( e.keyCode )
|
||||
{
|
||||
case SHIFT + A: // Append at the line end
|
||||
ccur.lineEnd();
|
||||
@ -226,12 +227,13 @@
|
||||
}
|
||||
};
|
||||
|
||||
Controls.prototype.__cursorCommand = function( e, kCode )
|
||||
Controls.prototype.__cursorCommand = function( e )
|
||||
{
|
||||
var kCode = e.keyCode;
|
||||
|
||||
if( this.__cMovement && this.__comp )
|
||||
{
|
||||
var k = e.keyCode;
|
||||
if(!( k == KEY_SHIFT || k == KEY_CTRL || k == KEY_ALT ))
|
||||
if( !e.ModKeys )
|
||||
{
|
||||
this.__comp( kCode );
|
||||
return true;
|
||||
@ -285,19 +287,20 @@
|
||||
return cursorHandled;
|
||||
};
|
||||
|
||||
/**
|
||||
* sender @param {Components.Vim.VimArea}
|
||||
* e @param {Components.Vim.Controls.InputEvent}
|
||||
* */
|
||||
Controls.prototype.handler = function( sender, e )
|
||||
{
|
||||
// Neve capture these keys
|
||||
if( e.altKey
|
||||
if( e.ModKeys
|
||||
// F2 - F12
|
||||
|| ( F1 < e.keyCode && e.keyCode < 124 )
|
||||
) return;
|
||||
|
||||
// Esc OR Ctrl + c
|
||||
var Escape = e.keyCode == ESC || ( e.ctrlKey && e.keyCode == C );
|
||||
|
||||
// Clear composite command
|
||||
if( Escape && this.__compReg )
|
||||
if( e.Escape && this.__compReg )
|
||||
{
|
||||
this.__compReg = null;
|
||||
this.__cMovement = false;
|
||||
@ -308,14 +311,12 @@
|
||||
var cfeeder = this.__cfeeder;
|
||||
var ccur = this.__ccur;
|
||||
|
||||
var kCode = e.keyCode
|
||||
+ ( e.shiftKey || e.getModifierState( "CapsLock" ) ? SHIFT : 0 )
|
||||
+ ( e.ctrlKey ? CTRL : 0 );
|
||||
var kCode = e.keyCode;
|
||||
|
||||
// Action commands are handled by the actions themselves
|
||||
if( ccur.action )
|
||||
{
|
||||
if( Escape )
|
||||
if( e.Escape )
|
||||
{
|
||||
e.preventDefault();
|
||||
ccur.closeAction();
|
||||
@ -333,26 +334,49 @@
|
||||
return;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
if( this.__cursorCommand( e ) )
|
||||
{
|
||||
e.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
if( this.__cursorCommand( e, kCode ) ) return;
|
||||
if( this.__actionCommand( e, kCode ) ) return;
|
||||
if( this.__actionCommand( e ) )
|
||||
{
|
||||
e.preventDefault();
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
__static_method( Controls, "ModKeys", function( e )
|
||||
var InputEvent = function( e )
|
||||
{
|
||||
var c = e.keyCode;
|
||||
return c == KEY_SHIFT || c == KEY_CTRL || c == KEY_ALT;
|
||||
} );
|
||||
this.__e = e;
|
||||
|
||||
__static_method( Controls, "KMap", function( e, map )
|
||||
{
|
||||
var kCode = e.keyCode
|
||||
var c = this.__e.keyCode;
|
||||
|
||||
this.__escape = c == ESC || ( e.ctrlKey && c == C );
|
||||
this.__kCode = c
|
||||
+ ( e.shiftKey || e.getModifierState( "CapsLock" ) ? SHIFT : 0 )
|
||||
+ ( e.ctrlKey ? CTRL : 0 );
|
||||
|
||||
return kCode == Map( map );
|
||||
} );
|
||||
this.__modKeys = c == KEY_SHIFT || c == KEY_CTRL || c == KEY_ALT;
|
||||
this.__key = e.key;
|
||||
};
|
||||
|
||||
__readOnly( InputEvent.prototype, "key", function() { return this.__key; } );
|
||||
__readOnly( InputEvent.prototype, "keyCode", function() { return this.__kCode; } );
|
||||
__readOnly( InputEvent.prototype, "ModKeys", function() { return this.__modKeys; } );
|
||||
__readOnly( InputEvent.prototype, "Escape", function() { return this.__escape; } );
|
||||
|
||||
InputEvent.prototype.kMap = function( map )
|
||||
{
|
||||
return this.__kCode == Map( map );
|
||||
};
|
||||
|
||||
InputEvent.prototype.preventDefault = function()
|
||||
{
|
||||
if( this.__e ) this.__e.preventDefault();
|
||||
};
|
||||
|
||||
ns[ NS_EXPORT ]( EX_CLASS, "Controls", Controls );
|
||||
ns[ NS_EXPORT ]( EX_CLASS, "InputEvent", InputEvent );
|
||||
})();
|
||||
|
@ -19,6 +19,7 @@
|
||||
var StatusBar = ns[ NS_INVOKE ]( "StatusBar" );
|
||||
|
||||
var VimControls = ns[ NS_INVOKE ]( "Controls" );
|
||||
var InputEvent = ns[ NS_INVOKE ]( "InputEvent" );
|
||||
var mesg = ns[ NS_INVOKE ]( "Message" );
|
||||
|
||||
var Insts = [];
|
||||
@ -31,7 +32,7 @@
|
||||
if ( e.keyCode ) code = e.keyCode;
|
||||
else if ( e.which ) code = e.which;
|
||||
|
||||
handler( sender, e );
|
||||
handler( sender, new InputEvent( e ) );
|
||||
};
|
||||
};
|
||||
|
||||
|
13
botanjs/src/externs/Components.Vim.Controls.InputEvent.js
Normal file
13
botanjs/src/externs/Components.Vim.Controls.InputEvent.js
Normal file
@ -0,0 +1,13 @@
|
||||
/** @constructor */
|
||||
Components.Vim.Controls.InputEvent = function(){};
|
||||
|
||||
/** @type String */
|
||||
Components.Vim.Controls.InputEvent.key;
|
||||
/** @type Boolean */
|
||||
Components.Vim.Controls.InputEvent.ModKeys;
|
||||
/** @type Boolean */
|
||||
Components.Vim.Controls.InputEvent.Escape;
|
||||
/** @type Number */
|
||||
Components.Vim.Controls.InputEvent.keyCode;
|
||||
/** @type Function */
|
||||
Components.Vim.Controls.InputEvent.kMap;
|
@ -1,7 +1,2 @@
|
||||
/** @constructor */
|
||||
Components.Vim.Controls = function(){};
|
||||
|
||||
/** @type Function */
|
||||
Components.Vim.Controls.ModKeys;
|
||||
/** @type Function */
|
||||
Components.Vim.Controls.KMap;
|
||||
|
Loading…
Reference in New Issue
Block a user