Gitweb links:

...log 
http://git.netsurf-browser.org/netsurf.git/shortlog/550900b1cbfffcd3ceb5c00631bcbae2b453443c
...commit 
http://git.netsurf-browser.org/netsurf.git/commit/550900b1cbfffcd3ceb5c00631bcbae2b453443c
...tree 
http://git.netsurf-browser.org/netsurf.git/tree/550900b1cbfffcd3ceb5c00631bcbae2b453443c

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=550900b1cbfffcd3ceb5c00631bcbae2b453443c
commit 550900b1cbfffcd3ceb5c00631bcbae2b453443c
Author: Daniel Silverstone <[email protected]>
Commit: Daniel Silverstone <[email protected]>

    (Element): Honour [SameObject] for ::classList getter
    
    Signed-off-by: Daniel Silverstone <[email protected]>

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
_______________________________________________
netsurf-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to