mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 18:55:26 +00:00
240 lines
No EOL
7.3 KiB
JavaScript
240 lines
No EOL
7.3 KiB
JavaScript
var CloudCommander, Util, DOM, CodeMirror;
|
|
/* object contains editors CodeMirror */
|
|
(function(){
|
|
"use strict";
|
|
var cloudcmd = CloudCommander,
|
|
KeyBinding = CloudCommander.KeyBinding,
|
|
CodeMirrorEditor = {},
|
|
FM,
|
|
CodeMirrorElement,
|
|
CodeMirrorLoaded = false,
|
|
/* indicator says CodeMirror still loads */
|
|
Loading = false,
|
|
ReadOnly = false,
|
|
|
|
CallBacks = [
|
|
hide,
|
|
initCodeMirror,
|
|
show,
|
|
load
|
|
];
|
|
|
|
cloudcmd.Editor = {
|
|
get : (function(){
|
|
return this.CodeMirror;
|
|
})
|
|
};
|
|
|
|
/* private functions */
|
|
|
|
function setCSS(){
|
|
var lPosition = DOM.getPanel().id,
|
|
lRet = DOM.cssSet({
|
|
id : 'editor',
|
|
inner : '.CodeMirror{' +
|
|
'font-family' + ': \'Droid Sans Mono\';' +
|
|
'font-size' + ': 15px;' +
|
|
'}' +
|
|
'.CodeMirror-scroll{' +
|
|
'height' + ':' + cloudcmd.HEIGHT + 'px' +
|
|
'}' +
|
|
'#CodeMirrorEditor{' +
|
|
'float' + ':' + lPosition +
|
|
'}'
|
|
});
|
|
|
|
return lRet;
|
|
}
|
|
|
|
/**
|
|
* function initialize CodeMirror
|
|
* @param {value, callback}
|
|
*/
|
|
function initCodeMirror(pData){
|
|
if(!pData)
|
|
pData = {};
|
|
|
|
if(!FM)
|
|
FM = DOM.getFM();
|
|
|
|
var lCSS = setCSS();
|
|
|
|
CodeMirrorElement = DOM.anyload({
|
|
name : 'div',
|
|
id : 'CodeMirrorEditor',
|
|
className : 'panel',
|
|
parent : FM
|
|
});
|
|
|
|
CodeMirrorEditor.CodeMirror = new CodeMirror(CodeMirrorElement,{
|
|
mode : 'javascript',
|
|
value : pData.data,
|
|
theme : 'night',
|
|
lineNumbers : true,
|
|
//переносим длинные строки
|
|
lineWrapping: false,
|
|
autofocus : true,
|
|
extraKeys: {
|
|
//Сохранение
|
|
'Esc': function(){
|
|
Util.exec(pData.callback);
|
|
DOM.remove(lCSS, document.head);
|
|
}
|
|
},
|
|
readOnly : ReadOnly
|
|
});
|
|
}
|
|
|
|
/**
|
|
* function loads CodeMirror js and css files
|
|
*/
|
|
function load(pCallBack){
|
|
console.time('codemirror load');
|
|
var lDir = cloudcmd.LIBDIRCLIENT + 'editor/codemirror/',
|
|
lFiles =
|
|
[
|
|
[
|
|
lDir + 'codemirror.css',
|
|
lDir + 'theme/night.css',
|
|
lDir + 'mode/javascript.js',
|
|
],
|
|
|
|
lDir + 'codemirror.js'
|
|
];
|
|
|
|
DOM.anyLoadOnLoad(lFiles, function(){
|
|
console.timeEnd('codemirror load');
|
|
CodeMirrorLoaded = true;
|
|
Util.exec(pCallBack);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* function shows CodeMirror editor
|
|
*/
|
|
function show(pCallBack){
|
|
|
|
/* if CodeMirror function show already
|
|
* called do not call it again
|
|
* if f4 key pressed couple times
|
|
*/
|
|
if(Loading)
|
|
return;
|
|
|
|
/* getting link */
|
|
var lCurrentFile = DOM.getCurrentFile(),
|
|
lPath = DOM.getCurrentPath(lCurrentFile);
|
|
|
|
/* checking is this link is to directory */
|
|
var lSize = DOM.getByClass('size', lCurrentFile);
|
|
if(lSize){
|
|
lSize = lSize[0].textContent;
|
|
|
|
/* when folder view
|
|
* is no need to edit
|
|
* data
|
|
*/
|
|
if (lSize === '<dir>')
|
|
ReadOnly = true;
|
|
|
|
}
|
|
|
|
Loading = true;
|
|
setTimeout(function(){
|
|
Loading = false;
|
|
},
|
|
400);
|
|
|
|
/* reading data from current file */
|
|
DOM.ajax({
|
|
url:lPath,
|
|
error: function(jqXHR, textStatus, errorThrown){
|
|
Loading = false;
|
|
return DOM.Images.showError(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){
|
|
Util.exec(pCallBack, data);
|
|
|
|
/* removing keyBinding if set */
|
|
KeyBinding.unSet();
|
|
}
|
|
|
|
DOM.Images.hideLoad();
|
|
|
|
Loading = false;
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* function hides CodeMirror editor
|
|
*/
|
|
function hide() {
|
|
var lElem = CodeMirrorElement;
|
|
KeyBinding.set();
|
|
|
|
if(lElem && FM)
|
|
FM.removeChild(lElem);
|
|
|
|
DOM.showPanel();
|
|
}
|
|
|
|
|
|
/**
|
|
* function calls all CodeMirror editor functions
|
|
*/
|
|
CodeMirrorEditor.show = function(){
|
|
DOM.Images.showLoad();
|
|
Util.loadOnLoad( CallBacks );
|
|
};
|
|
|
|
/**
|
|
* function hides CodeMirror editor
|
|
*/
|
|
CodeMirrorEditor.hide = hide;
|
|
|
|
/**
|
|
* function bind keys
|
|
*/
|
|
cloudcmd.Editor.init = function(pReadOnly){
|
|
ReadOnly = pReadOnly;
|
|
|
|
CodeMirrorEditor.show();
|
|
CallBacks.pop();
|
|
|
|
var lKeyListener = function(pEvent){
|
|
/* если клавиши можно обрабатывать */
|
|
if( KeyBinding.get() ){
|
|
/* if f4 or f3 pressed */
|
|
var lF3 = cloudcmd.KEY.F3,
|
|
lF4 = cloudcmd.KEY.F4;
|
|
|
|
if(!pEvent.shiftKey)
|
|
switch(pEvent.keyCode)
|
|
{
|
|
case lF4:
|
|
ReadOnly = false;
|
|
CodeMirrorEditor.show();
|
|
break;
|
|
case lF3:
|
|
ReadOnly = true;
|
|
CodeMirrorEditor.show();
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
|
|
/* добавляем обработчик клавишь */
|
|
DOM.addKeyListener( lKeyListener );
|
|
DOM.setButtonKey('f4', CodeMirrorEditor.show);
|
|
};
|
|
|
|
cloudcmd.Editor.CodeMirror = CodeMirrorEditor;
|
|
})(); |