cloudcmd/lib/client/editor.js
2012-07-30 10:47:05 -04:00

174 lines
No EOL
6.7 KiB
JavaScript

var CloudCommander, CodeMirror;
/* object contains editors CodeMirror
* and later will be Ace
*/
CloudCommander.Editor = {};
CloudCommander.Editor.CodeMirror = {
load: (function(pParent){ /* function loads CodeMirror js and css files */
/* function shows editor */
var createEditorDiv = function(){
if (!document.getElementById('CloudEditor')) {
var lEditor=document.createElement('div');
lEditor.id ='CloudEditor';
var lFM = document.getElementById('fm');
if(lFM){
lFM.appendChild(lEditor);
}else console.log('Error. Something went wrong FM not found');
pParent.show();
}
};
/* function loads css files
* of CodeMirror
*/
var loadAll = function(pParent) {
return function(){
CloudCommander.cssLoad({
src : 'lib/client/editor/codemirror/pack/codemirror.pack.css'
});
CloudCommander.cssLoad({
src : 'lib/client/editor/codemirror/pack/night.pack.css'
});
CloudCommander.cssSet({id:'editor',
inner : '.CodeMirror{' +
'font-family :\'Droid Sans Mono\';' +
'font-size :15px;' +
'resize :vertical;' +
'padding :20px;' +
'}' +
'.CodeMirror-scroll{' +
'height : 660px;' +
'}' +
'.CodeMirror-scrollbar{' +
'overflow-y :auto' +
'}'
});
CloudCommander.jsload('lib/client/editor/codemirror/pack/xml.pack.js',
createEditorDiv);
};
};
/* load CodeMirror main module */
CloudCommander.jsload('lib/client/editor/codemirror/pack/codemirror.pack.js',
loadAll(this));
}),
show : (function(){ /* function shows CodeMirror editor */
/* if CloudEditor is not loaded - loading him */
if(!document.getElementById('CloudEditor'))
return this.load(this);
/* removing keyBinding if set */
CloudCommander.keyBinded = false;
var lParent = this;
var initCodeMirror_f = function(pValue){
CodeMirror(lCloudEditor,{
mode : 'xml',
value : pValue,
theme : 'night',
lineNumbers : true,
//переносим длинные строки
lineWrapping: true,
autofocus : true,
extraKeys: {
//Сохранение
"Esc": lParent.hide(this)
}
});
};
var lLeft = this.getById('left');
var lCloudEditor = this.getById('CloudEditor');
var lCURRENTFILE = CloudCommander.CURRENT_FILE;
var lCurrent = this.getByClass(lCURRENTFILE);
var lA;
if(lCurrent.length)
lA = lCurrent[0].getElementsByTagName('a');
if(lA.length)
lA = lA[0].href;
/* reading data from current file */
var lValue = $.ajax({
url:lA,
error: function(jqXHR, textStatus, errorThrown){
console.log(textStatus+' : '+errorThrown);
initCodeMirror_f('');
},
success:function(data, textStatus, jqXHR){
initCodeMirror_f(data);
}
});
if(lValue.responseText)
lValue = lValue.responseText;
lLeft &&
(lLeft.className = 'panel hidden');
}),
hide : (function(pParent) {
return function(){
CloudCommander.keyBinded = true;
var lLeft = pParent.getById('left');
var lCloudEditor = pParent.getById('CloudEditor');
/*
lCloudEditor &&
(lCloudEditor.className = 'hidden');
*/
lLeft &&
(lLeft.className = 'panel');
var lCodeMirror = pParent.getByClass('CodeMirror');
if(lCodeMirror.length)
lCloudEditor
.removeChild(lCodeMirror[0]);
};
}),
getById : function(pId){return document.getElementById(pId);},
getByClass : function(pClass){
return document.getElementsByClassName(pClass);
},
getPanel : function(){
var lCurrent = document.getElementsByClassName('current-file');
lCurrent.length &&
(lCurrent = lCurrent[0].parentElement);
return lCurrent && lCurrent.id;
}
};
CloudCommander.Editor.Keys = (function(){
"use strict";
/* loading js and css of CodeMirror */
CloudCommander.Editor.CodeMirror.show(CloudCommander.Editor.CodeMirror);
var key_event=function(event){
/* если клавиши можно обрабатывать */
if(CloudCommander.keyBinded){
/* if f4 pressed */
if(event.keyCode===115){
CloudCommander.Editor.CodeMirror.show();
}
}
};
/* добавляем обработчик клавишь */
if (document.addEventListener)
document.addEventListener('keydown', key_event,false);
else
document.onkeypress=key_event;
});