[evolution] I#46 - Old plain text signature not updated before editing
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] I#46 - Old plain text signature not updated before editing
- Date: Wed, 25 Jul 2018 19:12:40 +0000 (UTC)
commit 11baa8518bed8fdb907db11a71921af1b60711e8
Author: Milan Crha <mcrha redhat com>
Date: Wed Jul 25 21:10:23 2018 +0200
I#46 - Old plain text signature not updated before editing
Closes https://gitlab.gnome.org/GNOME/evolution/issues/46
.../web-extension/e-composer-dom-functions.c | 11 +++++
.../web-extension/e-editor-dom-functions.c | 54 +++++++++++++++++++++-
.../web-extension/e-editor-dom-functions.h | 3 ++
3 files changed, 66 insertions(+), 2 deletions(-)
---
diff --git a/src/modules/webkit-editor/web-extension/e-composer-dom-functions.c
b/src/modules/webkit-editor/web-extension/e-composer-dom-functions.c
index 25705c73cc..1544c13243 100644
--- a/src/modules/webkit-editor/web-extension/e-composer-dom-functions.c
+++ b/src/modules/webkit-editor/web-extension/e-composer-dom-functions.c
@@ -391,6 +391,15 @@ e_composer_dom_insert_signature (EEditorPage *editor_page,
if (element)
webkit_dom_element_remove_attribute (
element, "data-evo-signature-plain-text-mode");
+
+ element = webkit_dom_element_query_selector (insert_signature_in, "#-x-evo-selection-start-marker",
NULL);
+ if (element)
+ remove_node (WEBKIT_DOM_NODE (element));
+
+ element = webkit_dom_element_query_selector (insert_signature_in, "#-x-evo-selection-end-marker",
NULL);
+ if (element)
+ remove_node (WEBKIT_DOM_NODE (element));
+
g_free (signature_text);
insert:
@@ -526,6 +535,8 @@ insert:
/* Make sure the flag will be unset and won't influence user's choice */
*set_signature_from_message = FALSE;
+ e_editor_dom_adapt_to_editor_dom_changes (editor_page);
+
return NULL;
}
diff --git a/src/modules/webkit-editor/web-extension/e-editor-dom-functions.c
b/src/modules/webkit-editor/web-extension/e-editor-dom-functions.c
index f82f1cc8b8..bdef1ccf57 100644
--- a/src/modules/webkit-editor/web-extension/e-editor-dom-functions.c
+++ b/src/modules/webkit-editor/web-extension/e-editor-dom-functions.c
@@ -8737,19 +8737,69 @@ change_cid_images_src_to_base64 (EEditorPage *editor_page)
}
static void
-adapt_to_editor_dom_changes (WebKitDOMDocument *document)
+split_div_into_paragraphs (EEditorPage *editor_page,
+ WebKitDOMDocument *document,
+ WebKitDOMNode *element,
+ WebKitDOMNode *parent)
{
+ WebKitDOMNode *node, *new_div = NULL;
+
+ if (!element || !parent || !WEBKIT_DOM_IS_HTML_DIV_ELEMENT (element))
+ return;
+
+ node = webkit_dom_node_get_first_child (element);
+ while (node) {
+ if (WEBKIT_DOM_IS_HTML_BR_ELEMENT (node)) {
+ if (!new_div) {
+ new_div = WEBKIT_DOM_NODE (e_editor_dom_get_paragraph_element (editor_page,
-1, 0));
+ webkit_dom_node_insert_before (parent, new_div, element, NULL);
+ webkit_dom_node_append_child (new_div, webkit_dom_node_clone_node_with_error
(node, TRUE, NULL), NULL);
+ }
+
+ new_div = NULL;
+ } else if (WEBKIT_DOM_IS_HTML_PRE_ELEMENT (node) ||
+ WEBKIT_DOM_IS_HTML_O_LIST_ELEMENT (node) ||
+ WEBKIT_DOM_IS_HTML_U_LIST_ELEMENT (node)) {
+ new_div = NULL;
+ webkit_dom_node_insert_before (parent, webkit_dom_node_clone_node_with_error (node,
TRUE, NULL), element, NULL);
+ } else {
+ if (!new_div) {
+ new_div = WEBKIT_DOM_NODE (e_editor_dom_get_paragraph_element (editor_page,
-1, 0));
+ webkit_dom_node_insert_before (parent, new_div, element, NULL);
+ }
+
+ webkit_dom_node_append_child (new_div, webkit_dom_node_clone_node_with_error (node,
TRUE, NULL), NULL);
+ }
+
+ node = webkit_dom_node_get_next_sibling (node);
+ }
+
+ webkit_dom_node_remove_child (parent, element, NULL);
+}
+
+void
+e_editor_dom_adapt_to_editor_dom_changes (EEditorPage *editor_page)
+{
+ WebKitDOMDocument *document;
WebKitDOMHTMLCollection *collection = NULL;
gint ii;
+ document = e_editor_page_get_document (editor_page);
+
/* Normal block code div.-x-evo-paragraph replaced by div[data-evo-paragraph] */
collection = webkit_dom_document_get_elements_by_class_name_as_html_collection (document,
"-x-evo-paragraph");
for (ii = webkit_dom_html_collection_get_length (collection); ii--;) {
WebKitDOMNode *node;
+ WebKitDOMElement *parent_element;
node = webkit_dom_html_collection_item (collection, ii);
element_remove_class (WEBKIT_DOM_ELEMENT (node), "-x-evo-paragraph");
webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (node), "data-evo-paragraph", "", NULL);
+
+ parent_element = webkit_dom_node_get_parent_element (node);
+
+ if (parent_element)
+ split_div_into_paragraphs (editor_page, document, node, WEBKIT_DOM_NODE
(parent_element));
}
g_clear_object (&collection);
}
@@ -8859,7 +8909,7 @@ e_editor_dom_process_content_after_load (EEditorPage *editor_page)
g_clear_object (&list);
}
- adapt_to_editor_dom_changes (document);
+ e_editor_dom_adapt_to_editor_dom_changes (editor_page);
/* Make the quote marks non-selectable. */
e_editor_dom_disable_quote_marks_select (editor_page);
diff --git a/src/modules/webkit-editor/web-extension/e-editor-dom-functions.h
b/src/modules/webkit-editor/web-extension/e-editor-dom-functions.h
index 4191d2cf2c..23765ec3f0 100644
--- a/src/modules/webkit-editor/web-extension/e-editor-dom-functions.h
+++ b/src/modules/webkit-editor/web-extension/e-editor-dom-functions.h
@@ -382,6 +382,9 @@ WebKitDOMRange *
void e_editor_dom_selection_restore_to_history_event_state
(EEditorPage *editor_page,
EEditorSelection selection_state);
+void e_editor_dom_adapt_to_editor_dom_changes
+ (EEditorPage *editor_page);
+
G_END_DECLS
#endif /* E_EDITOR_DOM_FUNCTIONS_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]