diff --git a/lib/client/key.js b/lib/client/key.js index ed799fe9..fa15ac75 100644 --- a/lib/client/key.js +++ b/lib/client/key.js @@ -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('+r pressed\n' + - 'reloading page...\n' + - 'press +q to remove all key-handlers'); - - CloudCmd.refresh(); - DOM.preventDefault(pEvent); - } - break; - - /* чистим кэш */ - case Key.D: - if (lCtrl) { - Util.log('+d pressed\n' + - 'clearing Storage...\n' + - 'press +q to remove all key-handlers'); - - DOM.Storage.clear(); - DOM.preventDefault(); - } - break; - - /* убираем все обработчики нажатий клавиш */ - case Key.Q: - if (lAlt) { - Util.log('+q pressed\n' + - '+r reload key-handerl - removed' + - '+s clear Storage key-handler - removed'+ - 'press +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('+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('+r pressed\n' + + 'reloading page...\n' + + 'press +q to remove all key-handlers'); + + CloudCmd.refresh(); + DOM.preventDefault(pEvent); + } + break; + + /* чистим кэш */ + case Key.D: + if (lCtrl) { + Util.log('+d pressed\n' + + 'clearing Storage...\n' + + 'press +q to remove all key-handlers'); + + DOM.Storage.clear(); + DOM.preventDefault(); + } + break; + + /* убираем все обработчики нажатий клавиш */ + case Key.Q: + if (lAlt) { + Util.log('+q pressed\n' + + '+r reload key-handerl - removed' + + '+s clear Storage key-handler - removed'+ + 'press +s to to set them'); + + Binded = false; + DOM.preventDefault(pEvent); + } + break; + } + } } })(CloudCmd, Util, DOM); \ No newline at end of file