netsurf: branch master updated. release/3.3-487-ge3a5fcf
by NetSurf Browser Project
Gitweb links:
...log http://git.netsurf-browser.org/netsurf.git/shortlog/e3a5fcf816e8b3b9c1488...
...commit http://git.netsurf-browser.org/netsurf.git/commit/e3a5fcf816e8b3b9c1488b0...
...tree http://git.netsurf-browser.org/netsurf.git/tree/e3a5fcf816e8b3b9c1488b0f9...
The branch, master has been updated
via e3a5fcf816e8b3b9c1488b0f9029b1f757f8ab7f (commit)
via 1284731d1a98ab7c62f15d95f575f9a20010b002 (commit)
from c2d51384c13db930bb43819a4ad4709153a3e871 (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=e3a5fcf816e8b3b9c14...
commit e3a5fcf816e8b3b9c1488b0f9029b1f757f8ab7f
Author: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Commit: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Rudimentary Event object binding
diff --git a/javascript/duktape/Event.bnd b/javascript/duktape/Event.bnd
new file mode 100644
index 0000000..38e4640
--- /dev/null
+++ b/javascript/duktape/Event.bnd
@@ -0,0 +1,145 @@
+/* Event binding for browser using duktape and libdom
+ *
+ * Copyright 2015 Vincent Sanders <vince(a)netsurf-browser.org>
+ * Copyright 2015 Daniel Silverstone <dsilvers(a)netsurf-browser.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 Event {
+ private dom_event *evt;
+};
+
+init Event (struct dom_event *evt)
+%{
+ priv->evt = evt;
+ dom_event_ref(evt);
+%}
+
+/* Note: many of these could be automatics once nsgenbind gets there. */
+
+getter Event::type ()
+%{
+ dom_string *ret;
+ dom_exception exc;
+
+ exc = dom_event_get_type(priv->evt, &ret);
+ if (exc != DOM_NO_ERR) return 0;
+ if (ret == NULL) {
+ duk_push_lstring(ctx, "", 0);
+ } else {
+ duk_push_lstring(ctx, dom_string_data(ret),
+ dom_string_length(ret));
+ dom_string_unref(ret);
+ }
+
+ return 1;
+%}
+
+getter Event::target ()
+%{
+ /** @todo Decide HTF this works wrt. Window as an event target */
+ dom_node *et;
+ dom_exception exc;
+
+ exc = dom_event_get_target(priv->evt, &et);
+ if (exc != DOM_NO_ERR) return 0;
+
+ dukky_push_node(ctx, et);
+ return 1;
+%}
+
+getter Event::currentTarget ()
+%{
+ /** @todo Decide HTF this works wrt. Window as an event target */
+ dom_node *et;
+ dom_exception exc;
+
+ exc = dom_event_get_current_target(priv->evt, &et);
+ if (exc != DOM_NO_ERR) return 0;
+
+ dukky_push_node(ctx, et);
+ return 1;
+%}
+
+getter Event::eventPhase ()
+%{
+ dom_exception exc;
+ dom_event_flow_phase phase;
+
+ exc = dom_event_get_event_phase(priv->evt, &phase);
+ if (exc != DOM_NO_ERR) return 0;
+
+ duk_push_uint(ctx, phase);
+ return 1;
+%}
+
+method Event::stopPropagation ()
+%{
+ dom_exception exc;
+
+ exc = dom_event_stop_propagation(priv->evt);
+ if (exc != DOM_NO_ERR) return 0;
+
+ return 0;
+%}
+
+method Event::stopImmediatePropagation ()
+%{
+ dom_exception exc;
+
+ exc = dom_event_stop_immediate_propagation(priv->evt);
+ if (exc != DOM_NO_ERR) return 0;
+
+ return 0;
+%}
+
+getter Event::bubbles ()
+%{
+ dom_exception exc;
+ bool ret;
+
+ exc = dom_event_get_bubbles(priv->evt, &ret);
+ if (exc != DOM_NO_ERR) return 0;
+
+ duk_push_boolean(ctx, ret);
+ return 1;
+%}
+
+getter Event::cancelable ()
+%{
+ dom_exception exc;
+ bool ret;
+
+ exc = dom_event_get_cancelable(priv->evt, &ret);
+ if (exc != DOM_NO_ERR) return 0;
+
+ duk_push_boolean(ctx, ret);
+ return 1;
+%}
+
+method Event::preventDefault ()
+%{
+ dom_exception exc;
+
+ exc = dom_event_prevent_default(priv->evt);
+ if (exc != DOM_NO_ERR) return 0;
+
+ return 0;
+%}
+
+getter Event::defaultPrevented ()
+%{
+ dom_exception exc;
+ bool ret;
+
+ exc = dom_event_is_default_prevented(priv->evt, &ret);
+ if (exc != DOM_NO_ERR) return 0;
+
+ duk_push_boolean(ctx, ret);
+ return 1;
+%}
+
diff --git a/javascript/duktape/netsurf.bnd b/javascript/duktape/netsurf.bnd
index 5fe5855..1f39386 100644
--- a/javascript/duktape/netsurf.bnd
+++ b/javascript/duktape/netsurf.bnd
@@ -62,6 +62,38 @@ struct dom_html_br_element;
#include "Location.bnd"
#include "Navigator.bnd"
+/* events */
+
+#include "Event.bnd"
+
+init MutationEvent(struct dom_mutation_event *evt::evt);
+init UIEvent(struct dom_ui_event *evt::evt);
+init TextEvent(struct dom_text_event *evt::evt);
+init MutationNameEvent(struct dom_mutation_name_event *evt::evt);
+init MouseWheelEvent(struct dom_mouse_wheel_event *evt::evt);
+init MouseMultiWheelEvent(struct dom_mouse_multi_wheel_event *evt::evt);
+init MouseEvent(struct dom_mouse_event *evt::evt);
+init KeyboardEvent(struct dom_keyboard_event *evt::evt);
+init DocumentEvent(struct dom_document_event *evt::evt);
+init CustomEvent(struct dom_custom_event *evt::evt);
+init CompositionEvent(struct dom_ui_event *evt::evt);
+init WheelEvent(struct dom_mouse_event *evt::evt);
+init FocusEvent(struct dom_ui_event *evt::evt);
+init StorageEvent(struct dom_event *evt::evt);
+init CloseEvent(struct dom_event *evt::evt);
+init MessageEvent(struct dom_event *evt::evt);
+init ErrorEvent(struct dom_event *evt::evt);
+init BeforeUnloadEvent(struct dom_event *evt::evt);
+init PageTransitionEvent(struct dom_event *evt::evt);
+init HashChangeEvent(struct dom_event *evt::evt);
+init PopStateEvent(struct dom_event *evt::evt);
+init DragEvent(struct dom_mouse_event *evt::evt);
+init RelatedEvent(struct dom_event *evt::evt);
+init AutocompleteErrorEvent(struct dom_event *evt::evt);
+init TrackEvent(struct dom_event *evt::evt);
+
+
+/* html elements */
#include "HTMLElement.bnd"
/* specialisations of html_element */
commitdiff http://git.netsurf-browser.org/netsurf.git/commit/?id=1284731d1a98ab7c62f...
commit 1284731d1a98ab7c62f15d95f575f9a20010b002
Author: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Commit: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Support generating event objects during events
diff --git a/javascript/duktape/dukky.c b/javascript/duktape/dukky.c
index d841f91..8c10dcb 100644
--- a/javascript/duktape/dukky.c
+++ b/javascript/duktape/dukky.c
@@ -430,9 +430,15 @@ static void dukky_push_event(duk_context *ctx, dom_event *evt)
/* ... events undefined */
duk_pop(ctx);
/* ... events */
- duk_push_object(ctx);
+ duk_push_pointer(ctx, evt);
+ if (dukky_create_object(ctx, PROTO_NAME(EVENT), 1) != DUK_EXEC_SUCCESS) {
+ /* ... events err */
+ duk_pop(ctx);
+ /* ... events */
+ duk_push_object(ctx);
+ /* ... events eobj[meh] */
+ }
/* ... events eobj */
- /** @todo fill out the event object */
duk_push_pointer(ctx, evt);
/* ... events eobj eventptr */
duk_dup(ctx, -2);
-----------------------------------------------------------------------
Summary of changes:
javascript/duktape/Event.bnd | 145 ++++++++++++++++++++++++++++++++++++++++
javascript/duktape/dukky.c | 10 ++-
javascript/duktape/netsurf.bnd | 32 +++++++++
3 files changed, 185 insertions(+), 2 deletions(-)
create mode 100644 javascript/duktape/Event.bnd
diff --git a/javascript/duktape/Event.bnd b/javascript/duktape/Event.bnd
new file mode 100644
index 0000000..38e4640
--- /dev/null
+++ b/javascript/duktape/Event.bnd
@@ -0,0 +1,145 @@
+/* Event binding for browser using duktape and libdom
+ *
+ * Copyright 2015 Vincent Sanders <vince(a)netsurf-browser.org>
+ * Copyright 2015 Daniel Silverstone <dsilvers(a)netsurf-browser.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 Event {
+ private dom_event *evt;
+};
+
+init Event (struct dom_event *evt)
+%{
+ priv->evt = evt;
+ dom_event_ref(evt);
+%}
+
+/* Note: many of these could be automatics once nsgenbind gets there. */
+
+getter Event::type ()
+%{
+ dom_string *ret;
+ dom_exception exc;
+
+ exc = dom_event_get_type(priv->evt, &ret);
+ if (exc != DOM_NO_ERR) return 0;
+ if (ret == NULL) {
+ duk_push_lstring(ctx, "", 0);
+ } else {
+ duk_push_lstring(ctx, dom_string_data(ret),
+ dom_string_length(ret));
+ dom_string_unref(ret);
+ }
+
+ return 1;
+%}
+
+getter Event::target ()
+%{
+ /** @todo Decide HTF this works wrt. Window as an event target */
+ dom_node *et;
+ dom_exception exc;
+
+ exc = dom_event_get_target(priv->evt, &et);
+ if (exc != DOM_NO_ERR) return 0;
+
+ dukky_push_node(ctx, et);
+ return 1;
+%}
+
+getter Event::currentTarget ()
+%{
+ /** @todo Decide HTF this works wrt. Window as an event target */
+ dom_node *et;
+ dom_exception exc;
+
+ exc = dom_event_get_current_target(priv->evt, &et);
+ if (exc != DOM_NO_ERR) return 0;
+
+ dukky_push_node(ctx, et);
+ return 1;
+%}
+
+getter Event::eventPhase ()
+%{
+ dom_exception exc;
+ dom_event_flow_phase phase;
+
+ exc = dom_event_get_event_phase(priv->evt, &phase);
+ if (exc != DOM_NO_ERR) return 0;
+
+ duk_push_uint(ctx, phase);
+ return 1;
+%}
+
+method Event::stopPropagation ()
+%{
+ dom_exception exc;
+
+ exc = dom_event_stop_propagation(priv->evt);
+ if (exc != DOM_NO_ERR) return 0;
+
+ return 0;
+%}
+
+method Event::stopImmediatePropagation ()
+%{
+ dom_exception exc;
+
+ exc = dom_event_stop_immediate_propagation(priv->evt);
+ if (exc != DOM_NO_ERR) return 0;
+
+ return 0;
+%}
+
+getter Event::bubbles ()
+%{
+ dom_exception exc;
+ bool ret;
+
+ exc = dom_event_get_bubbles(priv->evt, &ret);
+ if (exc != DOM_NO_ERR) return 0;
+
+ duk_push_boolean(ctx, ret);
+ return 1;
+%}
+
+getter Event::cancelable ()
+%{
+ dom_exception exc;
+ bool ret;
+
+ exc = dom_event_get_cancelable(priv->evt, &ret);
+ if (exc != DOM_NO_ERR) return 0;
+
+ duk_push_boolean(ctx, ret);
+ return 1;
+%}
+
+method Event::preventDefault ()
+%{
+ dom_exception exc;
+
+ exc = dom_event_prevent_default(priv->evt);
+ if (exc != DOM_NO_ERR) return 0;
+
+ return 0;
+%}
+
+getter Event::defaultPrevented ()
+%{
+ dom_exception exc;
+ bool ret;
+
+ exc = dom_event_is_default_prevented(priv->evt, &ret);
+ if (exc != DOM_NO_ERR) return 0;
+
+ duk_push_boolean(ctx, ret);
+ return 1;
+%}
+
diff --git a/javascript/duktape/dukky.c b/javascript/duktape/dukky.c
index d841f91..8c10dcb 100644
--- a/javascript/duktape/dukky.c
+++ b/javascript/duktape/dukky.c
@@ -430,9 +430,15 @@ static void dukky_push_event(duk_context *ctx, dom_event *evt)
/* ... events undefined */
duk_pop(ctx);
/* ... events */
- duk_push_object(ctx);
+ duk_push_pointer(ctx, evt);
+ if (dukky_create_object(ctx, PROTO_NAME(EVENT), 1) != DUK_EXEC_SUCCESS) {
+ /* ... events err */
+ duk_pop(ctx);
+ /* ... events */
+ duk_push_object(ctx);
+ /* ... events eobj[meh] */
+ }
/* ... events eobj */
- /** @todo fill out the event object */
duk_push_pointer(ctx, evt);
/* ... events eobj eventptr */
duk_dup(ctx, -2);
diff --git a/javascript/duktape/netsurf.bnd b/javascript/duktape/netsurf.bnd
index 5fe5855..1f39386 100644
--- a/javascript/duktape/netsurf.bnd
+++ b/javascript/duktape/netsurf.bnd
@@ -62,6 +62,38 @@ struct dom_html_br_element;
#include "Location.bnd"
#include "Navigator.bnd"
+/* events */
+
+#include "Event.bnd"
+
+init MutationEvent(struct dom_mutation_event *evt::evt);
+init UIEvent(struct dom_ui_event *evt::evt);
+init TextEvent(struct dom_text_event *evt::evt);
+init MutationNameEvent(struct dom_mutation_name_event *evt::evt);
+init MouseWheelEvent(struct dom_mouse_wheel_event *evt::evt);
+init MouseMultiWheelEvent(struct dom_mouse_multi_wheel_event *evt::evt);
+init MouseEvent(struct dom_mouse_event *evt::evt);
+init KeyboardEvent(struct dom_keyboard_event *evt::evt);
+init DocumentEvent(struct dom_document_event *evt::evt);
+init CustomEvent(struct dom_custom_event *evt::evt);
+init CompositionEvent(struct dom_ui_event *evt::evt);
+init WheelEvent(struct dom_mouse_event *evt::evt);
+init FocusEvent(struct dom_ui_event *evt::evt);
+init StorageEvent(struct dom_event *evt::evt);
+init CloseEvent(struct dom_event *evt::evt);
+init MessageEvent(struct dom_event *evt::evt);
+init ErrorEvent(struct dom_event *evt::evt);
+init BeforeUnloadEvent(struct dom_event *evt::evt);
+init PageTransitionEvent(struct dom_event *evt::evt);
+init HashChangeEvent(struct dom_event *evt::evt);
+init PopStateEvent(struct dom_event *evt::evt);
+init DragEvent(struct dom_mouse_event *evt::evt);
+init RelatedEvent(struct dom_event *evt::evt);
+init AutocompleteErrorEvent(struct dom_event *evt::evt);
+init TrackEvent(struct dom_event *evt::evt);
+
+
+/* html elements */
#include "HTMLElement.bnd"
/* specialisations of html_element */
--
NetSurf Browser