diff --git a/ChangeLog b/ChangeLog index dc7c8f10..82b707cf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -54,6 +54,8 @@ from storage folder. * Added ability to delete selected files from DOM. +* Added ability to recursivly get current folder size. + 2012.03.01, Version 0.1.9 diff --git a/css/style.css b/css/style.css index c838cb9e..b68f19c2 100644 --- a/css/style.css +++ b/css/style.css @@ -156,26 +156,22 @@ body{ margin: 26px 26px 0 26px; } .fm-header{ - font-weight: bold; + font-weight: bold; } #path{ - margin-left:1.5%; + margin-left:1.5%; } .left, #left{ float:left; } + /* фон файла, на котором курсор*/ .current-file{ border: 1.5px solid rgba(49, 123, 249, .40); } -.selected-file{ - color:white; - background-color: rgb(49, 123, 249); - background-color: rgba(49, 123, 249, .40); -} -.selected-file .name > a{ - color:white; +.selected-file, .selected-file .name > a{ + color: rgb(254,159,224); } .right, #right{ @@ -189,6 +185,7 @@ body{ #keyspanel{ text-align: center; } + /* информация о файлах и папках*/ .name{ float: left; diff --git a/lib/client/dom.js b/lib/client/dom.js index 1d502f96..0a84cecd 100644 --- a/lib/client/dom.js +++ b/lib/client/dom.js @@ -56,10 +56,10 @@ var CloudCommander, Util, DOM = {}, CloudFunc; }); }; - this.read = function(pUrl, pCallBack){ + this.read = function(pUrl, pCallBack, pQuery){ sendRequest({ method : 'GET', - url : CloudFunc.FS + pUrl, + url : CloudFunc.FS + pUrl + (pQuery || ''), callback : pCallBack }); }; @@ -997,6 +997,22 @@ var CloudCommander, Util, DOM = {}, CloudFunc; return lRet; }; + /** + * get size + * @pCurrentFile + */ + DOM.loadCurrentSize = function(pCurrentFile){ + var lRet, + lLink = DOM.getCurrentPath(pCurrentFile); + /* если это папка - возвращаем слово dir вместо размера*/ + + DOM.RESTfull.read(lLink, function(pSize){ + Util.log(pSize); + }, '?size'); + + return lRet; + }; + /** * set size * @pCurrentFile @@ -1039,6 +1055,7 @@ var CloudCommander, Util, DOM = {}, CloudFunc; Util.exec(lErrorWas); DOM.Images.showError(jqXHR); }; + if( Util.isFunction(lParams) ) lParams.success = Util.retExec(pParams); diff --git a/lib/client/keyBinding.js b/lib/client/keyBinding.js index 4eef7573..fc42d880 100644 --- a/lib/client/keyBinding.js +++ b/lib/client/keyBinding.js @@ -11,6 +11,7 @@ var CloudCommander, Util, DOM; ENTER : 13, ESC : 27, + SPACE : 32, PAGE_UP : 33, PAGE_DOWN : 34, END : 35, @@ -68,11 +69,12 @@ var CloudCommander, Util, DOM; var lCurrentFile = DOM.getCurrentFile(), i; /* если клавиши можно обрабатывать*/ if(keyBinded && pEvent){ - var lKeyCode = pEvent.keyCode; + var lKeyCode = pEvent.keyCode, + lShift = pEvent.shiftKey; /* open configuration window */ if(lKeyCode === KEY.O && pEvent.altKey){ - console.log('openning config window...'); + Util.log('openning config window...'); DOM.Images.showLoad({top: true}); @@ -118,7 +120,7 @@ var CloudCommander, Util, DOM; break; case KEY.DELETE: - if(pEvent.shiftKey){ + if(lShift){ var lUrl = DOM.getCurrentPath(lCurrentFile); if( DOM.isCurrentIsDir(lCurrentFile) ) @@ -141,8 +143,8 @@ var CloudCommander, Util, DOM; break; case KEY.F3: - var lEditor = CloudCmd[pEvent.shiftKey ? - 'Viewer' : 'Editor']; + var lEditor = CloudCmd[lShift ? 'Viewer' : 'Editor']; + Util.exec(lEditor, true); DOM.preventDefault(pEvent); break; @@ -172,7 +174,7 @@ var CloudCommander, Util, DOM; break; case KEY.F10: - if(pEvent.shiftKey){ + if(lShift){ Util.exec(CloudCmd.Menu); DOM.preventDefault(pEvent); } @@ -183,10 +185,18 @@ var CloudCommander, Util, DOM; Util.exec(CloudCmd.Terminal); break; + case KEY.SPACE: + DOM.selectFile(lCurrentFile); + DOM.preventDefault(pEvent); + break; + /* навигация по таблице файлов * * если нажали клавишу вверх * * выделяем предыдущую строку */ case KEY.UP: + if(lShift) + DOM.selectFile(lCurrentFile); + DOM.setCurrentFile( lCurrentFile.previousSibling ); DOM.preventDefault( pEvent ); break; @@ -194,6 +204,9 @@ var CloudCommander, Util, DOM; /* если нажали клавишу в низ * * выделяем следующую строку */ case KEY.DOWN: + if(lShift) + DOM.selectFile(lCurrentFile); + DOM.setCurrentFile( lCurrentFile.nextSibling ); DOM.preventDefault( pEvent ); break; @@ -264,7 +277,7 @@ var CloudCommander, Util, DOM; * (обновляем кэш) */ else if(lKeyCode === KEY.R && pEvent.ctrlKey){ - console.log('+r pressed\n' + + Util.log('+r pressed\n' + 'reloading page...\n' + 'press +q to remove all key-handlers'); @@ -274,12 +287,12 @@ var CloudCommander, Util, DOM; /* если нажали +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(); + Util.log('+d pressed\n' + + 'clearing cache...\n' + + 'press +q to remove all key-handlers'); + + DOM.Cache.clear(); + DOM.preventDefault(); } /* если нажали +q @@ -287,7 +300,7 @@ var CloudCommander, Util, DOM; * нажатий клавиш */ else if(lKeyCode === KEY.Q && pEvent.altKey){ - console.log('+q pressed\n' + + Util.log('+q pressed\n' + '+r reload key-handerl - removed' + '+s clear cache key-handler - removed'+ 'press +s to to set them'); @@ -307,7 +320,7 @@ var CloudCommander, Util, DOM; /* обрабатываем нажатия на клавиши*/ keyBinded = true; - console.log('+s pressed\n' + + Util.log('+s pressed\n' + '+r reload key-handerl - set\n' + '+s clear cache key-handler - set\n' + 'press +q to remove them'); diff --git a/lib/server/commander.js b/lib/server/commander.js index 6649bc7c..ab88d557 100644 --- a/lib/server/commander.js +++ b/lib/server/commander.js @@ -93,12 +93,11 @@ var p = pParams, c = p.params; - if(c.stats) - c.stats[c.name] = !p.error ? p.data : { - 'mode' : 0, - 'size' : 0, - 'isDirectory' : Util.retFalse - }; + c.stats[c.name] = !p.error ? p.data : { + 'mode' : 0, + 'size' : 0, + 'isDirectory' : Util.retFalse + }; if(c.count === Object.keys(c.stats).length) Util.exec(c.callback); diff --git a/lib/server/main.js b/lib/server/main.js index 0689fac6..a9d262ec 100644 --- a/lib/server/main.js +++ b/lib/server/main.js @@ -101,6 +101,7 @@ exports.appcache = srvrequire('appcache'), exports.cache = srvrequire('cache').Cache, exports.cloudfunc = librequire('cloudfunc'), + exports.dir = srvrequire('dir'); exports.rest = srvrequire('rest').api, exports.update = srvrequire('update'), exports.ischanged = srvrequire('ischanged'); @@ -111,6 +112,7 @@ * totally filled of all information that should know all modules */ global.cloudcmd.main = exports; + /** * function do safe require of needed module * @param {Strin} pSrc diff --git a/lib/server/rest.js b/lib/server/rest.js index fd8bfebd..6835549c 100644 --- a/lib/server/rest.js +++ b/lib/server/rest.js @@ -17,6 +17,7 @@ fs = main.fs, Util = main.util, CloudFunc = main.cloudfunc, + dir = main.dir, OK = 200, Header = main.generateHeaders({ name:'api.json' @@ -41,7 +42,6 @@ return lRet; }; - /** * send data * @@ -96,27 +96,37 @@ var p = pParams, lQuery = main.getQuery(p.request); - p.name = Util.removeStrOneTime(p.name, [CloudFunc.FS, '?dir']) || '/'; + p.name = Util.removeStrOneTime(p.name, CloudFunc.FS) || '/'; switch(p.request.method){ case 'GET': - fs.stat(p.name, function(pError, pStat){ - if(!pError) - if( pStat.isDirectory() ) - main.commander.getDirContent(pParams.name, function(pError, pData){ - if(!pError){ - pParams.request.url += '.json'; - pParams.data = Util.stringifyJSON(pData); - main.sendResponse(pParams); - } - else - main.sendError(pParams, pError); - }); + if( Util.strCmp(lQuery, 'size') ) + dir.getSize(p.name, function(pErr, pSize){ + if(!pErr){ + var lSize = CloudFunc.getShortSize(pSize); + main.sendResponse(pParams, lSize); + } else - main.sendFile(pParams); - else - main.sendError(pParams, pError); + main.sendError(pParams, pErr); + }); + else + fs.stat(p.name, function(pError, pStat){ + if(!pError) + if( pStat.isDirectory() ) + main.commander.getDirContent(pParams.name, function(pError, pData){ + if(!pError){ + pParams.request.url += '.json'; + pParams.data = Util.stringifyJSON(pData); + main.sendResponse(pParams); + } + else + main.sendError(pParams, pError); + }); + else + main.sendFile(pParams); + else + main.sendError(pParams, pError); - }); + }); break;