/* * Copyright 2007-2013 Charles du Jeu - Abstrium SAS * This file is part of Pydio. * * Pydio is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Pydio is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Pydio. If not, see . * * The latest code can be found at . */ Class.create("TextEditor", AbstractEditor, { initialize: function($super, oFormObject) { $super(oFormObject); if(!ajaxplorer.user || ajaxplorer.user.canWrite()){ this.canWrite = true; this.actions.get("saveButton").observe('click', function(){ this.saveFile(); return false; }.bind(this)); }else{ this.canWrite = false; this.actions.get("saveButton").hide(); } this.actions.get("downloadFileButton").observe('click', function(){ if(!this.currentFile) return; ajaxplorer.triggerDownload(ajxpBootstrap.parameters.get('ajxpServerAccess')+'&action=download&file='+this.currentFile); return false; }.bind(this)); }, open : function($super, nodeOrNodes){ $super(nodeOrNodes); var fileName = nodeOrNodes.getPath(); var textarea; this.textareaContainer = document.createElement('div'); this.textarea = $(document.createElement('textarea')); this.textarea.name = this.textarea.id = 'content'; this.textarea.addClassName('dialogFocus'); this.textarea.addClassName('editor'); this.currentUseCp = false; this.contentMainContainer = this.textarea; this.textarea.setStyle({width:'100%'}); this.textarea.setAttribute('wrap', 'off'); if(!this.canWrite){ this.textarea.readOnly = true; } this.element.appendChild(this.textareaContainer); this.textareaContainer.appendChild(this.textarea); fitHeightToBottom($(this.textarea), $(modal.elementName)); // LOAD FILE NOW this.loadFileContent(fileName); if(window.ajxpMobile){ this.setFullScreen(); attachMobileScroll(this.textarea, "vertical"); } this.element.observeOnce("editor:close", function(){ //ajaxplorer.fireNodeRefresh(nodeOrNodes); }); }, loadFileContent : function(fileName){ this.currentFile = fileName; var connexion = new Connexion(); connexion.addParameter('get_action', 'get_content'); connexion.addParameter('file', fileName); connexion.onComplete = function(transp){ this.parseTxt(transp); this.updateTitle(getBaseName(fileName)); }.bind(this); this.setModified(false); this.setOnLoad(this.textareaContainer); connexion.sendAsync(); }, prepareSaveConnexion : function(){ var connexion = new Connexion(); connexion.addParameter('get_action', 'put_content'); connexion.addParameter('file', this.inputNode.getPath()); connexion.onComplete = function(transp){ this.parseXml(transp); }.bind(this); this.setOnLoad(this.textareaContainer); connexion.setMethod('put'); return connexion; }, saveFile : function(){ var connexion = this.prepareSaveConnexion(); connexion.addParameter('content', this.textarea.value); connexion.sendAsync(); }, parseXml : function(transport){ if(parseInt(transport.responseText).toString() == transport.responseText){ alert("Cannot write the file to disk (Error code : "+transport.responseText+")"); }else{ this.setModified(false); } this.removeOnLoad(this.textareaContainer); }, parseTxt : function(transport){ this.textarea.value = transport.responseText; if(this.canWrite){ var contentObserver = function(el, value){ this.setModified(true); }.bind(this); new Form.Element.Observer(this.textarea, 0.2, contentObserver); } this.removeOnLoad(this.textareaContainer); } });