aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorManuel Rego Casasnovas <rego@igalia.com>2013-02-25 18:58:40 +0800
committerClaudio Saavedra <csaavedra@igalia.com>2013-02-28 15:07:53 +0800
commit236494702aa8dab1af7992e8f82e1420372fff15 (patch)
tree55c3716ec5746d92055d6ff71132ff2c2b2d4ac5 /lib
parent6753ea9b24f5a46f3b96132dc43c89fdfa281e03 (diff)
downloadgsoc2013-epiphany-236494702aa8dab1af7992e8f82e1420372fff15.tar
gsoc2013-epiphany-236494702aa8dab1af7992e8f82e1420372fff15.tar.gz
gsoc2013-epiphany-236494702aa8dab1af7992e8f82e1420372fff15.tar.bz2
gsoc2013-epiphany-236494702aa8dab1af7992e8f82e1420372fff15.tar.lz
gsoc2013-epiphany-236494702aa8dab1af7992e8f82e1420372fff15.tar.xz
gsoc2013-epiphany-236494702aa8dab1af7992e8f82e1420372fff15.tar.zst
gsoc2013-epiphany-236494702aa8dab1af7992e8f82e1420372fff15.zip
Create ephy-web-dom-utils for sharing DOM bindings code between WK1 and WK2
https://bugzilla.gnome.org/show_bug.cgi?id=694659
Diffstat (limited to 'lib')
-rw-r--r--lib/Makefile.am2
-rw-r--r--lib/ephy-web-dom-utils.c98
-rw-r--r--lib/ephy-web-dom-utils.h40
3 files changed, 140 insertions, 0 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 7f9b69c94..e7d039ba0 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -24,6 +24,7 @@ NOINST_H_FILES = \
ephy-snapshot-service.h \
ephy-time-helpers.h \
ephy-web-app-utils.h \
+ ephy-web-dom-utils.h \
ephy-zoom.h
TYPES_H_FILES = \
@@ -65,6 +66,7 @@ libephymisc_la_SOURCES = \
ephy-string.c \
ephy-time-helpers.c \
ephy-web-app-utils.c \
+ ephy-web-dom-utils.c \
ephy-zoom.c \
$(INST_H_FILES) \
$(NOINST_H_FILES)
diff --git a/lib/ephy-web-dom-utils.c b/lib/ephy-web-dom-utils.c
new file mode 100644
index 000000000..52fb6766e
--- /dev/null
+++ b/lib/ephy-web-dom-utils.c
@@ -0,0 +1,98 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set sw=2 ts=2 sts=2 et: */
+/*
+ * Copyright © 2013 Igalia S.L.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "ephy-web-dom-utils.h"
+
+#ifdef HAVE_WEBKIT2
+#include <webkit2/webkit2.h>
+#include <webkit2/webkit-web-extension.h>
+#else
+#include <webkit/webkit.h>
+#endif
+
+/**
+ * ephy_web_dom_has_modified_forms:
+ * @document: the DOM document to check if there are or not modified forms.
+ *
+ * A small heuristic is used here. If there's only one input element modified
+ * and it does not have a lot of text the user is likely not very interested in
+ * saving this work, so it returns %FALSE in this case (eg, google search
+ * input).
+ *
+ * Returns %TRUE if the user has modified &lt;input&gt; or &lt;textarea&gt;
+ * values in the @document.
+ **/
+gboolean
+ephy_web_dom_has_modified_forms (WebKitDOMDocument *document)
+{
+ WebKitDOMHTMLCollection *forms;
+ gulong forms_n;
+ int i;
+
+ forms = webkit_dom_document_get_forms (document);
+ forms_n = webkit_dom_html_collection_get_length (forms);
+
+ for (i = 0; i < forms_n; i++) {
+ WebKitDOMHTMLCollection *elements;
+ WebKitDOMNode *form_element = webkit_dom_html_collection_item (forms, i);
+ gulong elements_n;
+ int j;
+ gboolean modified_input_element = FALSE;
+
+ elements = webkit_dom_html_form_element_get_elements (WEBKIT_DOM_HTML_FORM_ELEMENT (form_element));
+ elements_n = webkit_dom_html_collection_get_length (elements);
+
+ for (j = 0; j < elements_n; j++) {
+ WebKitDOMNode *element;
+
+ element = webkit_dom_html_collection_item (elements, j);
+
+ if (WEBKIT_DOM_IS_HTML_TEXT_AREA_ELEMENT (element))
+ if (webkit_dom_html_text_area_element_is_edited (WEBKIT_DOM_HTML_TEXT_AREA_ELEMENT (element)))
+ return TRUE;
+
+ if (WEBKIT_DOM_IS_HTML_INPUT_ELEMENT (element))
+ if (webkit_dom_html_input_element_is_edited (WEBKIT_DOM_HTML_INPUT_ELEMENT (element))) {
+ glong length;
+ char *text;
+
+ /* A small heuristic here. If there's only one input element
+ * modified and it does not have a lot of text the user is
+ * likely not very interested in saving this work, so do
+ * nothing (eg, google search input). */
+ if (modified_input_element)
+ return TRUE;
+
+ modified_input_element = TRUE;
+
+ text = webkit_dom_html_input_element_get_value (WEBKIT_DOM_HTML_INPUT_ELEMENT (element));
+ length = g_utf8_strlen (text, -1);
+ g_free (text);
+
+ if (length > 50)
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+}
diff --git a/lib/ephy-web-dom-utils.h b/lib/ephy-web-dom-utils.h
new file mode 100644
index 000000000..b5dbd255c
--- /dev/null
+++ b/lib/ephy-web-dom-utils.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright © 2013 Igalia S.L.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#if !defined (__EPHY_EPIPHANY_H_INSIDE__) && !defined (EPIPHANY_COMPILATION)
+#error "Only <epiphany/epiphany.h> can be included directly."
+#endif
+
+#ifndef EPHY_WEB_DOM_UTILS_H
+#define EPHY_WEB_DOM_UTILS_H
+
+#ifdef HAVE_WEBKIT2
+#include <webkit2/webkit2.h>
+#include <webkit2/webkit-web-extension.h>
+#else
+#include <webkit/webkit.h>
+#endif
+
+G_BEGIN_DECLS
+
+gboolean ephy_web_dom_has_modified_forms (WebKitDOMDocument *document);
+
+G_END_DECLS
+
+#endif