Don't remove links when html signature is converted to text (#1489621)

Fix so when switching editor mode original version of signature is used (#1488849)
pull/193/head
Aleksander Machniak 10 years ago
parent 25804ec9cd
commit 59b765d839

@ -20,6 +20,8 @@ CHANGELOG Roundcube Webmail
- Add configurable LDAP_OPT_DEREF option (#1489864)
- Optimize some framed pages content for better performance (#1489792)
- Improve text messages display and conversion to HTML (#1488937)
- Don't remove links when html signature is converted to text (#1489621)
- Fix so when switching editor mode original version of signature is used (#1488849)
- Fix mbox files import
- Fix unintentional draft autosave request if autosave is disabled (#1489882)
- Fix malformed References: header in send/saved mail (#1489891)

@ -3439,10 +3439,27 @@ function rcube_webmail()
{
this.stop_spellchecking();
var input = $('#' + props.id);
var ed, curr, content, result,
// these non-printable chars are not removed on text2html and html2text
// we can use them as temp signature replacement
sig_mark = "\u0002\u0003",
input = $('#' + props.id),
signature = this.env.identity ? this.env.signatures[this.env.identity] : null,
is_sig = signature && signature.text && signature.text.length > 1;
if (props.mode == 'html') {
content = input.val();
// replace current text signature with temp mark
if (is_sig)
content = content.replace(signature.text, sig_mark);
// convert to html
result = this.plain2html(content, function(data) {
// replace signature mark with html version of the signature
if (is_sig)
data = data.replace(sig_mark, '<div id="_rc_sig">' + signature.html + '</div>');
if (props.mode == 'html')
this.plain2html(input.val(), function(data) {
input.val(data);
tinyMCE.execCommand('mceAddControl', false, props.id);
@ -3451,13 +3468,43 @@ function rcube_webmail()
$(tinyMCE.get(props.id).getBody()).css('font-family', ref.env.default_font);
}, 500);
});
else
this.html2plain(tinyMCE.get(props.id).getContent(), function(data) {
}
else {
ed = tinyMCE.get(props.id);
if (is_sig) {
// get current version of signature, we'll need it in
// case of html2text conversion abort
if (curr = ed.dom.get('_rc_sig'))
curr = curr.innerHTML;
// replace current signature with some non-printable characters
// we use non-printable characters, because this replacement
// is visible to the user
// doing this after getContent() would be hard
ed.dom.setHTML('_rc_sig', sig_mark);
}
// get html content
content = ed.getContent();
// convert html to text
result = this.html2plain(content, function(data) {
tinyMCE.execCommand('mceRemoveControl', false, props.id);
// replace signture mark with text version of the signature
if (is_sig)
data = data.replace(sig_mark, "\n" + signature.text);
input.val(data);
});
return true;
// bring back current signature
if (!result && curr)
ed.dom.setHTML('_rc_sig', curr);
}
return result;
};
this.insert_response = function(key)
@ -6834,7 +6881,8 @@ function rcube_webmail()
|| (format != 'html' && !(text.replace(/\xC2\xA0|\s/g, '')).length)
) {
// without setTimeout() here, textarea is filled with initial (onload) content
setTimeout(function() { if (func) func(''); }, 50);
if (func)
setTimeout(function() { func(''); }, 50);
return true;
}

@ -611,7 +611,7 @@ function rcmail_compose_header_from($attrib)
$text = $html = $sql_arr['signature'];
if ($sql_arr['html_signature']) {
$h2t = new rcube_html2text($sql_arr['signature'], false, false);
$h2t = new rcube_html2text($sql_arr['signature'], false, true);
$text = trim($h2t->get_text());
}
else {

@ -41,6 +41,11 @@ class rc_html2text extends PHPUnit_Framework_TestCase
'in' => '<b><strong>&#347;</strong></b>',
'out' => 'Ś',
),
6 => array(
'title' => 'Don\'t remove non-printable chars',
'in' => chr(0x002).chr(0x003),
'out' => chr(0x002).chr(0x003),
),
);
}

@ -63,6 +63,7 @@ class Framework_Text2Html extends PHPUnit_Framework_TestCase
$data[] = array(">aaaa \n>aaaa", "<blockquote>aaaa aaaa</blockquote>", $options);
$data[] = array(">aaaa\n>aaaa", "<blockquote>aaaa<br>aaaa</blockquote>", $options);
$data[] = array(">aaaa \n>bbbb\ncccc dddd", "<blockquote>aaaa bbbb</blockquote>cccc_dddd", $options);
$data[] = array(chr(0x002).chr(0x003), chr(0x002).chr(0x003), $options);
$options['flowed'] = false;
$options['wrap'] = true;

Loading…
Cancel
Save