mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 10:45:47 +00:00
refactored
This commit is contained in:
parent
b223e1ca68
commit
b9fb22fab4
5 changed files with 278 additions and 288 deletions
|
|
@ -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;}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"appcache" : false,
|
||||
"minification" : {
|
||||
"js" : false,
|
||||
"css" : true,
|
||||
"css" : false,
|
||||
"html" : true,
|
||||
"img" : true
|
||||
},
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
* @CloudFunc - обьект содержащий общий функционал
|
||||
* клиентский и серверный
|
||||
*/
|
||||
var Util, DOM, CloudFunc, $, KeyBinding, CloudCmd;
|
||||
var Util, DOM, CloudFunc, KeyBinding, CloudCmd;
|
||||
|
||||
(function(Util, DOM){
|
||||
'use strict';
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
Loading…
Add table
Add a link
Reference in a new issue