refactored

This commit is contained in:
coderaiser 2013-05-29 07:48:02 -04:00
parent b223e1ca68
commit b9fb22fab4
5 changed files with 278 additions and 288 deletions

View file

@ -8,8 +8,6 @@
*/
html{
font-family: sans-serif;
font-size: 100%;
color: #222;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
@ -22,7 +20,6 @@ body { margin: 0; font-size: 1em; line-height: 1.4; }
* Also: hot pink! (or customize the background color to match your design)
*/
/*
::-moz-selection { background: #fe57a1; color: #fff; text-shadow: none; }
::selection { background: #fe57a1; color: #fff; text-shadow: none; }
*/
::-moz-selection{ text-shadow: none; opacity: 0;}

View file

@ -28,9 +28,8 @@
<script src=/lib/client/dom.js></script>
<!--[if lt IE]>
<script src=//ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js></script>
<script src=//code.jquery.com/jquery-1.9.0.min.js id=jquery-1_9_0_min_js ></script>
<script src=//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js id=jquery_min_js ></script>
<script src=/lib/client/ie.js id=ie_js ></script>
<script src=//getfirebug.com/firebug-lite-debug.js></script>
<![endif]-->
<script src=/lib/client.js></script>
</body>

View file

@ -3,7 +3,7 @@
"appcache" : false,
"minification" : {
"js" : false,
"css" : true,
"css" : false,
"html" : true,
"img" : true
},

View file

@ -2,7 +2,7 @@
* @CloudFunc - обьект содержащий общий функционал
* клиентский и серверный
*/
var Util, DOM, CloudFunc, $, KeyBinding, CloudCmd;
var Util, DOM, CloudFunc, KeyBinding, CloudCmd;
(function(Util, DOM){
'use strict';

View file

@ -2,10 +2,6 @@ var CloudCmd, Util, DOM;
(function(CloudCmd, Util, DOM){
'use strict';
/* private property set or set key binding */
var Binded;
/* Key constants*/
CloudCmd.KEY = {
TAB : 9,
ENTER : 13,
@ -47,308 +43,306 @@ var CloudCmd, Util, DOM;
TRA : 192 /* Typewritten Reverse Apostrophe (`) */
};
var KEY = CloudCmd.KEY;
CloudCmd.KeyBinding = new KeyBindingProto();
CloudCmd.KeyBinding = {};
var KeyBinding = CloudCmd.KeyBinding;
KeyBinding.get = function(){return Binded;};
KeyBinding.set = function(){Binded = true;};
KeyBinding.unSet = function(){Binded = false;};
KeyBinding.init = function(){
/* saving state of tabs varibles */
var lTabPanel = {
left : 0,
right : 0
function KeyBindingProto(){
var Binded,
KEY = CloudCmd.KEY,
lTabPanel = {
left : 0,
right : 0
};
this.get = function(){return Binded;};
this.set = function(){Binded = true;};
this.unSet = function(){Binded = false;};
this.init = function(){
DOM.Events.addKey(listener);
/* клавиши назначены*/
Binded = true;
};
var key_event = function(pEvent){
/* получаем выдленный файл*/
var i, n, lCurrent = DOM.getCurrentFile(),
lKeyCode = pEvent.keyCode,
lShift = pEvent.shiftKey,
lAlt = pEvent.altKey,
lCtrl = pEvent.ctrlKey;
/* если клавиши можно обрабатывать*/
if(Binded){
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});
function listener(pEvent){
/* получаем выдленный файл*/
var i, n, lCurrent = DOM.getCurrentFile(),
lKeyCode = pEvent.keyCode,
lShift = pEvent.shiftKey,
lAlt = pEvent.altKey,
lCtrl = pEvent.ctrlKey;
/* если клавиши можно обрабатывать*/
if(Binded){
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.promptDeleteSelected(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.promptDeleteSelected(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),
lName = DOM.getCurrentName(lCurrent);
if(!lDir || lName === '..')
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.promptDeleteSelected(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.promptDeleteSelected(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),
lName = DOM.getCurrentName(lCurrent);
if(!lDir || lName === '..')
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;
/* открываем папку*/
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;
/* обновляем страницу,
* загружаем содержимое каталога
* при этом данные берём всегда с
* сервера, а не из кэша
* (обновляем кэш)*/
case KEY.R:
if(lCtrl){
Util.log('<ctrl>+r pressed\n' +
'reloading page...\n' +
'press <alt>+q to remove all key-handlers');
CloudCmd.refresh();
DOM.preventDefault(pEvent);
}
lC = lC.previousSibling;
}
DOM.setCurrentFile(lC);
DOM.preventDefault(pEvent);
break;
/* чистим кэш */
case KEY.D:
if(lCtrl){
Util.log('<ctrl>+d pressed\n' +
'clearing cache...\n' +
'press <alt>+q to remove all key-handlers');
DOM.Cache.clear();
DOM.preventDefault();
}
break;
/* открываем папку*/
case KEY.ENTER:
if( DOM.isCurrentIsDir() )
Util.exec( CloudCmd.loadDir() );
break;
/* убираем все обработчики
* нажатий клавиш */
case KEY.Q:
if(lAlt){
Util.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');
/* обработчик нажатий клавиш снят*/
Binded = false;
DOM.preventDefault(pEvent);
}
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;
/* обновляем страницу,
* загружаем содержимое каталога
* при этом данные берём всегда с
* сервера, а не из кэша
* (обновляем кэш)*/
case KEY.R:
if(lCtrl){
Util.log('<ctrl>+r pressed\n' +
'reloading page...\n' +
'press <alt>+q to remove all key-handlers');
CloudCmd.refresh();
DOM.preventDefault(pEvent);
}
break;
/* чистим кэш */
case KEY.D:
if(lCtrl){
Util.log('<ctrl>+d pressed\n' +
'clearing cache...\n' +
'press <alt>+q to remove all key-handlers');
DOM.Cache.clear();
DOM.preventDefault();
}
break;
}
}
/* устанавливаем все обработчики
* нажатий клавиш
*/
else if(lKeyCode === KEY.S && lAlt){
/* обрабатываем нажатия на клавиши*/
Binded = true;
Util.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');
DOM.preventDefault(pEvent);
/* убираем все обработчики
* нажатий клавиш */
case KEY.Q:
if(lAlt){
Util.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');
/* обработчик нажатий клавиш снят*/
Binded = false;
DOM.preventDefault(pEvent);
}
break;
}
}
/* устанавливаем все обработчики
* нажатий клавиш
*/
else if(lKeyCode === KEY.S && lAlt){
/* обрабатываем нажатия на клавиши*/
Binded = true;
Util.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');
DOM.preventDefault(pEvent);
}
};
/* добавляем обработчик клавишь */
DOM.Events.addKey(key_event);
/* клавиши назначены*/
Binded = true;
};
}
})(CloudCmd, Util, DOM);