diff options
author | Vincent Sanders <vince@kyllikki.org> | 2016-06-07 16:01:04 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2016-06-07 16:01:04 +0100 |
commit | 042fcb82b83d19bf08afd3367235ac71a60b3850 (patch) | |
tree | 47fe3c15f160b3fac7b0e8ab4f47b495901e0557 /content/handlers/javascript/duktape/Event.bnd | |
parent | 9754539e2275e33af34b5de9d343b85e8122d871 (diff) | |
download | netsurf-042fcb82b83d19bf08afd3367235ac71a60b3850.tar.gz netsurf-042fcb82b83d19bf08afd3367235ac71a60b3850.tar.bz2 |
Move javascript content handler as appropriate for updated source format
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; +%} + |