[evolution] I#1763 - Composer: Correct line wrapping with a link followed by a text



commit 079bfc9e92310197149087e802cd614972c7240b
Author: Milan Crha <mcrha redhat com>
Date:   Fri Jan 14 10:37:56 2022 +0100

    I#1763 - Composer: Correct line wrapping with a link followed by a text
    
    Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/1763

 data/webkit/e-editor.js                  |  15 ++-
 src/e-util/test-html-editor-units-bugs.c | 185 +++++++++++++++++++++++++++++++
 2 files changed, 197 insertions(+), 3 deletions(-)
---
diff --git a/data/webkit/e-editor.js b/data/webkit/e-editor.js
index 44a135f257..14b632804f 100644
--- a/data/webkit/e-editor.js
+++ b/data/webkit/e-editor.js
@@ -1890,20 +1890,29 @@ EvoEditor.quoteParagraphWrap = function(node, lineLength, wrapWidth, prefixHtml)
                                }
 
                                eraseSpaceInSplit = false;
-                               offset = wrapWidth + 1;
-                               wordLen -= wrapWidth;
+                               if (lineLength + offset >= wrapWidth)
+                                       offset = 1;
+                               else
+                                       offset = wrapWidth + 1;
+
+                               if (offset > node.nodeValue.length)
+                                       offset = node.nodeValue.length + 1;
+
+                               wordLen = wordLen - offset + 1;
                        }
 
                        if (offset > 0) {
                                node.splitText(offset - 1);
                                node = node.nextSibling;
 
-                               if (eraseSpaceInSplit) {
+                               if (eraseSpaceInSplit && node.nodeValue.startsWith(" ")) {
                                        // erase the space at the end of the line
                                        node.splitText(1);
                                        var next = node.nextSibling;
                                        node.remove();
                                        node = next;
+                               } else if (eraseSpaceInSplit) {
+                                       eraseSpaceInSplit = false;
                                }
 
                                // add the prefix and <br> only if there's still anything to be quoted
diff --git a/src/e-util/test-html-editor-units-bugs.c b/src/e-util/test-html-editor-units-bugs.c
index 8e1d0c83a1..bece8b3e14 100644
--- a/src/e-util/test-html-editor-units-bugs.c
+++ b/src/e-util/test-html-editor-units-bugs.c
@@ -2924,6 +2924,190 @@ test_issue_1708 (TestFixture *fixture)
                "> vvv\n"))
                g_test_fail ();
 }
