Gitweb links:
...log
http://git.netsurf-browser.org/netsurf.git/shortlog/550900b1cbfffcd3ceb5c...
...commit
http://git.netsurf-browser.org/netsurf.git/commit/550900b1cbfffcd3ceb5c00...
...tree
http://git.netsurf-browser.org/netsurf.git/tree/550900b1cbfffcd3ceb5c0063...
The branch, dsilvers/tokenlist has been updated
via 550900b1cbfffcd3ceb5c00631bcbae2b453443c (commit)
from f29f12a5df255f252987e8acf92994e40125aff6 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff
http://git.netsurf-browser.org/netsurf.git/commit/?id=550900b1cbfffcd3ceb...
commit 550900b1cbfffcd3ceb5c00631bcbae2b453443c
Author: Daniel Silverstone <dsilvers(a)digital-scurf.org>
Commit: Daniel Silverstone <dsilvers(a)digital-scurf.org>
(Element): Honour [SameObject] for ::classList getter
Signed-off-by: Daniel Silverstone <dsilvers(a)digital-scurf.org>
diff --git a/content/handlers/javascript/duktape/Element.bnd
b/content/handlers/javascript/duktape/Element.bnd
index 677a957..ff0686f 100644
--- a/content/handlers/javascript/duktape/Element.bnd
+++ b/content/handlers/javascript/duktape/Element.bnd
@@ -397,19 +397,29 @@ getter Element::classList ()
dom_exception exc;
dom_tokenlist *tokens;
- exc = dom_tokenlist_create((dom_element *)priv->parent.node, corestring_dom_class,
&tokens);
- if (exc != DOM_NO_ERR) return 0; /* Coerced to undefined */
+ duk_set_top(ctx, 0);
+ duk_push_this(ctx);
+ duk_get_prop_string(ctx, 0, MAGIC(classList));
- /* 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)
{
+ 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);
- NSLOG(dukky, DEBUG, "Unable to create DOMSettableTokenList object");
- return 0; /* Coerced to undefined */
+ duk_dup(ctx, -1);
+ duk_put_prop_string(ctx, 0, MAGIC(classList));
}
- dom_tokenlist_unref(tokens);
+
return 1;
%}
-----------------------------------------------------------------------
Summary of changes:
content/handlers/javascript/duktape/Element.bnd | 30 +++++++++++++++--------
1 file changed, 20 insertions(+), 10 deletions(-)
diff --git a/content/handlers/javascript/duktape/Element.bnd
b/content/handlers/javascript/duktape/Element.bnd
index 677a957..ff0686f 100644
--- a/content/handlers/javascript/duktape/Element.bnd
+++ b/content/handlers/javascript/duktape/Element.bnd
@@ -397,19 +397,29 @@ getter Element::classList ()
dom_exception exc;
dom_tokenlist *tokens;
- exc = dom_tokenlist_create((dom_element *)priv->parent.node, corestring_dom_class,
&tokens);
- if (exc != DOM_NO_ERR) return 0; /* Coerced to undefined */
+ duk_set_top(ctx, 0);
+ duk_push_this(ctx);
+ duk_get_prop_string(ctx, 0, MAGIC(classList));
- /* 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)
{
+ 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);
- NSLOG(dukky, DEBUG, "Unable to create DOMSettableTokenList object");
- return 0; /* Coerced to undefined */
+ duk_dup(ctx, -1);
+ duk_put_prop_string(ctx, 0, MAGIC(classList));
}
- dom_tokenlist_unref(tokens);
+
return 1;
%}
--
NetSurf Browser