diff options
Diffstat (limited to 'content/handlers/javascript/duktape/NamedNodeMap.bnd')
-rw-r--r-- | content/handlers/javascript/duktape/NamedNodeMap.bnd | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/content/handlers/javascript/duktape/NamedNodeMap.bnd b/content/handlers/javascript/duktape/NamedNodeMap.bnd new file mode 100644 index 000000000..c81993c92 --- /dev/null +++ b/content/handlers/javascript/duktape/NamedNodeMap.bnd @@ -0,0 +1,74 @@ +/* NamedNodeMap binding for browser using duktape and libdom + * + * Copyright 2020 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 NamedNodeMap { + private struct dom_namednodemap *map; +}; + +init NamedNodeMap(struct dom_namednodemap *map) +%{ + priv->map = map; + dom_namednodemap_ref(map); +%} + +fini NamedNodeMap() +%{ + dom_namednodemap_unref(priv->map); +%} + +getter NamedNodeMap::length() +%{ + dom_exception err; + uint32_t len; + + err = dom_namednodemap_get_length(priv->map, &len); + + if (err != DOM_NO_ERR) return 0; /* coerced to undefined */ + + duk_push_uint(ctx, (duk_uint_t)len); + + return 1; +%} + +method NamedNodeMap::item() +%{ + unsigned long i = duk_to_uint(ctx, 0); + dom_exception err; + dom_node *node; + + err = dom_namednodemap_item(priv->map, i, &node); + + if (err != DOM_NO_ERR) return 0; /* coerced to undefined */ + + dukky_push_node(ctx, node); + dom_node_unref(node); + + return 1; +%} + +method NamedNodeMap::getNamedItem() +%{ + duk_size_t size; + const char *s = duk_safe_to_lstring(ctx, 0, &size); + dom_exception exc; + dom_node *attr = NULL; + dom_string *name = NULL; + + exc = dom_string_create((const uint8_t*)s, size, &name); + if (exc != DOM_NO_ERR) return 0; /* coerced to undefined */ + + exc = dom_namednodemap_get_named_item(priv->map, name, &attr); + dom_string_unref(name); + if (exc != DOM_NO_ERR) return 0; /* coerced to undefined */ + + dukky_push_node(ctx, attr); + dom_node_unref(attr); + return 1; +%} |