From 931c7e594d1d51f9118100787338a6bd45c99f7c Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Tue, 24 Apr 2018 12:28:29 +0000 Subject: [PATCH] Elastic: Various improvements for Files on mobile --- plugins/kolab_files/kolab_files.js | 42 ++++++++++++++----- .../kolab_files/lib/kolab_files_engine.php | 2 +- .../elastic/templates/compose_plugin.html | 4 +- .../skins/elastic/templates/docedit.html | 9 +++- .../skins/elastic/templates/filepreview.html | 12 +++--- plugins/kolab_files/skins/elastic/ui.js | 34 +++++++++++++++ .../skins/elastic/include/kolab_files.less | 25 ++++++----- .../skins/elastic/templates/attachment.html | 6 ++- 8 files changed, 101 insertions(+), 33 deletions(-) diff --git a/plugins/kolab_files/kolab_files.js b/plugins/kolab_files/kolab_files.js index 2785c7d0..f21a41e8 100644 --- a/plugins/kolab_files/kolab_files.js +++ b/plugins/kolab_files/kolab_files.js @@ -461,7 +461,8 @@ function kolab_files_folder_create_dialog() kolab_dialog_show(dialog, { title: rcmail.gettext('kolab_files.foldercreate'), buttons: buttons, - button_classes: ['mainaction save', 'cancel'] + button_classes: ['mainaction save', 'cancel'], + height: 200 }); // Fix submitting form with Enter @@ -1366,7 +1367,7 @@ rcube_webmail.prototype.document_close = function() if (this.commands['document-save']) this.confirm_dialog(this.gettext('kolab_files.unsavedchanges'), 'kolab_files.terminate', function() { file_api.document_delete(rcmail.env.file_data.session.id); - }); + }, {button_class: 'delete'}); }; // document editors management dialog @@ -2009,8 +2010,8 @@ function kolab_files_ui() collections = ['audio', 'video', 'image', 'document']; // try parent window if the list element does not exist - // i.e. called from dialog in parent window - if (!elem.length && rcmail.is_framed()) { + // i.e. called from a dialog in parent window + if (!elem.length && rcmail.is_framed() && (rcmail.env.task != 'files' || (rcmail.env.action != 'open' && rcmail.env.action != 'edit'))) { body = window.parent.document.body; elem = $(list_selector, body); searchbox = $(search_selector, body); @@ -2115,6 +2116,14 @@ function kolab_files_ui() // handle authentication errors on external sources this.folder_list_auth_errors(response.result); + + // Elastic: Set notree class on the folder list + var callback = function() { + list[list.find('.treetoggle').length > 0 ? 'removeClass' : 'addClass']('notree'); + }; + if (window.MutationObserver) + (new MutationObserver(callback)).observe(list.get(0), {childList: true, subtree: true}); + callback(); }; this.folder_select = function(folder) @@ -2131,7 +2140,7 @@ function kolab_files_ui() rcmail.update_state(is_collection ? {collection: collection} : {folder: folder}); if (collection == 'sessions') { - rcmail.enable_command('files-list', 'files-folder-delete', 'folder-rename', 'files-upload', false); + rcmail.enable_command('files-list', 'files-folder-delete', 'folder-rename', 'files-upload', 'files-open', 'files-edit', false); this.sessions_list(); return; } @@ -3067,16 +3076,22 @@ function kolab_files_ui() // check if opener window contains files list, if not we can just close current window if (rco && rco.fileslist && (opener.file_api.env.folder == dir || !opener.file_api.env.folder)) self = opener.file_api; - else - window.close(); + // also try parent for framed UI (Elastic) + else if (rcmail.is_framed() && parent.rcmail.fileslist && (parent.file_api.env.folder == dir || !parent.file_api.env.folder)) + self = parent.file_api; } // @TODO: consider list modification "in-place" instead of full reload self.file_list(); self.quota(); - if (rcmail.env.file) - window.close(); + if (rcmail.env.file) { + if (rcmail.is_framed()) { + parent.$('.ui-dialog:visible > .ui-dialog-buttonpane button.cancel').click(); + } + else + window.close(); + } }; // file(s) move request @@ -3631,7 +3646,7 @@ function kolab_files_ui() var win = window, list = rcmail.sessionslist; if (!list) { - win = window.opener; + win = window.opener || window.parent; if (win && win.rcmail && win.file_api) list = win.rcmail.sessionslist; } @@ -3639,8 +3654,13 @@ function kolab_files_ui() // remove session from the list (if sessions list exist) if (list) list.remove_row(this.deleted_session); - if (win.file_api && win.file_api.env.sessions_list) + if (win && win.file_api && win.file_api.env.sessions_list) delete win.file_api.env.sessions_list[this.deleted_session]; + + // For Elastic: hide the parent dialog + if (rcmail.is_framed()) { + parent.$('.ui-dialog:visible button.cancel').click(); + } }; // Invite document session participants diff --git a/plugins/kolab_files/lib/kolab_files_engine.php b/plugins/kolab_files/lib/kolab_files_engine.php index 7d207e78..51fde212 100644 --- a/plugins/kolab_files/lib/kolab_files_engine.php +++ b/plugins/kolab_files/lib/kolab_files_engine.php @@ -1430,7 +1430,7 @@ class kolab_files_engine $this->file_data['filename'] = $file; - $this->plugin->add_label('filedeleteconfirm', 'filedeleting', 'filedeletenotice'); + $this->plugin->add_label('filedeleteconfirm', 'filedeleting', 'filedeletenotice', 'terminate'); // register template objects for dialogs (and main interface) $this->rc->output->add_handlers(array( diff --git a/plugins/kolab_files/skins/elastic/templates/compose_plugin.html b/plugins/kolab_files/skins/elastic/templates/compose_plugin.html index 24b91fc0..c7f117ef 100644 --- a/plugins/kolab_files/skins/elastic/templates/compose_plugin.html +++ b/plugins/kolab_files/skins/elastic/templates/compose_plugin.html @@ -3,7 +3,7 @@
@@ -17,16 +19,16 @@ -
+
+ label="kolab_files.edit" title="kolab_files.editfile" innerClass="inner" data-hidden="small" />

-
+
">
diff --git a/plugins/kolab_files/skins/elastic/ui.js b/plugins/kolab_files/skins/elastic/ui.js index e7d0f54d..57479ebe 100644 --- a/plugins/kolab_files/skins/elastic/ui.js +++ b/plugins/kolab_files/skins/elastic/ui.js @@ -4,6 +4,15 @@ function kolab_files_enable_command(p) var toolbar = $('#toolbar-menu'); $('a.button.edit', toolbar).parent().hide(); $('a.button.save', toolbar).show().parent().show(); + + if (window.editor_edit_button) + window.editor_edit_button.addClass('hidden'); + if (window.editor_save_button) + window.editor_save_button.removeClass('hidden'); + } + else if (p.command == 'files-edit' && p.status) { + if (window.editor_edit_button) + window.editor_edit_button.removeClass('hidden'); } }; @@ -81,6 +90,26 @@ if (rcmail.env.action == 'open') { $(this).contents().find('head').append(''); }); } + + // Elastic mobile preview uses an iframe in a dialog + if (rcmail.is_framed()) { + var edit_button = $('#filetoolbar a.button.edit'), + save_button = $('#filetoolbar a.button.save'); + + parent.$('.ui-dialog:visible .ui-dialog-buttonpane .ui-dialog-buttonset').prepend( + window.editor_save_button = $('
- +
+ +