diff --git a/lib/client/editor.js b/lib/client/editor.js index 17259de8..56aa53f0 100644 --- a/lib/client/editor.js +++ b/lib/client/editor.js @@ -1,217 +1,208 @@ -var CloudCommander, CloudFunc, 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 (!pParent.getById('CloudEditor')) { - var lFM = document.getElementById('fm'); - if(lFM) - CloudCommander._anyload({ - name : 'div', - id : 'CloudEditor', - element : lFM - }); - 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;' + - 'padding :20px;' + - '}' + - '.CodeMirror-scroll{' + - 'height : 660px;' + - '}' - }); - - CloudCommander.jsload('lib/client/editor/' + - 'codemirror/pack/javascript.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 */ - - var lParent = this; - var initCodeMirror_f = function(pValue){ - CodeMirror(lCloudEditor,{ - mode : 'javascript', - value : pValue, - theme : 'night', - lineNumbers : true, - //переносим длинные строки - lineWrapping: false, - autofocus : true, - extraKeys: { - //Сохранение - "Esc": lParent.hide(lParent) - } - }); - }; - - 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){ - lCurrent = lCurrent[0]; - - /* getting link */ - lA = lCurrent.getElementsByTagName('a'); - if(!lA.length) - return console.log('Error:' + - 'can not find links in current file'); - - lA = lA[0].href; - /* убираем адрес хоста*/ - lA = '/' + lA.replace(document.location.href,''); - - /* checking is this link is to directory */ - var lSize = lCurrent.getElementsByClassName('size'); - if(lSize){ - lSize = lSize[0].textContent; - - /* if directory - load json - * not html data - */ - if (lSize === ''){ - if (lA.indexOf(CloudFunc.NOJS) === - CloudFunc.FS.length){ - lA = lA.replace(CloudFunc.NOJS, ''); - } - } - } - } - - /* показываем гиф загрузки возле пути папки сверху*/ - var lLoadingImage = CloudCommander._images.loading(); - var lErrorImage = CloudCommander._images.error(); - - lLoadingImage.className='icon loading';/* показываем загрузку*/ - lErrorImage.className='icon error hidden';/* прячем ошибку */ - /* show loading icon */ - lCurrent.firstChild.nextSibling.appendChild(lLoadingImage); - - /* reading data from current file */ - $.ajax({ - url:lA, - error: function(jqXHR, textStatus, errorThrown){ - lErrorImage.className ='icon error'; - lErrorImage.title = jqXHR.responseText; - - lCurrent.firstChild.nextSibling.appendChild(lErrorImage); - - lLoadingImage.className ='hidden'; - - console.log(jqXHR.responseText); - }, - - success:function(data, textStatus, jqXHR){ - /* if we got json - show it */ - if(typeof data === 'object') - data = JSON.stringify(data, null, 4); - - initCodeMirror_f(data); - - CloudCommander.keyBinded = false; - - lLeft && - (lLeft.className = 'panel hidden'); - - lLoadingImage.className ='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; +var CloudCommander, CloudFunc, CodeMirror; +/* object contains editors CodeMirror + * and later will be Ace + */ +CloudCommander.Editor = {}; +CloudCommander.Editor.CodeMirror = new CloudCommander.Util() + +/* function loads CodeMirror js and css files */; +CloudCommander.Editor.CodeMirror.load = (function(pParent){ + /* function shows editor */ + var createEditorDiv = function(){ + if (!pParent.getById('CloudEditor')) { + var lFM = document.getElementById('fm'); + if(lFM) + pParent.anyload({ + name : 'div', + id : 'CloudEditor', + element : lFM + }); + else + console.log('Error. Something went wrong FM not found'); + + pParent.show(); + } + }; + /* function loads css files + * of CodeMirror + */ + var loadAll = function(pParent) { + return function(){ + pParent.cssLoad({ + src : 'lib/client/editor/codemirror/pack/codemirror.pack.css' + }); + + pParent.cssLoad({ + src : 'lib/client/editor/codemirror/pack/night.pack.css' + }); + + pParent.cssSet({id:'editor', + inner : '.CodeMirror{' + + 'font-family :\'Droid Sans Mono\';' + + 'font-size :15px;' + + 'padding :20px;' + + '}' + + '.CodeMirror-scroll{' + + 'height : 660px;' + + '}' + }); + + pParent.jsload('lib/client/editor/' + + 'codemirror/pack/javascript.pack.js', + createEditorDiv); + }; + }; + + /* load CodeMirror main module */ + pParent.jsload('lib/client/editor/' + + 'codemirror/pack/codemirror.pack.js', + loadAll(this)); +}); + + /* function shows CodeMirror editor */ +CloudCommander.Editor.CodeMirror.show = (function(){ + /* if CloudEditor is not loaded - loading him */ + if(!this.getById('CloudEditor')) + return this.load(this); + /* removing keyBinding if set */ + + var lParent = this; + var initCodeMirror_f = function(pValue){ + CodeMirror(lCloudEditor,{ + mode : 'javascript', + value : pValue, + theme : 'night', + lineNumbers : true, + //переносим длинные строки + lineWrapping: false, + autofocus : true, + extraKeys: { + //Сохранение + "Esc": lParent.hide(lParent) + } + }); + }; + + 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){ + lCurrent = lCurrent[0]; + + /* getting link */ + lA = lCurrent.getElementsByTagName('a'); + if(!lA.length) + return console.log('Error:' + + 'can not find links in current file'); + + lA = lA[0].href; + /* убираем адрес хоста*/ + lA = '/' + lA.replace(document.location.href,''); + + /* checking is this link is to directory */ + var lSize = lCurrent.getElementsByClassName('size'); + if(lSize){ + lSize = lSize[0].textContent; + + /* if directory - load json + * not html data + */ + if (lSize === ''){ + if (lA.indexOf(CloudFunc.NOJS) === + CloudFunc.FS.length){ + lA = lA.replace(CloudFunc.NOJS, ''); + } + } + } + } + + /* показываем гиф загрузки возле пути папки сверху*/ + var lLoadingImage = CloudCommander._images.loading(); + var lErrorImage = CloudCommander._images.error(); + + lLoadingImage.className='icon loading';/* показываем загрузку*/ + lErrorImage.className='icon error hidden';/* прячем ошибку */ + /* show loading icon */ + lCurrent.firstChild.nextSibling.appendChild(lLoadingImage); + + /* reading data from current file */ + $.ajax({ + url:lA, + error: function(jqXHR, textStatus, errorThrown){ + lErrorImage.className ='icon error'; + lErrorImage.title = jqXHR.responseText; + + lCurrent.firstChild.nextSibling.appendChild(lErrorImage); + + lLoadingImage.className ='hidden'; + + console.log(jqXHR.responseText); + }, + + success:function(data, textStatus, jqXHR){ + /* if we got json - show it */ + if(typeof data === 'object') + data = JSON.stringify(data, null, 4); + + initCodeMirror_f(data); + + CloudCommander.keyBinded = false; + + lLeft && + (lLeft.className = 'panel hidden'); + + lLoadingImage.className ='hidden'; + } + }); +}); + +/* function hides CodeMirror editor */ +CloudCommander.Editor.CodeMirror.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]); + }; +}); + +CloudCommander.Editor.Keys = (function(){ + "use strict"; + + /* loading js and css of CodeMirror */ + this.CodeMirror.show(this.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; }); \ No newline at end of file