refactored

This commit is contained in:
coderaiser 2013-04-09 10:14:16 -04:00
parent 05ede444e3
commit dbd26c0b0c
2 changed files with 241 additions and 261 deletions

View file

@ -59,7 +59,6 @@ There is a short list:
- **Insert** - select current file
- **F2** - rename current file
- **Shift + F10** - show context menu
- **Alt + g** - authorization in GitHub
Viewer's hot keys
---------------

View file

@ -69,297 +69,278 @@ var CloudCommander, Util, DOM;
var key_event = function(pEvent){
/* получаем выдленный файл*/
var i, n, lCurrent = DOM.getCurrentFile();
var i, n, lCurrent = DOM.getCurrentFile(),
lKeyCode = pEvent.keyCode,
lShift = pEvent.shiftKey,
lAlt = pEvent.altKey,
lCtrl = pEvent.ctrlKey;
/* если клавиши можно обрабатывать*/
if(keyBinded && pEvent){
var lKeyCode = pEvent.keyCode,
lShift = pEvent.shiftKey;
/* open configuration window */
if(lKeyCode === KEY.O && pEvent.altKey){
Util.log('openning config window...');
DOM.Images.showLoad({top: true});
Util.exec(CloudCmd.Config);
}
else if(lKeyCode === KEY.G && pEvent.altKey)
Util.exec(CloudCmd.GitHub);
else if(lKeyCode === KEY.D && pEvent.altKey){
Util.exec(CloudCmd.DropBox);
DOM.preventDefault(pEvent);
}
else if(lKeyCode >= KEY.F1 && lKeyCode <= KEY.TRA ||
lKeyCode >= KEY.TAB && lKeyCode <= KEY.A)
switch(lKeyCode){
case KEY.TAB:
/* changing parent panel of curent-file */
var lPanel = DOM.getPanel(),
lId = lPanel.id;
lTabPanel[lId] = lCurrent;
lPanel = DOM.getPanel({active:false});
if(keyBinded){
switch(lKeyCode){
case KEY.TAB:
/* changing parent panel of curent-file */
var lPanel = DOM.getPanel(),
lId = lPanel.id;
if(lTabPanel[lId])
DOM.setCurrentFile(lTabPanel[lId]);
else{
var lFirstFileOnList = DOM.getByTag('li', lPanel)[2];
DOM.setCurrentFile(lFirstFileOnList);
}
DOM.preventDefault(pEvent);//запрет на дальнейшее действие
break;
case KEY.INSERT:
DOM.setSelectedFile( lCurrent );
DOM.setCurrentFile( lCurrent.nextSibling );
break;
lTabPanel[lId] = lCurrent;
case KEY.DELETE:
if(lShift){
var lUrl = DOM.getCurrentPath(lCurrent);
lPanel = DOM.getPanel({active:false});
lId = lPanel.id;
if(lTabPanel[lId])
DOM.setCurrentFile(lTabPanel[lId]);
else{
var lFirstFileOnList = DOM.getByTag('li', lPanel)[2];
if( DOM.isCurrentIsDir(lCurrent) )
lUrl += '?dir';
DOM.RESTfull.delete(lUrl, function(){
DOM.deleteCurrent(lCurrent);
});
}
else
DOM.promptDeleteCurrent(lCurrent);
break;
DOM.setCurrentFile(lFirstFileOnList);
}
case KEY.F1:
DOM.preventDefault(pEvent);
break;
case KEY.F2:
DOM.renameCurrent(lCurrent);
break;
DOM.preventDefault(pEvent);//запрет на дальнейшее действие
break;
case KEY.INSERT:
DOM.setSelectedFile( lCurrent );
DOM.setCurrentFile( lCurrent.nextSibling );
break;
case KEY.DELETE:
if(lShift){
var lUrl = DOM.getCurrentPath(lCurrent);
case KEY.F3:
var lEditor = CloudCmd[lShift ? 'Viewer' : 'Editor'];
if( DOM.isCurrentIsDir(lCurrent) )
lUrl += '?dir';
Util.exec(lEditor, true);
DOM.preventDefault(pEvent);
break;
case KEY.F4:
DOM.Images.showLoad();
Util.exec(CloudCmd.Editor);
DOM.preventDefault(pEvent);
break;
case KEY.F5:
DOM.copyCurrent(lCurrent);
DOM.preventDefault(pEvent);
break;
case KEY.F6:
DOM.moveCurrent(lCurrent);
DOM.preventDefault(pEvent);
break;
case KEY.F7:
DOM.promptNewDir();
break;
case KEY.F8:
DOM.promptDeleteCurrent(lCurrent);
break;
case KEY.F:
DOM.promptDeleteCurrent(lCurrent);
break;
case KEY.F10:
if(lShift){
Util.exec(CloudCmd.Menu);
DOM.preventDefault(pEvent);
}
break;
case KEY.TRA:
DOM.Images.showLoad({top: true});
Util.exec(CloudCmd.Terminal);
break;
case KEY.SPACE:
var lSelected = DOM.isSelected(lCurrent),
lDir = DOM.isCurrentIsDir(lCurrent);
if(!lDir)
lSelected = true;
Util.ifExec(lSelected, function(){
DOM.setSelectedFile(lCurrent);
}, function(pCallBack){
DOM.loadCurrentSize(pCallBack, lCurrent);
DOM.RESTfull.delete(lUrl, function(){
DOM.deleteCurrent(lCurrent);
});
}
else
DOM.promptDeleteCurrent(lCurrent);
break;
case KEY.F1:
DOM.preventDefault(pEvent);
break;
case KEY.F2:
DOM.renameCurrent(lCurrent);
break;
case KEY.F3:
var lEditor = CloudCmd[lShift ? 'Viewer' : 'Editor'];
Util.exec(lEditor, true);
DOM.preventDefault(pEvent);
break;
case KEY.F4:
DOM.Images.showLoad();
Util.exec(CloudCmd.Editor);
DOM.preventDefault(pEvent);
break;
case KEY.F5:
DOM.copyCurrent(lCurrent);
DOM.preventDefault(pEvent);
break;
case KEY.F6:
DOM.moveCurrent(lCurrent);
DOM.preventDefault(pEvent);
break;
case KEY.F7:
DOM.promptNewDir();
break;
case KEY.F8:
DOM.promptDeleteCurrent(lCurrent);
break;
case KEY.F:
DOM.promptDeleteCurrent(lCurrent);
break;
case KEY.F10:
if(lShift){
Util.exec(CloudCmd.Menu);
DOM.preventDefault(pEvent);
}
break;
case KEY.TRA:
DOM.Images.showLoad({top: true});
Util.exec(CloudCmd.Terminal);
break;
case KEY.SPACE:
var lSelected = DOM.isSelected(lCurrent),
lDir = DOM.isCurrentIsDir(lCurrent);
if(!lDir)
lSelected = true;
Util.ifExec(lSelected, function(){
DOM.setSelectedFile(lCurrent);
}, function(pCallBack){
DOM.loadCurrentSize(pCallBack, lCurrent);
});
DOM.preventDefault(pEvent);
break;
/* навигация по таблице файлов *
* если нажали клавишу вверх *
* выделяем предыдущую строку */
case KEY.UP:
if(lShift)
DOM.setSelectedFile(lCurrent);
DOM.setCurrentFile( lCurrent.previousSibling );
DOM.preventDefault( pEvent );
break;
/* если нажали клавишу в низ *
* выделяем следующую строку */
case KEY.DOWN:
if(lShift)
DOM.setSelectedFile(lCurrent);
DOM.setCurrentFile( lCurrent.nextSibling );
DOM.preventDefault( pEvent );
break;
/* если нажали клавишу Home *
* переходим к самому верхнему *
* элементу */
case KEY.HOME:
DOM.setCurrentFile( lCurrent.parentElement.firstChild );
DOM.preventDefault(pEvent);
break;
/* если нажали клавишу End
* выделяем последний элемент */
case KEY.END:
DOM.setCurrentFile( lCurrent.parentElement.lastElementChild );
DOM.preventDefault( pEvent );
break;
/* если нажали клавишу page down
* проматываем экран */
case KEY.PAGE_DOWN:
DOM.scrollByPages( DOM.getPanel(), 1 );
for(i=0; i<30; i++){
if(!lCurrent.nextSibling) break;
DOM.preventDefault(pEvent);
break;
lCurrent = lCurrent.nextSibling;
}
DOM.setCurrentFile(lCurrent);
DOM.preventDefault(pEvent);
break;
/* если нажали клавишу page up проматываем экран */
case KEY.PAGE_UP:
DOM.scrollByPages( DOM.getPanel(), -1 );
/* навигация по таблице файлов *
* если нажали клавишу вверх *
* выделяем предыдущую строку */
case KEY.UP:
if(lShift)
DOM.setSelectedFile(lCurrent);
DOM.setCurrentFile( lCurrent.previousSibling );
DOM.preventDefault( pEvent );
break;
/* если нажали клавишу в низ *
* выделяем следующую строку */
case KEY.DOWN:
if(lShift)
DOM.setSelectedFile(lCurrent);
DOM.setCurrentFile( lCurrent.nextSibling );
DOM.preventDefault( pEvent );
break;
/* если нажали клавишу Home *
* переходим к самому верхнему *
* элементу */
case KEY.HOME:
DOM.setCurrentFile( lCurrent.parentElement.firstChild );
DOM.preventDefault(pEvent);
break;
/* если нажали клавишу End
* выделяем последний элемент */
case KEY.END:
DOM.setCurrentFile( lCurrent.parentElement.lastElementChild );
DOM.preventDefault( pEvent );
break;
/* если нажали клавишу page down
* проматываем экран */
case KEY.PAGE_DOWN:
DOM.scrollByPages( DOM.getPanel(), 1 );
for(i=0; i<30; i++){
if(!lCurrent.nextSibling) break;
lCurrent = lCurrent.nextSibling;
}
DOM.setCurrentFile(lCurrent);
DOM.preventDefault(pEvent);
break;
/* если нажали клавишу page up проматываем экран */
case KEY.PAGE_UP:
DOM.scrollByPages( DOM.getPanel(), -1 );
var lC = lCurrent,
tryCatch = function(pCurrentFile){
Util.tryCatch(function(){
return pCurrentFile
var lC = lCurrent,
tryCatch = function(pCurrentFile){
Util.tryCatch(function(){
return pCurrentFile
.previousSibling
.previousSibling
.previousSibling
.previousSibling
.previousSibling;
});
};
for(i = 0; i < 30; i++){
if(!lC.previousSibling || tryCatch(lC) ) break;
lC = lC.previousSibling;
}
DOM.setCurrentFile(lC);
DOM.preventDefault(pEvent);
break;
/* если нажали Enter - открываем папку*/
case KEY.ENTER:
if( DOM.isCurrentIsDir() )
Util.exec( CloudCmd.loadDir() );
break;
.previousSibling;
});
};
case KEY.A:
if(pEvent.ctrlKey){
var lParent = lCurrent.parentElement,
lNodes = lParent.childNodes;
/* not path and fm_header */
for(i = 2, n = lNodes.length; i < n; i++)
DOM.setSelectedFile( lNodes[i] );
DOM.preventDefault(pEvent);
}
for(i = 0; i < 30; i++){
if(!lC.previousSibling || tryCatch(lC) ) break;
break;
}
/* если нажали <ctr>+r
* обновляем страницу,
* загружаем содержимое каталога
* при этом данные берём всегда с
* сервера, а не из кэша
* (обновляем кэш)
*/
else if(lKeyCode === KEY.R && pEvent.ctrlKey){
Util.log('<ctrl>+r pressed\n' +
'reloading page...\n' +
'press <alt>+q to remove all key-handlers');
CloudCmd.refresh();
lC = lC.previousSibling;
}
DOM.setCurrentFile(lC);
DOM.preventDefault(pEvent);
}
break;
/* если нажали Enter - открываем папку*/
case KEY.ENTER:
if( DOM.isCurrentIsDir() )
Util.exec( CloudCmd.loadDir() );
break;
case KEY.A:
if(pEvent.ctrlKey){
var lParent = lCurrent.parentElement,
lNodes = lParent.childNodes;
/* not path and fm_header */
for(i = 2, n = lNodes.length; i < n; i++)
DOM.setSelectedFile( lNodes[i] );
DOM.preventDefault(pEvent);
}
break;
/* если нажали <ctr>+r
* обновляем страницу,
* загружаем содержимое каталога
* при этом данные берём всегда с
* сервера, а не из кэша
* (обновляем кэш)
*/
case KEY.R:
if(lCtrl){
Util.log('<ctrl>+r pressed\n' +
'reloading page...\n' +
'press <alt>+q to remove all key-handlers');
CloudCmd.refresh();
DOM.preventDefault(pEvent);
}
break;
/* если нажали <ctrl>+d чистим кэш */
case KEY.D:
if(lCtrl){
Util.log('<ctrl>+d pressed\n' +
'clearing cache...\n' +
'press <alt>+q to remove all key-handlers');
DOM.Cache.clear();
DOM.preventDefault();
}
break;
/* если нажали <ctrl>+d чистим кэш */
else if(lKeyCode === KEY.D && pEvent.ctrlKey){
Util.log('<ctrl>+d pressed\n' +
'clearing cache...\n' +
'press <alt>+q to remove all key-handlers');
DOM.Cache.clear();
DOM.preventDefault();
/* если нажали <alt>+q
* убираем все обработчики
* нажатий клавиш */
case KEY.Q:
if(lAlt){
Util.log('<alt>+q pressed\n' +
'<ctrl>+r reload key-handerl - removed' +
'<ctrl>+s clear cache key-handler - removed'+
'press <alt>+s to to set them');
/* обработчик нажатий клавиш снят*/
keyBinded = false;
DOM.preventDefault(pEvent);
}
}
/* если нажали <alt>+q
* убираем все обработчики
* нажатий клавиш
*/
else if(lKeyCode === KEY.Q && pEvent.altKey){
Util.log('<alt>+q pressed\n' +
'<ctrl>+r reload key-handerl - removed' +
'<ctrl>+s clear cache key-handler - removed'+
'press <alt>+s to to set them');
/* обработчик нажатий клавиш снят*/
keyBinded = false;
pEvent.preventDefault();//запрет на дальнейшее действие
}
}
/* если нажали <alt>+s
* устанавливаем все обработчики
* нажатий клавиш
*/
else if(pEvent.keyCode === KEY.S && pEvent.altKey){
else if(lKeyCode === KEY.S && lAlt){
/* обрабатываем нажатия на клавиши*/
keyBinded = true;
Util.log('<alt>+s pressed\n' +
'<ctrl>+r reload key-handerl - set\n' +
'<ctrl>+s clear cache key-handler - set\n' +
'press <alt>+q to remove them');
pEvent.preventDefault();//запрет на дальнейшее действие
DOM.preventDefault(pEvent);
}
};