From 7d3be1f3c8ac361b2632be2cb16ebd18fb41f3cf Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 26 Sep 2014 23:41:17 +0200 Subject: Fix restoring draft messages from localStorage if editor mode differs (#1490016) --- CHANGELOG | 1 + program/js/app.js | 10 +++++++--- program/js/editor.js | 30 +++++++++++++++++++++++------- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 470f717f2..c4575e207 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,7 @@ CHANGELOG Roundcube Webmail - Support contacts import in GMail CSV format - Added namespace filter in Folder Manager - Added folder searching in Folder Manager +- Added 'sig_max_lines' config option to default config file (#1490071) - Added config option/user preference to disable saving messages in localStorage (#1489979) - Added config option 'imap_log_session' to enable Roundcube <-> IMAP session ID logging - Added config option 'log_session_id' to control the lengh of the session identifer in logs diff --git a/program/js/app.js b/program/js/app.js index 2018cfbc4..eb3ff679c 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -3617,11 +3617,15 @@ function rcube_webmail() this.toggle_editor = function(props, obj, e) { // @todo: this should work also with many editors on page - var result = this.editor.toggle(props.html); + var result = this.editor.toggle(props.html, props.noconvert || false); + + // satisfy the expectations of aftertoggle-editor event subscribers + props.mode = props.html ? 'html' : 'plain'; if (!result && e) { // fix selector value if operation failed - $(e.target).filter('select').val(props.html ? 'plain' : 'html'); + props.mode = props.html ? 'plain' : 'html'; + $(e.target).filter('select').val(props.mode); } if (result) { @@ -3924,7 +3928,7 @@ function rcube_webmail() // initialize HTML editor if ((formdata._is_html == '1' && !html_mode) || (formdata._is_html != '1' && html_mode)) { - this.command('toggle-editor', {id: this.env.composebody, html: !html_mode}); + this.command('toggle-editor', {id: this.env.composebody, html: !html_mode, noconvert: true}); } } }; diff --git a/program/js/editor.js b/program/js/editor.js index b2e96d180..0facfd948 100644 --- a/program/js/editor.js +++ b/program/js/editor.js @@ -194,7 +194,7 @@ function rcube_text_editor(config, id) }; // switch html/plain mode - this.toggle = function(ishtml) + this.toggle = function(ishtml, noconvert) { var curr, content, result, // these non-printable chars are not removed on text2html and html2text @@ -214,8 +214,7 @@ function rcube_text_editor(config, id) if (is_sig) content = content.replace(signature.text, sig_mark); - // convert to html - result = rcmail.plain2html(content, function(data) { + var init_editor = function(data) { // replace signature mark with html version of the signature if (is_sig) data = data.replace(sig_mark, '
' + signature.html + '
'); @@ -231,7 +230,16 @@ function rcube_text_editor(config, id) ref.tabindex(true); } }, 500); - }); + }; + + // convert to html + if (!noconvert) { + result = rcmail.plain2html(content, init_editor); + } + else { + init_editor(content); + result = true; + } } else if (this.editor) { if (is_sig) { @@ -250,8 +258,7 @@ function rcube_text_editor(config, id) // get html content content = this.editor.getContent(); - // convert html to text - result = rcmail.html2plain(content, function(data) { + var init_plaintext = function(data) { tinymce.execCommand('mceRemoveEditor', false, ref.id); ref.editor = null; @@ -260,7 +267,16 @@ function rcube_text_editor(config, id) data = data.replace(sig_mark, "\n" + signature.text); input.val(data).focus(); - }); + }; + + // convert html to text + if (!noconvert) { + result = rcmail.html2plain(content, init_plaintext); + } + else { + init_plaintext(input.val()); + result = true; + } // bring back current signature if (!result && curr) -- cgit v1.2.3