diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2015-08-09 12:26:41 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2015-08-09 12:26:41 +0100 |
commit | aadb8200899ae7b2dd75bc743b08dcd9cecd27db (patch) | |
tree | 98a22ed5498d541c336eed7cb6d7fcfadc31d0db /javascript/duktape/NodeList.bnd | |
parent | 37b118d966598301fc57a6d7cb63312013069934 (diff) | |
download | netsurf-aadb8200899ae7b2dd75bc743b08dcd9cecd27db.tar.gz netsurf-aadb8200899ae7b2dd75bc743b08dcd9cecd27db.tar.bz2 |
Add duktape bindings
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; +%} |