+
+static void
+test_issue_1763 (TestFixture *fixture)
+{
+       test_utils_fixture_change_setting_int32 (fixture, "org.gnome.evolution.mail", 
"composer-word-wrap-length", 20);
+
+       if (!test_utils_process_commands (fixture,
+               "mode:plain\n")) {
+               g_test_fail ();
+               return;
+       }
+
+       test_utils_insert_content (fixture,
+               "<body><div>aaa &lt;u@no.where&gt; bbb ccc</div>"
+               "<div>12345678 0123 5678</div>"
+               "<blockquote type=\"cite\">"
+               "<div>ddd www.no.whr eee fff ggg hhh iii jjj</div>"
+               "<div>123 4567890 123456 789012 34567</div>"
+               "</blockquote>"
+               "<span class=\"-x-evo-to-body\" data-credits=\"Credits:\"></span>"
+               "<span class=\"-x-evo-cite-body\"></span></body>",
+               E_CONTENT_EDITOR_INSERT_REPLACE_ALL | E_CONTENT_EDITOR_INSERT_TEXT_HTML);
+
+       if (!test_utils_run_simple_test (fixture,
+               "",
+               HTML_PREFIX "<div style=\"width: 20ch;\">Credits:</div>"
+               "<blockquote type=\"cite\">"
+               "<div>" QUOTE_SPAN (QUOTE_CHR) "aaa &lt;<a href=\"mailto:u@no.where\";>u@no.where</a>&gt;" 
WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR) "bbb ccc</div>"
+               "<div>" QUOTE_SPAN (QUOTE_CHR) "12345678 0123 5678</div>"
+               "<blockquote type=\"cite\">"
+               "<div>" QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "ddd <a href=\"https://www.no.whr\";>www.no.whr</a>" 
WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "eee fff ggg hhh" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "iii jjj</div>"
+               "<div>" QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "123 4567890" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "123456 789012" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "34567</div>"
+               "</blockquote>"
+               "</blockquote>"
+               HTML_SUFFIX,
+               "Credits:\n"
+               "> aaa <u@no.where>\n"
+               "> bbb ccc\n"
+               "> 12345678 0123 5678\n"
+               "> > ddd www.no.whr\n"
+               "> > eee fff ggg hhh\n"
+               "> > iii jjj\n"
+               "> > 123 4567890\n"
+               "> > 123456 789012\n"
+               "> > 34567\n")) {
+               g_test_fail ();
+               return;
+       }
+
+       if (!test_utils_run_simple_test (fixture,
+               "seq:d\n"
+               "type:1",
+               HTML_PREFIX "<div style=\"width: 20ch;\">Credits:</div>"
+               "<blockquote type=\"cite\">"
+               "<div>" QUOTE_SPAN (QUOTE_CHR) "1aaa &lt;<a href=\"mailto:u@no.where\";>u@no.where</a>&gt;" 
WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR) "bbb ccc</div>"
+               "<div>" QUOTE_SPAN (QUOTE_CHR) "12345678 0123 5678</div>"
+               "<blockquote type=\"cite\">"
+               "<div>" QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "ddd <a href=\"https://www.no.whr\";>www.no.whr</a>" 
WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "eee fff ggg hhh" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "iii jjj</div>"
+               "<div>" QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "123 4567890" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "123456 789012" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "34567</div>"
+               "</blockquote>"
+               "</blockquote>"
+               HTML_SUFFIX,
+               "Credits:\n"
+               "> 1aaa <u@no.where>\n"
+               "> bbb ccc\n"
+               "> 12345678 0123 5678\n"
+               "> > ddd www.no.whr\n"
+               "> > eee fff ggg hhh\n"
+               "> > iii jjj\n"
+               "> > 123 4567890\n"
+               "> > 123456 789012\n"
+               "> > 34567\n")) {
+               g_test_fail ();
+               return;
+       }
+
+       if (!test_utils_run_simple_test (fixture,
+               "type:2",
+               HTML_PREFIX "<div style=\"width: 20ch;\">Credits:</div>"
+               "<blockquote type=\"cite\">"
+               "<div>" QUOTE_SPAN (QUOTE_CHR) "12aaa &lt;<a href=\"mailto:u@no.where\";>u@no.where</a>&gt;" 
WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR) "bbb ccc</div>"
+               "<div>" QUOTE_SPAN (QUOTE_CHR) "12345678 0123 5678</div>"
+               "<blockquote type=\"cite\">"
+               "<div>" QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "ddd <a href=\"https://www.no.whr\";>www.no.whr</a>" 
WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "eee fff ggg hhh" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "iii jjj</div>"
+               "<div>" QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "123 4567890" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "123456 789012" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "34567</div>"
+               "</blockquote>"
+               "</blockquote>"
+               HTML_SUFFIX,
+               "Credits:\n"
+               "> 12aaa <u@no.where>\n"
+               "> bbb ccc\n"
+               "> 12345678 0123 5678\n"
+               "> > ddd www.no.whr\n"
+               "> > eee fff ggg hhh\n"
+               "> > iii jjj\n"
+               "> > 123 4567890\n"
+               "> > 123456 789012\n"
+               "> > 34567\n")) {
+               g_test_fail ();
+               return;
+       }
+
+       if (!test_utils_run_simple_test (fixture,
+               "type:3",
+               HTML_PREFIX "<div style=\"width: 20ch;\">Credits:</div>"
+               "<blockquote type=\"cite\">"
+               "<div>" QUOTE_SPAN (QUOTE_CHR) "123aaa" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR) "&lt;<a href=\"mailto:u@no.where\";>u@no.where</a>&gt; bbb" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR) "ccc</div>"
+               "<div>" QUOTE_SPAN (QUOTE_CHR) "12345678 0123 5678</div>"
+               "<blockquote type=\"cite\">"
+               "<div>" QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "ddd <a href=\"https://www.no.whr\";>www.no.whr</a>" 
WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "eee fff ggg hhh" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "iii jjj</div>"
+               "<div>" QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "123 4567890" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "123456 789012" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "34567</div>"
+               "</blockquote>"
+               "</blockquote>"
+               HTML_SUFFIX,
+               "Credits:\n"
+               "> 123aaa\n"
+               "> <u@no.where> bbb\n"
+               "> ccc\n"
+               "> 12345678 0123 5678\n"
+               "> > ddd www.no.whr\n"
+               "> > eee fff ggg hhh\n"
+               "> > iii jjj\n"
+               "> > 123 4567890\n"
+               "> > 123456 789012\n"
+               "> > 34567\n")) {
+               g_test_fail ();
+               return;
+       }
+
+       if (!test_utils_run_simple_test (fixture,
+               "type:4",
+               HTML_PREFIX "<div style=\"width: 20ch;\">Credits:</div>"
+               "<blockquote type=\"cite\">"
+               "<div>" QUOTE_SPAN (QUOTE_CHR) "1234aaa" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR) "&lt;<a href=\"mailto:u@no.where\";>u@no.where</a>&gt; bbb" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR) "ccc</div>"
+               "<div>" QUOTE_SPAN (QUOTE_CHR) "12345678 0123 5678</div>"
+               "<blockquote type=\"cite\">"
+               "<div>" QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "ddd <a href=\"https://www.no.whr\";>www.no.whr</a>" 
WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "eee fff ggg hhh" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "iii jjj</div>"
+               "<div>" QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "123 4567890" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "123456 789012" WRAP_BR_SPC
+               QUOTE_SPAN (QUOTE_CHR QUOTE_CHR) "34567</div>"
+               "</blockquote>"
+               "</blockquote>"
+               HTML_SUFFIX,
+               "Credits:\n"
+               "> 1234aaa\n"
+               "> <u@no.where> bbb\n"
+               "> ccc\n"
+               "> 12345678 0123 5678\n"
+               "> > ddd www.no.whr\n"
+               "> > eee fff ggg hhh\n"
+               "> > iii jjj\n"
+               "> > 123 4567890\n"
+               "> > 123456 789012\n"
+               "> > 34567\n")) {
+               g_test_fail ();
+               return;
+       }
+}
+
 void
 test_add_html_editor_bug_tests (void)
 {
@@ -2973,4 +3157,5 @@ test_add_html_editor_bug_tests (void)
        test_utils_add_test ("/issue/1439", test_issue_1439);
        test_utils_add_test ("/issue/1392", test_issue_1392);
        test_utils_add_test ("/issue/1708", test_issue_1708);
+       test_utils_add_test ("/issue/1763", test_issue_1763);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]