summaryrefslogtreecommitdiff
path: root/content/handlers/javascript/duktape/NodeList.bnd
diff options
context:
space:
mode:
Diffstat (limited to 'content/handlers/javascript/duktape/NodeList.bnd')
-rw-r--r--content/handlers/javascript/duktape/NodeList.bnd54
1 files changed, 54 insertions, 0 deletions
diff --git a/content/handlers/javascript/duktape/NodeList.bnd b/content/handlers/javascript/duktape/NodeList.bnd
new file mode 100644
index 000000000..7ddf56d15
--- /dev/null
+++ b/content/handlers/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;
+%}