/* NamedNodeMap binding for browser using duktape and libdom * * Copyright 2020 Daniel Silverstone * * 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; %}