[evolution/gnome-3-22] Correctly process a WebKitDOMHTMLCollection objects



commit 7c7d154a878fa5943234829d790692b995c89453
Author: Tomas Popela <tpopela redhat com>
Date:   Mon Sep 26 09:58:22 2016 +0200

    Correctly process a WebKitDOMHTMLCollection objects
    
    WebKitDOMHTMLCollection is a live list, so we can't process it like a static
    list (like WebKitDOMNodeList). So process it correctly and while fixing it
    rework the WebKitODMNodeList processing so we can get rid of the length
    variable.

 .../web-extension/e-composer-dom-functions.c       |    7 +-
 .../web-extension/e-dialogs-dom-functions.c        |    5 +-
 .../web-extension/e-editor-dom-functions.c         |  266 +++++++------------
 3 files changed, 103 insertions(+), 175 deletions(-)
---
diff --git a/modules/webkit-editor/web-extension/e-composer-dom-functions.c 
b/modules/webkit-editor/web-extension/e-composer-dom-functions.c
index 6575fa2..32e517a 100644
--- a/modules/webkit-editor/web-extension/e-composer-dom-functions.c
+++ b/modules/webkit-editor/web-extension/e-composer-dom-functions.c
@@ -275,7 +275,7 @@ e_composer_dom_insert_signature (EEditorPage *editor_page,
        gchar *new_signature_id = NULL;
        gchar *signature_text = NULL;
        gboolean top_signature, html_mode;
-       gulong list_length, ii;
+       gulong ii;
 
        g_return_val_if_fail (E_IS_EDITOR_PAGE (editor_page), NULL);
        g_return_val_if_fail (set_signature_from_message != NULL, NULL);
@@ -396,8 +396,7 @@ insert:
        /* Remove the old signature and insert the new one. */
        signatures = webkit_dom_document_get_elements_by_class_name_as_html_collection (
                document, "-x-evo-signature-wrapper");
-       list_length = webkit_dom_html_collection_get_length (signatures);
-       for (ii = 0; ii < list_length; ii++) {
+       for (ii = webkit_dom_html_collection_get_length (signatures); ii--;) {
                WebKitDOMNode *wrapper, *signature;
 
                wrapper = webkit_dom_html_collection_item (signatures, ii);
@@ -448,7 +447,7 @@ insert:
                }
 
                /* Leave just one signature wrapper there as it will be reused. */
-               if (ii != list_length - 1) {
+               if (ii != 0) {
                        remove_node (wrapper);
                } else {
                        remove_node (signature);
diff --git a/modules/webkit-editor/web-extension/e-dialogs-dom-functions.c 
b/modules/webkit-editor/web-extension/e-dialogs-dom-functions.c
index 501efd9..82a38c2 100644
--- a/modules/webkit-editor/web-extension/e-dialogs-dom-functions.c
+++ b/modules/webkit-editor/web-extension/e-dialogs-dom-functions.c
@@ -181,7 +181,7 @@ cell_set_header_style (WebKitDOMHTMLTableCellElement *cell,
        WebKitDOMDocument *document;
        WebKitDOMNodeList *nodes = NULL;
        WebKitDOMElement *new_cell;
-       gulong length, ii;
+       gulong ii;
        gchar *tagname;
 
        document = webkit_dom_node_get_owner_document (WEBKIT_DOM_NODE (cell));
@@ -204,8 +204,7 @@ cell_set_header_style (WebKitDOMHTMLTableCellElement *cell,
 
        /* Move all child nodes from cell to new_cell */
        nodes = webkit_dom_node_get_child_nodes (WEBKIT_DOM_NODE (cell));
-       length = webkit_dom_node_list_get_length (nodes);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (nodes); ii--;) {
                WebKitDOMNode *node;
 
                node = webkit_dom_node_list_item (nodes, ii);
diff --git a/modules/webkit-editor/web-extension/e-editor-dom-functions.c 
b/modules/webkit-editor/web-extension/e-editor-dom-functions.c
index 7ef79db..ac70c83 100644
--- a/modules/webkit-editor/web-extension/e-editor-dom-functions.c
+++ b/modules/webkit-editor/web-extension/e-editor-dom-functions.c
@@ -986,7 +986,7 @@ e_editor_dom_quote_plain_text_element_after_wrapping (EEditorPage *editor_page,
        WebKitDOMDocument *document;
        WebKitDOMNodeList *list = NULL;
        WebKitDOMNode *quoted_node;
-       gint length, ii;
+       gint ii;
        gchar *quotation;
 
        g_return_if_fail (E_IS_EDITOR_PAGE (editor_page));
@@ -1010,8 +1010,7 @@ e_editor_dom_quote_plain_text_element_after_wrapping (EEditorPage *editor_page,
                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++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *br = webkit_dom_node_list_item (list, ii);
                WebKitDOMNode *prev_sibling = webkit_dom_node_get_previous_sibling (br);
 
@@ -1354,7 +1353,7 @@ move_elements_to_body (EEditorPage *editor_page)
        body = webkit_dom_document_get_body (document);
        list = webkit_dom_document_query_selector_all (
                document, "div[data-headers]", NULL);
-       for (ii = webkit_dom_node_list_get_length (list) - 1; ii >= 0; ii--) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
 
                webkit_dom_element_remove_attribute (
@@ -1371,7 +1370,7 @@ move_elements_to_body (EEditorPage *editor_page)
 
        list = webkit_dom_document_query_selector_all (
                document, "span.-x-evo-to-body[data-credits]", NULL);
-       for (ii = webkit_dom_node_list_get_length (list) - 1; ii >= 0; ii--) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                char *credits;
                WebKitDOMElement *element;
                WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
@@ -1398,12 +1397,11 @@ static void
 repair_gmail_blockquotes (WebKitDOMDocument *document)
 {
        WebKitDOMHTMLCollection *collection = NULL;
-       gint ii, length;
+       gint ii;
 
        collection = webkit_dom_document_get_elements_by_class_name_as_html_collection (
                document, "gmail_quote");
-       length = webkit_dom_html_collection_get_length (collection);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;) {
                WebKitDOMNode *node = webkit_dom_html_collection_item (collection, ii);
 
                if (!WEBKIT_DOM_IS_HTML_QUOTE_ELEMENT (node))
@@ -2465,7 +2463,7 @@ fix_paragraph_structure_after_pressing_enter (EEditorPage *editor_page)
        WebKitDOMNode *body;
        WebKitDOMNodeList *list = NULL;
        gboolean prev_is_heading = FALSE;
-       gint ii, length;
+       gint ii;
 
        g_return_val_if_fail (E_IS_EDITOR_PAGE (editor_page), FALSE);
 
@@ -2477,8 +2475,7 @@ fix_paragraph_structure_after_pressing_enter (EEditorPage *editor_page)
        list = webkit_dom_document_query_selector_all (
                document, "body > div:not([data-evo-paragraph]) > br", NULL);
 
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *prev_sibling;
                WebKitDOMNode *node = webkit_dom_node_get_parent_node (
                        webkit_dom_node_list_item (list, ii));
@@ -3624,22 +3621,18 @@ e_editor_dom_register_input_event_listener_on_body (EEditorPage *editor_page)
 static void
 remove_empty_blocks (WebKitDOMDocument *document)
 {
-       gint ii, length;
+       gint ii;
        WebKitDOMNodeList *list = NULL;
 
        list = webkit_dom_document_query_selector_all (
-       document, "blockquote[type=cite] > :empty:not(br)", NULL);
-
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++)
+               document, "blockquote[type=cite] > :empty:not(br)", NULL);
+       for (ii = webkit_dom_node_list_get_length (list); ii--;)
                remove_node (webkit_dom_node_list_item (list, ii));
        g_clear_object (&list);
 
        list = webkit_dom_document_query_selector_all (
                document, "blockquote[type=cite]:empty", NULL);
-
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++)
+       for (ii = webkit_dom_node_list_get_length (list); ii--;)
                remove_node (webkit_dom_node_list_item (list, ii));
        g_clear_object (&list);
 }
@@ -3711,7 +3704,7 @@ e_editor_dom_merge_siblings_if_necessary (EEditorPage *editor_page,
        WebKitDOMNode *child;
        WebKitDOMNodeList *list = NULL;
        gboolean equal_nodes;
-       gint ii, length;
+       gint ii;
 
        g_return_if_fail (E_IS_EDITOR_PAGE (editor_page));
 
@@ -3761,8 +3754,7 @@ e_editor_dom_merge_siblings_if_necessary (EEditorPage *editor_page,
  signature:
        list = webkit_dom_document_query_selector_all (
                document, "blockquote[data-evo-query-skip]", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for  (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
                webkit_dom_element_remove_attribute (
                        WEBKIT_DOM_ELEMENT (node), "data-evo-query-skip");
@@ -4716,7 +4708,7 @@ e_editor_dom_quote_plain_text_element (EEditorPage *editor_page,
        WebKitDOMDocument *document;
        WebKitDOMNode *element_clone;
        WebKitDOMHTMLCollection *collection = NULL;
-       gint ii, length, level;
+       gint ii, level;
 
        g_return_val_if_fail (E_IS_EDITOR_PAGE (editor_page), NULL);
 
@@ -4727,8 +4719,7 @@ e_editor_dom_quote_plain_text_element (EEditorPage *editor_page,
        /* Remove old quote characters if the exists */
        collection = webkit_dom_element_get_elements_by_class_name_as_html_collection (
                WEBKIT_DOM_ELEMENT (element_clone), "-x-evo-quoted");
-       length = webkit_dom_html_collection_get_length (collection);
-       for (ii = 0; ii < length; ii++)
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;)
                remove_node (webkit_dom_html_collection_item (collection, ii));
        g_clear_object (&collection);
 
@@ -4762,7 +4753,7 @@ dom_quote_plain_text (WebKitDOMDocument *document)
        WebKitDOMNamedNodeMap *attributes = NULL;
        WebKitDOMNodeList *list = NULL;
        WebKitDOMElement *element;
-       gint ii, length;
+       gint ii;
        gulong attributes_length;
 
        /* Check if the document is already quoted */
@@ -4777,8 +4768,7 @@ dom_quote_plain_text (WebKitDOMDocument *document)
        /* Clean unwanted spaces before and after blockquotes */
        list = webkit_dom_element_query_selector_all (
                WEBKIT_DOM_ELEMENT (body_clone), "blockquote[type|=cite]", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *blockquote = webkit_dom_node_list_item (list, ii);
                WebKitDOMNode *prev_sibling = webkit_dom_node_get_previous_sibling (blockquote);
                WebKitDOMNode *next_sibling = webkit_dom_node_get_next_sibling (blockquote);
@@ -4839,12 +4829,11 @@ static void
 dom_dequote_plain_text (WebKitDOMDocument *document)
 {
        WebKitDOMNodeList *paragraphs = NULL;
-       gint length, ii;
+       gint ii;
 
        paragraphs = webkit_dom_document_query_selector_all (
                document, "blockquote[type=cite]", NULL);
-       length = webkit_dom_node_list_get_length (paragraphs);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (paragraphs); ii--;) {
                WebKitDOMElement *element;
 
                element = WEBKIT_DOM_ELEMENT (webkit_dom_node_list_item (paragraphs, ii));
@@ -5629,7 +5618,7 @@ quote_plain_text_elements_after_wrapping_in_element (EEditorPage *editor_page,
                                                      WebKitDOMElement *element)
 {
        WebKitDOMNodeList *list = NULL;
-       gint length, ii;
+       gint ii;
 
        g_return_if_fail (E_IS_EDITOR_PAGE (editor_page));
 
@@ -5637,8 +5626,7 @@ quote_plain_text_elements_after_wrapping_in_element (EEditorPage *editor_page,
        list = webkit_dom_element_query_selector_all (
                element, "blockquote[type=cite] > [data-evo-paragraph], blockquote[type=cite] > pre", NULL);
 
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                gint citation_level;
                WebKitDOMNode *child;
 
@@ -5824,8 +5812,7 @@ e_editor_dom_convert_content (EEditorPage *editor_page,
        /* Remove all previously inserted paragraphs. */
        list = webkit_dom_document_query_selector_all (
                document, "[data-evo-paragraph]:not([data-headers])", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++)
+       for (ii = webkit_dom_node_list_get_length (list); ii--;)
                remove_node (webkit_dom_node_list_item (list, ii));
        g_clear_object (&list);
 
@@ -5879,8 +5866,7 @@ e_editor_dom_convert_content (EEditorPage *editor_page,
        /* Move credits to the body */
        list = webkit_dom_document_query_selector_all (
                document, "span.-x-evo-to-body[data-credits]", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                char *credits;
                WebKitDOMElement *element;
                WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
@@ -5904,8 +5890,7 @@ e_editor_dom_convert_content (EEditorPage *editor_page,
        /* Move headers to body */
        list = webkit_dom_document_query_selector_all (
                document, "div[data-headers]", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *node;
 
                node = webkit_dom_node_list_item (list, ii);
@@ -6067,13 +6052,12 @@ preserve_line_breaks_in_element (WebKitDOMDocument *document,
                                  const gchar *selector)
 {
        WebKitDOMNodeList *list = NULL;
-       gint ii, length;
+       gint ii;
 
        if (!(list = webkit_dom_element_query_selector_all (element, selector, NULL)))
                return;
 
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                gboolean insert = TRUE;
                WebKitDOMNode *node, *next_sibling;
 
@@ -6104,13 +6088,12 @@ preserve_pre_line_breaks_in_element (WebKitDOMDocument *document,
                                      WebKitDOMElement *element)
 {
        WebKitDOMHTMLCollection *collection = NULL;
-       gint ii, length;
+       gint ii;
 
        if (!(collection = webkit_dom_element_get_elements_by_tag_name_as_html_collection (element, "pre")))
                return;
 
-       length = webkit_dom_html_collection_get_length (collection);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;) {
                WebKitDOMNode *node;
                gchar *inner_html;
                GString *string;
@@ -6691,21 +6674,19 @@ static void
 process_quote_nodes (WebKitDOMElement *blockquote)
 {
        WebKitDOMHTMLCollection *collection = NULL;
-       int jj, length;
+       int ii;
 
        /* Replace quote nodes with symbols */
        collection = webkit_dom_element_get_elements_by_class_name_as_html_collection (
                blockquote, "-x-evo-quoted");
-       length = webkit_dom_html_collection_get_length (collection);
-       for (jj = 0; jj < length; jj++) {
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;) {
                WebKitDOMNode *quoted_node;
                gchar *text_content;
 
-               quoted_node = webkit_dom_html_collection_item (collection, jj);
+               quoted_node = webkit_dom_html_collection_item (collection, ii);
                text_content = webkit_dom_node_get_text_content (quoted_node);
                webkit_dom_element_set_outer_html (
                        WEBKIT_DOM_ELEMENT (quoted_node), text_content, NULL);
-
                g_free (text_content);
        }
        g_clear_object (&collection);
@@ -7246,14 +7227,12 @@ process_node_to_plain_text_for_exporting (EEditorPage *editor_page,
        WebKitDOMNodeList *nodes = NULL;
        gboolean html_mode;
        gchar *content = NULL;
-       gint ii, nodes_length;
+       gint ii;
 
        html_mode = e_editor_page_get_html_mode (editor_page);
 
        nodes = webkit_dom_node_get_child_nodes (source);
-       nodes_length = webkit_dom_node_list_get_length (nodes);
-
-       for (ii = 0; ii < nodes_length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (nodes); ii--;) {
                WebKitDOMNode *child;
                gboolean skip_node = FALSE;
 
@@ -7457,8 +7436,7 @@ process_node_to_html_for_exporting (EEditorPage *editor_page,
        /* Aligned elements */
        list = webkit_dom_element_query_selector_all (
                WEBKIT_DOM_ELEMENT (source), "[class*=\"-x-evo-align\"]", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                gchar *class = NULL;
                WebKitDOMNode *node;
                gboolean center = FALSE;
@@ -7494,8 +7472,7 @@ process_node_to_html_for_exporting (EEditorPage *editor_page,
        /* Indented elements */
        collection = webkit_dom_element_get_elements_by_class_name_as_html_collection (
                WEBKIT_DOM_ELEMENT (source), "-x-evo-indented");
-       length = webkit_dom_html_collection_get_length (collection);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;) {
                WebKitDOMNode *node;
 
                node = webkit_dom_html_collection_item (collection, ii);
@@ -7507,8 +7484,7 @@ process_node_to_html_for_exporting (EEditorPage *editor_page,
        /* Tab characters */
        collection = webkit_dom_element_get_elements_by_class_name_as_html_collection (
                WEBKIT_DOM_ELEMENT (source), "Apple-tab-span");
-       length = webkit_dom_html_collection_get_length (collection);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;) {
                gchar *text_content;
                WebKitDOMNode *node;
 
@@ -7521,13 +7497,13 @@ process_node_to_html_for_exporting (EEditorPage *editor_page,
                        NULL);
 
                remove_node (node);
+               length--;
        }
        g_clear_object (&collection);
 
        collection = webkit_dom_element_get_elements_by_class_name_as_html_collection (
                WEBKIT_DOM_ELEMENT (source), "-x-evo-quoted");
-       length = webkit_dom_html_collection_get_length (collection);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;) {
                WebKitDOMNode *quoted_node;
                gchar *text_content;
 
@@ -7543,8 +7519,7 @@ process_node_to_html_for_exporting (EEditorPage *editor_page,
        /* Images */
        list = webkit_dom_element_query_selector_all (
                WEBKIT_DOM_ELEMENT (source), ".-x-evo-resizable-wrapper:not(.-x-evo-smiley-wrapper)", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *node, *image;
 
                node = webkit_dom_node_list_item (list, ii);
@@ -7583,8 +7558,7 @@ process_node_to_html_for_exporting (EEditorPage *editor_page,
        /* Smileys */
        collection = webkit_dom_element_get_elements_by_class_name_as_html_collection (
                WEBKIT_DOM_ELEMENT (source), "-x-evo-smiley-wrapper");
-       length = webkit_dom_html_collection_get_length (collection);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;) {
                WebKitDOMNode *node;
                WebKitDOMElement *img;
 
@@ -7604,8 +7578,7 @@ process_node_to_html_for_exporting (EEditorPage *editor_page,
 
        collection = webkit_dom_element_get_elements_by_tag_name_as_html_collection (
                WEBKIT_DOM_ELEMENT (source), "pre");
-       length = webkit_dom_html_collection_get_length (collection);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;) {
                WebKitDOMNode *node;
 
                node = webkit_dom_html_collection_item (collection, ii);
@@ -7615,8 +7588,7 @@ process_node_to_html_for_exporting (EEditorPage *editor_page,
 
        list = webkit_dom_element_query_selector_all (
                WEBKIT_DOM_ELEMENT (source), "[data-evo-paragraph]", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *node;
 
                node = webkit_dom_node_list_item (list, ii);
@@ -7627,8 +7599,7 @@ process_node_to_html_for_exporting (EEditorPage *editor_page,
 
        collection = webkit_dom_element_get_elements_by_class_name_as_html_collection (
                WEBKIT_DOM_ELEMENT (source), "-x-evo-wrap-br");
-       length = webkit_dom_html_collection_get_length (collection);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;) {
                WebKitDOMNode *node;
 
                node = webkit_dom_html_collection_item (collection, ii);
@@ -7638,8 +7609,7 @@ process_node_to_html_for_exporting (EEditorPage *editor_page,
 
        list = webkit_dom_element_query_selector_all (
                WEBKIT_DOM_ELEMENT (source), "#-x-evo-main-cite", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *node;
 
                node = webkit_dom_node_list_item (list, ii);
@@ -7660,14 +7630,12 @@ remove_image_attributes_from_element (WebKitDOMElement *element)
 static void
 remove_background_images_in_element (WebKitDOMElement *element)
 {
-       gint length, ii;
+       gint ii;
        WebKitDOMNodeList *images = NULL;
 
        images = webkit_dom_element_query_selector_all (
                element, "[background][data-inline]", NULL);
-
-       length = webkit_dom_node_list_get_length (images);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (images); ii--;) {
                WebKitDOMElement *image = WEBKIT_DOM_ELEMENT (
                        webkit_dom_node_list_item (images, ii));
 
@@ -7681,14 +7649,12 @@ remove_background_images_in_element (WebKitDOMElement *element)
 static void
 remove_images_in_element (WebKitDOMElement *element)
 {
-       gint length, ii;
+       gint ii;
        WebKitDOMNodeList *images = NULL;
 
        images = webkit_dom_element_query_selector_all (
                element, "img:not(.-x-evo-smiley-img)", NULL);
-
-       length = webkit_dom_node_list_get_length (images);
-       for (ii = 0; ii < length; ii++)
+       for (ii = webkit_dom_node_list_get_length (images); ii--;)
                remove_node (webkit_dom_node_list_item (images, ii));
        g_clear_object (&images);
 }
@@ -7706,7 +7672,6 @@ toggle_smileys (EEditorPage *editor_page)
        WebKitDOMDocument *document;
        WebKitDOMHTMLCollection *collection = NULL;
        gboolean html_mode;
-       gint length;
        gint ii;
 
        g_return_if_fail (E_IS_EDITOR_PAGE (editor_page));
@@ -7716,8 +7681,7 @@ toggle_smileys (EEditorPage *editor_page)
 
        collection = webkit_dom_document_get_elements_by_class_name_as_html_collection (
                document, "-x-evo-smiley-img");
-       length = webkit_dom_html_collection_get_length (collection);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;) {
                WebKitDOMNode *img = webkit_dom_html_collection_item (collection, ii);
                WebKitDOMElement *parent = webkit_dom_node_get_parent_element (img);
 
@@ -7734,15 +7698,13 @@ toggle_paragraphs_style_in_element (EEditorPage *editor_page,
                                     WebKitDOMElement *element,
                                     gboolean html_mode)
 {
-       gint ii, length;
+       gint ii;
        WebKitDOMNodeList *paragraphs = NULL;
 
        paragraphs = webkit_dom_element_query_selector_all (
                element, ":not(td) > [data-evo-paragraph]", NULL);
 
-       length = webkit_dom_node_list_get_length (paragraphs);
-
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (paragraphs); ii--;) {
                gchar *style;
                const gchar *css_align;
                WebKitDOMNode *node = webkit_dom_node_list_item (paragraphs, ii);
@@ -7828,7 +7790,7 @@ e_editor_dom_process_content_for_draft (EEditorPage *editor_page,
        WebKitDOMNode *document_element_clone;
        gboolean selection_saved = FALSE;
        gchar *content;
-       gint ii, length;
+       gint ii;
 
        g_return_val_if_fail (E_IS_EDITOR_PAGE (editor_page), NULL);
 
@@ -7851,8 +7813,7 @@ e_editor_dom_process_content_for_draft (EEditorPage *editor_page,
 
        list = webkit_dom_element_query_selector_all (
                WEBKIT_DOM_ELEMENT (document_element_clone), "a.-x-evo-visited-link", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *anchor;
 
                anchor = webkit_dom_node_list_item (list, ii);
@@ -7862,8 +7823,7 @@ e_editor_dom_process_content_for_draft (EEditorPage *editor_page,
 
        list = webkit_dom_element_query_selector_all (
                WEBKIT_DOM_ELEMENT (document_element_clone), "#-x-evo-input-start", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *node;
 
                node = webkit_dom_node_list_item (list, ii);
@@ -7913,7 +7873,7 @@ static void
 toggle_indented_elements (EEditorPage *editor_page)
 {
        gboolean html_mode;
-       gint ii, length;
+       gint ii;
        WebKitDOMDocument *document;
        WebKitDOMHTMLCollection *collection = NULL;
 
@@ -7923,8 +7883,7 @@ toggle_indented_elements (EEditorPage *editor_page)
        html_mode = e_editor_page_get_html_mode (editor_page);
        collection = webkit_dom_document_get_elements_by_class_name_as_html_collection (
                document, "-x-evo-indented");
-       length = webkit_dom_html_collection_get_length (collection);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;) {
                WebKitDOMNode *node = webkit_dom_html_collection_item (collection, ii);
 
                if (html_mode)
@@ -7968,16 +7927,15 @@ wrap_paragraphs_in_quoted_content (EEditorPage *editor_page)
 {
        WebKitDOMDocument *document;
        WebKitDOMNodeList *paragraphs = NULL;
-       gint ii, length;
+       gint ii;
 
        g_return_if_fail (E_IS_EDITOR_PAGE (editor_page));
 
        document = e_editor_page_get_document (editor_page);
+
        paragraphs = webkit_dom_document_query_selector_all (
                document, "blockquote[type=cite] > [data-evo-paragraph]", NULL);
-
-       length = webkit_dom_node_list_get_length (paragraphs);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (paragraphs); ii--;) {
                WebKitDOMNode *paragraph;
 
                paragraph = webkit_dom_node_list_item (paragraphs, ii);
@@ -8043,7 +8001,7 @@ e_editor_dom_process_content_to_plain_text_for_exporting (EEditorPage *editor_pa
        WebKitDOMDOMWindow *dom_window = NULL;
        WebKitDOMDOMSelection *dom_selection = NULL;
        gboolean wrap = TRUE, quote = FALSE, remove_last_new_line = FALSE;
-       gint length, ii;
+       gint ii;
        GString *plain_text;
 
        g_return_val_if_fail (E_IS_EDITOR_PAGE (editor_page), NULL);
@@ -8077,9 +8035,7 @@ e_editor_dom_process_content_to_plain_text_for_exporting (EEditorPage *editor_pa
 
                        list = webkit_dom_element_query_selector_all (
                                wrapper, "#-x-evo-input-start", NULL);
-
-                       length = webkit_dom_node_list_get_length (list);
-                       for (ii = 0; ii < length; ii++) {
+                       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                                WebKitDOMNode *paragraph;
 
                                paragraph = webkit_dom_node_list_item (list, ii);
@@ -8093,9 +8049,7 @@ e_editor_dom_process_content_to_plain_text_for_exporting (EEditorPage *editor_pa
 
                        list = webkit_dom_element_query_selector_all (
                                wrapper, "[data-evo-html-to-plain-text-wrapper] > :matches(ul, ol)", NULL);
-
-                       length = webkit_dom_node_list_get_length (list);
-                       for (ii = 0; ii < length; ii++) {
+                       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                                WebKitDOMElement *list_pre;
                                WebKitDOMNode *item;
                                GString *list_plain_text;
@@ -8155,8 +8109,7 @@ e_editor_dom_process_content_to_plain_text_for_exporting (EEditorPage *editor_pa
        g_clear_object (&dom_window);
        g_clear_object (&dom_selection);
 
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *paragraph;
 
                paragraph = webkit_dom_node_list_item (list, ii);
@@ -8219,13 +8172,12 @@ restore_image (WebKitDOMDocument *document,
                const gchar *element_src)
 {
        gchar *selector;
-       gint length, ii;
+       gint ii;
        WebKitDOMNodeList *list = NULL;
 
        selector = g_strconcat ("[data-inline][background=\"cid:", id, "\"]", NULL);
        list = webkit_dom_document_query_selector_all (document, selector, NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMElement *element = WEBKIT_DOM_ELEMENT (
                        webkit_dom_node_list_item (list, ii));
 
@@ -8236,8 +8188,7 @@ restore_image (WebKitDOMDocument *document,
 
        selector = g_strconcat ("[data-inline][src=\"cid:", id, "\"]", NULL);
        list = webkit_dom_document_query_selector_all (document, selector, NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMElement *element = WEBKIT_DOM_ELEMENT (
                        webkit_dom_node_list_item (list, ii));
 
@@ -8274,7 +8225,7 @@ e_editor_dom_process_content_to_html_for_exporting (EEditorPage *editor_page)
        WebKitDOMNode *node, *document_clone;
        WebKitDOMNodeList *list = NULL;
        GSettings *settings;
-       gint ii, length;
+       gint ii;
        gchar *html_content;
        gboolean send_editor_colors = FALSE;
 
@@ -8327,15 +8278,13 @@ e_editor_dom_process_content_to_html_for_exporting (EEditorPage *editor_page)
 
        list = webkit_dom_element_query_selector_all (
                WEBKIT_DOM_ELEMENT (node), "span[data-hidden-space]", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++)
+       for (ii = webkit_dom_node_list_get_length (list); ii--;)
                remove_node (webkit_dom_node_list_item (list, ii));
        g_clear_object (&list);
 
        list = webkit_dom_element_query_selector_all (
                WEBKIT_DOM_ELEMENT (node), "[data-style]", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *data_style_node;
 
                data_style_node = webkit_dom_node_list_item (list, ii);
@@ -8452,8 +8401,7 @@ change_cid_images_src_to_base64 (EEditorPage *editor_page)
        document_element = webkit_dom_document_get_document_element (document);
 
        list = webkit_dom_document_query_selector_all (document, "img[src^=\"cid:\"]", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
 
                set_base64_to_element_attribute (inline_images, WEBKIT_DOM_ELEMENT (node), "src");
@@ -8473,12 +8421,11 @@ change_cid_images_src_to_base64 (EEditorPage *editor_page)
                        const gchar *ns = name + 6;
                        gchar *attribute_ns = g_strconcat (ns, ":src", NULL);
                        gchar *selector = g_strconcat ("img[", ns, "\\:src^=\"cid:\"]", NULL);
-                       gint ns_length, jj;
+                       gint jj;
 
                        list = webkit_dom_document_query_selector_all (
                                document, selector, NULL);
-                       ns_length = webkit_dom_node_list_get_length (list);
-                       for (jj = 0; jj < ns_length; jj++) {
+                       for (jj = webkit_dom_node_list_get_length (list) - 1; jj--;) {
                                WebKitDOMNode *node = webkit_dom_node_list_item (list, jj);
 
                                set_base64_to_element_attribute (
@@ -8495,8 +8442,7 @@ change_cid_images_src_to_base64 (EEditorPage *editor_page)
 
        list = webkit_dom_document_query_selector_all (
                document, "[background^=\"cid:\"]", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
 
                set_base64_to_element_attribute (
@@ -8509,12 +8455,11 @@ static void
 adapt_to_editor_dom_changes (WebKitDOMDocument *document)
 {
        WebKitDOMHTMLCollection *collection = NULL;
-       gint ii, length;
+       gint ii;
 
        /* 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");
-       length = webkit_dom_html_collection_get_length (collection);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;) {
                WebKitDOMNode *node;
 
                node = webkit_dom_html_collection_item (collection, ii);
@@ -8653,7 +8598,7 @@ e_editor_dom_get_inline_images_data (EEditorPage *editor_page,
        builder = g_variant_builder_new (G_VARIANT_TYPE ("a(sss)"));
 
        added = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = length; ii--;) {
                const gchar *id;
                gchar *cid = NULL;
                WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
@@ -8699,7 +8644,7 @@ e_editor_dom_get_inline_images_data (EEditorPage *editor_page,
        if (!added)
                added = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
 
-       for (ii = 0; ii < length; ii++) {
+       for (ii = length; ii--;) {
                const gchar *id;
                gchar *cid = NULL;
                WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
@@ -8887,7 +8832,7 @@ e_editor_dom_insert_html (EEditorPage *editor_page,
                        if (length > 0)
                                e_editor_dom_selection_save (editor_page);
 
-                       for (ii = 0; ii < length; ii++) {
+                       for (ii = length; ii--;) {
                                WebKitDOMNode *span, *child;
 
                                span = webkit_dom_node_list_item (list, ii);
@@ -10867,7 +10812,7 @@ e_editor_dom_save_history_for_drop (EEditorPage *editor_page)
                if (length > 0)
                        e_editor_dom_selection_save (editor_page);
 
-               for (ii = 0; ii < length; ii++) {
+               for (ii = length; ii--;) {
                        WebKitDOMNode *span, *child;
 
                        span = webkit_dom_node_list_item (list, ii);
@@ -10966,7 +10911,7 @@ e_editor_dom_fix_file_uri_images (EEditorPage *editor_page)
 {
        WebKitDOMDocument *document;
        WebKitDOMNodeList *list = NULL;
-       gint ii, length;
+       gint ii;
 
        g_return_if_fail (E_IS_EDITOR_PAGE (editor_page));
 
@@ -10974,9 +10919,7 @@ e_editor_dom_fix_file_uri_images (EEditorPage *editor_page)
 
        list = webkit_dom_document_query_selector_all (
                document, "img[src^=\"file://\"]", NULL);
-       length = webkit_dom_node_list_get_length (list);
-
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *node;
                gchar *uri;
 
@@ -12302,7 +12245,7 @@ e_editor_dom_selection_indent (EEditorPage *editor_page)
                                goto next;
                }
 
-               for (ii = 0; ii < length; ii++) {
+               for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                        WebKitDOMNode *block_to_process;
 
                        block_to_process = webkit_dom_node_list_item (list, ii);
@@ -13259,13 +13202,12 @@ wrap_lines (EEditorPage *editor_page,
                        nd = next_nd;
                }
        } else {
-               gint ii, length;
+               gint ii;
                WebKitDOMNodeList *list = NULL;
 
                list = webkit_dom_element_query_selector_all (
                        WEBKIT_DOM_ELEMENT (block_clone), "span[data-hidden-space]", NULL);
-               length = webkit_dom_node_list_get_length (list);
-               for (ii = 0; ii < length; ii++) {
+               for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                        WebKitDOMNode *hidden_space_node;
 
                        hidden_space_node = webkit_dom_node_list_item (list, ii);
@@ -13806,14 +13748,13 @@ void
 e_editor_dom_remove_wrapping_from_element (WebKitDOMElement *element)
 {
        WebKitDOMNodeList *list = NULL;
-       gint ii, length;
+       gint ii;
 
        g_return_if_fail (element != NULL);
 
        list = webkit_dom_element_query_selector_all (
                element, "br.-x-evo-wrap-br", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
                WebKitDOMNode *parent;
 
@@ -13826,8 +13767,7 @@ e_editor_dom_remove_wrapping_from_element (WebKitDOMElement *element)
 
        list = webkit_dom_element_query_selector_all (
                element, "span[data-hidden-space]", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *hidden_space_node;
                WebKitDOMNode *parent;
 
@@ -13846,25 +13786,21 @@ e_editor_dom_remove_wrapping_from_element (WebKitDOMElement *element)
 void
 e_editor_dom_remove_quoting_from_element (WebKitDOMElement *element)
 {
-       gint ii, length;
+       gint ii;
        WebKitDOMHTMLCollection *collection = NULL;
 
        g_return_if_fail (element != NULL);
 
        collection = webkit_dom_element_get_elements_by_class_name_as_html_collection (
                element, "-x-evo-quoted");
-       length = webkit_dom_html_collection_get_length (collection);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;)
                remove_node (webkit_dom_html_collection_item (collection, ii));
-       }
        g_clear_object (&collection);
 
        collection = webkit_dom_element_get_elements_by_class_name_as_html_collection (
                element, "-x-evo-temp-br");
-       length = webkit_dom_html_collection_get_length (collection);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_html_collection_get_length (collection); ii--;)
                remove_node (webkit_dom_html_collection_item (collection, ii));
-       }
        g_clear_object (&collection);
 
        webkit_dom_node_normalize (WEBKIT_DOM_NODE (element));
@@ -14068,7 +14004,7 @@ e_editor_dom_wrap_paragraphs_in_document (EEditorPage *editor_page)
 {
        WebKitDOMDocument *document;
        WebKitDOMNodeList *list = NULL;
-       gint ii, length;
+       gint ii;
 
        g_return_if_fail (E_IS_EDITOR_PAGE (editor_page));
 
@@ -14076,9 +14012,7 @@ e_editor_dom_wrap_paragraphs_in_document (EEditorPage *editor_page)
        list = webkit_dom_document_query_selector_all (
                document, "[data-evo-paragraph]:not(#-x-evo-input-start)", NULL);
 
-       length = webkit_dom_node_list_get_length (list);
-
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                gint word_wrap_length, quote, citation_level;
                WebKitDOMNode *node = webkit_dom_node_list_item (list, ii);
 
@@ -14811,7 +14745,7 @@ monospace_selection (EEditorPage *editor_page,
        WebKitDOMNodeList *list = NULL;
        gboolean selection_end = FALSE;
        gboolean first = TRUE;
-       gint length, ii;
+       gint ii;
 
        g_return_if_fail (E_IS_EDITOR_PAGE (editor_page));
 
@@ -14904,8 +14838,7 @@ monospace_selection (EEditorPage *editor_page,
        /* Merge all the monospace elements inside other monospace elements. */
        list = webkit_dom_document_query_selector_all (
                document, "font[face=monospace] > font[face=monospace]", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *item;
                WebKitDOMNode *child;
 
@@ -14924,8 +14857,7 @@ monospace_selection (EEditorPage *editor_page,
        /* Merge all the adjacent monospace elements. */
        list = webkit_dom_document_query_selector_all (
                document, "font[face=monospace] + font[face=monospace]", NULL);
-       length = webkit_dom_node_list_get_length (list);
-       for (ii = 0; ii < length; ii++) {
+       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                WebKitDOMNode *item;
                WebKitDOMNode *child;
 
@@ -17005,16 +16937,14 @@ e_editor_dom_selection_set_alignment (EEditorPage *editor_page,
                        block, WEBKIT_DOM_NODE (selection_end_marker));
 
                if (element_has_class (WEBKIT_DOM_ELEMENT (block), "-x-evo-indented")) {
-                       gint ii, length;
+                       gint ii;
                        WebKitDOMNodeList *list = NULL;
 
                        list = webkit_dom_element_query_selector_all (
                                WEBKIT_DOM_ELEMENT (block),
                                ".-x-evo-indented > *:not(.-x-evo-indented):not(li)",
                                NULL);
-                       length = webkit_dom_node_list_get_length (list);
-
-                       for (ii = 0; ii < length; ii++) {
+                       for (ii = webkit_dom_node_list_get_length (list); ii--;) {
                                WebKitDOMNode *item = webkit_dom_node_list_item (list, ii);
 
                                set_block_alignment (WEBKIT_DOM_ELEMENT (item), class);



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