refactor(key) add switchKey

This commit is contained in:
coderaiser 2013-11-28 09:33:35 +00:00
parent a898f53e52
commit 738e433124

View file

@ -77,259 +77,12 @@ var CloudCmd, Util, DOM;
lCtrl = pEvent.ctrlKey;
/* если клавиши можно обрабатывать*/
if (Binded) {
switch (lKeyCode) {
case Key.TAB:
/* changing parent panel of curent-file */
var lFirstFileOnList,
lPanel = DOM.getPanel(),
lId = lPanel.id;
lTabPanel[lId] = lCurrent;
lPanel = DOM.getPanel({active:false});
lId = lPanel.id;
lCurrent = lTabPanel[lId];
if (lCurrent && lCurrent.parentElement)
DOM.setCurrentFile(lCurrent);
else {
lFirstFileOnList = DOM.getByTag('li', lPanel)[2];
DOM.setCurrentFile(lFirstFileOnList);
}
DOM.preventDefault(pEvent);//запрет на дальнейшее действие
break;
switchKey(pEvent);
case Key.INSERT:
DOM .toggleSelectedFile(lCurrent)
.setCurrentFile(lCurrent.nextSibling);
break;
case Key.DELETE:
if (lShift) {
var lUrl = DOM.getCurrentPath(lCurrent);
if ( DOM.isCurrentIsDir(lCurrent) )
lUrl += '?dir';
DOM.RESTful.delete(lUrl, function() {
DOM.deleteCurrent(lCurrent);
});
}
else
DOM.promptDeleteSelected(lCurrent);
break;
case Key.F1:
Util.exec(CloudCmd.Help);
DOM.preventDefault(pEvent);
break;
case Key.F2:
DOM.renameCurrent(lCurrent);
break;
case Key.F3:
Util.exec(CloudCmd.View);
DOM.preventDefault(pEvent);
break;
case Key.F4:
Util.exec(CloudCmd.Edit);
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.promptDeleteSelected(lCurrent);
break;
case Key.F9:
Util.exec(CloudCmd.Menu);
DOM.preventDefault(pEvent);
break;
case Key.F10:
Util.exec(CloudCmd.Config);
DOM.preventDefault(pEvent);
break;
case Key.TRA:
DOM.Images.showLoad({top: true});
Util.exec(CloudCmd.Console);
break;
case Key.SPACE:
var lSelected = DOM.isSelected(lCurrent),
lDir = DOM.isCurrentIsDir(lCurrent),
lName = DOM.getCurrentName(lCurrent);
if (!lDir || lName === '..')
lSelected = true;
Util.ifExec(lSelected, function() {
DOM.toggleSelectedFile(lCurrent);
}, function(pCallBack) {
DOM.loadCurrentSize(pCallBack, lCurrent);
});
DOM.preventDefault(pEvent);
break;
/* навигация по таблице файлов *
* если нажали клавишу вверх *
* выделяем предыдущую строку */
case Key.UP:
if (lShift)
DOM.toggleSelectedFile(lCurrent);
DOM.setCurrentFile( lCurrent.previousSibling );
DOM.preventDefault( pEvent );
break;
/* если нажали клавишу в низ - выделяем следующую строку */
case Key.DOWN:
if (lShift)
DOM.toggleSelectedFile(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
.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;
/* открываем папку*/
case Key.ENTER:
if (DOM.isCurrentIsDir())
Util.exec( CloudCmd.loadDir() );
break;
case Key.A:
if (pEvent.ctrlKey) {
DOM .toggleAllSelectedFiles(lCurrent)
.preventDefault(pEvent);
}
break;
/*
* обновляем страницу,
* загружаем содержимое каталога
* при этом данные берём всегда с
* сервера, а не из кэша
* (обновляем кэш)
*/
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;
/* чистим кэш */
case Key.D:
if (lCtrl) {
Util.log('<ctrl>+d pressed\n' +
'clearing Storage...\n' +
'press <alt>+q to remove all key-handlers');
DOM.Storage.clear();
DOM.preventDefault();
}
break;
/* убираем все обработчики нажатий клавиш */
case Key.Q:
if (lAlt) {
Util.log('<alt>+q pressed\n' +
'<ctrl>+r reload key-handerl - removed' +
'<ctrl>+s clear Storage key-handler - removed'+
'press <alt>+s to to set them');
Binded = false;
DOM.preventDefault(pEvent);
}
break;
}
}
/* устанавливаем все обработчики
* нажатий клавиш
*/
else if (lKeyCode === Key.S && lAlt) {
/* устанавливаем все обработчики
* нажатий клавиш
*/
} else if (lKeyCode === Key.S && lAlt) {
/* обрабатываем нажатия на клавиши*/
Binded = true;
Util.log('<alt>+s pressed \n' +
@ -340,6 +93,262 @@ var CloudCmd, Util, DOM;
DOM.preventDefault(pEvent);
}
}
function switchKey(pEvent) {
var i, n, lCurrent = DOM.getCurrentFile(),
lKeyCode = pEvent.keyCode,
lShift = pEvent.shiftKey,
lAlt = pEvent.altKey,
lCtrl = pEvent.ctrlKey;
switch (lKeyCode) {
case Key.TAB:
/* changing parent panel of curent-file */
var lFirstFileOnList,
lPanel = DOM.getPanel(),
lId = lPanel.id;
lTabPanel[lId] = lCurrent;
lPanel = DOM.getPanel({active:false});
lId = lPanel.id;
lCurrent = lTabPanel[lId];
if (lCurrent && lCurrent.parentElement)
DOM.setCurrentFile(lCurrent);
else {
lFirstFileOnList = DOM.getByTag('li', lPanel)[2];
DOM.setCurrentFile(lFirstFileOnList);
}
DOM.preventDefault(pEvent);//запрет на дальнейшее действие
break;
case Key.INSERT:
DOM .toggleSelectedFile(lCurrent)
.setCurrentFile(lCurrent.nextSibling);
break;
case Key.DELETE:
if (lShift) {
var lUrl = DOM.getCurrentPath(lCurrent);
if ( DOM.isCurrentIsDir(lCurrent) )
lUrl += '?dir';
DOM.RESTful.delete(lUrl, function() {
DOM.deleteCurrent(lCurrent);
});
}
else
DOM.promptDeleteSelected(lCurrent);
break;
case Key.F1:
Util.exec(CloudCmd.Help);
DOM.preventDefault(pEvent);
break;
case Key.F2:
DOM.renameCurrent(lCurrent);
break;
case Key.F3:
Util.exec(CloudCmd.View);
DOM.preventDefault(pEvent);
break;
case Key.F4:
Util.exec(CloudCmd.Edit);
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.promptDeleteSelected(lCurrent);
break;
case Key.F9:
Util.exec(CloudCmd.Menu);
DOM.preventDefault(pEvent);
break;
case Key.F10:
Util.exec(CloudCmd.Config);
DOM.preventDefault(pEvent);
break;
case Key.TRA:
DOM.Images.showLoad({top: true});
Util.exec(CloudCmd.Console);
break;
case Key.SPACE:
var lSelected = DOM.isSelected(lCurrent),
lDir = DOM.isCurrentIsDir(lCurrent),
lName = DOM.getCurrentName(lCurrent);
if (!lDir || lName === '..')
lSelected = true;
Util.ifExec(lSelected, function() {
DOM.toggleSelectedFile(lCurrent);
}, function(pCallBack) {
DOM.loadCurrentSize(pCallBack, lCurrent);
});
DOM.preventDefault(pEvent);
break;
/* навигация по таблице файлов *
* если нажали клавишу вверх *
* выделяем предыдущую строку */
case Key.UP:
if (lShift)
DOM.toggleSelectedFile(lCurrent);
DOM.setCurrentFile( lCurrent.previousSibling );
DOM.preventDefault( pEvent );
break;
/* если нажали клавишу в низ - выделяем следующую строку */
case Key.DOWN:
if (lShift)
DOM.toggleSelectedFile(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
.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;
/* открываем папку*/
case Key.ENTER:
if (DOM.isCurrentIsDir())
Util.exec( CloudCmd.loadDir() );
break;
case Key.A:
if (pEvent.ctrlKey) {
DOM .toggleAllSelectedFiles(lCurrent)
.preventDefault(pEvent);
}
break;
/*
* обновляем страницу,
* загружаем содержимое каталога
* при этом данные берём всегда с
* сервера, а не из кэша
* (обновляем кэш)
*/
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;
/* чистим кэш */
case Key.D:
if (lCtrl) {
Util.log('<ctrl>+d pressed\n' +
'clearing Storage...\n' +
'press <alt>+q to remove all key-handlers');
DOM.Storage.clear();
DOM.preventDefault();
}
break;
/* убираем все обработчики нажатий клавиш */
case Key.Q:
if (lAlt) {
Util.log('<alt>+q pressed\n' +
'<ctrl>+r reload key-handerl - removed' +
'<ctrl>+s clear Storage key-handler - removed'+
'press <alt>+s to to set them');
Binded = false;
DOM.preventDefault(pEvent);
}
break;
}
}
}
})(CloudCmd, Util, DOM);