diff --git a/api/js/webodf/template.odt b/api/js/webodf/template.odt
new file mode 100644
index 0000000000..b1df29d552
Binary files /dev/null and b/api/js/webodf/template.odt differ
diff --git a/filemanager/js/app.js b/filemanager/js/app.js
index 040d8fa1da..a1c433b72b 100644
--- a/filemanager/js/app.js
+++ b/filemanager/js/app.js
@@ -36,6 +36,7 @@ app.classes.filemanager = AppJS.extend(
*/
editor: {},
+ editor_mime: RegExp(/application\/vnd\.oasis\.opendocument\.text/),
/**
* Constructor
*
@@ -1032,8 +1033,10 @@ app.classes.filemanager = AppJS.extend(
*/
_init_odf_editor: function ()
{
- var file_path = this.et2.getArrayMgr('content').getEntry('file_path');
- var self = this;
+ var widgetFilePath = this.et2.getWidgetById('file_path'),
+ file_path = widgetFilePath.value,
+ isNew = file_path == '/api/js/webodf/template.odt'? true: false,
+ self = this;
var onEditorCreated = function (err ,editor)
{
@@ -1044,10 +1047,17 @@ app.classes.filemanager = AppJS.extend(
}
self.editor = editor;
self.editor.openDocumentFromUrl(egw.webserverUrl+file_path);
+ if (isNew) {
+ widgetFilePath.set_value('');
+ }
};
var editorOptions = {
- allFeaturesEnabled: true
+ allFeaturesEnabled: true,
+ userData: {
+ fullName: egw.user('account_fullName'),
+ color: 'blue'
+ }
};
var editor = this.et2.getWidgetById('odfEditor');
@@ -1062,9 +1072,11 @@ app.classes.filemanager = AppJS.extend(
*
* @param {object} _egwAction egw action object
*/
- editor_close: function (_egwAction) {
- var self = this;
- var action = _egwAction.id;
+ editor_close: function (_egwAction, _callback) {
+ var self = this,
+ action = _egwAction.id,
+ callback = _callback;
+
if (this.editor)
{
var closeFn = function ()
@@ -1075,6 +1087,7 @@ app.classes.filemanager = AppJS.extend(
self.editor.destroy(function(){});
window.close();
}
+ callback.call(this);
}
// warn user about unsaved changes
@@ -1109,34 +1122,33 @@ app.classes.filemanager = AppJS.extend(
* @todo: creating new empty odt file
*/
editor_new: function (_egwAction) {
- return egw(window).message('Sorry creating new odt document is not fully implemented yet. Please try later.');
- var mimeType = 'application/vnd.oasis.opendocument.text';
- var bytes = new Uint8Array('');
- var blob = new Blob([bytes.buffer], {type:mimeType});
- var egwAction = _egwAction;
- var self = this;
- this.editor_file_operation({
- url: egw.webserverUrl+'/webdav.php?/home/'+egw.user('account_lid')+'/'+this.et2._inst.etemplate_exec_id+'.odt',
- method: 'PUT',
- success: function(_data) {
- egw(window).message('');
- self.editor_close(egwAction);
- },
- error: function (_err) {
- egw(window).message('Create new document faild because of %1', _err);
- },
- data: blob,
- processData: false,
- mimeType: mimeType
- });
+ var self = this,
+ template_url = '/api/js/webodf/template.odt';
+
+ if (Object.keys(this.editor).length > 0)
+ {
+ this.editor_close(_egwAction, function(){
+ self.editor.openDocumentFromUrl(egw.webserverUrl+template_url);
+ self.et2.getWidgetById('file_path').set_value('');
+ });
+ }
+ else
+ {
+ egw.open_link(egw.link('/index.php', {
+ menuaction: 'filemanager.filemanager_ui.editor',
+ path: template_url,
+ isNew: true,
+ }), '', '800x600');
+ }
},
/**
* Method call for saving edited document
*/
editor_save: function () {
- var self = this;
- var file_path = this.et2.getArrayMgr('content').getEntry('file_path');
+ var self = this,
+ widgetFilePath = this.et2.getWidgetById('file_path'),
+ file_path = widgetFilePath.value;
if (this.editor)
{
@@ -1146,9 +1158,8 @@ app.classes.filemanager = AppJS.extend(
return;
}
- var mimetype = "application/vnd.oasis.opendocument.text",
- filename = file_path.split('/webdav.php'),
- blob = new Blob([data.buffer], {type: mimetype});
+ var filename = file_path.split('/webdav.php'),
+ blob = new Blob([data.buffer], {type: self.editor_mime});
self.editor_file_operation({
url: egw.webserverUrl+file_path,
@@ -1157,14 +1168,40 @@ app.classes.filemanager = AppJS.extend(
success: function(data) {
egw(window).message(egw.lang('Document %1 successfully has been saved.', filename[1]));
self.editor.setDocumentModified(false);
-
},
error: function () {},
data: blob,
- mimeType: mimetype
+ mimeType: self.editor_mime
});
}
- this.editor.getDocumentAsByteArray(saveByteArrayLocally);
+
+ //existed file
+ if (file_path != '') {
+ this.editor.getDocumentAsByteArray(saveByteArrayLocally);
+ }
+ // new file
+ else
+ {
+ // create file selector
+ var vfs_select = et2_createWidget('vfs-select', {
+ id:'savefile',
+ mode: 'saveas',
+ button_caption:"",
+ button_label:"save",
+ value: "doc.odt"
+ }, this.et2);
+
+ // bind change handler for setting the selected path and calling save
+ jQuery(vfs_select.getDOMNode()).on('change', function (){
+ file_path = '/webdav.php'+vfs_select.get_value();
+ // Add odt extension if not exist
+ if (!file_path.match(/\.odt$/,'ig')) file_path += '.odt';
+ widgetFilePath.set_value(file_path);
+ self.editor.getDocumentAsByteArray(saveByteArrayLocally);
+ });
+ // start the file selector dialog
+ jQuery(vfs_select.getDOMNode()).click();
+ }
}
},
@@ -1173,7 +1210,7 @@ app.classes.filemanager = AppJS.extend(
* @param {type} _egwAction
*/
editor_delete: function (_egwAction) {
- var fullpath = this.et2.getArrayMgr('content').getEntry('file_path');
+ var fullpath = this.et2.getWidgetById('file_path').value;
fullpath = fullpath.split('/webdav.php')[1];
var selected = fullpath.split('/');
selected.pop();
@@ -1219,8 +1256,9 @@ app.classes.filemanager = AppJS.extend(
* @returns {boolean} returns true if is editable otherwise false
*/
isEditable: function (_egwAction, _senders) {
- var data = egw.dataGetUIDdata(_senders[0].id);
- var mime = this.et2._inst.widgetContainer.getWidgetById('$row');
+ var data = egw.dataGetUIDdata(_senders[0].id),
+ mime = this.et2._inst.widgetContainer.getWidgetById('$row');
+
return data.data.mime.match(mime.mime_odf_regex)?true:false;
}
diff --git a/filemanager/templates/default/editor.xet b/filemanager/templates/default/editor.xet
index 1d8c8700c4..8be2a2dfaf 100644
--- a/filemanager/templates/default/editor.xet
+++ b/filemanager/templates/default/editor.xet
@@ -11,7 +11,7 @@