netsurf: branch master updated. release/3.6-219-g108cc0c
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/108cc0cebdca9a3300c9b...
...commit http://git.netsurf-browser.org/netsurf.git/commit/108cc0cebdca9a3300c9b52...
...tree http://git.netsurf-browser.org/netsurf.git/tree/108cc0cebdca9a3300c9b524d...
The branch, master has been updated
via 108cc0cebdca9a3300c9b524d3409eb10fa09b05 (commit)
from 10f1b7a1aaec183defb6ae724576910494026954 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=108cc0cebdca9a3300c...
commit 108cc0cebdca9a3300c9b524d3409eb10fa09b05
Author: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Commit: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Support fixed nsgenbind bindings
diff --git a/content/handlers/javascript/duktape/dukky.c b/content/handlers/javascript/duktape/dukky.c
index 1282ad9..66d1b05 100644
--- a/content/handlers/javascript/duktape/dukky.c
+++ b/content/handlers/javascript/duktape/dukky.c
@@ -895,7 +895,8 @@ static void dukky_generic_event_handler(dom_event *evt, void *pw)
void dukky_register_event_listener_for(duk_context *ctx,
struct dom_element *ele,
- dom_string *name)
+ dom_string *name,
+ bool capture)
{
dom_event_listener *listen = NULL;
dom_exception exc;
@@ -927,7 +928,7 @@ void dukky_register_event_listener_for(duk_context *ctx,
&listen);
if (exc != DOM_NO_ERR) return;
exc = dom_event_target_add_event_listener(
- ele, name, listen, false);
+ ele, name, listen, capture);
if (exc != DOM_NO_ERR) {
LOG("Unable to register listener for %p.%*s",
ele, dom_string_length(name), dom_string_data(name));
@@ -995,7 +996,7 @@ void js_handle_new_element(jscontext *ctx, struct dom_element *node)
&sub);
if (exc == DOM_NO_ERR) {
dukky_register_event_listener_for(
- CTX, node, sub);
+ CTX, node, sub, false);
dom_string_unref(sub);
}
}
diff --git a/content/handlers/javascript/duktape/dukky.h b/content/handlers/javascript/duktape/dukky.h
index 0c3ff0e..1d6baee 100644
--- a/content/handlers/javascript/duktape/dukky.h
+++ b/content/handlers/javascript/duktape/dukky.h
@@ -37,7 +37,8 @@ duk_bool_t dukky_push_node(duk_context *ctx, struct dom_node *node);
void dukky_inject_not_ctr(duk_context *ctx, int idx, const char *name);
void dukky_register_event_listener_for(duk_context *ctx,
struct dom_element *ele,
- dom_string *name);
+ dom_string *name,
+ bool capture);
bool dukky_get_current_value_of_event_handler(duk_context *ctx,
dom_string *name,
dom_event_target *et);
diff --git a/utils/corestrings.c b/utils/corestrings.c
index 363c851..87a3423 100644
--- a/utils/corestrings.c
+++ b/utils/corestrings.c
@@ -277,6 +277,14 @@ dom_string *corestring_dom_onfocus;
dom_string *corestring_dom_onload;
dom_string *corestring_dom_onresize;
dom_string *corestring_dom_onscroll;
+dom_string *corestring_dom_autocomplete;
+dom_string *corestring_dom_autocompleteerror;
+dom_string *corestring_dom_dragexit;
+dom_string *corestring_dom_mouseenter;
+dom_string *corestring_dom_mouseleave;
+dom_string *corestring_dom_wheel;
+dom_string *corestring_dom_sort;
+dom_string *corestring_dom_toggle;
dom_string *corestring_dom___ns_key_box_node_data;
dom_string *corestring_dom___ns_key_libcss_node_data;
dom_string *corestring_dom___ns_key_file_name_node_data;
@@ -563,6 +571,15 @@ void corestrings_fini(void)
CSS_DOM_STRING_UNREF(onload);
CSS_DOM_STRING_UNREF(onresize);
CSS_DOM_STRING_UNREF(onscroll);
+ /* Corestrings used by DOM event registration */
+ CSS_DOM_STRING_UNREF(autocomplete);
+ CSS_DOM_STRING_UNREF(autocompleteerror);
+ CSS_DOM_STRING_UNREF(dragexit);
+ CSS_DOM_STRING_UNREF(mouseenter);
+ CSS_DOM_STRING_UNREF(mouseleave);
+ CSS_DOM_STRING_UNREF(wheel);
+ CSS_DOM_STRING_UNREF(sort);
+ CSS_DOM_STRING_UNREF(toggle);
/* DOM userdata keys, not really CSS */
CSS_DOM_STRING_UNREF(__ns_key_box_node_data);
CSS_DOM_STRING_UNREF(__ns_key_libcss_node_data);
@@ -894,6 +911,15 @@ nserror corestrings_init(void)
CSS_DOM_STRING_INTERN(onload);
CSS_DOM_STRING_INTERN(onresize);
CSS_DOM_STRING_INTERN(onscroll);
+ /* Corestrings used by DOM event registration */
+ CSS_DOM_STRING_INTERN(autocomplete);
+ CSS_DOM_STRING_INTERN(autocompleteerror);
+ CSS_DOM_STRING_INTERN(dragexit);
+ CSS_DOM_STRING_INTERN(mouseenter);
+ CSS_DOM_STRING_INTERN(mouseleave);
+ CSS_DOM_STRING_INTERN(wheel);
+ CSS_DOM_STRING_INTERN(sort);
+ CSS_DOM_STRING_INTERN(toggle);
/* DOM userdata keys, not really CSS */
CSS_DOM_STRING_INTERN(__ns_key_box_node_data);
CSS_DOM_STRING_INTERN(__ns_key_libcss_node_data);
diff --git a/utils/corestrings.h b/utils/corestrings.h
index a02bdda..88dc2ce 100644
--- a/utils/corestrings.h
+++ b/utils/corestrings.h
@@ -295,7 +295,15 @@ extern struct dom_string *corestring_dom_onfocus;
extern struct dom_string *corestring_dom_onload;
extern struct dom_string *corestring_dom_onresize;
extern struct dom_string *corestring_dom_onscroll;
-
+/* Corestrings used by DOM event registration */
+extern struct dom_string *corestring_dom_autocomplete;
+extern struct dom_string *corestring_dom_autocompleteerror;
+extern struct dom_string *corestring_dom_dragexit;
+extern struct dom_string *corestring_dom_mouseenter;
+extern struct dom_string *corestring_dom_mouseleave;
+extern struct dom_string *corestring_dom_wheel;
+extern struct dom_string *corestring_dom_sort;
+extern struct dom_string *corestring_dom_toggle;
/* DOM userdata keys */
extern struct dom_string *corestring_dom___ns_key_box_node_data;
extern struct dom_string *corestring_dom___ns_key_libcss_node_data;
-----------------------------------------------------------------------
Summary of changes:
content/handlers/javascript/duktape/dukky.c | 7 ++++---
content/handlers/javascript/duktape/dukky.h | 3 ++-
utils/corestrings.c | 26 ++++++++++++++++++++++++++
utils/corestrings.h | 10 +++++++++-
4 files changed, 41 insertions(+), 5 deletions(-)
diff --git a/content/handlers/javascript/duktape/dukky.c b/content/handlers/javascript/duktape/dukky.c
index 1282ad9..66d1b05 100644
--- a/content/handlers/javascript/duktape/dukky.c
+++ b/content/handlers/javascript/duktape/dukky.c
@@ -895,7 +895,8 @@ static void dukky_generic_event_handler(dom_event *evt, void *pw)
void dukky_register_event_listener_for(duk_context *ctx,
struct dom_element *ele,
- dom_string *name)
+ dom_string *name,
+ bool capture)
{
dom_event_listener *listen = NULL;
dom_exception exc;
@@ -927,7 +928,7 @@ void dukky_register_event_listener_for(duk_context *ctx,
&listen);
if (exc != DOM_NO_ERR) return;
exc = dom_event_target_add_event_listener(
- ele, name, listen, false);
+ ele, name, listen, capture);
if (exc != DOM_NO_ERR) {
LOG("Unable to register listener for %p.%*s",
ele, dom_string_length(name), dom_string_data(name));
@@ -995,7 +996,7 @@ void js_handle_new_element(jscontext *ctx, struct dom_element *node)
&sub);
if (exc == DOM_NO_ERR) {
dukky_register_event_listener_for(
- CTX, node, sub);
+ CTX, node, sub, false);
dom_string_unref(sub);
}
}
diff --git a/content/handlers/javascript/duktape/dukky.h b/content/handlers/javascript/duktape/dukky.h
index 0c3ff0e..1d6baee 100644
--- a/content/handlers/javascript/duktape/dukky.h
+++ b/content/handlers/javascript/duktape/dukky.h
@@ -37,7 +37,8 @@ duk_bool_t dukky_push_node(duk_context *ctx, struct dom_node *node);
void dukky_inject_not_ctr(duk_context *ctx, int idx, const char *name);
void dukky_register_event_listener_for(duk_context *ctx,
struct dom_element *ele,
- dom_string *name);
+ dom_string *name,
+ bool capture);
bool dukky_get_current_value_of_event_handler(duk_context *ctx,
dom_string *name,
dom_event_target *et);
diff --git a/utils/corestrings.c b/utils/corestrings.c
index 363c851..87a3423 100644
--- a/utils/corestrings.c
+++ b/utils/corestrings.c
@@ -277,6 +277,14 @@ dom_string *corestring_dom_onfocus;
dom_string *corestring_dom_onload;
dom_string *corestring_dom_onresize;
dom_string *corestring_dom_onscroll;
+dom_string *corestring_dom_autocomplete;
+dom_string *corestring_dom_autocompleteerror;
+dom_string *corestring_dom_dragexit;
+dom_string *corestring_dom_mouseenter;
+dom_string *corestring_dom_mouseleave;
+dom_string *corestring_dom_wheel;
+dom_string *corestring_dom_sort;
+dom_string *corestring_dom_toggle;
dom_string *corestring_dom___ns_key_box_node_data;
dom_string *corestring_dom___ns_key_libcss_node_data;
dom_string *corestring_dom___ns_key_file_name_node_data;
@@ -563,6 +571,15 @@ void corestrings_fini(void)
CSS_DOM_STRING_UNREF(onload);
CSS_DOM_STRING_UNREF(onresize);
CSS_DOM_STRING_UNREF(onscroll);
+ /* Corestrings used by DOM event registration */
+ CSS_DOM_STRING_UNREF(autocomplete);
+ CSS_DOM_STRING_UNREF(autocompleteerror);
+ CSS_DOM_STRING_UNREF(dragexit);
+ CSS_DOM_STRING_UNREF(mouseenter);
+ CSS_DOM_STRING_UNREF(mouseleave);
+ CSS_DOM_STRING_UNREF(wheel);
+ CSS_DOM_STRING_UNREF(sort);
+ CSS_DOM_STRING_UNREF(toggle);
/* DOM userdata keys, not really CSS */
CSS_DOM_STRING_UNREF(__ns_key_box_node_data);
CSS_DOM_STRING_UNREF(__ns_key_libcss_node_data);
@@ -894,6 +911,15 @@ nserror corestrings_init(void)
CSS_DOM_STRING_INTERN(onload);
CSS_DOM_STRING_INTERN(onresize);
CSS_DOM_STRING_INTERN(onscroll);
+ /* Corestrings used by DOM event registration */
+ CSS_DOM_STRING_INTERN(autocomplete);
+ CSS_DOM_STRING_INTERN(autocompleteerror);
+ CSS_DOM_STRING_INTERN(dragexit);
+ CSS_DOM_STRING_INTERN(mouseenter);
+ CSS_DOM_STRING_INTERN(mouseleave);
+ CSS_DOM_STRING_INTERN(wheel);
+ CSS_DOM_STRING_INTERN(sort);
+ CSS_DOM_STRING_INTERN(toggle);
/* DOM userdata keys, not really CSS */
CSS_DOM_STRING_INTERN(__ns_key_box_node_data);
CSS_DOM_STRING_INTERN(__ns_key_libcss_node_data);
diff --git a/utils/corestrings.h b/utils/corestrings.h
index a02bdda..88dc2ce 100644
--- a/utils/corestrings.h
+++ b/utils/corestrings.h
@@ -295,7 +295,15 @@ extern struct dom_string *corestring_dom_onfocus;
extern struct dom_string *corestring_dom_onload;
extern struct dom_string *corestring_dom_onresize;
extern struct dom_string *corestring_dom_onscroll;
-
+/* Corestrings used by DOM event registration */
+extern struct dom_string *corestring_dom_autocomplete;
+extern struct dom_string *corestring_dom_autocompleteerror;
+extern struct dom_string *corestring_dom_dragexit;
+extern struct dom_string *corestring_dom_mouseenter;
+extern struct dom_string *corestring_dom_mouseleave;
+extern struct dom_string *corestring_dom_wheel;
+extern struct dom_string *corestring_dom_sort;
+extern struct dom_string *corestring_dom_toggle;
/* DOM userdata keys */
extern struct dom_string *corestring_dom___ns_key_box_node_data;
extern struct dom_string *corestring_dom___ns_key_libcss_node_data;
--
NetSurf Browser
5 years, 11 months
nsgenbind: branch master updated. release/0.4-6-g63321d2
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/nsgenbind.git/shortlog/63321d2f21056c13fef...
...commit http://git.netsurf-browser.org/nsgenbind.git/commit/63321d2f21056c13fefcc...
...tree http://git.netsurf-browser.org/nsgenbind.git/tree/63321d2f21056c13fefcc43...
The branch, master has been updated
via 63321d2f21056c13fefcc436721a80067d0b6a74 (commit)
via 9eae2e271b700bbbf88e3888489dab5182814a46 (commit)
from a2ccd45a7048b98bd15e587378aa2eed3cd55e62 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
src/duk-libdom-common.c | 2 +-
src/duk-libdom-generated.c | 11 +++++++----
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/src/duk-libdom-common.c b/src/duk-libdom-common.c
index 6111070..c76f7a5 100644
--- a/src/duk-libdom-common.c
+++ b/src/duk-libdom-common.c
@@ -74,7 +74,7 @@ int output_ccode(FILE* outf, struct genbind_node *node)
NULL, GENBIND_NODE_TYPE_FILE));
if ((line != NULL) && (filename != NULL)) {
- fprintf(outf, "#line %d \"%s\"\n", *line, filename);
+ fprintf(outf, "/* #line %d \"%s\" */\n", *line, filename);
}
return output_cdata(outf, node, GENBIND_NODE_TYPE_CDATA);
diff --git a/src/duk-libdom-generated.c b/src/duk-libdom-generated.c
index 95f1833..637573c 100644
--- a/src/duk-libdom-generated.c
+++ b/src/duk-libdom-generated.c
@@ -226,17 +226,20 @@ output_generated_attribute_user_setter(FILE* outf,
"\tduk_get_prop_string(ctx, -1, HANDLER_MAGIC);\n"
"\t/* handlerfn this handlers */\n"
"\tduk_push_lstring(ctx, \"%s\", %ld);\n"
- "\t/* handlerfn this handlers click */\n"
+ "\t/* handlerfn this handlers %s */\n"
"\tduk_dup(ctx, -4);\n"
- "\t/* handlerfn this handlers click handlerfn */\n"
+ "\t/* handlerfn this handlers %s handlerfn */\n"
"\tduk_put_prop(ctx, -3);\n"
"\t/* handlerfn this handlers */\n"
"\tdukky_register_event_listener_for(ctx,\n"
"\t\t(dom_element *)((node_private_t *)priv)->node,\n"
- "\t\tcorestring_dom_click);\n"
+ "\t\tcorestring_dom_%s, false);\n"
"\treturn 0;\n",
atributee->name + 2,
- strlen(atributee->name + 2));
+ strlen(atributee->name + 2),
+ atributee->name + 2,
+ atributee->name + 2,
+ atributee->name + 2);
return 0;
}
return -1;
--
NetSurf Generator for JavaScript bindings
5 years, 11 months
netsurf: branch dsilvers/eventtarget updated. release/3.6-219-g9b640a0
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/9b640a0e989b92fce97aa...
...commit http://git.netsurf-browser.org/netsurf.git/commit/9b640a0e989b92fce97aa23...
...tree http://git.netsurf-browser.org/netsurf.git/tree/9b640a0e989b92fce97aa2342...
The branch, dsilvers/eventtarget has been updated
discards 3e49db5b651a6c424ee0bbcc5012973566b635e3 (commit)
discards d7c7ec5d4ad55819d61f8576249865269e3c9672 (commit)
discards a611c5757ea6d98cca41b2ad08bc5fde39ef48dd (commit)
discards 1d7514cd735e86adf929406dd20fd6675e7f1a9d (commit)
discards b49f0f9141a132679e9cdca944e72ebad80682ed (commit)
discards 7417da3a3452f3dac5eba0f79ce8f0610535cdb6 (commit)
discards 546ed22b553eb380e906816cdf81a0b267a79837 (commit)
discards 77eb3c576efeafd9dd4801487da5f868e80ab0d5 (commit)
discards bfde01c854284a9dcf1ae1e11639566c79cf8019 (commit)
discards 238d03fbe245b45e25033796b502b1ee3eab8e31 (commit)
discards ce43bc236847b51e7ca833ea76c237130c1d6209 (commit)
via 9b640a0e989b92fce97aa2342858a1acb104f1f2 (commit)
via 10f1b7a1aaec183defb6ae724576910494026954 (commit)
This update added new revisions after undoing existing revisions. That is
to say, the old revision is not a strict subset of the new revision. This
situation occurs when you --force push a change and generate a repository
containing something like this:
* -- * -- B -- O -- O -- O (3e49db5b651a6c424ee0bbcc5012973566b635e3)
\
N -- N -- N (9b640a0e989b92fce97aa2342858a1acb104f1f2)
When this happens we assume that you've already had alert emails for all
of the O revisions, and so we here report only the revisions in the N
branch from the common base, B.
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=9b640a0e989b92fce97...
commit 9b640a0e989b92fce97aa2342858a1acb104f1f2
Author: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Commit: Daniel Silverstone <dsilvers(a)digital-scurf.org>
splitme: clean all this up
diff --git a/Docs/UnimplementedJavascript.txt b/Docs/UnimplementedJavascript.txt
index 2b3a7d9..1b851b8 100644
--- a/Docs/UnimplementedJavascript.txt
+++ b/Docs/UnimplementedJavascript.txt
@@ -439,9 +439,6 @@ setter EventSource::onopen(user);\n
getter EventSource::readyState(unsigned short);\n
getter EventSource::url(string);\n
getter EventSource::withCredentials(boolean);\n
-method EventTarget::addEventListener();\n
-method EventTarget::dispatchEvent();\n
-method EventTarget::removeEventListener();\n
getter Event::timeStamp(user);\n
method External::AddSearchProvider();\n
method External::IsSearchProviderInstalled();\n
diff --git a/content/handlers/javascript/duktape/EventTarget.bnd b/content/handlers/javascript/duktape/EventTarget.bnd
new file mode 100644
index 0000000..fe78194
--- /dev/null
+++ b/content/handlers/javascript/duktape/EventTarget.bnd
@@ -0,0 +1,278 @@
+/* Event Target binding for browser using duktape and libdom
+ *
+ * Copyright 2016 Daniel Silverstone <dsilvers(a)digital-scurf.org>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * Released under the terms of the MIT License,
+ * http://www.opensource.org/licenses/mit-license
+ */
+
+class EventTarget {
+ private bool is_node;
+ private bool capture_registered;
+ private bool bubbling_registered;
+};
+
+prologue EventTarget()
+%{
+
+static event_listener_flags event_listener_pop_options(duk_context *ctx)
+{
+ event_listener_flags ret = ELF_NONE;
+ /* ... options */
+ duk_get_prop_string(ctx, -1, "capture");
+ if (duk_to_boolean(ctx, -1))
+ ret |= ELF_CAPTURE;
+ duk_pop(ctx);
+ duk_get_prop_string(ctx, -1, "passive");
+ if (duk_to_boolean(ctx, -1))
+ ret |= ELF_PASSIVE;
+ duk_pop(ctx);
+ duk_get_prop_string(ctx, -1, "once");
+ if (duk_to_boolean(ctx, -1))
+ ret |= ELF_CAPTURE;
+ duk_pop_2(ctx);
+ /* ... */
+ return ret;
+}
+
+static void event_target_register_listener(duk_context *ctx,
+ event_listener_flags flags)
+{
+ /* ... listeners callback */
+ /* If the given callback with the given flags is already present,
+ * we do not re-add it, otherwise we need to add to listeners
+ * a tuple of the callback and flags
+ */
+ duk_uarridx_t idx = 0;
+ while (duk_get_prop_index(ctx, -1, idx)) {
+ /* ... listeners callback candidate */
+ duk_get_prop_index(ctx, -1, 0);
+ duk_get_prop_index(ctx, -2, 1);
+ /* ... listeners callback candidate candidatecallback candidateflags */
+ if (duk_strict_equals(ctx, -1, -3) &&
+ duk_get_int(ctx, -1) == (duk_int_t)flags) {
+ /* already present, nothing to do */
+ duk_pop_n(ctx, 5);
+ /* ... */
+ return;
+ }
+ /* ... listeners callback candidate candidatecallback candidateflags */
+ duk_pop_3(ctx);
+ /* ... listeners callback */
+ idx++;
+ }
+ /* ... listeners callback undefined */
+ duk_pop(ctx);
+ /* ... listeners callback */
+ duk_push_array(ctx);
+ /* ... listeners callback newcandidate */
+ duk_insert(ctx, -2);
+ /* ... listeners newcandidate callback */
+ duk_put_prop_index(ctx, -2, 0);
+ /* ... listeners newcandidate */
+ duk_push_int(ctx, (duk_int_t)flags);
+ /* ... listeners newcandidate flags */
+ duk_put_prop_index(ctx, -2, 1);
+ /* ... listeners newcandidate */
+ duk_put_prop_index(ctx, -2, idx);
+ /* ... listeners */
+ duk_pop(ctx);
+ /* ... */
+}
+
+static void event_target_unregister_listener(duk_context *ctx,
+ event_listener_flags flags)
+{
+ /* ... listeners callback */
+ /* If the given callback with the given flags is present,
+ * we remove it and shuffle the rest up.
+ */
+ duk_uarridx_t idx = 0;
+ while (duk_get_prop_index(ctx, -1, idx)) {
+ /* ... listeners callback candidate */
+ duk_get_prop_index(ctx, -1, 0);
+ duk_get_prop_index(ctx, -2, 1);
+ /* ... listeners callback candidate candidatecallback candidateflags */
+ if (duk_strict_equals(ctx, -1, -3) &&
+ duk_get_int(ctx, -1) == (duk_int_t)flags) {
+ /* present */
+ duk_pop(ctx);
+ /* ... listeners callback candidate candidatecallback */
+ duk_put_prop_index(ctx, -2, 2);
+ /* ... listeners callback candidate */
+ duk_pop(ctx);
+ /* ... listeners callback */
+ duk_push_int(ctx, idx);
+ /* ... listeners callback found_at */
+ break;
+ }
+ /* ... listeners callback candidate candidatecallback candidateflags */
+ duk_pop_3(ctx);
+ /* ... listeners callback */
+ idx++;
+ }
+ /* ... listeners callback undefined/found_at */
+ if (duk_is_undefined(ctx, -1)) {
+ /* not found, clean up and come out */
+ duk_pop_3(ctx);
+ return;
+ }
+ idx = duk_to_int(ctx, -1);
+ duk_pop_2(ctx);
+ /* ... listeners */
+ dukky_shuffle_array(ctx, idx);
+ /* ... listeners */
+ duk_pop(ctx);
+ /* ... */
+}
+
+
+%}
+
+init EventTarget()
+%{
+ priv->is_node = false;
+ priv->capture_registered = false;
+ priv->bubbling_registered = false;
+
+%}
+
+method EventTarget::addEventListener()
+%{
+ dom_exception exc;
+ event_listener_flags flags = ELF_NONE;
+ /* Incoming stack is: type callback [options] */
+ if (duk_get_top(ctx) < 2) return 0; /* Bad arguments */
+ if (duk_get_top(ctx) > 3) return 0; /* Bad arguments */
+ if (duk_get_top(ctx) == 2) {
+ duk_push_object(ctx);
+ /* type callback options */
+ }
+ if (duk_get_type(ctx, -1) != DUK_TYPE_OBJECT) {
+ /* legacy support, if not object, it's the capture value */
+ duk_push_object(ctx);
+ /* ... capture options */
+ duk_insert(ctx, -2);
+ /* ... options capture */
+ duk_put_prop_string(ctx, -2, "capture");
+ /* ... options */
+ }
+ /* type callback options */
+ flags = event_listener_pop_options(ctx);
+ /* type callback */
+ duk_dup(ctx, -2);
+ /* type callback type */
+ duk_push_this(ctx);
+ /* type callback type this(=EventTarget) */
+ if (dukky_event_target_push_listeners(ctx, false) && priv->is_node) {
+ /* Take a moment to register a JS callback */
+ duk_size_t ev_ty_l;
+ const char *ev_ty = duk_to_lstring(ctx, -3, &ev_ty_l);
+ dom_string *ev_ty_s;
+ exc = dom_string_create((const uint8_t*)ev_ty, ev_ty_l,
+ &ev_ty_s);
+ if (exc != DOM_NO_ERR) {
+ LOG("Oh dear, failed to create dom_string in addEventListener()");
+ return 0;
+ }
+ dukky_register_event_listener_for(
+ ctx, (dom_element *)((node_private_t *)priv)->node,
+ ev_ty_s,
+ !!(flags & ELF_CAPTURE));
+ dom_string_unref(ev_ty_s);
+ }
+ /* type callback typelisteners */
+ duk_insert(ctx, -2);
+ /* type typelisteners callback */
+ event_target_register_listener(ctx, flags);
+ /* type */
+ return 0;
+%}
+
+method EventTarget::removeEventListener()
+%{
+ event_listener_flags flags = ELF_NONE;
+ /* Incoming stack is: type callback [options] */
+ if (duk_get_top(ctx) < 2) return 0; /* Bad arguments */
+ if (duk_get_top(ctx) > 3) return 0; /* Bad arguments */
+ if (duk_get_top(ctx) == 2) {
+ duk_push_object(ctx);
+ /* type callback options */
+ }
+ if (duk_get_type(ctx, -1) != DUK_TYPE_OBJECT) {
+ /* legacy support, if not object, it's the capture value */
+ duk_push_object(ctx);
+ /* ... capture options */
+ duk_insert(ctx, -2);
+ /* ... options capture */
+ duk_put_prop_string(ctx, -2, "capture");
+ /* ... options */
+ }
+ /* type callback options */
+ flags = event_listener_pop_options(ctx);
+ /* type callback */
+ duk_dup(ctx, -2);
+ /* type callback type */
+ duk_push_this(ctx);
+ /* type callback type this(=EventTarget) */
+ if (dukky_event_target_push_listeners(ctx, true)) {
+ /* nothing to do because the listener wasn't there at all */
+ duk_pop_3(ctx);
+ return 0;
+ }
+ /* type callback typelisteners */
+ duk_insert(ctx, -2);
+ /* type typelisteners callback */
+ event_target_unregister_listener(ctx, flags);
+ /* type */
+ return 0;
+%}
+
+
+
+method EventTarget::dispatchEvent()
+%{
+ dom_exception exc;
+ if (!dukky_instanceof(ctx, 0, PROTO_NAME(EVENT))) return 0;
+
+ duk_get_prop_string(ctx, 0, PRIVATE_MAGIC);
+ event_private_t *evpriv = duk_get_pointer(ctx, -1);
+ duk_pop(ctx);
+
+ dom_event *evt = evpriv->evt;
+
+ /* Dispatch event logic, see:
+ * https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent
+ */
+ bool in_dispatch;
+ if (dom_event_in_dispatch(evt, &in_dispatch) != DOM_NO_ERR) return 0;
+ if (in_dispatch) {
+ /** \todo Raise InvalidStateException */
+ return 0;
+ }
+
+ bool is_initialised;
+ if (dom_event_is_initialised(evt, &is_initialised) != DOM_NO_ERR) return 0;
+ if (is_initialised == false) {
+ /** \todo Raise InvalidStateException */
+ return 0;
+ }
+
+ if (dom_event_set_is_trusted(evt, false) != DOM_NO_ERR) return 0;
+
+ /** \todo work out how to dispatch against non-node things */
+ if (priv->is_node == false) return 0;
+
+ bool success;
+ /* Event prepared, dispatch against ourselves */
+ exc = dom_event_target_dispatch_event(
+ ((node_private_t *)priv)->node,
+ evt,
+ &success);
+ if (exc != DOM_NO_ERR) return 0; /**< \todo raise correct exception */
+
+ duk_push_boolean(ctx, success);
+ return 1;
+%}
diff --git a/content/handlers/javascript/duktape/Node.bnd b/content/handlers/javascript/duktape/Node.bnd
index f237c87..f14cfc1 100644
--- a/content/handlers/javascript/duktape/Node.bnd
+++ b/content/handlers/javascript/duktape/Node.bnd
@@ -16,6 +16,7 @@ init Node(struct dom_node *node)
%{
priv->node = node;
dom_node_ref(node);
+ priv->parent.is_node = true;
%}
fini Node()
diff --git a/content/handlers/javascript/duktape/dukky.c b/content/handlers/javascript/duktape/dukky.c
index 1282ad9..46ff584 100644
--- a/content/handlers/javascript/duktape/dukky.c
+++ b/content/handlers/javascript/duktape/dukky.c
@@ -46,6 +46,7 @@
#define EVENT_MAGIC MAGIC(EVENT_MAP)
#define HANDLER_LISTENER_MAGIC MAGIC(HANDLER_LISTENER_MAP)
#define HANDLER_MAGIC MAGIC(HANDLER_MAP)
+#define EVENT_LISTENER_JS_MAGIC MAGIC(EVENT_LISTENER_JS_MAP)
static duk_ret_t dukky_populate_object(duk_context *ctx)
{
@@ -809,6 +810,8 @@ static void dukky_generic_event_handler(dom_event *evt, void *pw)
dom_exception exc;
dom_event_target *targ;
dom_event_flow_phase phase;
+ duk_uarridx_t idx;
+ event_listener_flags flags;
/* Retrieve the JS context from the Duktape context */
duk_get_memory_functions(ctx, &funcs);
@@ -839,7 +842,13 @@ static void dukky_generic_event_handler(dom_event *evt, void *pw)
LOG("Unable to find the event target");
return;
}
-
+
+ /* If we're capturing right now, we skip the 'event handler'
+ * and go straight to the extras
+ */
+ if (phase == DOM_CAPTURING_PHASE)
+ goto handle_extras;
+
/* ... */
if (dukky_push_node(ctx, (dom_node *)targ) == false) {
dom_string_unref(name);
@@ -850,13 +859,9 @@ static void dukky_generic_event_handler(dom_event *evt, void *pw)
/* ... node */
if (dukky_get_current_value_of_event_handler(
ctx, name, (dom_event_target *)targ) == false) {
- dom_node_unref(targ);
- dom_string_unref(name);
- return;
+ /* ... */
+ goto handle_extras;
}
- /** @todo handle other kinds of event than the generic case */
- dom_node_unref(targ);
- dom_string_unref(name);
/* ... handler node */
dukky_push_event(ctx, evt);
/* ... handler node event */
@@ -882,7 +887,7 @@ static void dukky_generic_event_handler(dom_event *evt, void *pw)
duk_pop_n(ctx, 6);
/* ... */
- return;
+ goto handle_extras;
}
/* ... result */
if (duk_is_boolean(ctx, -1) &&
@@ -890,12 +895,113 @@ static void dukky_generic_event_handler(dom_event *evt, void *pw)
dom_event_prevent_default(evt);
}
duk_pop(ctx);
+handle_extras:
/* ... */
+ duk_push_lstring(ctx, dom_string_data(name), dom_string_length(name));
+ dukky_push_node(ctx, (dom_node *)targ);
+ /* ... type node */
+ if (dukky_event_target_push_listeners(ctx, true)) {
+ /* Nothing to do */
+ duk_pop(ctx);
+ goto out;
+ }
+ /* ... sublisteners */
+ duk_push_array(ctx);
+ /* ... sublisteners copy */
+ idx = 0;
+ while (duk_get_prop_index(ctx, -2, idx)) {
+ /* ... sublisteners copy handler */
+ duk_get_prop_index(ctx, -1, 1);
+ /* ... sublisteners copy handler flags */
+ if ((event_listener_flags)duk_to_int(ctx, -1) & ELF_ONCE) {
+ duk_dup(ctx, -4);
+ /* ... subl copy handler flags subl */
+ dukky_shuffle_array(ctx, idx);
+ duk_pop(ctx);
+ /* ... subl copy handler flags */
+ }
+ duk_pop(ctx);
+ /* ... sublisteners copy handler */
+ duk_put_prop_index(ctx, -2, idx);
+ /* ... sublisteners copy */
+ idx++;
+ }
+ /* ... sublisteners copy undefined */
+ duk_pop(ctx);
+ /* ... sublisteners copy */
+ duk_insert(ctx, -2);
+ /* ... copy sublisteners */
+ duk_pop(ctx);
+ /* ... copy */
+ idx = 0;
+ while (duk_get_prop_index(ctx, -1, idx++)) {
+ /* ... copy handler */
+ if (duk_get_prop_index(ctx, -1, 2)) {
+ /* ... copy handler meh */
+ duk_pop_2(ctx);
+ continue;
+ }
+ duk_pop(ctx);
+ duk_get_prop_index(ctx, -1, 0);
+ duk_get_prop_index(ctx, -2, 1);
+ /* ... copy handler callback flags */
+ flags = (event_listener_flags)duk_get_int(ctx, -1);
+ duk_pop(ctx);
+ /* ... copy handler callback */
+ if (((phase == DOM_CAPTURING_PHASE) && !(flags & ELF_CAPTURE)) ||
+ ((phase != DOM_CAPTURING_PHASE) && (flags & ELF_CAPTURE))) {
+ duk_pop_2(ctx);
+ /* ... copy */
+ continue;
+ }
+ /* ... copy handler callback */
+ dukky_push_node(ctx, (dom_node *)targ);
+ /* ... copy handler callback node */
+ dukky_push_event(ctx, evt);
+ /* ... copy handler callback node event */
+ (void) nsu_getmonotonic_ms(&jsctx->exec_start_time);
+ if (duk_pcall_method(ctx, 1) != 0) {
+ /* Failed to run the method */
+ /* ... copy handler err */
+ LOG("OH NOES! An error running a callback. Meh.");
+ exc = dom_event_stop_immediate_propagation(evt);
+ if (exc != DOM_NO_ERR)
+ LOG("WORSE! could not stop propagation");
+ duk_get_prop_string(ctx, -1, "name");
+ duk_get_prop_string(ctx, -2, "message");
+ duk_get_prop_string(ctx, -3, "fileName");
+ duk_get_prop_string(ctx, -4, "lineNumber");
+ duk_get_prop_string(ctx, -5, "stack");
+ /* ... err name message fileName lineNumber stack */
+ LOG("Uncaught error in JS: %s: %s", duk_safe_to_string(ctx, -5),
+ duk_safe_to_string(ctx, -4));
+ LOG(" was at: %s line %s", duk_safe_to_string(ctx, -3),
+ duk_safe_to_string(ctx, -2));
+ LOG(" Stack trace: %s", duk_safe_to_string(ctx, -1));
+
+ duk_pop_n(ctx, 7);
+ /* ... copy */
+ continue;
+ }
+ /* ... copy handler result */
+ if (duk_is_boolean(ctx, -1) &&
+ duk_to_boolean(ctx, -1) == 0) {
+ dom_event_prevent_default(evt);
+ }
+ duk_pop_2(ctx);
+ /* ... copy */
+ }
+ duk_pop_2(ctx);
+out:
+ /* ... */
+ dom_node_unref(targ);
+ dom_string_unref(name);
}
void dukky_register_event_listener_for(duk_context *ctx,
struct dom_element *ele,
- dom_string *name)
+ dom_string *name,
+ bool capture)
{
dom_event_listener *listen = NULL;
dom_exception exc;
@@ -927,7 +1033,7 @@ void dukky_register_event_listener_for(duk_context *ctx,
&listen);
if (exc != DOM_NO_ERR) return;
exc = dom_event_target_add_event_listener(
- ele, name, listen, false);
+ ele, name, listen, capture);
if (exc != DOM_NO_ERR) {
LOG("Unable to register listener for %p.%*s",
ele, dom_string_length(name), dom_string_data(name));
@@ -938,6 +1044,71 @@ void dukky_register_event_listener_for(duk_context *ctx,
dom_event_listener_unref(listen);
}
+/* The sub-listeners are a list of {callback,flags} tuples */
+/* We return true if we created a new sublistener table */
+/* If we're told to not create, but we want to, we still return true */
+bool dukky_event_target_push_listeners(duk_context *ctx, bool dont_create)
+{
+ bool ret = false;
+ /* ... type this */
+ duk_get_prop_string(ctx, -1, EVENT_LISTENER_JS_MAGIC);
+ if (duk_is_undefined(ctx, -1)) {
+ /* ... type this null */
+ duk_pop(ctx);
+ duk_push_object(ctx);
+ duk_dup(ctx, -1);
+ /* ... type this listeners listeners */
+ duk_put_prop_string(ctx, -3, EVENT_LISTENER_JS_MAGIC);
+ /* ... type this listeners */
+ }
+ /* ... type this listeners */
+ duk_insert(ctx, -3);
+ /* ... listeners type this */
+ duk_pop(ctx);
+ /* ... listeners type */
+ duk_dup(ctx, -1);
+ /* ... listeners type type */
+ duk_get_prop(ctx, -3);
+ /* ... listeners type ??? */
+ if (duk_is_undefined(ctx, -1)) {
+ /* ... listeners type ??? */
+ if (dont_create == true) {
+ duk_pop_3(ctx);
+ duk_push_undefined(ctx);
+ return true;
+ }
+ duk_pop(ctx);
+ duk_push_array(ctx);
+ duk_dup(ctx, -2);
+ duk_dup(ctx, -2);
+ /* ... listeners type sublisteners type sublisteners */
+ duk_put_prop(ctx, -5);
+ /* ... listeners type sublisteners */
+ ret = true;
+ }
+ duk_insert(ctx, -3);
+ /* ... sublisteners listeners type */
+ duk_pop_2(ctx);
+ /* ... sublisteners */
+ return ret;
+}
+
+/* Shuffle a duktape array "down" one. This involves iterating from
+ * the index provided, shuffling elements down, until we reach an
+ * undefined
+ */
+void dukky_shuffle_array(duk_context *ctx, duk_uarridx_t idx)
+{
+ /* ... somearr */
+ while (duk_get_prop_index(ctx, -1, idx + 1)) {
+ duk_put_prop_index(ctx, -2, idx);
+ idx++;
+ }
+ /* ... somearr undefined */
+ duk_del_prop_index(ctx, -2, idx + 1);
+ duk_pop(ctx);
+}
+
void js_handle_new_element(jscontext *ctx, struct dom_element *node)
{
@@ -995,7 +1166,7 @@ void js_handle_new_element(jscontext *ctx, struct dom_element *node)
&sub);
if (exc == DOM_NO_ERR) {
dukky_register_event_listener_for(
- CTX, node, sub);
+ CTX, node, sub, false);
dom_string_unref(sub);
}
}
diff --git a/content/handlers/javascript/duktape/dukky.h b/content/handlers/javascript/duktape/dukky.h
index 0c3ff0e..b5809aa 100644
--- a/content/handlers/javascript/duktape/dukky.h
+++ b/content/handlers/javascript/duktape/dukky.h
@@ -37,9 +37,20 @@ duk_bool_t dukky_push_node(duk_context *ctx, struct dom_node *node);
void dukky_inject_not_ctr(duk_context *ctx, int idx, const char *name);
void dukky_register_event_listener_for(duk_context *ctx,
struct dom_element *ele,
- dom_string *name);
+ dom_string *name,
+ bool capture);
bool dukky_get_current_value_of_event_handler(duk_context *ctx,
dom_string *name,
dom_event_target *et);
+bool dukky_event_target_push_listeners(duk_context *ctx, bool dont_create);
+
+typedef enum {
+ ELF_CAPTURE = 1 << 0,
+ ELF_PASSIVE = 1 << 1,
+ ELF_ONCE = 1 << 2,
+ ELF_NONE = 0
+} event_listener_flags;
+
+void dukky_shuffle_array(duk_context *ctx, duk_uarridx_t idx);
#endif
diff --git a/content/handlers/javascript/duktape/netsurf.bnd b/content/handlers/javascript/duktape/netsurf.bnd
index 4aca475..2a56ccc 100644
--- a/content/handlers/javascript/duktape/netsurf.bnd
+++ b/content/handlers/javascript/duktape/netsurf.bnd
@@ -54,6 +54,7 @@ struct dom_html_br_element;
};
+#include "EventTarget.bnd"
#include "Console.bnd"
#include "Window.bnd"
#include "Document.bnd"
diff --git a/test/js/dom-change-event.html b/test/js/dom-change-event.html
new file mode 100644
index 0000000..6c6fbfb
--- /dev/null
+++ b/test/js/dom-change-event.html
@@ -0,0 +1,17 @@
+<html>
+ <head>
+ <title>DOM Change event handling</title>
+ <script type="text/javascript">
+ document.addEventListener("DOMNodeInserted",
+ function(ev) {
+ console.log("\n\nHELLO WORLD!\n\n");
+ console.log(ev);
+ console.log("\n\n");
+ }, false);
+ console.log("Moooo!");
+ </script>
+ </head>
+ <body>
+ <div>I got inserted</div>
+ </body>
+</html>
diff --git a/utils/corestrings.c b/utils/corestrings.c
index 363c851..87a3423 100644
--- a/utils/corestrings.c
+++ b/utils/corestrings.c
@@ -277,6 +277,14 @@ dom_string *corestring_dom_onfocus;
dom_string *corestring_dom_onload;
dom_string *corestring_dom_onresize;
dom_string *corestring_dom_onscroll;
+dom_string *corestring_dom_autocomplete;
+dom_string *corestring_dom_autocompleteerror;
+dom_string *corestring_dom_dragexit;
+dom_string *corestring_dom_mouseenter;
+dom_string *corestring_dom_mouseleave;
+dom_string *corestring_dom_wheel;
+dom_string *corestring_dom_sort;
+dom_string *corestring_dom_toggle;
dom_string *corestring_dom___ns_key_box_node_data;
dom_string *corestring_dom___ns_key_libcss_node_data;
dom_string *corestring_dom___ns_key_file_name_node_data;
@@ -563,6 +571,15 @@ void corestrings_fini(void)
CSS_DOM_STRING_UNREF(onload);
CSS_DOM_STRING_UNREF(onresize);
CSS_DOM_STRING_UNREF(onscroll);
+ /* Corestrings used by DOM event registration */
+ CSS_DOM_STRING_UNREF(autocomplete);
+ CSS_DOM_STRING_UNREF(autocompleteerror);
+ CSS_DOM_STRING_UNREF(dragexit);
+ CSS_DOM_STRING_UNREF(mouseenter);
+ CSS_DOM_STRING_UNREF(mouseleave);
+ CSS_DOM_STRING_UNREF(wheel);
+ CSS_DOM_STRING_UNREF(sort);
+ CSS_DOM_STRING_UNREF(toggle);
/* DOM userdata keys, not really CSS */
CSS_DOM_STRING_UNREF(__ns_key_box_node_data);
CSS_DOM_STRING_UNREF(__ns_key_libcss_node_data);
@@ -894,6 +911,15 @@ nserror corestrings_init(void)
CSS_DOM_STRING_INTERN(onload);
CSS_DOM_STRING_INTERN(onresize);
CSS_DOM_STRING_INTERN(onscroll);
+ /* Corestrings used by DOM event registration */
+ CSS_DOM_STRING_INTERN(autocomplete);
+ CSS_DOM_STRING_INTERN(autocompleteerror);
+ CSS_DOM_STRING_INTERN(dragexit);
+ CSS_DOM_STRING_INTERN(mouseenter);
+ CSS_DOM_STRING_INTERN(mouseleave);
+ CSS_DOM_STRING_INTERN(wheel);
+ CSS_DOM_STRING_INTERN(sort);
+ CSS_DOM_STRING_INTERN(toggle);
/* DOM userdata keys, not really CSS */
CSS_DOM_STRING_INTERN(__ns_key_box_node_data);
CSS_DOM_STRING_INTERN(__ns_key_libcss_node_data);
diff --git a/utils/corestrings.h b/utils/corestrings.h
index a02bdda..88dc2ce 100644
--- a/utils/corestrings.h
+++ b/utils/corestrings.h
@@ -295,7 +295,15 @@ extern struct dom_string *corestring_dom_onfocus;
extern struct dom_string *corestring_dom_onload;
extern struct dom_string *corestring_dom_onresize;
extern struct dom_string *corestring_dom_onscroll;
-
+/* Corestrings used by DOM event registration */
+extern struct dom_string *corestring_dom_autocomplete;
+extern struct dom_string *corestring_dom_autocompleteerror;
+extern struct dom_string *corestring_dom_dragexit;
+extern struct dom_string *corestring_dom_mouseenter;
+extern struct dom_string *corestring_dom_mouseleave;
+extern struct dom_string *corestring_dom_wheel;
+extern struct dom_string *corestring_dom_sort;
+extern struct dom_string *corestring_dom_toggle;
/* DOM userdata keys */
extern struct dom_string *corestring_dom___ns_key_box_node_data;
extern struct dom_string *corestring_dom___ns_key_libcss_node_data;
-----------------------------------------------------------------------
Summary of changes:
frontends/gtk/gui.c | 6 ++++++
frontends/gtk/hotlist.c | 2 +-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/frontends/gtk/gui.c b/frontends/gtk/gui.c
index c08ab0a..8d6b422 100644
--- a/frontends/gtk/gui.c
+++ b/frontends/gtk/gui.c
@@ -449,6 +449,12 @@ static void gui_quit(void)
messages_get_errorcode(res));
}
+ res = hotlist_fini(nsoption_charp(hotlist_path));
+ if (res != NSERROR_OK) {
+ LOG("Error finalising hotlist: %s",
+ messages_get_errorcode(res));
+ }
+
free(nsgtk_config_home);
gtk_fetch_filetype_fin();
diff --git a/frontends/gtk/hotlist.c b/frontends/gtk/hotlist.c
index 6ce9060..34a1377 100644
--- a/frontends/gtk/hotlist.c
+++ b/frontends/gtk/hotlist.c
@@ -398,7 +398,7 @@ nserror nsgtk_hotlist_destroy(void)
return NSERROR_OK;
}
- res = hotlist_fini(nsoption_charp(hotlist_path));
+ res = hotlist_manager_fini();
if (res == NSERROR_OK) {
res = nsgtk_corewindow_fini(&hotlist_window->core);
gtk_widget_destroy(GTK_WIDGET(hotlist_window->wnd));
--
NetSurf Browser
5 years, 11 months
netsurf: branch master updated. release/3.6-218-g10f1b7a
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/10f1b7a1aaec183defb6a...
...commit http://git.netsurf-browser.org/netsurf.git/commit/10f1b7a1aaec183defb6ae7...
...tree http://git.netsurf-browser.org/netsurf.git/tree/10f1b7a1aaec183defb6ae724...
The branch, master has been updated
via 10f1b7a1aaec183defb6ae724576910494026954 (commit)
from 1f52b2d514ac12bfbcb97f4ed3eb556d5e38739d (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=10f1b7a1aaec183defb...
commit 10f1b7a1aaec183defb6ae724576910494026954
Author: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Commit: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Fix up GTK+ hotlist finalisation to clean up properly
diff --git a/frontends/gtk/gui.c b/frontends/gtk/gui.c
index c08ab0a..8d6b422 100644
--- a/frontends/gtk/gui.c
+++ b/frontends/gtk/gui.c
@@ -449,6 +449,12 @@ static void gui_quit(void)
messages_get_errorcode(res));
}
+ res = hotlist_fini(nsoption_charp(hotlist_path));
+ if (res != NSERROR_OK) {
+ LOG("Error finalising hotlist: %s",
+ messages_get_errorcode(res));
+ }
+
free(nsgtk_config_home);
gtk_fetch_filetype_fin();
diff --git a/frontends/gtk/hotlist.c b/frontends/gtk/hotlist.c
index 6ce9060..34a1377 100644
--- a/frontends/gtk/hotlist.c
+++ b/frontends/gtk/hotlist.c
@@ -398,7 +398,7 @@ nserror nsgtk_hotlist_destroy(void)
return NSERROR_OK;
}
- res = hotlist_fini(nsoption_charp(hotlist_path));
+ res = hotlist_manager_fini();
if (res == NSERROR_OK) {
res = nsgtk_corewindow_fini(&hotlist_window->core);
gtk_widget_destroy(GTK_WIDGET(hotlist_window->wnd));
-----------------------------------------------------------------------
Summary of changes:
frontends/gtk/gui.c | 6 ++++++
frontends/gtk/hotlist.c | 2 +-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/frontends/gtk/gui.c b/frontends/gtk/gui.c
index c08ab0a..8d6b422 100644
--- a/frontends/gtk/gui.c
+++ b/frontends/gtk/gui.c
@@ -449,6 +449,12 @@ static void gui_quit(void)
messages_get_errorcode(res));
}
+ res = hotlist_fini(nsoption_charp(hotlist_path));
+ if (res != NSERROR_OK) {
+ LOG("Error finalising hotlist: %s",
+ messages_get_errorcode(res));
+ }
+
free(nsgtk_config_home);
gtk_fetch_filetype_fin();
diff --git a/frontends/gtk/hotlist.c b/frontends/gtk/hotlist.c
index 6ce9060..34a1377 100644
--- a/frontends/gtk/hotlist.c
+++ b/frontends/gtk/hotlist.c
@@ -398,7 +398,7 @@ nserror nsgtk_hotlist_destroy(void)
return NSERROR_OK;
}
- res = hotlist_fini(nsoption_charp(hotlist_path));
+ res = hotlist_manager_fini();
if (res == NSERROR_OK) {
res = nsgtk_corewindow_fini(&hotlist_window->core);
gtk_widget_destroy(GTK_WIDGET(hotlist_window->wnd));
--
NetSurf Browser
5 years, 11 months
nsgenbind: branch dsilvers/eventwork created. release/0.4-6-g63321d2
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/nsgenbind.git/shortlog/63321d2f21056c13fef...
...commit http://git.netsurf-browser.org/nsgenbind.git/commit/63321d2f21056c13fefcc...
...tree http://git.netsurf-browser.org/nsgenbind.git/tree/63321d2f21056c13fefcc43...
The branch, dsilvers/eventwork has been created
at 63321d2f21056c13fefcc436721a80067d0b6a74 (commit)
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/nsgenbind.git/commit/?id=63321d2f21056c13f...
commit 63321d2f21056c13fefcc436721a80067d0b6a74
Author: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Commit: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Ensure generated attributes register for correct events
diff --git a/src/duk-libdom-generated.c b/src/duk-libdom-generated.c
index 95f1833..637573c 100644
--- a/src/duk-libdom-generated.c
+++ b/src/duk-libdom-generated.c
@@ -226,17 +226,20 @@ output_generated_attribute_user_setter(FILE* outf,
"\tduk_get_prop_string(ctx, -1, HANDLER_MAGIC);\n"
"\t/* handlerfn this handlers */\n"
"\tduk_push_lstring(ctx, \"%s\", %ld);\n"
- "\t/* handlerfn this handlers click */\n"
+ "\t/* handlerfn this handlers %s */\n"
"\tduk_dup(ctx, -4);\n"
- "\t/* handlerfn this handlers click handlerfn */\n"
+ "\t/* handlerfn this handlers %s handlerfn */\n"
"\tduk_put_prop(ctx, -3);\n"
"\t/* handlerfn this handlers */\n"
"\tdukky_register_event_listener_for(ctx,\n"
"\t\t(dom_element *)((node_private_t *)priv)->node,\n"
- "\t\tcorestring_dom_click);\n"
+ "\t\tcorestring_dom_%s, false);\n"
"\treturn 0;\n",
atributee->name + 2,
- strlen(atributee->name + 2));
+ strlen(atributee->name + 2),
+ atributee->name + 2,
+ atributee->name + 2,
+ atributee->name + 2);
return 0;
}
return -1;
commitdiff http://git.netsurf-browser.org/nsgenbind.git/commit/?id=9eae2e271b700bbbf...
commit 9eae2e271b700bbbf88e3888489dab5182814a46
Author: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Commit: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Make the #line a comment
diff --git a/src/duk-libdom-common.c b/src/duk-libdom-common.c
index 6111070..c76f7a5 100644
--- a/src/duk-libdom-common.c
+++ b/src/duk-libdom-common.c
@@ -74,7 +74,7 @@ int output_ccode(FILE* outf, struct genbind_node *node)
NULL, GENBIND_NODE_TYPE_FILE));
if ((line != NULL) && (filename != NULL)) {
- fprintf(outf, "#line %d \"%s\"\n", *line, filename);
+ fprintf(outf, "/* #line %d \"%s\" */\n", *line, filename);
}
return output_cdata(outf, node, GENBIND_NODE_TYPE_CDATA);
-----------------------------------------------------------------------
--
NetSurf Generator for JavaScript bindings
5 years, 11 months
netsurf: branch dsilvers/eventtarget updated. release/3.6-228-g3e49db5
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/3e49db5b651a6c424ee0b...
...commit http://git.netsurf-browser.org/netsurf.git/commit/3e49db5b651a6c424ee0bbc...
...tree http://git.netsurf-browser.org/netsurf.git/tree/3e49db5b651a6c424ee0bbcc5...
The branch, dsilvers/eventtarget has been updated
via 3e49db5b651a6c424ee0bbcc5012973566b635e3 (commit)
from d7c7ec5d4ad55819d61f8576249865269e3c9672 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=3e49db5b651a6c424ee...
commit 3e49db5b651a6c424ee0bbcc5012973566b635e3
Author: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Commit: Daniel Silverstone <dsilvers(a)digital-scurf.org>
foldme; make sure we only call listeners if we're meant to
diff --git a/content/handlers/javascript/duktape/dukky.c b/content/handlers/javascript/duktape/dukky.c
index b0bcc8a..46ff584 100644
--- a/content/handlers/javascript/duktape/dukky.c
+++ b/content/handlers/javascript/duktape/dukky.c
@@ -947,13 +947,19 @@ handle_extras:
/* ... copy handler callback flags */
flags = (event_listener_flags)duk_get_int(ctx, -1);
duk_pop(ctx);
- /* TODO: So, should we run the event handler? */
+ /* ... copy handler callback */
+ if (((phase == DOM_CAPTURING_PHASE) && !(flags & ELF_CAPTURE)) ||
+ ((phase != DOM_CAPTURING_PHASE) && (flags & ELF_CAPTURE))) {
+ duk_pop_2(ctx);
+ /* ... copy */
+ continue;
+ }
+ /* ... copy handler callback */
dukky_push_node(ctx, (dom_node *)targ);
/* ... copy handler callback node */
dukky_push_event(ctx, evt);
/* ... copy handler callback node event */
(void) nsu_getmonotonic_ms(&jsctx->exec_start_time);
- /* TODO: Maybe skip calling if not capture or at-target ? */
if (duk_pcall_method(ctx, 1) != 0) {
/* Failed to run the method */
/* ... copy handler err */
-----------------------------------------------------------------------
Summary of changes:
content/handlers/javascript/duktape/dukky.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/content/handlers/javascript/duktape/dukky.c b/content/handlers/javascript/duktape/dukky.c
index b0bcc8a..46ff584 100644
--- a/content/handlers/javascript/duktape/dukky.c
+++ b/content/handlers/javascript/duktape/dukky.c
@@ -947,13 +947,19 @@ handle_extras:
/* ... copy handler callback flags */
flags = (event_listener_flags)duk_get_int(ctx, -1);
duk_pop(ctx);
- /* TODO: So, should we run the event handler? */
+ /* ... copy handler callback */
+ if (((phase == DOM_CAPTURING_PHASE) && !(flags & ELF_CAPTURE)) ||
+ ((phase != DOM_CAPTURING_PHASE) && (flags & ELF_CAPTURE))) {
+ duk_pop_2(ctx);
+ /* ... copy */
+ continue;
+ }
+ /* ... copy handler callback */
dukky_push_node(ctx, (dom_node *)targ);
/* ... copy handler callback node */
dukky_push_event(ctx, evt);
/* ... copy handler callback node event */
(void) nsu_getmonotonic_ms(&jsctx->exec_start_time);
- /* TODO: Maybe skip calling if not capture or at-target ? */
if (duk_pcall_method(ctx, 1) != 0) {
/* Failed to run the method */
/* ... copy handler err */
--
NetSurf Browser
5 years, 11 months
netsurf: branch dsilvers/eventtarget updated. release/3.6-227-gd7c7ec5
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/d7c7ec5d4ad55819d61f8...
...commit http://git.netsurf-browser.org/netsurf.git/commit/d7c7ec5d4ad55819d61f857...
...tree http://git.netsurf-browser.org/netsurf.git/tree/d7c7ec5d4ad55819d61f85762...
The branch, dsilvers/eventtarget has been updated
via d7c7ec5d4ad55819d61f8576249865269e3c9672 (commit)
from a611c5757ea6d98cca41b2ad08bc5fde39ef48dd (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=d7c7ec5d4ad55819d61...
commit d7c7ec5d4ad55819d61f8576249865269e3c9672
Author: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Commit: Daniel Silverstone <dsilvers(a)digital-scurf.org>
foldme: Fix up shuffling for ELF_ONCE
diff --git a/content/handlers/javascript/duktape/EventTarget.bnd b/content/handlers/javascript/duktape/EventTarget.bnd
index 9c66ba2..fe78194 100644
--- a/content/handlers/javascript/duktape/EventTarget.bnd
+++ b/content/handlers/javascript/duktape/EventTarget.bnd
@@ -122,13 +122,9 @@ static void event_target_unregister_listener(duk_context *ctx,
idx = duk_to_int(ctx, -1);
duk_pop_2(ctx);
/* ... listeners */
- while (duk_get_prop_index(ctx, -1, idx + 1)) {
- duk_put_prop_index(ctx, -2, idx);
- idx++;
- }
- /* ... listeners undefined */
- duk_del_prop_index(ctx, -2, idx + 1);
- duk_pop_2(ctx);
+ dukky_shuffle_array(ctx, idx);
+ /* ... listeners */
+ duk_pop(ctx);
/* ... */
}
diff --git a/content/handlers/javascript/duktape/dukky.c b/content/handlers/javascript/duktape/dukky.c
index 18e8387..b0bcc8a 100644
--- a/content/handlers/javascript/duktape/dukky.c
+++ b/content/handlers/javascript/duktape/dukky.c
@@ -911,8 +911,17 @@ handle_extras:
idx = 0;
while (duk_get_prop_index(ctx, -2, idx)) {
/* ... sublisteners copy handler */
- /* TODO check if the handler is ONCE, if so, remove it from
- * the sublisteners */
+ duk_get_prop_index(ctx, -1, 1);
+ /* ... sublisteners copy handler flags */
+ if ((event_listener_flags)duk_to_int(ctx, -1) & ELF_ONCE) {
+ duk_dup(ctx, -4);
+ /* ... subl copy handler flags subl */
+ dukky_shuffle_array(ctx, idx);
+ duk_pop(ctx);
+ /* ... subl copy handler flags */
+ }
+ duk_pop(ctx);
+ /* ... sublisteners copy handler */
duk_put_prop_index(ctx, -2, idx);
/* ... sublisteners copy */
idx++;
@@ -1078,6 +1087,23 @@ bool dukky_event_target_push_listeners(duk_context *ctx, bool dont_create)
return ret;
}
+/* Shuffle a duktape array "down" one. This involves iterating from
+ * the index provided, shuffling elements down, until we reach an
+ * undefined
+ */
+void dukky_shuffle_array(duk_context *ctx, duk_uarridx_t idx)
+{
+ /* ... somearr */
+ while (duk_get_prop_index(ctx, -1, idx + 1)) {
+ duk_put_prop_index(ctx, -2, idx);
+ idx++;
+ }
+ /* ... somearr undefined */
+ duk_del_prop_index(ctx, -2, idx + 1);
+ duk_pop(ctx);
+}
+
+
void js_handle_new_element(jscontext *ctx, struct dom_element *node)
{
assert(ctx);
diff --git a/content/handlers/javascript/duktape/dukky.h b/content/handlers/javascript/duktape/dukky.h
index 9177136..b5809aa 100644
--- a/content/handlers/javascript/duktape/dukky.h
+++ b/content/handlers/javascript/duktape/dukky.h
@@ -51,4 +51,6 @@ typedef enum {
ELF_NONE = 0
} event_listener_flags;
+void dukky_shuffle_array(duk_context *ctx, duk_uarridx_t idx);
+
#endif
-----------------------------------------------------------------------
Summary of changes:
.../handlers/javascript/duktape/EventTarget.bnd | 10 ++-----
content/handlers/javascript/duktape/dukky.c | 30 ++++++++++++++++++--
content/handlers/javascript/duktape/dukky.h | 2 ++
3 files changed, 33 insertions(+), 9 deletions(-)
diff --git a/content/handlers/javascript/duktape/EventTarget.bnd b/content/handlers/javascript/duktape/EventTarget.bnd
index 9c66ba2..fe78194 100644
--- a/content/handlers/javascript/duktape/EventTarget.bnd
+++ b/content/handlers/javascript/duktape/EventTarget.bnd
@@ -122,13 +122,9 @@ static void event_target_unregister_listener(duk_context *ctx,
idx = duk_to_int(ctx, -1);
duk_pop_2(ctx);
/* ... listeners */
- while (duk_get_prop_index(ctx, -1, idx + 1)) {
- duk_put_prop_index(ctx, -2, idx);
- idx++;
- }
- /* ... listeners undefined */
- duk_del_prop_index(ctx, -2, idx + 1);
- duk_pop_2(ctx);
+ dukky_shuffle_array(ctx, idx);
+ /* ... listeners */
+ duk_pop(ctx);
/* ... */
}
diff --git a/content/handlers/javascript/duktape/dukky.c b/content/handlers/javascript/duktape/dukky.c
index 18e8387..b0bcc8a 100644
--- a/content/handlers/javascript/duktape/dukky.c
+++ b/content/handlers/javascript/duktape/dukky.c
@@ -911,8 +911,17 @@ handle_extras:
idx = 0;
while (duk_get_prop_index(ctx, -2, idx)) {
/* ... sublisteners copy handler */
- /* TODO check if the handler is ONCE, if so, remove it from
- * the sublisteners */
+ duk_get_prop_index(ctx, -1, 1);
+ /* ... sublisteners copy handler flags */
+ if ((event_listener_flags)duk_to_int(ctx, -1) & ELF_ONCE) {
+ duk_dup(ctx, -4);
+ /* ... subl copy handler flags subl */
+ dukky_shuffle_array(ctx, idx);
+ duk_pop(ctx);
+ /* ... subl copy handler flags */
+ }
+ duk_pop(ctx);
+ /* ... sublisteners copy handler */
duk_put_prop_index(ctx, -2, idx);
/* ... sublisteners copy */
idx++;
@@ -1078,6 +1087,23 @@ bool dukky_event_target_push_listeners(duk_context *ctx, bool dont_create)
return ret;
}
+/* Shuffle a duktape array "down" one. This involves iterating from
+ * the index provided, shuffling elements down, until we reach an
+ * undefined
+ */
+void dukky_shuffle_array(duk_context *ctx, duk_uarridx_t idx)
+{
+ /* ... somearr */
+ while (duk_get_prop_index(ctx, -1, idx + 1)) {
+ duk_put_prop_index(ctx, -2, idx);
+ idx++;
+ }
+ /* ... somearr undefined */
+ duk_del_prop_index(ctx, -2, idx + 1);
+ duk_pop(ctx);
+}
+
+
void js_handle_new_element(jscontext *ctx, struct dom_element *node)
{
assert(ctx);
diff --git a/content/handlers/javascript/duktape/dukky.h b/content/handlers/javascript/duktape/dukky.h
index 9177136..b5809aa 100644
--- a/content/handlers/javascript/duktape/dukky.h
+++ b/content/handlers/javascript/duktape/dukky.h
@@ -51,4 +51,6 @@ typedef enum {
ELF_NONE = 0
} event_listener_flags;
+void dukky_shuffle_array(duk_context *ctx, duk_uarridx_t idx);
+
#endif
--
NetSurf Browser
5 years, 11 months
netsurf: branch dsilvers/eventtarget updated. release/3.6-226-ga611c57
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/a611c5757ea6d98cca41b...
...commit http://git.netsurf-browser.org/netsurf.git/commit/a611c5757ea6d98cca41b2a...
...tree http://git.netsurf-browser.org/netsurf.git/tree/a611c5757ea6d98cca41b2ad0...
The branch, dsilvers/eventtarget has been updated
via a611c5757ea6d98cca41b2ad08bc5fde39ef48dd (commit)
from 1d7514cd735e86adf929406dd20fd6675e7f1a9d (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=a611c5757ea6d98cca4...
commit a611c5757ea6d98cca41b2ad08bc5fde39ef48dd
Author: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Commit: Daniel Silverstone <dsilvers(a)digital-scurf.org>
foldme: some fixes
diff --git a/content/handlers/javascript/duktape/EventTarget.bnd b/content/handlers/javascript/duktape/EventTarget.bnd
index 2b222cf..9c66ba2 100644
--- a/content/handlers/javascript/duktape/EventTarget.bnd
+++ b/content/handlers/javascript/duktape/EventTarget.bnd
@@ -181,7 +181,6 @@ method EventTarget::addEventListener()
LOG("Oh dear, failed to create dom_string in addEventListener()");
return 0;
}
- /* TODO: Enable passing of capture vs. bubble for this */
dukky_register_event_listener_for(
ctx, (dom_element *)((node_private_t *)priv)->node,
ev_ty_s,
diff --git a/content/handlers/javascript/duktape/dukky.c b/content/handlers/javascript/duktape/dukky.c
index d0c3717..18e8387 100644
--- a/content/handlers/javascript/duktape/dukky.c
+++ b/content/handlers/javascript/duktape/dukky.c
@@ -842,7 +842,13 @@ static void dukky_generic_event_handler(dom_event *evt, void *pw)
LOG("Unable to find the event target");
return;
}
-
+
+ /* If we're capturing right now, we skip the 'event handler'
+ * and go straight to the extras
+ */
+ if (phase == DOM_CAPTURING_PHASE)
+ goto handle_extras;
+
/* ... */
if (dukky_push_node(ctx, (dom_node *)targ) == false) {
dom_string_unref(name);
@@ -853,14 +859,13 @@ static void dukky_generic_event_handler(dom_event *evt, void *pw)
/* ... node */
if (dukky_get_current_value_of_event_handler(
ctx, name, (dom_event_target *)targ) == false) {
- /* TODO: Do I have to manage if there's other event handlers */
- goto out;
+ /* ... */
+ goto handle_extras;
}
/* ... handler node */
dukky_push_event(ctx, evt);
/* ... handler node event */
(void) nsu_getmonotonic_ms(&jsctx->exec_start_time);
- /* Maybe skip calling if not capture or at-target ? */
if (duk_pcall_method(ctx, 1) != 0) {
/* Failed to run the method */
/* ... err */
@@ -939,7 +944,7 @@ handle_extras:
dukky_push_event(ctx, evt);
/* ... copy handler callback node event */
(void) nsu_getmonotonic_ms(&jsctx->exec_start_time);
- /* Maybe skip calling if not capture or at-target ? */
+ /* TODO: Maybe skip calling if not capture or at-target ? */
if (duk_pcall_method(ctx, 1) != 0) {
/* Failed to run the method */
/* ... copy handler err */
-----------------------------------------------------------------------
Summary of changes:
content/handlers/javascript/duktape/EventTarget.bnd | 1 -
content/handlers/javascript/duktape/dukky.c | 15 ++++++++++-----
2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/content/handlers/javascript/duktape/EventTarget.bnd b/content/handlers/javascript/duktape/EventTarget.bnd
index 2b222cf..9c66ba2 100644
--- a/content/handlers/javascript/duktape/EventTarget.bnd
+++ b/content/handlers/javascript/duktape/EventTarget.bnd
@@ -181,7 +181,6 @@ method EventTarget::addEventListener()
LOG("Oh dear, failed to create dom_string in addEventListener()");
return 0;
}
- /* TODO: Enable passing of capture vs. bubble for this */
dukky_register_event_listener_for(
ctx, (dom_element *)((node_private_t *)priv)->node,
ev_ty_s,
diff --git a/content/handlers/javascript/duktape/dukky.c b/content/handlers/javascript/duktape/dukky.c
index d0c3717..18e8387 100644
--- a/content/handlers/javascript/duktape/dukky.c
+++ b/content/handlers/javascript/duktape/dukky.c
@@ -842,7 +842,13 @@ static void dukky_generic_event_handler(dom_event *evt, void *pw)
LOG("Unable to find the event target");
return;
}
-
+
+ /* If we're capturing right now, we skip the 'event handler'
+ * and go straight to the extras
+ */
+ if (phase == DOM_CAPTURING_PHASE)
+ goto handle_extras;
+
/* ... */
if (dukky_push_node(ctx, (dom_node *)targ) == false) {
dom_string_unref(name);
@@ -853,14 +859,13 @@ static void dukky_generic_event_handler(dom_event *evt, void *pw)
/* ... node */
if (dukky_get_current_value_of_event_handler(
ctx, name, (dom_event_target *)targ) == false) {
- /* TODO: Do I have to manage if there's other event handlers */
- goto out;
+ /* ... */
+ goto handle_extras;
}
/* ... handler node */
dukky_push_event(ctx, evt);
/* ... handler node event */
(void) nsu_getmonotonic_ms(&jsctx->exec_start_time);
- /* Maybe skip calling if not capture or at-target ? */
if (duk_pcall_method(ctx, 1) != 0) {
/* Failed to run the method */
/* ... err */
@@ -939,7 +944,7 @@ handle_extras:
dukky_push_event(ctx, evt);
/* ... copy handler callback node event */
(void) nsu_getmonotonic_ms(&jsctx->exec_start_time);
- /* Maybe skip calling if not capture or at-target ? */
+ /* TODO: Maybe skip calling if not capture or at-target ? */
if (duk_pcall_method(ctx, 1) != 0) {
/* Failed to run the method */
/* ... copy handler err */
--
NetSurf Browser
5 years, 11 months
netsurf: branch dsilvers/eventtarget updated. release/3.6-225-g1d7514c
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/1d7514cd735e86adf9294...
...commit http://git.netsurf-browser.org/netsurf.git/commit/1d7514cd735e86adf929406...
...tree http://git.netsurf-browser.org/netsurf.git/tree/1d7514cd735e86adf929406dd...
The branch, dsilvers/eventtarget has been updated
via 1d7514cd735e86adf929406dd20fd6675e7f1a9d (commit)
from b49f0f9141a132679e9cdca944e72ebad80682ed (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=1d7514cd735e86adf92...
commit 1d7514cd735e86adf929406dd20fd6675e7f1a9d
Author: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Commit: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Test dom change events (doesn't work in chrome)
diff --git a/test/js/dom-change-event.html b/test/js/dom-change-event.html
new file mode 100644
index 0000000..6c6fbfb
--- /dev/null
+++ b/test/js/dom-change-event.html
@@ -0,0 +1,17 @@
+<html>
+ <head>
+ <title>DOM Change event handling</title>
+ <script type="text/javascript">
+ document.addEventListener("DOMNodeInserted",
+ function(ev) {
+ console.log("\n\nHELLO WORLD!\n\n");
+ console.log(ev);
+ console.log("\n\n");
+ }, false);
+ console.log("Moooo!");
+ </script>
+ </head>
+ <body>
+ <div>I got inserted</div>
+ </body>
+</html>
-----------------------------------------------------------------------
Summary of changes:
test/js/dom-change-event.html | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
create mode 100644 test/js/dom-change-event.html
diff --git a/test/js/dom-change-event.html b/test/js/dom-change-event.html
new file mode 100644
index 0000000..6c6fbfb
--- /dev/null
+++ b/test/js/dom-change-event.html
@@ -0,0 +1,17 @@
+<html>
+ <head>
+ <title>DOM Change event handling</title>
+ <script type="text/javascript">
+ document.addEventListener("DOMNodeInserted",
+ function(ev) {
+ console.log("\n\nHELLO WORLD!\n\n");
+ console.log(ev);
+ console.log("\n\n");
+ }, false);
+ console.log("Moooo!");
+ </script>
+ </head>
+ <body>
+ <div>I got inserted</div>
+ </body>
+</html>
--
NetSurf Browser
5 years, 11 months
netsurf: branch dsilvers/eventtarget updated. release/3.6-224-gb49f0f9
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/b49f0f9141a132679e9cd...
...commit http://git.netsurf-browser.org/netsurf.git/commit/b49f0f9141a132679e9cdca...
...tree http://git.netsurf-browser.org/netsurf.git/tree/b49f0f9141a132679e9cdca94...
The branch, dsilvers/eventtarget has been updated
via b49f0f9141a132679e9cdca944e72ebad80682ed (commit)
from 7417da3a3452f3dac5eba0f79ce8f0610535cdb6 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=b49f0f9141a132679e9...
commit b49f0f9141a132679e9cdca944e72ebad80682ed
Author: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Commit: Daniel Silverstone <dsilvers(a)digital-scurf.org>
foldme: Yet more progress, not sure if it's in the right direction
diff --git a/Docs/UnimplementedJavascript.txt b/Docs/UnimplementedJavascript.txt
index 2b3a7d9..1b851b8 100644
--- a/Docs/UnimplementedJavascript.txt
+++ b/Docs/UnimplementedJavascript.txt
@@ -439,9 +439,6 @@ setter EventSource::onopen(user);\n
getter EventSource::readyState(unsigned short);\n
getter EventSource::url(string);\n
getter EventSource::withCredentials(boolean);\n
-method EventTarget::addEventListener();\n
-method EventTarget::dispatchEvent();\n
-method EventTarget::removeEventListener();\n
getter Event::timeStamp(user);\n
method External::AddSearchProvider();\n
method External::IsSearchProviderInstalled();\n
diff --git a/content/handlers/javascript/duktape/EventTarget.bnd b/content/handlers/javascript/duktape/EventTarget.bnd
index 41bdbd9..2b222cf 100644
--- a/content/handlers/javascript/duktape/EventTarget.bnd
+++ b/content/handlers/javascript/duktape/EventTarget.bnd
@@ -184,7 +184,8 @@ method EventTarget::addEventListener()
/* TODO: Enable passing of capture vs. bubble for this */
dukky_register_event_listener_for(
ctx, (dom_element *)((node_private_t *)priv)->node,
- ev_ty_s);
+ ev_ty_s,
+ !!(flags & ELF_CAPTURE));
dom_string_unref(ev_ty_s);
}
/* type callback typelisteners */
diff --git a/content/handlers/javascript/duktape/dukky.c b/content/handlers/javascript/duktape/dukky.c
index 6e1d533..d0c3717 100644
--- a/content/handlers/javascript/duktape/dukky.c
+++ b/content/handlers/javascript/duktape/dukky.c
@@ -980,7 +980,8 @@ out:
void dukky_register_event_listener_for(duk_context *ctx,
struct dom_element *ele,
- dom_string *name)
+ dom_string *name,
+ bool capture)
{
dom_event_listener *listen = NULL;
dom_exception exc;
@@ -1012,7 +1013,7 @@ void dukky_register_event_listener_for(duk_context *ctx,
&listen);
if (exc != DOM_NO_ERR) return;
exc = dom_event_target_add_event_listener(
- ele, name, listen, false);
+ ele, name, listen, capture);
if (exc != DOM_NO_ERR) {
LOG("Unable to register listener for %p.%*s",
ele, dom_string_length(name), dom_string_data(name));
@@ -1128,7 +1129,7 @@ void js_handle_new_element(jscontext *ctx, struct dom_element *node)
&sub);
if (exc == DOM_NO_ERR) {
dukky_register_event_listener_for(
- CTX, node, sub);
+ CTX, node, sub, false);
dom_string_unref(sub);
}
}
diff --git a/content/handlers/javascript/duktape/dukky.h b/content/handlers/javascript/duktape/dukky.h
index 6ef9fdf..9177136 100644
--- a/content/handlers/javascript/duktape/dukky.h
+++ b/content/handlers/javascript/duktape/dukky.h
@@ -37,7 +37,8 @@ duk_bool_t dukky_push_node(duk_context *ctx, struct dom_node *node);
void dukky_inject_not_ctr(duk_context *ctx, int idx, const char *name);
void dukky_register_event_listener_for(duk_context *ctx,
struct dom_element *ele,
- dom_string *name);
+ dom_string *name,
+ bool capture);
bool dukky_get_current_value_of_event_handler(duk_context *ctx,
dom_string *name,
dom_event_target *et);
diff --git a/utils/corestrings.c b/utils/corestrings.c
index 363c851..87a3423 100644
--- a/utils/corestrings.c
+++ b/utils/corestrings.c
@@ -277,6 +277,14 @@ dom_string *corestring_dom_onfocus;
dom_string *corestring_dom_onload;
dom_string *corestring_dom_onresize;
dom_string *corestring_dom_onscroll;
+dom_string *corestring_dom_autocomplete;
+dom_string *corestring_dom_autocompleteerror;
+dom_string *corestring_dom_dragexit;
+dom_string *corestring_dom_mouseenter;
+dom_string *corestring_dom_mouseleave;
+dom_string *corestring_dom_wheel;
+dom_string *corestring_dom_sort;
+dom_string *corestring_dom_toggle;
dom_string *corestring_dom___ns_key_box_node_data;
dom_string *corestring_dom___ns_key_libcss_node_data;
dom_string *corestring_dom___ns_key_file_name_node_data;
@@ -563,6 +571,15 @@ void corestrings_fini(void)
CSS_DOM_STRING_UNREF(onload);
CSS_DOM_STRING_UNREF(onresize);
CSS_DOM_STRING_UNREF(onscroll);
+ /* Corestrings used by DOM event registration */
+ CSS_DOM_STRING_UNREF(autocomplete);
+ CSS_DOM_STRING_UNREF(autocompleteerror);
+ CSS_DOM_STRING_UNREF(dragexit);
+ CSS_DOM_STRING_UNREF(mouseenter);
+ CSS_DOM_STRING_UNREF(mouseleave);
+ CSS_DOM_STRING_UNREF(wheel);
+ CSS_DOM_STRING_UNREF(sort);
+ CSS_DOM_STRING_UNREF(toggle);
/* DOM userdata keys, not really CSS */
CSS_DOM_STRING_UNREF(__ns_key_box_node_data);
CSS_DOM_STRING_UNREF(__ns_key_libcss_node_data);
@@ -894,6 +911,15 @@ nserror corestrings_init(void)
CSS_DOM_STRING_INTERN(onload);
CSS_DOM_STRING_INTERN(onresize);
CSS_DOM_STRING_INTERN(onscroll);
+ /* Corestrings used by DOM event registration */
+ CSS_DOM_STRING_INTERN(autocomplete);
+ CSS_DOM_STRING_INTERN(autocompleteerror);
+ CSS_DOM_STRING_INTERN(dragexit);
+ CSS_DOM_STRING_INTERN(mouseenter);
+ CSS_DOM_STRING_INTERN(mouseleave);
+ CSS_DOM_STRING_INTERN(wheel);
+ CSS_DOM_STRING_INTERN(sort);
+ CSS_DOM_STRING_INTERN(toggle);
/* DOM userdata keys, not really CSS */
CSS_DOM_STRING_INTERN(__ns_key_box_node_data);
CSS_DOM_STRING_INTERN(__ns_key_libcss_node_data);
diff --git a/utils/corestrings.h b/utils/corestrings.h
index a02bdda..88dc2ce 100644
--- a/utils/corestrings.h
+++ b/utils/corestrings.h
@@ -295,7 +295,15 @@ extern struct dom_string *corestring_dom_onfocus;
extern struct dom_string *corestring_dom_onload;
extern struct dom_string *corestring_dom_onresize;
extern struct dom_string *corestring_dom_onscroll;
-
+/* Corestrings used by DOM event registration */
+extern struct dom_string *corestring_dom_autocomplete;
+extern struct dom_string *corestring_dom_autocompleteerror;
+extern struct dom_string *corestring_dom_dragexit;
+extern struct dom_string *corestring_dom_mouseenter;
+extern struct dom_string *corestring_dom_mouseleave;
+extern struct dom_string *corestring_dom_wheel;
+extern struct dom_string *corestring_dom_sort;
+extern struct dom_string *corestring_dom_toggle;
/* DOM userdata keys */
extern struct dom_string *corestring_dom___ns_key_box_node_data;
extern struct dom_string *corestring_dom___ns_key_libcss_node_data;
-----------------------------------------------------------------------
Summary of changes:
Docs/UnimplementedJavascript.txt | 3 ---
.../handlers/javascript/duktape/EventTarget.bnd | 3 ++-
content/handlers/javascript/duktape/dukky.c | 7 +++---
content/handlers/javascript/duktape/dukky.h | 3 ++-
utils/corestrings.c | 26 ++++++++++++++++++++
utils/corestrings.h | 10 +++++++-
6 files changed, 43 insertions(+), 9 deletions(-)
diff --git a/Docs/UnimplementedJavascript.txt b/Docs/UnimplementedJavascript.txt
index 2b3a7d9..1b851b8 100644
--- a/Docs/UnimplementedJavascript.txt
+++ b/Docs/UnimplementedJavascript.txt
@@ -439,9 +439,6 @@ setter EventSource::onopen(user);\n
getter EventSource::readyState(unsigned short);\n
getter EventSource::url(string);\n
getter EventSource::withCredentials(boolean);\n
-method EventTarget::addEventListener();\n
-method EventTarget::dispatchEvent();\n
-method EventTarget::removeEventListener();\n
getter Event::timeStamp(user);\n
method External::AddSearchProvider();\n
method External::IsSearchProviderInstalled();\n
diff --git a/content/handlers/javascript/duktape/EventTarget.bnd b/content/handlers/javascript/duktape/EventTarget.bnd
index 41bdbd9..2b222cf 100644
--- a/content/handlers/javascript/duktape/EventTarget.bnd
+++ b/content/handlers/javascript/duktape/EventTarget.bnd
@@ -184,7 +184,8 @@ method EventTarget::addEventListener()
/* TODO: Enable passing of capture vs. bubble for this */
dukky_register_event_listener_for(
ctx, (dom_element *)((node_private_t *)priv)->node,
- ev_ty_s);
+ ev_ty_s,
+ !!(flags & ELF_CAPTURE));
dom_string_unref(ev_ty_s);
}
/* type callback typelisteners */
diff --git a/content/handlers/javascript/duktape/dukky.c b/content/handlers/javascript/duktape/dukky.c
index 6e1d533..d0c3717 100644
--- a/content/handlers/javascript/duktape/dukky.c
+++ b/content/handlers/javascript/duktape/dukky.c
@@ -980,7 +980,8 @@ out:
void dukky_register_event_listener_for(duk_context *ctx,
struct dom_element *ele,
- dom_string *name)
+ dom_string *name,
+ bool capture)
{
dom_event_listener *listen = NULL;
dom_exception exc;
@@ -1012,7 +1013,7 @@ void dukky_register_event_listener_for(duk_context *ctx,
&listen);
if (exc != DOM_NO_ERR) return;
exc = dom_event_target_add_event_listener(
- ele, name, listen, false);
+ ele, name, listen, capture);
if (exc != DOM_NO_ERR) {
LOG("Unable to register listener for %p.%*s",
ele, dom_string_length(name), dom_string_data(name));
@@ -1128,7 +1129,7 @@ void js_handle_new_element(jscontext *ctx, struct dom_element *node)
&sub);
if (exc == DOM_NO_ERR) {
dukky_register_event_listener_for(
- CTX, node, sub);
+ CTX, node, sub, false);
dom_string_unref(sub);
}
}
diff --git a/content/handlers/javascript/duktape/dukky.h b/content/handlers/javascript/duktape/dukky.h
index 6ef9fdf..9177136 100644
--- a/content/handlers/javascript/duktape/dukky.h
+++ b/content/handlers/javascript/duktape/dukky.h
@@ -37,7 +37,8 @@ duk_bool_t dukky_push_node(duk_context *ctx, struct dom_node *node);
void dukky_inject_not_ctr(duk_context *ctx, int idx, const char *name);
void dukky_register_event_listener_for(duk_context *ctx,
struct dom_element *ele,
- dom_string *name);
+ dom_string *name,
+ bool capture);
bool dukky_get_current_value_of_event_handler(duk_context *ctx,
dom_string *name,
dom_event_target *et);
diff --git a/utils/corestrings.c b/utils/corestrings.c
index 363c851..87a3423 100644
--- a/utils/corestrings.c
+++ b/utils/corestrings.c
@@ -277,6 +277,14 @@ dom_string *corestring_dom_onfocus;
dom_string *corestring_dom_onload;
dom_string *corestring_dom_onresize;
dom_string *corestring_dom_onscroll;
+dom_string *corestring_dom_autocomplete;
+dom_string *corestring_dom_autocompleteerror;
+dom_string *corestring_dom_dragexit;
+dom_string *corestring_dom_mouseenter;
+dom_string *corestring_dom_mouseleave;
+dom_string *corestring_dom_wheel;
+dom_string *corestring_dom_sort;
+dom_string *corestring_dom_toggle;
dom_string *corestring_dom___ns_key_box_node_data;
dom_string *corestring_dom___ns_key_libcss_node_data;
dom_string *corestring_dom___ns_key_file_name_node_data;
@@ -563,6 +571,15 @@ void corestrings_fini(void)
CSS_DOM_STRING_UNREF(onload);
CSS_DOM_STRING_UNREF(onresize);
CSS_DOM_STRING_UNREF(onscroll);
+ /* Corestrings used by DOM event registration */
+ CSS_DOM_STRING_UNREF(autocomplete);
+ CSS_DOM_STRING_UNREF(autocompleteerror);
+ CSS_DOM_STRING_UNREF(dragexit);
+ CSS_DOM_STRING_UNREF(mouseenter);
+ CSS_DOM_STRING_UNREF(mouseleave);
+ CSS_DOM_STRING_UNREF(wheel);
+ CSS_DOM_STRING_UNREF(sort);
+ CSS_DOM_STRING_UNREF(toggle);
/* DOM userdata keys, not really CSS */
CSS_DOM_STRING_UNREF(__ns_key_box_node_data);
CSS_DOM_STRING_UNREF(__ns_key_libcss_node_data);
@@ -894,6 +911,15 @@ nserror corestrings_init(void)
CSS_DOM_STRING_INTERN(onload);
CSS_DOM_STRING_INTERN(onresize);
CSS_DOM_STRING_INTERN(onscroll);
+ /* Corestrings used by DOM event registration */
+ CSS_DOM_STRING_INTERN(autocomplete);
+ CSS_DOM_STRING_INTERN(autocompleteerror);
+ CSS_DOM_STRING_INTERN(dragexit);
+ CSS_DOM_STRING_INTERN(mouseenter);
+ CSS_DOM_STRING_INTERN(mouseleave);
+ CSS_DOM_STRING_INTERN(wheel);
+ CSS_DOM_STRING_INTERN(sort);
+ CSS_DOM_STRING_INTERN(toggle);
/* DOM userdata keys, not really CSS */
CSS_DOM_STRING_INTERN(__ns_key_box_node_data);
CSS_DOM_STRING_INTERN(__ns_key_libcss_node_data);
diff --git a/utils/corestrings.h b/utils/corestrings.h
index a02bdda..88dc2ce 100644
--- a/utils/corestrings.h
+++ b/utils/corestrings.h
@@ -295,7 +295,15 @@ extern struct dom_string *corestring_dom_onfocus;
extern struct dom_string *corestring_dom_onload;
extern struct dom_string *corestring_dom_onresize;
extern struct dom_string *corestring_dom_onscroll;
-
+/* Corestrings used by DOM event registration */
+extern struct dom_string *corestring_dom_autocomplete;
+extern struct dom_string *corestring_dom_autocompleteerror;
+extern struct dom_string *corestring_dom_dragexit;
+extern struct dom_string *corestring_dom_mouseenter;
+extern struct dom_string *corestring_dom_mouseleave;
+extern struct dom_string *corestring_dom_wheel;
+extern struct dom_string *corestring_dom_sort;
+extern struct dom_string *corestring_dom_toggle;
/* DOM userdata keys */
extern struct dom_string *corestring_dom___ns_key_box_node_data;
extern struct dom_string *corestring_dom___ns_key_libcss_node_data;
--
NetSurf Browser
5 years, 11 months