diff --git a/client.js b/client.js index 635ef41e..ec914535 100644 --- a/client.js +++ b/client.js @@ -322,6 +322,8 @@ CloudClient.Util = (function(){ this.showLoad = function(pElem){ var lLoadingImage = CloudCommander._images.loading(); + var lErrorImage = CloudCommander._images.error(); + lErrorImage.className = 'icon error hidden'; var lCurrent; if(pElem) @@ -339,7 +341,32 @@ CloudClient.Util = (function(){ (lParent && lParent !== lCurrent)) lCurrent.appendChild(lLoadingImage); - lLoadingImage.className = 'icon loading'; /* показываем загрузку*/ + lLoadingImage.className = 'icon loading'; /* показываем загрузку*/ + }; + + this.showError = function(jqXHR, textStatus, errorThrown){ + var lLoadingImage = CloudCommander._images.loading(); + var lErrorImage = CloudCommander._images.error(); + + var lText = jqXHR.responseText; + + /* если файла не существует*/ + if(!lText.indexOf('Error: ENOENT, ')) + lText = lText.replace('Error: ENOENT, n','N'); + /* если не хватает прав для чтения файла*/ + else if(!lText.indexOf('Error: EACCES,')) + lText = lText.replace('Error: EACCES, p','P'); + + lErrorImage.className='icon error'; + lErrorImage.title = lText; + + var lParent = lLoadingImage.parentElement; + if(lParent) + lParent.appendChild(lErrorImage); + + lLoadingImage.className ='hidden'; + + console.log(lText); }; }); @@ -787,46 +814,15 @@ CloudClient._ajaxLoad=function(path, pNeedRefresh) try{ $.ajax({ url: path, - error: function(jqXHR, textStatus, errorThrown){ - ErrorImage.className='icon error'; - ErrorImage.title = jqXHR.responseText; - - var lLoading = getById('loading-image'); - lLoading.parentElement.appendChild(ErrorImage); - lLoading.className ='hidden'; - - console.log(jqXHR.responseText); - }, + error: Util.showError, + success:function(data, textStatus, jqXHR){ /* если такой папки (или файла) нет * прячем загрузку и показываем ошибку - */ - /* для совместимости с firefox меняем data - * на jqXHR, он воспринимает data к Document - * когда возвращаеться ошибка, о том, что - * нет файла или нет доступа - */ - - var lLoading; - if(!jqXHR.responseText.indexOf('Error:')){ - /* если файла не существует*/ - if(!jqXHR.responseText.indexOf('Error: ENOENT, ')){ - ErrorImage.title = jqXHR.responseText.replace('Error: ENOENT, n','N'); - } - /* если не хватает прав для чтения файла*/ - else if(!jqXHR.responseText.indexOf('Error: EACCES,')){ - ErrorImage.title = jqXHR.responseText.replace('Error: EACCES, p','P'); - } else - ErrorImage.title = jqXHR.responseText; - ErrorImage.className ='icon error'; - lLoading = getById('loading-image'); - lLoading.parentElement.appendChild(ErrorImage); - lLoading.className = 'hidden'; - - console.log(jqXHR.responseText); - - return; - } + */ + if(!jqXHR.responseText.indexOf('Error:')) + return Util.showError(jqXHR); + CloudClient._createFileTable(lPanel,data); CloudClient._changeLinks(lPanel); diff --git a/lib/client/editor.js b/lib/client/editor.js index 10ad9b5f..69e5f618 100644 --- a/lib/client/editor.js +++ b/lib/client/editor.js @@ -1,218 +1,209 @@ -var CloudCommander, CloudFunc, CodeMirror; -/* object contains editors CodeMirror - * and later will be Ace - */ -CloudCommander.Editor = {}; -CloudCommander.Editor.CodeMirror = new CloudCommander.Util() - -/* indicator says CodeMirror still loads */ -CloudCommander.Editor.CodeMirror.loading = false; - -/* 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); - - /* if CodeMirror function show already - * called do not call it again - * if f4 key pressed couple times - */ - if(this.loading) - return; - - 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(); - - this.loading = true; - /* reading data from current file */ - $.ajax({ - url:lA, - error: function(jqXHR, textStatus, errorThrown){ - lErrorImage.className = 'icon error'; - lErrorImage.title = jqXHR.responseText; - - if(lCurrent) - lCurrent.firstChild.nextSibling.appendChild(lErrorImage); - - lLoadingImage.className = 'hidden'; - - console.log(jqXHR.responseText); - - lParent.loading = false; - }, - - success:function(data, textStatus, jqXHR){ - /* if we got json - show it */ - if(typeof data === 'object') - data = JSON.stringify(data, null, 4); - - initCodeMirror_f(data); - - /* removing keyBinding if set */ - CloudCommander.keyBinded = false; - - lLeft && - (lLeft.className = 'panel hidden'); - - lLoadingImage.className = 'hidden'; - - lParent.loading = false; - } - }); -}); - -/* 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; +var CloudCommander, CloudFunc, CodeMirror; +/* object contains editors CodeMirror + * and later will be Ace + */ +CloudCommander.Editor = {}; +CloudCommander.Editor.CodeMirror = new CloudCommander.Util(); + +/* indicator says CodeMirror still loads */ +CloudCommander.Editor.CodeMirror.loading = false; + +/* 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); + + /* if CodeMirror function show already + * called do not call it again + * if f4 key pressed couple times + */ + if(this.loading) + return; + + 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(); + + this.loading = true; + /* reading data from current file */ + $.ajax({ + url:lA, + error: (function(jqXHR, textStatus, errorThrown){ + lParent.loading = false; + return lParent.showError(jqXHR, textStatus, errorThrown); + }), + + success:function(data, textStatus, jqXHR){ + /* if we got json - show it */ + if(typeof data === 'object') + data = JSON.stringify(data, null, 4); + + initCodeMirror_f(data); + + /* removing keyBinding if set */ + CloudCommander.keyBinded = false; + + lLeft && + (lLeft.className = 'panel hidden'); + + lLoadingImage.className = 'hidden'; + + lParent.loading = false; + } + }); +}); + +/* 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