diff options
author | Manuel Rego Casasnovas <rego@igalia.com> | 2013-02-25 18:58:40 +0800 |
---|---|---|
committer | Claudio Saavedra <csaavedra@igalia.com> | 2013-02-28 15:07:53 +0800 |
commit | 236494702aa8dab1af7992e8f82e1420372fff15 (patch) | |
tree | 55c3716ec5746d92055d6ff71132ff2c2b2d4ac5 /lib | |
parent | 6753ea9b24f5a46f3b96132dc43c89fdfa281e03 (diff) | |
download | gsoc2013-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.am | 2 | ||||
-rw-r--r-- | lib/ephy-web-dom-utils.c | 98 | ||||
-rw-r--r-- | lib/ephy-web-dom-utils.h | 40 |
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 <input> or <textarea> + * 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 |