diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2015-10-31 22:59:36 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2015-10-31 22:59:42 +0100 |
commit | 0247bed13f43ef7b940845074f32f9ba928cdb83 (patch) | |
tree | d737f7aa9f30256ec75213cec1cd31f7ae18cd4a | |
parent | 39d967e94b4715fa5d43c5e1fcbcc95ad31f7562 (diff) | |
download | netsurf-0247bed13f43ef7b940845074f32f9ba928cdb83.tar.gz netsurf-0247bed13f43ef7b940845074f32f9ba928cdb83.tar.bz2 |
Example getter/setter pair
-rw-r--r-- | javascript/duktape/HTMLElement.bnd | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/javascript/duktape/HTMLElement.bnd b/javascript/duktape/HTMLElement.bnd index ad35fe5ae..ce1a92562 100644 --- a/javascript/duktape/HTMLElement.bnd +++ b/javascript/duktape/HTMLElement.bnd @@ -8,6 +8,12 @@ * http://www.opensource.org/licenses/mit-license */ +prologue HTMLElement () +%{ +#include <utils/corestrings.h> +#define HANDLER_MAGIC MAGIC(HANDLER_MAP) +%} + init HTMLElement(struct dom_html_element *html_element::element); getter HTMLElement::dir(); @@ -18,3 +24,44 @@ setter HTMLElement::lang(); getter HTMLElement::title(); setter HTMLElement::title(); + +setter HTMLElement::onclick() +%{ + /* handlerfn */ + duk_push_this(ctx); + /* handlerfn this */ + duk_get_prop_string(ctx, -1, HANDLER_MAGIC); + /* handlerfn this handlers */ + duk_push_lstring(ctx, "click", 5); + /* handlerfn this handlers click */ + duk_dup(ctx, -4); + /* handlerfn this handlers click handlerfn */ + duk_put_prop(ctx, -3); + /* handlerfn this handlers */ + dukky_register_event_listener_for(ctx, + (dom_element *)((node_private_t *)priv)->node, + corestring_dom_click); + return 0; +%} + +getter HTMLElement::onclick() +%{ + dom_event_target *et = (dom_event_target *)(((node_private_t *)priv)->node); + dom_string *name; + dom_exception exc; + + exc = dom_string_create((const uint8_t *)"click", 5, &name); + if (exc != DOM_NO_ERR) return 0; + + duk_push_this(ctx); + /* ... node */ + if (dukky_get_current_value_of_event_handler(ctx, name, et) == false) { + dom_string_unref(name); + return 0; + } + dom_string_unref(name); + /* ... handler node */ + duk_pop(ctx); + /* ... handler */ + return 1; +%} |