added functions DOM.addKeyListener and Util.loadOnLoad

This commit is contained in:
coderaiser 2012-11-13 08:42:25 -05:00
parent 640197a52e
commit b830010283
11 changed files with 205 additions and 196 deletions

View file

@ -77,6 +77,8 @@ dom.js and util.js.
* Fixed bug with navigation thrue path panel.
* Added function DOM.addKeyListener and Util.loadOnLoad
2012.10.01, Version 0.1.7

View file

@ -50,7 +50,12 @@ var CloudClient = {
*/
HEIGHT : 0,
MIN_ONE_PANEL_WIDTH : 1155,
OLD_BROWSER : false
OLD_BROWSER : false,
HOST : (function(){
var lLocation = document.location;
return lLocation.protocol + '//' + lLocation.host;
})()
};
@ -586,10 +591,9 @@ CloudClient._changeLinks = function(pPanelID){
}while(lTag !== 'LI');
DOM.setCurrentFile(pElement);
};
var lLocation = document.location,
lUrl = lLocation.protocol + '//' + lLocation.host;
},
lUrl = cloudcmd.HOST;
for(var i = 0, n = a.length; i < n ; i++)
{

View file

@ -5,6 +5,8 @@ var CloudCommander, $, Util, DOM;
DOM = {};
/* PRIVATE */
function getCurrentFile(){
return CloudCommander.CURRENT_FILE;
}
@ -64,68 +66,89 @@ var CloudCommander, $, Util, DOM;
return lRet_b;
};
/**
* safe add event listener
* @param pType
* @param pListener
* @param pUseCapture
*/
DOM.addListener = function(pType, pListener, pUseCapture){
return document.addEventListener(
pType,
pListener,
pUseCapture || false
);
};
/**
* safe add event keydown listener
* @param pType
* @param pListener
* @param pUseCapture
*/
DOM.addKeyListener = function(pListener, pUseCapture){
return DOM.addListener('keydown', pListener, pUseCapture);
};
/* Load file countent thrue ajax */
DOM.ajax = function(pParams){
DOM.ajax = function(pParams){
/* if on webkit */
if(window.XMLHttpRequest){
if(!XMLHTTP)
XMLHTTP = new XMLHttpRequest();
var lMethod = 'GET';
if(pParams.method)
lMethod = pParams.method;
XMLHTTP.open(lMethod, pParams.url, true);
XMLHTTP.send(null);
var lSuccess_f = pParams.success;
if(typeof lSuccess_f !== 'function')
console.log('error in DOM.ajax onSuccess:', pParams);
XMLHTTP.onreadystatechange = function(pEvent){
if (XMLHTTP.readyState === 4 /* Complete */){
var lJqXHR = pEvent.target;
var lContentType = XMLHTTP.getResponseHeader('content-type');
if(!XMLHTTP)
XMLHTTP = new XMLHttpRequest();
var lMethod = 'GET';
if(pParams.method)
lMethod = pParams.method;
XMLHTTP.open(lMethod, pParams.url, true);
XMLHTTP.send(null);
if (XMLHTTP.status === 200 /* OK */){
var lData = lJqXHR.response;
/* If it's json - parse it as json */
if(lContentType &&
lContentType.indexOf('application/json') === 0){
try{
lData = JSON.parse(lJqXHR.response);
}
catch(pError) {
/* if could not parse */
console.log('Error: could not parse' +
'json from server from url: ' +
pParams.url);
lData = lJqXHR.response;
}
var lSuccess_f = pParams.success;
if(typeof lSuccess_f !== 'function')
console.log('error in DOM.ajax onSuccess:', pParams);
XMLHTTP.onreadystatechange = function(pEvent){
if (XMLHTTP.readyState === 4 /* Complete */){
var lJqXHR = pEvent.target;
var lContentType = XMLHTTP.getResponseHeader('content-type');
if (XMLHTTP.status === 200 /* OK */){
var lData = lJqXHR.response;
/* If it's json - parse it as json */
if(lContentType &&
lContentType.indexOf('application/json') === 0){
try{
lData = JSON.parse(lJqXHR.response);
}
catch(pError) {
/* if could not parse */
console.log('Error: could not parse' +
'json from server from url: ' +
pParams.url);
lData = lJqXHR.response;
}
lSuccess_f(lData, lJqXHR.statusText, lJqXHR);
}
else/* file not found or connection lost */{
var lError_f = pParams.error;
/* if html given or something like it
* getBack just status of result
*/
if(lContentType &&
lContentType.indexOf('text/plain') !== 0){
lJqXHR.responseText = lJqXHR.statusText;
}
if(typeof lError_f === 'function')
lError_f(lJqXHR);
}
lSuccess_f(lData, lJqXHR.statusText, lJqXHR);
}
};
}
else $.ajax(pParams);
else/* file not found or connection lost */{
var lError_f = pParams.error;
/* if html given or something like it
* getBack just status of result
*/
if(lContentType &&
lContentType.indexOf('text/plain') !== 0){
lJqXHR.responseText = lJqXHR.statusText;
}
if(typeof lError_f === 'function')
lError_f(lJqXHR);
}
}
};
};
/*
@ -384,8 +407,8 @@ var CloudCommander, $, Util, DOM;
});
};
DOM.socketLoad = function(){
DOM.jsload('lib/client/socket.js');
DOM.socketLoad = function(pCallBack){
DOM.jsload('lib/client/socket.js', pCallBack);
};
/* DOM */

View file

@ -1,7 +1,5 @@
var CloudCommander, Util, DOM, CloudFunc, CodeMirror;
/* object contains editors CodeMirror
* and later will be Ace
*/
/* object contains editors CodeMirror */
(function(){
"use strict";
var cloudcmd = CloudCommander,
@ -27,8 +25,12 @@ var CloudCommander, Util, DOM, CloudFunc, CodeMirror;
/**
* function initialize CodeMirror
* @param {value, callback}
*/
function initCodeMirror(pValue){
function initCodeMirror(pData){
if(!pData)
pData = {};
if(!FM)
FM = DOM.getById('fm');
@ -41,15 +43,17 @@ var CloudCommander, Util, DOM, CloudFunc, CodeMirror;
CodeMirrorEditor.CodeMirror = new CodeMirror(CodeMirrorElement,{
mode : 'javascript',
value : pValue,
value : pData.data,
theme : 'night',
lineNumbers : true,
//переносим длинные строки
//переносим длинные строки
lineWrapping: false,
autofocus : true,
extraKeys: {
//Сохранение
"Esc": CodeMirrorEditor.hide
'Esc': function(){
Util.exec(pData.callback);
}
},
readOnly : ReadOnly
});
@ -58,7 +62,7 @@ var CloudCommander, Util, DOM, CloudFunc, CodeMirror;
/**
* function loads CodeMirror js and css files
*/
function load(){
function load(pCallBack){
console.time('codemirror load');
var lDir = CodeMirrorEditor.dir;
@ -88,8 +92,8 @@ var CloudCommander, Util, DOM, CloudFunc, CodeMirror;
function(){
console.timeEnd('codemirror load');
CodeMirrorLoaded = true;
CodeMirrorEditor.show();
CodeMirrorLoaded = true;
Util.exec(pCallBack);
}
);
}
@ -97,13 +101,7 @@ var CloudCommander, Util, DOM, CloudFunc, CodeMirror;
/**
* function shows CodeMirror editor
*/
CodeMirrorEditor.show = function(pReadOnly){
if( Util.isBoolean(pReadOnly) )
ReadOnly = pReadOnly;
/* if CodeMirrorEditor is not loaded - loading him */
if(!CodeMirrorLoaded)
return load();
CodeMirrorEditor.show = function(pCallBack){
/* if CodeMirror function show already
* called do not call it again
@ -118,7 +116,7 @@ var CloudCommander, Util, DOM, CloudFunc, CodeMirror;
lA = lA.href;
/* убираем адрес хоста*/
lA = '/' + lA.replace(document.location.href,'');
lA = lA.replace(cloudcmd.HOST, '');
/* checking is this link is to directory */
var lSize = DOM.getByClass('size', lCurrentFile);
@ -155,17 +153,17 @@ var CloudCommander, Util, DOM, CloudFunc, CodeMirror;
return DOM.Images.showError(jqXHR);
},
success:function(data, textStatus, jqXHR){
success:function(data, textStatus, jqXHR){
/* if we got json - show it */
if(typeof data === 'object')
data = JSON.stringify(data, null, 4);
var lHided = DOM.hidePanel();
if(lHided){
initCodeMirror(data);
Util.exec(pCallBack, data);
/* removing keyBinding if set */
KeyBinding.unSet();
KeyBinding.unSet();
}
DOM.Images.hideLoad();
@ -194,44 +192,39 @@ var CloudCommander, Util, DOM, CloudFunc, CodeMirror;
cloudcmd.Editor.Keys = function(pReadOnly){
ReadOnly = pReadOnly;
/* loading js and css of CodeMirror */
CodeMirrorEditor.show();
var lShowCodemirror = [
CodeMirrorEditor.hide,
initCodeMirror,
CodeMirrorEditor.show,
load
];
Util.loadOnLoad( lShowCodemirror );
lShowCodemirror.pop();
var key_event = function(pEvent){
var lKeyListener = function(pEvent){
/* если клавиши можно обрабатывать */
if( KeyBinding.get() ){
/* if f4 or f3 pressed */
var lF3 = cloudcmd.KEY.F3,
lF4 = cloudcmd.KEY.F4,
lShow = Util.bind( CodeMirrorEditor.show, CodeMirrorEditor );
lF4 = cloudcmd.KEY.F4;
if(!pEvent.shiftKey)
switch(pEvent.keyCode)
{
case lF4:
ReadOnly = false;
lShow();
Util.loadOnLoad( lShowCodemirror );
break;
case lF3:
ReadOnly = true;
lShow();
Util.loadOnLoad( lShowCodemirror );
break;
}
}
};
/* добавляем обработчик клавишь */
if (document.addEventListener)
document.addEventListener('keydown', key_event, false);
else{
var lFunc = document.onkeydown;
document.onkeydown = function(){
Util.exec(lFunc);
key_event();
};
}
DOM.addKeyListener(lKeyListener);
};
cloudcmd.Editor.CodeMirror = CodeMirrorEditor;

View file

@ -1,5 +1,5 @@
/* script, fixes ie */
var CloudCommander, DOM, $;
var Util, DOM, $;
(function(){
"use strict";
@ -26,12 +26,28 @@ var CloudCommander, DOM, $;
.appendTo(pParams_o.parent || document.head);
};
}
/* setting function context (this) */
DOM.bind = function(pFunction, pContext){
return $.proxy(pFunction, pContext);
};
if (!document.addEventListener)
/**
* safe add event listener on ie
* @param pType
* @param pListener
*/
DOM.addListener = function(pType, pListener){
var lType = 'on' + pType,
lFunc = document[lType];
document[lType] = function(){
Util.exec(lFunc);
pListener();
};
};
if(!document.getElementsByClassName){
DOM.getByClass = function(pClass, pElement){
var lClass = '.' + pClass,
@ -123,4 +139,6 @@ var CloudCommander, DOM, $;
};
}
if(!window.XMLHttpRequest)
DOM.ajax = $.ajax;
})();

View file

@ -101,10 +101,9 @@ var CloudCommander, Util, DOM, CloudFunc, $;
}
/** function loads css and js of Menu
* @param pParent - this
* @param pPosition - position of menu
* @param pCallBack
*/
function load(){
function load(pCallBack){
console.time('menu load');
var lDir = Menu.dir;
@ -114,7 +113,7 @@ var CloudCommander, Util, DOM, CloudFunc, $;
lDir + 'contextMenu.css'],
function(){
console.timeEnd('menu load');
Menu.show();
Util.exec(pCallBack);
});
}
@ -201,11 +200,16 @@ var CloudCommander, Util, DOM, CloudFunc, $;
Menu.Keys = function(pPosition){
Position = pPosition;
var lFunc = document.oncontextmenu;
DOM.jqueryLoad(function(){
Util.loadOnLoad([Menu.show, load]);
});
var lFunc = document.oncontextmenu;
document.oncontextmenu = function(){
Util.exec(lFunc);
return Menu.ENABLED;
};
var key_event = (function(pEvent){
/* если клавиши можно обрабатывать */
@ -215,6 +219,7 @@ var CloudCommander, Util, DOM, CloudFunc, $;
var lCurrent = DOM.getCurrentFile();
if(lCurrent)
$(lCurrent).contextMenu();
pEvent.preventDefault();
}
}
@ -223,21 +228,7 @@ var CloudCommander, Util, DOM, CloudFunc, $;
});
/* добавляем обработчик клавишь */
if (document.addEventListener)
document.addEventListener('keydown', key_event.bind(this),false);
else{
lFunc = document.onkeydown;
document.onkeydown = function(){
Util.exec(lFunc);
key_event();
};
/* showing context menu preview*/
Menu.show();
}
DOM.jqueryLoad( load );
DOM.addKeyListener( key_event );
};
cloudcmd.Menu = Menu;

View file

@ -93,7 +93,7 @@ var CloudCommander, Util, DOM, $, Github;
cloudcmd.Storage.Keys = function(){
DOM.jqueryLoad(function(){
Util.loadOnLoad([ init, load, setConfig ]);
Util.loadOnLoad([ init, setConfig, load ]);
});
};

View file

@ -1,4 +1,4 @@
var CloudCommander, DOM, $;
var CloudCommander, Util, DOM, $;
/* object contains terminal jqconsole */
(function(){
@ -19,16 +19,12 @@ var CloudCommander, DOM, $;
/**
* function loads jquery-terminal
*/
function load(){
function load(pCallBack){
console.time('terminal load');
var lDir = 'lib/client/terminal/jquery-terminal/jquery.';
DOM.cssLoad(lDir + 'terminal.css');
DOM.cssLoad(lDir + 'terminal.css');
DOM.socketLoad();
DOM.anyLoadOnLoad([
lDir + 'terminal.js',
lDir + 'mousewheel.js'],
@ -52,7 +48,7 @@ var CloudCommander, DOM, $;
$(window).unbind('resize');
JqueryTerminal.show();
Util.exec(pCallBack);
});
}
@ -85,9 +81,7 @@ var CloudCommander, DOM, $;
if( DOM.hidePanel() ){
Hidden = false;
DOM.show(TerminalId);
KeyBinding.unSet();
Term.resume();
}
};
@ -111,12 +105,18 @@ var CloudCommander, DOM, $;
*/
cloudcmd.Terminal.Keys = function(){
/* loading js and css*/
DOM.jqueryLoad( load );
var key_event = function(event){
DOM.jqueryLoad(function(){
Util.loadOnLoad([
JqueryTerminal.show,
load,
DOM.socketLoad
]);
});
/* добавляем обработчик клавишь */
DOM.addKeyListener(function(){
/* если клавиши можно обрабатывать */
if(Hidden &&
KeyBinding.get() &&
if(Hidden && KeyBinding.get() &&
event.keyCode === cloudcmd.KEY.TRA){
JqueryTerminal.show();
event.preventDefault();
@ -124,16 +124,7 @@ var CloudCommander, DOM, $;
else if(!Hidden && event.keyCode === cloudcmd.KEY.ESC)
JqueryTerminal.hide();
};
/* добавляем обработчик клавишь */
if (document.addEventListener)
document.addEventListener('keydown', key_event, false);
else
document.onkeypress = key_event;
});
};
cloudcmd.Terminal.JqueryTerminal = JqueryTerminal;

View file

@ -141,7 +141,7 @@ var CloudCommander, Util, DOM, CloudFunc, $;
var lLink = pA.href;
/* убираем адрес хоста */
lLink = '/' + lLink.replace(document.location.href,'');
lLink = lLink.replace(cloudcmd.HOST, '');
if (lLink.indexOf(CloudFunc.NOJS) === CloudFunc.FS.length)
lLink = lLink.replace(CloudFunc.NOJS, '');
@ -176,6 +176,7 @@ var CloudCommander, Util, DOM, CloudFunc, $;
* function shows FancyBox
*/
FancyBox.show = function(pCallBack){
DOM.Images.hideLoad();
set();
var lConfig = FancyBox.getConfig(),
@ -196,43 +197,21 @@ var CloudCommander, Util, DOM, CloudFunc, $;
};
cloudcmd.Viewer.Keys = function(){
var lCallBack_f = function(){
var lF3 = cloudcmd.KEY.F3,
key_event = function(pEvent){
/* если клавиши можно обрабатывать */
if( KeyBinding.get() )
if(pEvent.keyCode === lF3 && pEvent.shiftKey){
var lCurrentFile = DOM.getCurrentFile();
FancyBox.show(lCurrentFile);
pEvent.preventDefault();
}
};
/* добавляем обработчик клавишь */
if (document.addEventListener)
document.addEventListener('keydown', key_event, false);
else{
var lFunc;
if(typeof document.onkeydown === 'function')
lFunc = document.onkeydown;
document.onkeydown = function(){
if(lFunc)
lFunc();
key_event();
};
}
/* showing images preview*/
FancyBox.show();
DOM.Images.hideLoad();
};
DOM.jqueryLoad(function(){
FancyBox.load(lCallBack_f);
Util.loadOnLoad([FancyBox.show, FancyBox.load]);
});
/* добавляем обработчик клавишь */
DOM.addKeyListener( function(){
var lF3 = cloudcmd.KEY.F3;
/* если клавиши можно обрабатывать */
if( KeyBinding.get() &&
event.keyCode === lF3 &&
event.shiftKey ){
FancyBox.show( DOM.getCurrentFile() );
event.preventDefault();
}
});
};

View file

@ -58,16 +58,24 @@ var Util, exports;
return lRet;
};
Util.loadOnLoad = function(pFunc_a){
if( Util.isArray(pFunc_a) ) {
var lFunc = pFunc_a.pop();
Util.loadOnLoad = function(pFunc_a, pData){
if( Util.isArray(pFunc_a) && pFunc_a.length) {
var lFunc_a = [].concat(pFunc_a),
lFunc = lFunc_a.pop(),
lCallBack = function(pData){
return Util.loadOnLoad(lFunc_a, pData);
};
Util.exec(lFunc, function(){
return Util.loadOnLoad(pFunc_a);
});
if(pData)
pData = {
data : pData,
callback : lCallBack
};
Util.exec(lFunc , pData || lCallBack);
}
else
return Util.exec(pFunc_a);
return Util.exec(lFunc_a);
};
/**

View file

@ -379,7 +379,7 @@ CloudServer._controller = function(pReq, pRes)
},
isAllowd_b = (lCheck_f('js') && lMin_o.js) ||
(lCheck_f('css') && lMin_o.css) ||
(lCheck_f('css') && lMin_o.css) ||
(lCheck_f('html') && lMin_o.html);
if(isAllowd_b){