diff options
Diffstat (limited to 'content/handlers/javascript/duktape/Element.bnd')
-rw-r--r-- | content/handlers/javascript/duktape/Element.bnd | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/content/handlers/javascript/duktape/Element.bnd b/content/handlers/javascript/duktape/Element.bnd index a965a6ceb..ff0686fd9 100644 --- a/content/handlers/javascript/duktape/Element.bnd +++ b/content/handlers/javascript/duktape/Element.bnd @@ -392,6 +392,37 @@ setter Element::className () return 0; %} +getter Element::classList () +%{ + dom_exception exc; + dom_tokenlist *tokens; + + duk_set_top(ctx, 0); + duk_push_this(ctx); + duk_get_prop_string(ctx, 0, MAGIC(classList)); + + if (duk_is_undefined(ctx, -1)) { + duk_pop(ctx); + exc = dom_tokenlist_create((dom_element *)priv->parent.node, corestring_dom_class, &tokens); + if (exc != DOM_NO_ERR) return 0; /* Coerced to undefined */ + + /* Create a settable tokenlist - While the IDL says this isn't settable, all browsers + * seem to make it settable, so we'll permit it too + */ + duk_push_pointer(ctx, tokens); + if (dukky_create_object(ctx, PROTO_NAME(DOMSETTABLETOKENLIST), 1) != DUK_EXEC_SUCCESS) { + dom_tokenlist_unref(tokens); + NSLOG(dukky, DEBUG, "Unable to create DOMSettableTokenList object"); + return 0; /* Coerced to undefined */ + } + dom_tokenlist_unref(tokens); + duk_dup(ctx, -1); + duk_put_prop_string(ctx, 0, MAGIC(classList)); + } + + return 1; +%} + getter Element::innerHTML() %{ duk_push_lstring(ctx, "", 0); |