[evolution] EHTMLEditorView - Improve tables handling in composer
- From: Tomas Popela <tpopela src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] EHTMLEditorView - Improve tables handling in composer
- Date: Sun, 15 Mar 2015 19:26:17 +0000 (UTC)
commit 203f96d8c5c1646822a0f6fd0743271e818b3520
Author: Tomas Popela <tpopela redhat com>
Date: Sun Mar 15 19:46:27 2015 +0100
EHTMLEditorView - Improve tables handling in composer
When switching mode to plain text mode hide the borders, and set width
according to word wrap width. When hovering over the cell show red
outline around it.
e-util/e-html-editor-view.c | 81 +++++++++++++++++++++++++++++++++++++++++--
1 files changed, 78 insertions(+), 3 deletions(-)
---
diff --git a/e-util/e-html-editor-view.c b/e-util/e-html-editor-view.c
index 0f919cc..d7902c5 100644
--- a/e-util/e-html-editor-view.c
+++ b/e-util/e-html-editor-view.c
@@ -2251,6 +2251,8 @@ surround_text_with_paragraph_if_needed (EHTMLEditorSelection *selection,
WEBKIT_DOM_IS_HTML_TABLE_CELL_ELEMENT (parent))) {
element = e_html_editor_selection_put_node_into_paragraph (
selection, document, node, TRUE);
+ if (WEBKIT_DOM_IS_HTML_TABLE_CELL_ELEMENT (parent))
+ webkit_dom_element_remove_attribute (element, "style");
if (WEBKIT_DOM_IS_HTMLBR_ELEMENT (next_sibling))
remove_node (next_sibling);
@@ -8091,7 +8093,7 @@ toggle_paragraphs_style_in_element (EHTMLEditorView *view,
selection = e_html_editor_view_get_selection (view);
paragraphs = webkit_dom_element_query_selector_all (
- element, ".-x-evo-paragraph", NULL);
+ element, ":not(td) > .-x-evo-paragraph", NULL);
length = webkit_dom_node_list_get_length (paragraphs);
@@ -8853,6 +8855,54 @@ remove_whole_event_history (EHTMLEditorView *view)
g_object_notify (G_OBJECT (view), "can-redo");
}
+static void
+rename_attribute (WebKitDOMElement *element,
+ const gchar *from,
+ const gchar *to)
+{
+ gchar *value;
+
+ value = webkit_dom_element_get_attribute (element, from);
+ if (value)
+ webkit_dom_element_set_attribute (element, to, value, NULL);
+ webkit_dom_element_remove_attribute (element, from);
+}
+
+static void
+toggle_tables (EHTMLEditorView *view)
+{
+ WebKitDOMDocument *document;
+ WebKitDOMNodeList *list;
+ gint ii, length;
+
+ document = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (view));
+ list = webkit_dom_document_query_selector_all (document, "table", NULL);
+ length = webkit_dom_node_list_get_length (list);
+
+ for (ii = 0; ii < length; ii++) {
+ WebKitDOMNode *table = webkit_dom_node_list_item (list, ii);
+
+ if (view->priv->html_mode) {
+ element_remove_class (WEBKIT_DOM_ELEMENT (table), "-x-evo-plaintext-table");
+ rename_attribute (WEBKIT_DOM_ELEMENT (table), "data-width", "width");
+ rename_attribute (WEBKIT_DOM_ELEMENT (table), "data-cellspacing", "cellspacing");
+ rename_attribute (WEBKIT_DOM_ELEMENT (table), "data-cellpadding", "cellpadding");
+ rename_attribute (WEBKIT_DOM_ELEMENT (table), "data-border", "border");
+ } else {
+ element_add_class (WEBKIT_DOM_ELEMENT (table), "-x-evo-plaintext-table");
+ rename_attribute (WEBKIT_DOM_ELEMENT (table), "width", "data-width");
+ rename_attribute (WEBKIT_DOM_ELEMENT (table), "cellspacing", "data-cellspacing");
+ webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (table), "cellspacing", "0",
NULL);
+ rename_attribute (WEBKIT_DOM_ELEMENT (table), "cellpadding", "data-cellpadding");
+ webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (table), "cellpadding", "0",
NULL);
+ rename_attribute (WEBKIT_DOM_ELEMENT (table), "border", "data-border");
+ webkit_dom_element_set_attribute (WEBKIT_DOM_ELEMENT (table), "border", "0", NULL);
+ }
+ g_object_unref (table);
+ }
+ g_object_unref (list);
+}
+
/**
* e_html_editor_view_set_html_mode:
* @view: an #EHTMLEditorView
@@ -8926,6 +8976,7 @@ e_html_editor_view_set_html_mode (EHTMLEditorView *view,
toggle_paragraphs_style (view);
toggle_smileys (view);
+ toggle_tables (view);
remove_wrapping_from_view (view);
} else {
gchar *plain;
@@ -8940,6 +8991,7 @@ e_html_editor_view_set_html_mode (EHTMLEditorView *view,
toggle_paragraphs_style (view);
toggle_smileys (view);
+ toggle_tables (view);
remove_images (view);
remove_background_images_in_document (document);
@@ -9940,7 +9992,7 @@ e_html_editor_view_update_fonts (EHTMLEditorView *view)
* unicode zero width space before each cell. */
g_string_append (
stylesheet,
- "td::before {\n"
+ "td:before {\n"
" content: \"\xe2\x80\x8b\";"
"}\n");
@@ -9964,7 +10016,30 @@ e_html_editor_view_update_fonts (EHTMLEditorView *view)
g_string_append (
stylesheet,
- "td > *"
+ "td:hover "
+ "{\n"
+ " outline: 1px dotted red;\n"
+ "}\n");
+
+ g_string_append_printf (
+ stylesheet,
+ ".-x-evo-plaintext-table "
+ "{\n"
+ " border-collapse: collapse;\n"
+ " width: %dch;\n"
+ "}\n",
+ e_html_editor_selection_get_word_wrap_length (view->priv->selection));
+
+ g_string_append (
+ stylesheet,
+ ".-x-evo-plaintext-table td"
+ "{\n"
+ " vertical-align: top;\n"
+ "}\n");
+
+ g_string_append (
+ stylesheet,
+ "td > * "
"{\n"
" display : inline-block;\n"
"}\n");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]