diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2020-02-21 18:40:35 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2020-02-21 18:40:35 +0000 |
commit | d0e775e901cc7ba88c7173c5c797ad1844745a69 (patch) | |
tree | 2f6a0246f6c2b33fe0e88ae47bb9636bb2ddb38e /content/handlers/javascript/duktape/Element.bnd | |
parent | b23063bb5200bb1fc6a64e9e811ab1191d114fd9 (diff) | |
download | netsurf-d0e775e901cc7ba88c7173c5c797ad1844745a69.tar.gz netsurf-d0e775e901cc7ba88c7173c5c797ad1844745a69.tar.bz2 |
JS: Add Element::attributes and NamedNodeMap to handle it
This is a *very* rudimentary implementation lacking most of the
functionality of NamedNodeMap but it's enough to get jQuery 1.12.4 up.
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'content/handlers/javascript/duktape/Element.bnd')
-rw-r--r-- | content/handlers/javascript/duktape/Element.bnd | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/content/handlers/javascript/duktape/Element.bnd b/content/handlers/javascript/duktape/Element.bnd index 35157d5cd..a965a6ceb 100644 --- a/content/handlers/javascript/duktape/Element.bnd +++ b/content/handlers/javascript/duktape/Element.bnd @@ -514,3 +514,31 @@ out: } return 0; %} + +getter Element::attributes() +%{ + dom_exception exc; + dom_namednodemap *nmap = NULL; + duk_set_top(ctx, 0); + duk_push_this(ctx); + duk_get_prop_string(ctx, 0, MAGIC(attributes)); + if (duk_is_undefined(ctx, -1)) { + duk_pop(ctx); + exc = dom_node_get_attributes(priv->parent.node, &nmap); + if (exc != DOM_NO_ERR) return 0; + dukky_push_generics(ctx, "makeNodeMapProxy"); + duk_push_pointer(ctx, nmap); + if (dukky_create_object(ctx, PROTO_NAME(NAMEDNODEMAP), 1) != DUK_EXEC_SUCCESS) { + dom_namednodemap_unref(nmap); + return 0; + } + dom_namednodemap_unref(nmap); + if (dukky_pcall(ctx, 1, false) != 0) { + NSLOG(dukky, DEBUG, "Unable to construct nodelist?"); + return 0; /* coerced to undefined */ + } + duk_dup(ctx, -1); + duk_put_prop_string(ctx, 0, MAGIC(attributes)); + } + return 1; +%} |