mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 18:55:26 +00:00
344 lines
No EOL
16 KiB
JavaScript
344 lines
No EOL
16 KiB
JavaScript
var CloudCommander, Util, DOM;
|
||
(function(CloudCmd, Util, DOM){
|
||
"use strict";
|
||
|
||
DOM.Images.hideLoad();
|
||
|
||
/* private property set or set key binding */
|
||
var keyBinded;
|
||
|
||
/* Key constants*/
|
||
CloudCmd.KEY = {
|
||
TAB : 9,
|
||
ENTER : 13,
|
||
ESC : 27,
|
||
|
||
PAGE_UP : 33,
|
||
PAGE_DOWN : 34,
|
||
END : 35,
|
||
HOME : 36,
|
||
UP : 38,
|
||
DOWN : 40,
|
||
|
||
Delete : 46,
|
||
|
||
D : 68,
|
||
|
||
G : 71,
|
||
|
||
O : 79,
|
||
Q : 81,
|
||
R : 82,
|
||
S : 83,
|
||
T : 84,
|
||
|
||
F2 : 113,
|
||
F3 : 114,
|
||
F4 : 115,
|
||
F10 : 121,
|
||
|
||
TRA : 192 /* Typewritten Reverse Apostrophe (`) */
|
||
};
|
||
|
||
var KEY = CloudCmd.KEY;
|
||
|
||
CloudCmd.KeyBinding = {};
|
||
|
||
var KeyBinding = CloudCmd.KeyBinding;
|
||
|
||
KeyBinding.get = function(){return keyBinded;};
|
||
|
||
KeyBinding.set = function(){keyBinded = true;};
|
||
|
||
KeyBinding.unSet = function(){keyBinded = false;};
|
||
|
||
KeyBinding.init = function(){
|
||
/* saving state of tabs varibles */
|
||
var lTabPanel = {
|
||
left : 0,
|
||
right : 0
|
||
|
||
};
|
||
|
||
var key_event = function(pEvent){
|
||
/* получаем выдленный файл*/
|
||
var lCurrentFile = DOM.getCurrentFile(), i;
|
||
/* если клавиши можно обрабатывать*/
|
||
if(keyBinded && pEvent){
|
||
var lKeyCode = pEvent.keyCode;
|
||
|
||
/* open configuration window */
|
||
if(lKeyCode === KEY.O && pEvent.altKey){
|
||
console.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.TAB){
|
||
console.log('Tab pressed');
|
||
|
||
Util.tryCatchLog(function(){
|
||
/* changing parent panel of curent-file */
|
||
var lPanel = DOM.getPanel(),
|
||
lId = lPanel.id;
|
||
|
||
lTabPanel[lId] = lCurrentFile;
|
||
|
||
lPanel = DOM.getPanel({active:false});
|
||
lId = lPanel.id;
|
||
|
||
if(lTabPanel[lId])
|
||
DOM.setCurrentFile(lTabPanel[lId]);
|
||
else{
|
||
var lFirstFileOnList = DOM.getByTag('li', lPanel)[2];
|
||
|
||
DOM.setCurrentFile(lFirstFileOnList);
|
||
}
|
||
});
|
||
|
||
DOM.preventDefault(pEvent);//запрет на дальнейшее действие
|
||
}
|
||
else if(lKeyCode === KEY.Delete)
|
||
DOM.promptRemoveCurrent(lCurrentFile);
|
||
|
||
/* if f3 or shift+f3 or alt+f3 pressed */
|
||
else if(lKeyCode === KEY.F3){
|
||
var lEditor = CloudCmd[pEvent.shiftKey ?
|
||
'Viewer' : 'Editor'];
|
||
|
||
Util.exec(lEditor, true);
|
||
|
||
DOM.preventDefault(pEvent);
|
||
}
|
||
|
||
/* if f4 pressed */
|
||
else if(lKeyCode === KEY.F4) {
|
||
DOM.Images.showLoad();
|
||
|
||
Util.exec(CloudCmd.Editor);
|
||
|
||
DOM.preventDefault(pEvent);
|
||
}
|
||
else if(lKeyCode === KEY.F10 && pEvent.shiftKey){
|
||
Util.exec(CloudCmd.Menu);
|
||
|
||
DOM.preventDefault(pEvent);
|
||
}
|
||
|
||
else if (lKeyCode === KEY.TRA){
|
||
DOM.Images.showLoad({top: true});
|
||
Util.exec(CloudCmd.Terminal);
|
||
}
|
||
/* навигация по таблице файлов*/
|
||
/* если нажали клавишу вверх*/
|
||
else if(lKeyCode === KEY.UP){
|
||
/* если ненайдены выделенные файлы - выходим*/
|
||
if(!lCurrentFile) return;
|
||
|
||
/* если это строка существет и
|
||
* если она не заголовок
|
||
* файловой таблицы
|
||
*/
|
||
lCurrentFile = lCurrentFile.previousSibling;
|
||
if(lCurrentFile){
|
||
/* выделяем предыдущую строку*/
|
||
DOM.setCurrentFile(lCurrentFile);
|
||
}
|
||
|
||
DOM.preventDefault(pEvent);
|
||
}
|
||
|
||
/* если нажали клавишу в низ*/
|
||
else if(lKeyCode === KEY.DOWN){
|
||
/* если ненайдены выделенные файлы - выходим*/
|
||
if(lCurrentFile){
|
||
lCurrentFile = lCurrentFile.nextSibling;
|
||
/* если это не последняя строка */
|
||
if(lCurrentFile){
|
||
/* выделяем следующую строку*/
|
||
DOM.setCurrentFile(lCurrentFile);
|
||
DOM.preventDefault(pEvent);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* если нажали клавишу Home
|
||
* переходим к самому верхнему
|
||
* элементу
|
||
*/
|
||
else if(lKeyCode === KEY.HOME){
|
||
/* получаем первый элемент
|
||
* пропускаем путь и заголовки столбиков
|
||
* выделяем верхий файл
|
||
*/
|
||
lCurrentFile = lCurrentFile.parentElement.firstChild;
|
||
|
||
/* set current file and
|
||
* move scrollbar to top
|
||
*/
|
||
DOM.setCurrentFile(lCurrentFile);
|
||
|
||
DOM.preventDefault(pEvent);
|
||
}
|
||
|
||
/* если нажали клавишу End
|
||
* выделяем последний элемент
|
||
*/
|
||
else if(lKeyCode === KEY.END){
|
||
/* выделяем самый нижний файл */
|
||
lCurrentFile = lCurrentFile.
|
||
parentElement.lastElementChild;
|
||
|
||
/* set current file and
|
||
* move scrollbar to bottom
|
||
*/
|
||
DOM.setCurrentFile(lCurrentFile);
|
||
DOM.preventDefault(pEvent);
|
||
}
|
||
|
||
/* если нажали клавишу page down
|
||
* проматываем экран
|
||
*/
|
||
else if(lKeyCode === KEY.PAGE_DOWN){
|
||
DOM.getPanel().scrollByPages(1);
|
||
|
||
for(i=0; i<30; i++){
|
||
if(!lCurrentFile.nextSibling) break;
|
||
|
||
lCurrentFile = lCurrentFile.nextSibling;
|
||
}
|
||
DOM.setCurrentFile(lCurrentFile);
|
||
DOM.preventDefault(pEvent);
|
||
}
|
||
|
||
/* если нажали клавишу page up
|
||
* проматываем экран
|
||
*/
|
||
else if(lKeyCode === KEY.PAGE_UP){
|
||
DOM.getPanel().scrollByPages(-1);
|
||
|
||
var lC = lCurrentFile,
|
||
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);
|
||
}
|
||
|
||
/* если нажали Enter - открываем папку*/
|
||
else if(lKeyCode === KEY.ENTER)
|
||
Util.exec(CloudCmd._loadDir());
|
||
/* если нажали <ctr>+r
|
||
* обновляем страницу,
|
||
* загружаем содержимое каталога
|
||
* при этом данные берём всегда с
|
||
* сервера, а не из кэша
|
||
* (обновляем кэш)
|
||
*/
|
||
else if(lKeyCode === KEY.R &&
|
||
pEvent.ctrlKey){
|
||
console.log('<ctrl>+r pressed\n' +
|
||
'reloading page...\n' +
|
||
'press <alt>+q to remove all key-handlers');
|
||
|
||
/* Программно нажимаем на кнопку перезагрузки
|
||
* содержимого каталога
|
||
*/
|
||
var lRefreshIcon = DOM.getRefreshButton();
|
||
if(lRefreshIcon){
|
||
/* получаем название файла*/
|
||
var lSelectedName = DOM.getCurrentName();
|
||
|
||
/* если нашли элемент нажимаем него
|
||
* а если не можем - нажимаем на
|
||
* ссылку, на которую повешен eventHandler
|
||
* onclick
|
||
*/
|
||
|
||
Util.exec( DOM.getListener(lRefreshIcon) );
|
||
CloudCmd._currentToParent(lSelectedName);
|
||
|
||
DOM.preventDefault();
|
||
}
|
||
}
|
||
|
||
/* если нажали <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
|
||
* убираем все обработчики
|
||
* нажатий клавиш
|
||
*/
|
||
else if(lKeyCode === KEY.Q && pEvent.altKey){
|
||
console.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){
|
||
/* обрабатываем нажатия на клавиши*/
|
||
keyBinded = true;
|
||
|
||
console.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.addKeyListener(key_event);
|
||
|
||
/* клавиши назначены*/
|
||
keyBinded = true;
|
||
};
|
||
|
||
})(CloudCommander, Util, DOM); |