From 82cd2d92e1c9ae8b50f7bb8ca8e649d2b621ec06 Mon Sep 17 00:00:00 2001 From: Alex Henrie Date: Mon, 14 Jan 2019 19:54:14 -0700 Subject: [PATCH] Only collapse runs of space, tab, carriage return, and newline Closes #184 --- test/client/composer/composer-web-view-test.vala | 13 +++++++++++++ ui/composer-web-view.js | 6 ++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/test/client/composer/composer-web-view-test.vala b/test/client/composer/composer-web-view-test.vala index 6ad0268b..4bb36939 100644 --- a/test/client/composer/composer-web-view-test.vala +++ b/test/client/composer/composer-web-view-test.vala @@ -22,6 +22,7 @@ public class ComposerWebViewTest : ClientWebViewTestCase { add_test("get_text_with_nbsp", get_text_with_nbsp); add_test("get_text_with_named_link", get_text_with_named_link); add_test("get_text_with_url_link", get_text_with_named_link); + add_test("get_text_with_surrounding_nbsps", get_text_with_surrounding_nbsps); } public void load_resources() throws Error { @@ -197,6 +198,18 @@ long, long, long, long, long, long, long, long, long, long, } } + public void get_text_with_surrounding_nbsps() throws Error { + load_body_fixture("  I like my space  "); + this.test_view.get_text.begin((obj, ret) => { async_complete(ret); }); + try { + assert(this.test_view.get_text.end(async_result()) == + " I like my space\n\n\n\n"); + } catch (Error err) { + print("Error: %s\n", err.message); + assert_not_reached(); + } + } + protected override ComposerWebView set_up_test_view() { return new ComposerWebView(this.config); } diff --git a/ui/composer-web-view.js b/ui/composer-web-view.js index 6425cb61..97f2aa18 100644 --- a/ui/composer-web-view.js +++ b/ui/composer-web-view.js @@ -473,8 +473,10 @@ ComposerPageState.htmlToText = function(root) { case 'normal': case 'nowrap': case 'pre-line': - nodeText = nodeText.replace(/\s+/g, " "); - if (nodeText == " " && /\s/.test(text.substr(-1))) + // Only space, tab, carriage return, and newline collapse + // https://www.w3.org/TR/2011/REC-CSS2-20110607/text.html#white-space-model + nodeText = nodeText.replace(/[ \t\r\n]+/g, " "); + if (nodeText == " " && " \t\r\n".includes(text.substr(-1))) break; // There's already whitespace here if (node == root.firstChild) nodeText = nodeText.replace(/^ /, "");