samhuri.net/GithubFinder/javascripts/keyboard.js
Sami Samhuri 148322be72 WIP - Github Finder integration
need to replace jsonp and github stuff with gitter
2010-12-19 18:37:01 -08:00

97 lines
No EOL
2.1 KiB
JavaScript

var Keyboard = Class.create( PluginBase, {
initialize: function($super, f) {
// $super(f);
document.observe('keydown', function(e) {
if(e.findElement().tagName == 'INPUT') return; // user has focus in something, bail out.
// var k = e.which ? e.which : e.keyCode; // keycode
var k = e.which || e.keyCode; // keycode
var cI = f.cI,
pI = f.pI;
var p = f.ps[pI]; // panel
var t = p.tree; // the panel's tree
var d = function() {
if( t[ ++cI ] ) {
var item = t[cI];
// debugger
f.click( item.sha, $$('#p' + pI + ' a')[cI], true );
} else {
cI--;
}
};
var u = function() {
if( t[ --cI ] ) {
var item = t[cI];
f.click( item.sha, $$('#p' + pI + ' a')[cI], true );
} else {
cI++;
}
}
var l = function() {
if( f.ps[--pI] ) {
// debugger
t = f.ps[pI].tree;
// get index of the previously selected item
cI = f.ps[pI].cI;
// var item = f.ps[pI];
f.click( t[cI].sha, $$('#p' + pI + ' a')[cI], true );
} else {
pI++; // undo
}
}
var r = function() {
if( !t[cI] || t[cI].type != 'tree' ) return;
if( f.ps[++pI] ) {
t = f.ps[pI].tree;
cI = -1;
d(); // down!
} else {
pI--; // undo
}
}
// k == 40 ? d() : ( k == 39 ? r() : ( k == 38 ? u() : ( k == 37 ? l() : '';
switch( k ) {
case 40: // key down
d();
break;
case 38: // up
u();
break;
case 37: //left
l();
break
case 39: // right
r();
break;
default:
break;
}
// console.log("keypress");
if( k >= 37 && k <= 40)
e.stop();
});
}
});
/* add the plugin to the plugins list */
FP.push(Keyboard);