diff options
author | Aleksander Machniak <alec@alec.pl> | 2014-05-17 09:27:17 +0200 |
---|---|---|
committer | Aleksander Machniak <alec@alec.pl> | 2014-05-17 09:27:17 +0200 |
commit | efc470f0ac7587707665e92701e3937c9b6cc78d (patch) | |
tree | 6674f2f57526f086e02755142f46901db74469c5 /program/js/app.js | |
parent | f1aaca6807742f7a890db152395d5c293b6e4e66 (diff) | |
parent | c0a5aa5f5ff38ac7b8a650b07c134b7b86deb27f (diff) |
Merge branch 'dev-text2html'
Conflicts:
program/js/app.js
Fix handling magic_quotes in rcube_text2html and rcube_html2text - move
stripslashes from these classes to action files
Diffstat (limited to 'program/js/app.js')
-rw-r--r-- | program/js/app.js | 70 |
1 files changed, 43 insertions, 27 deletions
diff --git a/program/js/app.js b/program/js/app.js index 08f80e432..97b8192b2 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -3439,17 +3439,23 @@ function rcube_webmail() { this.stop_spellchecking(); - if (props.mode == 'html') { - this.plain2html($('#'+props.id).val(), props.id); - tinyMCE.execCommand('mceAddControl', false, props.id); + var input = $('#' + props.id); - if (this.env.default_font) - setTimeout(function() { - $(tinyMCE.get(props.id).getBody()).css('font-family', ref.env.default_font); - }, 500); - } - else if (this.html2plain(tinyMCE.get(props.id).getContent(), props.id)) - tinyMCE.execCommand('mceRemoveControl', false, props.id); + if (props.mode == 'html') + this.plain2html(input.val(), function(data) { + input.val(data); + tinyMCE.execCommand('mceAddControl', false, props.id); + + if (ref.env.default_font) + setTimeout(function() { + $(tinyMCE.get(props.id).getBody()).css('font-family', ref.env.default_font); + }, 500); + }); + else + this.html2plain(tinyMCE.get(props.id).getContent(), function(data) { + tinyMCE.execCommand('mceRemoveControl', false, props.id); + input.val(data); + }); return true; }; @@ -6810,41 +6816,51 @@ function rcube_webmail() /********* html to text conversion functions *********/ /********************************************************/ - this.html2plain = function(htmlText, id) + this.html2plain = function(html, func) + { + return this.format_converter(html, 'html', func); + }; + + this.plain2html = function(plain, func) + { + return this.format_converter(plain, 'plain', func); + }; + + this.format_converter = function(text, format, func) { // warn the user (if converted content is not empty) - if (!htmlText || !(htmlText.replace(/<[^>]+>| |\s/g, '')).length) { + if (!text + || (format == 'html' && !(text.replace(/<[^>]+>| |\xC2\xA0|\s/g, '')).length) + || (format != 'html' && !(text.replace(/\xC2\xA0|\s/g, '')).length) + ) { // without setTimeout() here, textarea is filled with initial (onload) content - setTimeout(function() { $('#'+id).val(''); }, 50); + setTimeout(function() { if (func) func(''); }, 50); return true; } - if (!confirm(this.get_label('editorwarning'))) + var confirmed = this.env.editor_warned || confirm(this.get_label('editorwarning')); + + this.env.editor_warned = true; + + if (!confirmed) return false; - var url = '?_task=utils&_action=html2text', + var url = '?_task=utils&_action=' + (format == 'html' ? 'html2text' : 'text2html'), lock = this.set_busy(true, 'converting'); this.log('HTTP POST: ' + url); - $.ajax({ type: 'POST', url: url, data: htmlText, contentType: 'application/octet-stream', + $.ajax({ type: 'POST', url: url, data: text, contentType: 'application/octet-stream', error: function(o, status, err) { ref.http_error(o, status, err, lock); }, - success: function(data) { ref.set_busy(false, null, lock); $('#'+id).val(data); ref.log(data); } + success: function(data) { + ref.set_busy(false, null, lock); + if (func) func(data); + } }); return true; }; - this.plain2html = function(plain, id) - { - var lock = this.set_busy(true, 'converting'); - - plain = plain.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); - $('#'+id).val(plain ? '<pre>'+plain+'</pre>' : ''); - - this.set_busy(false, null, lock); - }; - /********************************************************/ /********* remote request methods *********/ |