[evolution] EHTMLEditorView - Wrap and quote just the first block after newly inserted line into the citation



commit bcbd85f9879e60ef291913f74a4d7ecdd70f9e17
Author: Tomas Popela <tpopela redhat com>
Date:   Mon Jul 21 16:51:46 2014 +0200

    EHTMLEditorView - Wrap and quote just the first block after newly inserted line into the citation
    
    Previously, the whole blockquote that was created after the newly
    inserted line was wrapped and quoted. Now just the first block is
    processed. Also rewrap the content as when enter was pressed in the
    middle of the paragraph the line ends wouldn't match the character
    count for word wrap.

 e-util/e-html-editor-view.c |  132 ++++++++++++++++++++++++-------------------
 1 files changed, 74 insertions(+), 58 deletions(-)
---
diff --git a/e-util/e-html-editor-view.c b/e-util/e-html-editor-view.c
index 493fa74..945b60a 100644
--- a/e-util/e-html-editor-view.c
+++ b/e-util/e-html-editor-view.c
@@ -449,6 +449,62 @@ get_citation_level (WebKitDOMNode *node,
        return level;
 }
 
+static gchar *
+get_quotation_for_level (gint quote_level)
+{
+       gint ii;
+       GString *output = g_string_new ("");
+
+       for (ii = 0; ii < quote_level; ii++) {
+               g_string_append (output, "<span class=\"-x-evo-quote-character\">");
+               g_string_append (output, QUOTE_SYMBOL);
+               g_string_append (output, " ");
+               g_string_append (output, "</span>");
+       }
+
+       return g_string_free (output, FALSE);
+}
+
+static void
+quote_plain_text_element_after_wrapping (WebKitDOMDocument *document,
+                                         WebKitDOMElement *element,
+                                         gint quote_level)
+{
+       WebKitDOMNodeList *list;
+       WebKitDOMNode *quoted_node;
+       gint length, ii;
+       gchar *quotation;
+
+       quoted_node = WEBKIT_DOM_NODE (
+               webkit_dom_document_create_element (document, "SPAN", NULL));
+       webkit_dom_element_set_class_name (
+               WEBKIT_DOM_ELEMENT (quoted_node), "-x-evo-quoted");
+       quotation = get_quotation_for_level (quote_level);
+       webkit_dom_html_element_set_inner_html (
+               WEBKIT_DOM_HTML_ELEMENT (quoted_node), quotation, NULL);
+
+       list = webkit_dom_element_query_selector_all (
+               element, "br.-x-evo-wrap-br", NULL);
+       webkit_dom_node_insert_before (
+               WEBKIT_DOM_NODE (element),
+               quoted_node,
+               webkit_dom_node_get_first_child (WEBKIT_DOM_NODE (element)),
+               NULL);
+
+       length = webkit_dom_node_list_get_length (list);
+       for (ii = 0; ii < length; ii++) {
+               WebKitDOMNode *br = webkit_dom_node_list_item (list, ii);
+
+               webkit_dom_node_insert_before (
+                       webkit_dom_node_get_parent_node (br),
+                       webkit_dom_node_clone_node (quoted_node, TRUE),
+                       webkit_dom_node_get_next_sibling (br),
+                       NULL);
+       }
+
+       g_free (quotation);
+}
+
 static WebKitDOMElement *
 insert_new_line_into_citation (EHTMLEditorView *view,
                                const gchar *html_to_insert)
@@ -484,8 +540,24 @@ insert_new_line_into_citation (EHTMLEditorView *view,
                        WEBKIT_DOM_NODE (element));
 
                if (WEBKIT_DOM_IS_HTML_QUOTE_ELEMENT (next_sibling)) {
-                       e_html_editor_view_quote_plain_text_element (
-                               view, WEBKIT_DOM_ELEMENT (next_sibling));
+                       gint citation_level, length;
+                       gint word_wrap_length =
+                               e_html_editor_selection_get_word_wrap_length (selection);
+                       WebKitDOMNode *node;
+
+                       citation_level = get_citation_level (next_sibling, FALSE);
+                       length = word_wrap_length - 2 * citation_level;
+
+                       node = webkit_dom_node_get_first_child (next_sibling);
+                       /* Rewrap and requote first block after the newly inserted line */
+                       if (node && WEBKIT_DOM_IS_ELEMENT (node)) {
+                               remove_quoting_from_element (WEBKIT_DOM_ELEMENT (node));
+                               remove_wrapping_from_element (WEBKIT_DOM_ELEMENT (node));
+                               node = WEBKIT_DOM_NODE (e_html_editor_selection_wrap_paragraph_length (
+                                       selection, WEBKIT_DOM_ELEMENT (node), length));
+                               quote_plain_text_element_after_wrapping (
+                                       document, WEBKIT_DOM_ELEMENT (node), citation_level);
+                       }
 
                        e_html_editor_view_force_spell_check (view);
                }
@@ -522,62 +594,6 @@ insert_new_line_into_citation (EHTMLEditorView *view,
        return paragraph;
 }
 
-static gchar *
-get_quotation_for_level (gint quote_level)
-{
-       gint ii;
-       GString *output = g_string_new ("");
-
-       for (ii = 0; ii < quote_level; ii++) {
-               g_string_append (output, "<span class=\"-x-evo-quote-character\">");
-               g_string_append (output, QUOTE_SYMBOL);
-               g_string_append (output, " ");
-               g_string_append (output, "</span>");
-       }
-
-       return g_string_free (output, FALSE);
-}
-
-static void
-quote_plain_text_element_after_wrapping (WebKitDOMDocument *document,
-                                         WebKitDOMElement *element,
-                                         gint quote_level)
-{
-       WebKitDOMNodeList *list;
-       WebKitDOMNode *quoted_node;
-       gint length, ii;
-       gchar *quotation;
-
-       quoted_node = WEBKIT_DOM_NODE (
-               webkit_dom_document_create_element (document, "SPAN", NULL));
-       webkit_dom_element_set_class_name (
-               WEBKIT_DOM_ELEMENT (quoted_node), "-x-evo-quoted");
-       quotation = get_quotation_for_level (quote_level);
-       webkit_dom_html_element_set_inner_html (
-               WEBKIT_DOM_HTML_ELEMENT (quoted_node), quotation, NULL);
-
-       list = webkit_dom_element_query_selector_all (
-               element, "br.-x-evo-wrap-br", NULL);
-       webkit_dom_node_insert_before (
-               WEBKIT_DOM_NODE (element),
-               quoted_node,
-               webkit_dom_node_get_first_child (WEBKIT_DOM_NODE (element)),
-               NULL);
-
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
-               WebKitDOMNode *br = webkit_dom_node_list_item (list, ii);
-
-               webkit_dom_node_insert_before (
-                       webkit_dom_node_get_parent_node (br),
-                       webkit_dom_node_clone_node (quoted_node, TRUE),
-                       webkit_dom_node_get_next_sibling (br),
-                       NULL);
-       }
-
-       g_free (quotation);
-}
-
 static void
 body_input_event_cb (WebKitDOMElement *element,
                      WebKitDOMEvent *event,


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