@ -1,6 +1,33 @@
// your file
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Keyboard shortcuts for Files app
* ctrl / cmd + n : new folder
* ctrl / cmd + shift + n : new file
* esc ( while new file context menu is open ) : close menu
* up / down : select file / folder
* enter : open file / folder
* delete / b a c k s p a c e : d e l e t e f i l e / f o l d e r
* ctrl / cmd + shift + r : rename file / folder
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
var Files = Files || { } ;
var keys = [ ] ;
var keyCodes = {
shift : 16 ,
n : 78 ,
r : 82 ,
cmdFirefox : 224 ,
cmdOpera : 17 ,
leftCmdWebKit : 91 ,
rightCmdWebKit : 93 ,
ctrl : 16 ,
esc : 27 ,
downArrow : 40 ,
upArrow : 38 ,
enter : 13 ,
backspace : 8 ,
del : 46
} ;
function removeA ( arr ) {
var what , a = arguments , L = a . length , ax ;
while ( L > 1 && arr . length ) {
@ -12,42 +39,107 @@ function removeA(arr) {
return arr ;
}
Files . bindKeyboardShortcuts = function ( document , $ ) {
var keys = [ ] ;
var keyCodes = {
shift : 16 ,
n : 78 ,
r : 82 ,
cmdFirefox : 224 ,
cmdOpera : 17 ,
leftCmdWebKit : 91 ,
rightCmdWebKit : 93 ,
ctrl : 16 ,
esc : 27 ,
downArrow : 40 ,
upArrow : 38 ,
enter : 13 ,
backspace : 8 ,
delete : 46
} ;
function newFile ( ) {
$ ( "#new" ) . addClass ( "active" ) ;
$ ( ".popup.popupTop" ) . toggle ( true ) ;
$ ( '#new li[data-type="file"]' ) . trigger ( 'click' ) ;
console . log ( "new file" ) ;
removeA ( keys , keyCodes . n ) ;
}
function newFolder ( ) {
$ ( "#new" ) . addClass ( "active" ) ;
$ ( ".popup.popupTop" ) . toggle ( true ) ;
$ ( '#new li[data-type="folder"]' ) . trigger ( 'click' ) ;
console . log ( "new folder" ) ;
removeA ( keys , keyCodes . n ) ;
}
function esc ( ) {
$ ( "#controls" ) . trigger ( 'click' ) ;
console . log ( "close" ) ;
}
function down ( ) {
var select = - 1 ;
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( $ ( this ) . hasClass ( "mouseOver" ) ) {
select = index + 1 ;
$ ( this ) . removeClass ( "mouseOver" ) ;
}
} ) ;
if ( select === - 1 ) {
$ ( "#fileList tr:first" ) . addClass ( "mouseOver" ) ;
}
else {
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( index === select ) {
$ ( this ) . addClass ( "mouseOver" ) ;
}
} ) ;
}
}
function up ( ) {
var select = - 1 ;
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( $ ( this ) . hasClass ( "mouseOver" ) ) {
select = index - 1 ;
$ ( this ) . removeClass ( "mouseOver" ) ;
}
} ) ;
if ( select === - 1 ) {
$ ( "#fileList tr:last" ) . addClass ( "mouseOver" ) ;
}
else {
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( index === select ) {
$ ( this ) . addClass ( "mouseOver" ) ;
}
} ) ;
}
}
function enter ( ) {
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( $ ( this ) . hasClass ( "mouseOver" ) ) {
$ ( this ) . removeClass ( "mouseOver" ) ;
$ ( this ) . find ( "span.nametext" ) . trigger ( 'click' ) ;
}
} ) ;
}
function del ( ) {
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( $ ( this ) . hasClass ( "mouseOver" ) ) {
$ ( this ) . removeClass ( "mouseOver" ) ;
$ ( this ) . find ( "a.action.delete" ) . trigger ( 'click' ) ;
}
} ) ;
}
function rename ( ) {
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( $ ( this ) . hasClass ( "mouseOver" ) ) {
$ ( this ) . removeClass ( "mouseOver" ) ;
$ ( this ) . find ( "a[data-action='Rename']" ) . trigger ( 'click' ) ;
}
} ) ;
}
Files . bindKeyboardShortcuts = function ( document , $ ) {
$ ( document ) . keydown ( function ( event ) { //check for modifier keys
var preventDefault = false ;
if ( $ . inArray ( event . keyCode , keys ) === - 1 )
keys . push ( event . keyCode ) ;
console . log ( event . keyCode ) ;
if ( $ . inArray ( keyCodes . n , keys ) !== - 1 && ( $ . inArray ( keyCodes . cmdFirefox , keys ) !== - 1 || $ . inArray ( keyCodes . cmdOpera , keys ) !== - 1 || $ . inArray ( keyCodes . leftCmdWebKit , keys ) !== - 1 || $ . inArray ( keyCodes . rightCmdWebKit , keys ) !== - 1 || $ . inArray ( keyCodes . ctrl , keys ) !== - 1 ) ) {
if ( $ . inArray ( keyCodes . n , keys ) !== - 1 && ( $ . inArray ( keyCodes . cmdFirefox , keys ) !== - 1 || $ . inArray ( keyCodes . cmdOpera , keys ) !== - 1 || $ . inArray ( keyCodes . leftCmdWebKit , keys ) !== - 1 || $ . inArray ( keyCodes . rightCmdWebKit , keys ) !== - 1 || $ . inArray ( keyCodes . ctrl , keys ) !== - 1 ) ) { //new file/folder prevent browser from responding
preventDefault = true ;
}
if ( $ . inArray ( keyCodes . backspace , keys ) !== - 1 && ! $ ( "#new" ) . hasClass ( "active" ) ) {
if ( $ . inArray ( keyCodes . backspace , keys ) !== - 1 && ! $ ( "#new" ) . hasClass ( "active" ) ) { //prevent default when deleting a file/folder
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( $ ( this ) . hasClass ( "mouseOver" ) ) {
preventDefault = true ;
}
} ) ;
}
if ( ! $ ( "#new" ) . hasClass ( "active" ) && $ . inArray ( keyCodes . r , keys ) !== - 1 && ( $ . inArray ( keyCodes . cmdFirefox , keys ) !== - 1 || $ . inArray ( keyCodes . cmdOpera , keys ) !== - 1 || $ . inArray ( keyCodes . leftCmdWebKit , keys ) !== - 1 || $ . inArray ( keyCodes . rightCmdWebKit , keys ) !== - 1 || $ . inArray ( keyCodes . ctrl , keys ) !== - 1 ) && $ . inArray ( keyCodes . shift , keys ) !== - 1 ) {
if ( ! $ ( "#new" ) . hasClass ( "active" ) && $ . inArray ( keyCodes . r , keys ) !== - 1 && ( $ . inArray ( keyCodes . cmdFirefox , keys ) !== - 1 || $ . inArray ( keyCodes . cmdOpera , keys ) !== - 1 || $ . inArray ( keyCodes . leftCmdWebKit , keys ) !== - 1 || $ . inArray ( keyCodes . rightCmdWebKit , keys ) !== - 1 || $ . inArray ( keyCodes . ctrl , keys ) !== - 1 ) && $ . inArray ( keyCodes . shift , keys ) !== - 1 ) { //prevent default when renaming file/folder
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( $ ( this ) . hasClass ( "mouseOver" ) ) {
preventDefault = true ;
@ -68,92 +160,34 @@ Files.bindKeyboardShortcuts = function (document, $) {
if ( $ . inArray ( keyCodes . n , keys ) !== - 1 && ( $ . inArray ( keyCodes . cmdFirefox , keys ) !== - 1 || $ . inArray ( keyCodes . cmdOpera , keys ) !== - 1 || $ . inArray ( keyCodes . leftCmdWebKit , keys ) !== - 1 || $ . inArray ( keyCodes . rightCmdWebKit , keys ) !== - 1 || $ . inArray ( keyCodes . ctrl , keys ) !== - 1 ) ) {
if ( $ . inArray ( keyCodes . shift , keys ) !== - 1 ) { //16=shift, New File
$ ( "#new" ) . addClass ( "active" ) ;
$ ( ".popup.popupTop" ) . toggle ( true ) ;
$ ( '#new li[data-type="file"]' ) . trigger ( 'click' ) ;
console . log ( "new file" ) ;
removeA ( keys , keyCodes . n ) ;
newFile ( ) ;
}
else { //New Folder
$ ( "#new" ) . addClass ( "active" ) ;
$ ( ".popup.popupTop" ) . toggle ( true ) ;
$ ( '#new li[data-type="folder"]' ) . trigger ( 'click' ) ;
console . log ( "new folder" ) ;
removeA ( keys , keyCodes . n ) ;
newFolder ( ) ;
}
}
else if ( $ ( "#new" ) . hasClass ( "active" ) && $ . inArray ( keyCodes . esc , keys ) !== - 1 ) {
$ ( "#controls" ) . trigger ( 'click' ) ;
console . log ( "close" ) ;
esc ( ) ;
}
else if ( $ . inArray ( keyCodes . downArrow , keys ) !== - 1 ) {
var select = - 1 ;
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( $ ( this ) . hasClass ( "mouseOver" ) ) {
select = index + 1 ;
$ ( this ) . removeClass ( "mouseOver" ) ;
}
} ) ;
if ( select === - 1 ) {
$ ( "#fileList tr:first" ) . addClass ( "mouseOver" ) ;
}
else {
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( index === select ) {
$ ( this ) . addClass ( "mouseOver" ) ;
}
} ) ;
}
down ( ) ;
}
else if ( $ . inArray ( keyCodes . upArrow , keys ) !== - 1 ) {
var select = - 1 ;
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( $ ( this ) . hasClass ( "mouseOver" ) ) {
select = index - 1 ;
$ ( this ) . removeClass ( "mouseOver" ) ;
}
} ) ;
if ( select === - 1 ) {
$ ( "#fileList tr:last" ) . addClass ( "mouseOver" ) ;
}
else {
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( index === select ) {
$ ( this ) . addClass ( "mouseOver" ) ;
}
} ) ;
}
up ( ) ;
}
else if ( ! $ ( "#new" ) . hasClass ( "active" ) && $ . inArray ( keyCodes . enter , keys ) !== - 1 ) {
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( $ ( this ) . hasClass ( "mouseOver" ) ) {
$ ( this ) . removeClass ( "mouseOver" ) ;
$ ( this ) . find ( "span.nametext" ) . trigger ( 'click' ) ;
}
} ) ;
enter ( ) ;
}
else if ( ! $ ( "#new" ) . hasClass ( "active" ) && ( $ . inArray ( keyCodes . backspace , keys ) !== - 1 || $ . inArray ( keyCodes . delete , keys ) !== - 1 ) ) {
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( $ ( this ) . hasClass ( "mouseOver" ) ) {
$ ( this ) . removeClass ( "mouseOver" ) ;
$ ( this ) . find ( "a.action.delete" ) . trigger ( 'click' ) ;
}
} ) ;
else if ( ! $ ( "#new" ) . hasClass ( "active" ) && ( $ . inArray ( keyCodes . backspace , keys ) !== - 1 || $ . inArray ( keyCodes . del , keys ) !== - 1 ) ) {
del ( ) ;
}
else if ( ! $ ( "#new" ) . hasClass ( "active" ) && $ . inArray ( keyCodes . r , keys ) !== - 1 && ( $ . inArray ( keyCodes . cmdFirefox , keys ) !== - 1 || $ . inArray ( keyCodes . cmdOpera , keys ) !== - 1 || $ . inArray ( keyCodes . leftCmdWebKit , keys ) !== - 1 || $ . inArray ( keyCodes . rightCmdWebKit , keys ) !== - 1 || $ . inArray ( keyCodes . ctrl , keys ) !== - 1 ) && $ . inArray ( keyCodes . shift , keys ) !== - 1 ) {
$ ( "#fileList tr" ) . each ( function ( index ) {
if ( $ ( this ) . hasClass ( "mouseOver" ) ) {
$ ( this ) . removeClass ( "mouseOver" ) ;
$ ( this ) . find ( "a[data-action='Rename']" ) . trigger ( 'click' ) ;
}
} ) ;
rename ( ) ;
}
removeA ( keys , event . keyCode ) ;