var CloudCommander; /* Key constants*/ CloudCommander.KEY = { TAB : 9, ENTER : 13, ESC : 27, PPAGE_UP : 33, PAGE_DOWN : 34, END : 35, HOME : 36, UP : 38, DOWN : 40, D : 68, O : 79, Q : 81, R : 82, S : 83, F2 : 113, F3 : 114, F4 : 115, F10 : 121 }; CloudCommander.keyBinding = (function(){ "use strict"; var Util = new CloudCommander.Utils(); /* saving state of tabs varibles */ var lTabPanel = { left : 0, right : 0 }; var lKEY = CloudCommander.KEY; var key_event = function(event){ /* получаем выдленный файл*/ var lCurrentFile = Util.getCurrentFile(), lName, i; /* если клавиши можно обрабатывать*/ if(CloudCommander.keyBinded && event){ /* open configuration window */ if(event.keyCode === lKEY.O && event.altKey){ console.log('openning config window...'); Util.Images.showLoad(); if (typeof CloudCommander.Config === 'function') CloudCommander.Config(); } /* если нажали таб: * переносим курсор на * правую панель, если * мы были на левой и * наоборот */ if(event.keyCode === lKEY.TAB){ console.log('Tab pressed'); try{ /* changing parent panel of curent-file */ var lPanel = Util.getPanel(); var lId = lPanel.id; lTabPanel[lId] = lCurrentFile; lPanel = Util.getPanel({active:false}); lId = lPanel.id; if(lTabPanel[lId]) Util.setCurrentFile(lTabPanel[lId]); else{ var lFirstFileOnList = Util.getByTag('li', lPanel)[2]; Util.setCurrentFile(lFirstFileOnList); } }catch(error){console.log(error);} event.preventDefault();//запрет на дальнейшее действие } /* if f2 pressed */ else if(event.keyCode === lKEY.F2){ } /* if f3 or shift+f3 pressed */ else if(event.keyCode === lKEY.F3){ Util.Images.showLoad(); if(event.shiftKey && typeof CloudCommander.Viewer === 'function') CloudCommander.Viewer(lCurrentFile); else if (typeof CloudCommander.Editor === 'function') CloudCommander.Editor(lCurrentFile, true); event.preventDefault();//запрет на дальнейшее действие } /* if alt+f3 pressed */ else if(event.keyCode === lKEY.F3 && event.altKey){ Util.Images.showLoad(); if (typeof CloudCommander.Terminal === 'function') CloudCommander.Terminal(); event.preventDefault();//запрет на дальнейшее действие } /* if f4 pressed */ else if(event.keyCode === lKEY.F4) { Util.Images.showLoad(); if (typeof CloudCommander.Editor === 'function') CloudCommander.Editor(lCurrentFile); event.preventDefault();//запрет на дальнейшее действие } else if(event.keyCode === lKEY.F10 && event.shiftKey){ if (typeof CloudCommander.Menu === 'function') CloudCommander.Menu(); event.preventDefault();//запрет на дальнейшее действие } /* навигация по таблице файлов*/ /* если нажали клавишу вверх*/ else if(event.keyCode === lKEY.UP){ /* если ненайдены выделенные файлы - выходим*/ if(!lCurrentFile) return; /* если это строка существет и * если она не заголовок * файловой таблицы */ lCurrentFile = lCurrentFile.previousSibling; if(lCurrentFile){ /* выделяем предыдущую строку*/ Util.setCurrentFile(lCurrentFile); /* scrolling to current file*/ Util.scrollIntoViewIfNeeded(lCurrentFile); } event.preventDefault();//запрет на дальнейшее действие } /* если нажали клавишу в низ*/ else if(event.keyCode === lKEY.DOWN){ /* если ненайдены выделенные файлы - выходим*/ if(!lCurrentFile)return; lCurrentFile = lCurrentFile.nextSibling; /* если это не последняя строка */ if(lCurrentFile){ /* выделяем следующую строку*/ Util.setCurrentFile(lCurrentFile); /* scrolling to current file*/ Util.scrollIntoViewIfNeeded(lCurrentFile); event.preventDefault();//запрет на дальнейшее действие } } /* если нажали клавишу Home * переходим к самому верхнему * элементу */ else if(event.keyCode === lKEY.HOME){ /* получаем первый элемент * пропускаем путь и заголовки столбиков * выделяем верхий файл */ Util.setCurrentFile(lCurrentFile .parentElement.children[2]); /* move scrollbar to top */ Util.getPanel().scrollByLines(-100000000000000); event.preventDefault();//запрет на дальнейшее действие } /* если нажали клавишу End * выделяем последний элемент */ else if( event.keyCode === lKEY.END){ /* выделяем самый нижний файл */ Util.setCurrentFile(lCurrentFile .parentElement.lastElementChild); /* move scrollbar to bottom*/ Util.getPanel().scrollByLines(100000000000000); event.preventDefault();//запрет на дальнейшее действие } /* если нажали клавишу page down * проматываем экран */ else if(event.keyCode === lKEY.PAGE_DOWN){ Util.getPanel().scrollByPages(1); for(i=0; i<30; i++){ if(!lCurrentFile.nextSibling) break; lCurrentFile = lCurrentFile.nextSibling; } Util.setCurrentFile(lCurrentFile); event.preventDefault();//запрет на дальнейшее действие } /* если нажали клавишу page up * проматываем экран */ else if(event.keyCode === lKEY.PAGE_UP){ Util.getPanel().scrollByPages(-1); for(i=0; i<30; i++){ if(!lCurrentFile.previousSibling) break; else try{ lCurrentFile .previousSibling .previousSibling .previousSibling .previousSibling; } catch(pError){ break; } lCurrentFile = lCurrentFile.previousSibling; } Util.setCurrentFile(lCurrentFile); event.preventDefault();//запрет на дальнейшее действие } /* если нажали Enter - открываем папку*/ else if(event.keyCode === lKEY.ENTER){ /* если ненайдены выделенные файлы - выходим*/ if(!lCurrentFile)return; /* из него достаём спан с именем файла*/ lName = Util.getByClass('name', lCurrentFile); /* если нету (что вряд ли) - выходим*/ if(!lName)return false; /* достаём все ссылки*/ var lATag = Util.getByTag('a', lName[0]); /* если нету - выходим */ if(!lATag)return false; /* вызываем ajaxload привязанный через changelinks * пробуем нажать на ссылку, если не получиться * (opera, ie), вызываем событие onclick, */ if(lCurrentFile.onclick)lCurrentFile.onclick(true); else try{ lATag[0].click(); } catch(error){ console.log(error); } event.preventDefault();//запрет на дальнейшее действие } /* если нажали +r * обновляем страницу, * загружаем содержимое каталога * при этом данные берём всегда с * сервера, а не из кэша * (обновляем кэш) */ else if(event.keyCode === lKEY.R && event.ctrlKey){ console.log('+r pressed'); console.log('reloading page...'); console.log('press +q to remove all key-handlers'); /* Программно нажимаем на кнопку перезагрузки * содержимого каталога */ var lRefreshIcon = Util.getRefreshButton(); if(lRefreshIcon){ /* получаем название файла*/ var lSelectedName = Util .getByTag('a', lCurrentFile)[0].textContent; /* если нашли элемент нажимаем него * а если не можем - нажимаем на * ссылку, на которую повешен eventHandler * onclick */ lRefreshIcon.onclick(); CloudCommander._currentToParent(lSelectedName); event.preventDefault();//запрет на дальнейшее действие } } /* если нажали +d чистим кэш */ else if(event.keyCode === lKEY.D && event.ctrlKey){ console.log('+d pressed'); console.log('clearing cache...'); console.log('press +q to remove all key-handlers'); var lClearCache = Util.getById('clear-cache'); if(lClearCache && lClearCache.onclick) lClearCache.onclick(); event.preventDefault();//запрет на дальнейшее действие } /* если нажали +q * убираем все обработчики * нажатий клавиш */ else if(event.keyCode === lKEY.Q && event.altKey){ //document.removeEventListener('keydown', key_event,false); console.log('+q pressed'); console.log('+r reload key-handerl - removed'); console.log('+s clear cache key-handler - removed'); console.log('press +s to to set them'); /* обработчик нажатий клавиш снят*/ CloudCommander.keyBinded = false; event.preventDefault();//запрет на дальнейшее действие } } /* если нажали +s * устанавливаем все обработчики * нажатий клавиш */ else if(event.keyCode === lKEY.S && event.altKey){ /* обрабатываем нажатия на клавиши*/ CloudCommander.keyBinded = true; console.log('+s pressed'); console.log('+r reload key-handerl - set'); console.log('+s clear cache key-handler - set'); console.log('press +q to remove them'); event.preventDefault();//запрет на дальнейшее действие } return false; }; /* добавляем обработчик клавишь */ if(document.addEventListener) document.addEventListener('keydown', key_event,false); else document.onkeydown = key_event; /* клавиши назначены*/ CloudCommander.keyBinded=true; });