diff --git a/README.md b/README.md index eba34413..1e9c1b9d 100644 --- a/README.md +++ b/README.md @@ -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 --------------- diff --git a/lib/client/keyBinding.js b/lib/client/keyBinding.js index 01d26993..7e15e0b3 100644 --- a/lib/client/keyBinding.js +++ b/lib/client/keyBinding.js @@ -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; - } - - /* если нажали +r - * обновляем страницу, - * загружаем содержимое каталога - * при этом данные берём всегда с - * сервера, а не из кэша - * (обновляем кэш) - */ - else if(lKeyCode === KEY.R && pEvent.ctrlKey){ - Util.log('+r pressed\n' + - 'reloading page...\n' + - 'press +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; + /* если нажали +r + * обновляем страницу, + * загружаем содержимое каталога + * при этом данные берём всегда с + * сервера, а не из кэша + * (обновляем кэш) + */ + case KEY.R: + if(lCtrl){ + Util.log('+r pressed\n' + + 'reloading page...\n' + + 'press +q to remove all key-handlers'); + + CloudCmd.refresh(); + DOM.preventDefault(pEvent); + } + break; + + /* если нажали +d чистим кэш */ + case KEY.D: + if(lCtrl){ + Util.log('+d pressed\n' + + 'clearing cache...\n' + + 'press +q to remove all key-handlers'); + + DOM.Cache.clear(); + DOM.preventDefault(); + } + break; - /* если нажали +d чистим кэш */ - else if(lKeyCode === KEY.D && pEvent.ctrlKey){ - Util.log('+d pressed\n' + - 'clearing cache...\n' + - 'press +q to remove all key-handlers'); - - DOM.Cache.clear(); - DOM.preventDefault(); + /* если нажали +q + * убираем все обработчики + * нажатий клавиш */ + case KEY.Q: + if(lAlt){ + Util.log('+q pressed\n' + + '+r reload key-handerl - removed' + + '+s clear cache key-handler - removed'+ + 'press +s to to set them'); + + /* обработчик нажатий клавиш снят*/ + keyBinded = false; + DOM.preventDefault(pEvent); + } } - - /* если нажали +q - * убираем все обработчики - * нажатий клавиш - */ - else if(lKeyCode === KEY.Q && pEvent.altKey){ - Util.log('+q pressed\n' + - '+r reload key-handerl - removed' + - '+s clear cache key-handler - removed'+ - 'press +s to to set them'); - - /* обработчик нажатий клавиш снят*/ - keyBinded = false; - - pEvent.preventDefault();//запрет на дальнейшее действие - } } /* если нажали +s * устанавливаем все обработчики * нажатий клавиш */ - else if(pEvent.keyCode === KEY.S && pEvent.altKey){ + else if(lKeyCode === KEY.S && lAlt){ /* обрабатываем нажатия на клавиши*/ keyBinded = true; - Util.log('+s pressed\n' + '+r reload key-handerl - set\n' + '+s clear cache key-handler - set\n' + 'press +q to remove them'); - - pEvent.preventDefault();//запрет на дальнейшее действие + DOM.preventDefault(pEvent); } };