diff options
Diffstat (limited to 'content/handlers/javascript/duktape/Event.bnd')
-rw-r--r-- | content/handlers/javascript/duktape/Event.bnd | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/content/handlers/javascript/duktape/Event.bnd b/content/handlers/javascript/duktape/Event.bnd new file mode 100644 index 000000000..a0bc3c3e7 --- /dev/null +++ b/content/handlers/javascript/duktape/Event.bnd @@ -0,0 +1,150 @@ +/* Event binding for browser using duktape and libdom + * + * Copyright 2015 Vincent Sanders <vince@netsurf-browser.org> + * Copyright 2015 Daniel Silverstone <dsilvers@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); +%} + +fini Event () +%{ + dom_event_unref(priv->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; +%} + |