diff options
Diffstat (limited to 'javascript/duktape/NodeList.bnd')
-rw-r--r-- | javascript/duktape/NodeList.bnd | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/javascript/duktape/NodeList.bnd b/javascript/duktape/NodeList.bnd new file mode 100644 index 000000000..e085b6cda --- /dev/null +++ b/javascript/duktape/NodeList.bnd @@ -0,0 +1,54 @@ +/* NodeList binding for browser using duktape and libdom + * + * Copyright 2015 Vincent Sanders <vince@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 NodeList { + private "struct dom_nodelist *" nodes; +} + +init NodeList("struct dom_nodelist *" nodes) +%{ + priv->nodes = nodes; + dom_nodelist_ref(nodes); +%} + +fini NodeList() +%{ + dom_nodelist_unref(priv->nodes); +%} + +getter NodeList::length() +%{ + dom_exception err; + uint32_t len; + + err = dom_nodelist_get_length(priv->nodes, &len); + + if (err != DOM_NO_ERR) return 0; /* coerced to undefined */ + + duk_push_uint(ctx, (duk_uint_t)len); + + return 1; +%} + +method NodeList::item() +%{ + unsigned long i = duk_to_uint(ctx, 0); + dom_exception err; + dom_node *node; + + err = dom_nodelist_item(priv->nodes, i, &node); + + if (err != DOM_NO_ERR) return 0; /* coerced to undefied */ + + dukky_push_node(ctx, node); + dom_node_unref(node); + + return 1; +%} |