server/apps/files_texteditor/js/editor.js

170 lines
5.1 KiB
JavaScript
Raw Normal View History

2011-10-01 21:48:00 +00:00
function setEditorSize(){
// Sets the size of the text editor window.
2011-10-03 21:59:40 +00:00
$('#editor').css('height', $(window).height()-81);
$('#editor').css('width', $(window).width()-160);
2011-10-01 21:48:00 +00:00
$('#editor').css('padding-top', '40px');
}
function getFileExtension(file){
var parts=file.split('.');
return parts[parts.length-1];
}
function setSyntaxMode(ext){
// Loads the syntax mode files and tells the editor
var filetype = new Array()
// Todo finish these
filetype["php"] = "php";
filetype["html"] = "html";
filetype["rb"] = "ruby";
filetype["css"] = "css";
filetype["pl"] = "perl";
filetype["py"] = "python";
filetype["xml"] = "xml";
filetype["js"] = "javascript";
if(filetype[ext]!=null){
// Then it must be in the array, so load the custom syntax mode
// Set the syntax mode
OC.addScript('files_texteditor','aceeditor/mode-'+filetype[ext], function(){
var SyntaxMode = require("ace/mode/"+filetype[ext]).Mode;
window.aceEditor.getSession().setMode(new SyntaxMode());
});
}
}
2011-10-03 21:59:40 +00:00
function showControlBar(filename){
2011-10-01 21:48:00 +00:00
// Loads the control bar at the top.
2011-10-03 21:59:40 +00:00
$('.actions,#file_action_panel').fadeOut('slow').promise().done(function() {
2011-10-01 21:48:00 +00:00
// Load the new toolbar.
2011-10-03 21:59:40 +00:00
var html = '<div id="editorbar"><input type="button" id="editor_save" value="'+t('files_texteditor','Save')+'"><input type="button" id="editor_close" value="'+t('files_texteditor','Close Editor')+'"></div>';
2011-10-01 21:48:00 +00:00
if($('#editorbar').length==0){
2011-10-03 21:59:40 +00:00
$('#controls').append(html);
$('#editorbar').fadeIn('slow');
2011-10-01 21:48:00 +00:00
}
2011-10-03 21:59:40 +00:00
var breadcrumbhtml = '<div class="crumb svg" style="background-image:url(&quot;/core/img/breadcrumb.png&quot;)"><a href="#">'+filename+'</a></div>';
$('.actions').before(breadcrumbhtml);
2011-10-01 21:48:00 +00:00
});
}
2011-10-03 21:59:40 +00:00
2011-10-01 21:48:00 +00:00
function bindControlEvents(){
2011-10-03 21:59:40 +00:00
$("#editor_save").live('click',function() {
doFileSave();
});
$('#editor_close').live('click',function() {
hideFileEditor();
});
$(document).bind('keydown', 'Ctrl+s', doFileSave);
}
function editorIsShown(){
if($('#editor').length!=0){
return true;
} else {
return false;
}
}
2011-10-03 22:28:47 +00:00
function updateSessionFileHash(path){
2011-10-03 22:41:32 +00:00
$.get(OC.filePath('files_texteditor','ajax','loadfile.php'),
2011-10-03 22:28:47 +00:00
{ path: path },
function(jsondata){
if(jsondata.status=='failure'){
alert('Failed to update session file hash.');
}
}, "json");}
2011-10-03 21:59:40 +00:00
function doFileSave(){
if(editorIsShown()){
$('#editor_save').val(t('files_texteditor','Saving')+'...').css('background-color','#84E79F');
2011-10-01 21:48:00 +00:00
var filecontents = window.aceEditor.getSession().getValue();
var dir = $('#editor').attr('data-dir');
2011-10-03 21:59:40 +00:00
var file = $('#editor').attr('data-filename');
2011-10-03 22:41:32 +00:00
$.post(OC.filePath('files_texteditor','ajax','savefile.php'), { filecontents: filecontents, file: file, dir: dir },function(jsondata){
2011-10-03 21:59:40 +00:00
2011-10-01 21:48:00 +00:00
if(jsondata.status == 'failure'){
var answer = confirm(jsondata.data.message);
if(answer){
2011-10-03 22:41:32 +00:00
$.post(OC.filePath('files_texteditor','ajax','savefile.php'),{ filecontents: filecontents, file: file, dir: dir, force: 'true' },function(jsondata){
2011-10-01 21:48:00 +00:00
if(jsondata.status =='success'){
2011-10-03 21:59:40 +00:00
$('#editor_save').val(t('files_texteditor','Save'));
2011-10-01 21:48:00 +00:00
$('#editor_save').effect("highlight", {color:'#4BFF8D'}, 3000);
}
else {
// Save error
alert(jsondata.data.message);
}
}, 'json');
}
else {
// Don't save!
$('#editor_save').effect("highlight", {color:'#FF5757'}, 3000);
2011-10-03 21:59:40 +00:00
$('#editor_save').val(t('files_texteditor','Save'));
2011-10-01 21:48:00 +00:00
}
}
else if(jsondata.status == 'success'){
// Success
2011-10-03 21:59:40 +00:00
$('#editor_save').val(t('files_texteditor','Save'));
2011-10-01 21:48:00 +00:00
$('#editor_save').effect("highlight", {color:'#4BFF8D'}, 3000);
}
}, 'json');
2011-10-03 21:59:40 +00:00
giveEditorFocus();
} else {
return;
}
};
function giveEditorFocus(){
window.aceEditor.focus();
};
2011-10-01 21:48:00 +00:00
function showFileEditor(dir,filename){
// Loads the file editor and display it.
var data = $.ajax({
url: OC.filePath('files','ajax','download.php')+'?files='+encodeURIComponent(filename)+'&dir='+encodeURIComponent(dir),
complete: function(data){
// Initialise the editor
2011-10-03 22:28:47 +00:00
updateSessionFileHash(dir+'/'+filename);
2011-10-03 21:59:40 +00:00
showControlBar(filename);
2011-10-01 21:48:00 +00:00
$('table').fadeOut('slow', function() {
$('#editor').text(data.responseText);
2011-10-01 21:48:00 +00:00
// encodeURIComponenet?
$('#editor').attr('data-dir', dir);
$('#editor').attr('data-filename', filename);
window.aceEditor = ace.edit("editor");
aceEditor.setShowPrintMargin(false);
setSyntaxMode(getFileExtension(filename));
OC.addScript('files_texteditor','aceeditor/theme-clouds', function(){
window.aceEditor.setTheme("ace/theme/clouds");
});
});
2011-10-03 21:59:40 +00:00
bindControlEvents();
2011-10-01 21:48:00 +00:00
// End success
}
// End ajax
});
setEditorSize();
}
function hideFileEditor(){
2011-10-03 21:59:40 +00:00
// Fade out controls
2011-10-01 21:48:00 +00:00
$('#editorbar').fadeOut('slow');
2011-10-03 21:59:40 +00:00
// Fade out breadcrumb
$('.actions').prev().fadeOut('slow');
// Fade out editor
2011-10-01 21:48:00 +00:00
$('#editor').fadeOut('slow', function(){
2011-10-03 21:59:40 +00:00
$('#editorbar').remove();
$('#editor').remove();
$('.actions').prev().remove();
var editorhtml = '<div id="editor"></div>';
$('table').after(editorhtml);
2011-10-01 21:48:00 +00:00
$('.actions,#file_access_panel').fadeIn('slow');
$('table').fadeIn('slow');
});
}
$(window).resize(function() {
setEditorSize();
});