From 7b62bb5ff89b08820f56df666c8d9616c8c57489 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 16 Jan 2013 13:42:16 +0000 Subject: implement document.compatmode --- javascript/jsapi/htmldocument.bnd | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'javascript/jsapi') diff --git a/javascript/jsapi/htmldocument.bnd b/javascript/jsapi/htmldocument.bnd index 8d5c69eb5..c948e2dbb 100644 --- a/javascript/jsapi/htmldocument.bnd +++ b/javascript/jsapi/htmldocument.bnd @@ -52,6 +52,9 @@ binding document { /** location instantiated on first use */ property unshared location; + /* compatability mode instantiated on first use */ + property unshared compatMode; + /* events through a single interface */ property unshared type EventHandler; } @@ -66,7 +69,7 @@ api finalise %{ getter location %{ - if (!JSVAL_IS_VOID(JSAPI_PROP_RVAL(cx,vp))) { + if (!JSVAL_IS_VOID(JSAPI_PROP_RVAL(cx, vp))) { /* already created - return it */ return JS_TRUE; } @@ -95,6 +98,32 @@ getter documentURI %{ jsret = JSVAL_TO_STRING(jsstr); %} + +getter compatMode %{ + /* Returns the string "CSS1Compat" if document is in no-quirks + * mode or limited-quirks mode, and "BackCompat", if document + * is in quirks mode. + */ + if (!JSVAL_IS_VOID(JSAPI_PROP_RVAL(cx, vp))) { + /* already created, just use it */ + return JS_TRUE; + } + if (private->htmlc->quirks == DOM_DOCUMENT_QUIRKS_MODE_FULL) { + jsret = JS_NewStringCopyN(cx, "BackCompat", SLEN("BackCompat")); + } else { + jsret = JS_NewStringCopyN(cx, "CSS1Compat", SLEN("CSS1Compat")); + } + +%} + +/* +getter characterSet %{ +%} + +getter contentType %{ +%} +*/ + getter cookie %{ char *cookie_str; cookie_str = urldb_get_cookie(llcache_handle_get_url(private->htmlc->base.llcache), false); -- cgit v1.2.3 From 9b568abf96defa0194f4fcb6e68d008c6e28423e Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Tue, 22 Jan 2013 18:59:10 +0000 Subject: add default property handler for array indexing --- javascript/jsapi/nodelist.bnd | 41 ++++++++++++++++++++++++++++++----- test/js/dom-getElementsByTagName.html | 10 +++++++++ 2 files changed, 45 insertions(+), 6 deletions(-) (limited to 'javascript/jsapi') diff --git a/javascript/jsapi/nodelist.bnd b/javascript/jsapi/nodelist.bnd index 4aa8c47f5..d7adafd93 100644 --- a/javascript/jsapi/nodelist.bnd +++ b/javascript/jsapi/nodelist.bnd @@ -39,6 +39,41 @@ binding nodelist { private "struct html_content *" htmlc; } +api finalise %{ + if (private != NULL) { + dom_nodelist_unref(private->nodelist); + } +%} + +/* default handler for numericaly indexed property values */ +api getproperty %{ + jsval queryprop; + int idx; + JSObject *jsret = NULL; /* Node */ + dom_exception err; + dom_node *domnode; + + JSAPI_PROP_IDVAL(cx, &queryprop); + if (JSVAL_IS_INT(queryprop)) { + idx = JSVAL_TO_INT(queryprop); + LOG(("Index was %d", idx)); + + + err = dom_nodelist_item(private->nodelist, idx, &domnode); + if (err != DOM_NO_ERR) { + return JS_FALSE; + } + + if (domnode != NULL) { + jsret = jsapi_new_HTMLElement(cx, NULL, NULL, (dom_element *)domnode, private->htmlc); + + JSLOG("return object:%p", jsret); + + JSAPI_PROP_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(jsret)); + } + } +%} + getter length %{ dom_exception err; @@ -62,9 +97,3 @@ operation item %{ } %} -api finalise %{ - if (private != NULL) { - dom_nodelist_unref(private->nodelist); - } -%} - diff --git a/test/js/dom-getElementsByTagName.html b/test/js/dom-getElementsByTagName.html index 02cdffc4d..2f03e7b46 100644 --- a/test/js/dom-getElementsByTagName.html +++ b/test/js/dom-getElementsByTagName.html @@ -15,6 +15,16 @@ for (var i=0;i +
+

+ -- cgit v1.2.3 From faddd8b0350e3c55555437d19e0148b30bd018ad Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 23 Jan 2013 12:37:56 +0000 Subject: implement Element::getAttribute --- javascript/jsapi/htmlelement.bnd | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'javascript/jsapi') diff --git a/javascript/jsapi/htmlelement.bnd b/javascript/jsapi/htmlelement.bnd index 5e22f7e7d..62c08c0a9 100644 --- a/javascript/jsapi/htmlelement.bnd +++ b/javascript/jsapi/htmlelement.bnd @@ -126,6 +126,29 @@ api finalise %{ /* interface Element in dom idl */ +/* DOMString? Element::getAttribute(DOMString name); */ +operation getAttribute %{ + dom_string *value; + dom_string *name_dom; + dom_exception exc; + + exc = dom_string_create((unsigned char*)name, name_len, &name_dom); + if (exc != DOM_NO_ERR) { + return JS_FALSE; + } + + exc = dom_element_get_attribute(private->node, name_dom, &value); + dom_string_unref(name_dom); + if (exc != DOM_NO_ERR) { + return JS_FALSE; + } + + if (value != NULL) { + jsret = JS_NewStringCopyN(cx, dom_string_data(value), dom_string_length(value)); + dom_string_unref(value); + } +%} + /* * DOM 3 has these as the element traversal extension * -- cgit v1.2.3 From 31f7af700f64070bb5826fd86f6d2af19589669d Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 23 Jan 2013 13:42:43 +0000 Subject: implement Element::setAttribute --- javascript/jsapi/htmlelement.bnd | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'javascript/jsapi') diff --git a/javascript/jsapi/htmlelement.bnd b/javascript/jsapi/htmlelement.bnd index 62c08c0a9..f0032fa1a 100644 --- a/javascript/jsapi/htmlelement.bnd +++ b/javascript/jsapi/htmlelement.bnd @@ -149,6 +149,31 @@ operation getAttribute %{ } %} +/* void Element::setAttribute(DOMString name, DOMString value); */ +operation setAttribute %{ + dom_string *value_dom; + dom_string *name_dom; + dom_exception exc; + + exc = dom_string_create((unsigned char*)name, name_len, &name_dom); + if (exc != DOM_NO_ERR) { + return JS_FALSE; + } + + exc = dom_string_create((unsigned char*)name, name_len, &value_dom); + if (exc != DOM_NO_ERR) { + dom_string_unref(name_dom); + return JS_FALSE; + } + + exc = dom_element_set_attribute(private->node, name_dom, value_dom); + dom_string_unref(name_dom); + dom_string_unref(value_dom); + if (exc != DOM_NO_ERR) { + return JS_FALSE; + } +%} + /* * DOM 3 has these as the element traversal extension * -- cgit v1.2.3 From fab7b04de689fdbb03e4cf604b1524a80bb4a174 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 23 Jan 2013 14:11:41 +0000 Subject: implement Element::getElementsByTagName --- javascript/jsapi/htmldocument.bnd | 1 + javascript/jsapi/htmlelement.bnd | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) (limited to 'javascript/jsapi') diff --git a/javascript/jsapi/htmldocument.bnd b/javascript/jsapi/htmldocument.bnd index c948e2dbb..ec7a18039 100644 --- a/javascript/jsapi/htmldocument.bnd +++ b/javascript/jsapi/htmldocument.bnd @@ -219,6 +219,7 @@ operation getElementById %{ * Dom 4 says this should return a htmlcollection, libdom currently * returns DOM 3 spec of a nodelist */ +/* HTMLCollection Document::getElementsByTagName(DOMString localName); */ operation getElementsByTagName %{ dom_string *localName_dom; /* dom_html_collection *collection;*/ diff --git a/javascript/jsapi/htmlelement.bnd b/javascript/jsapi/htmlelement.bnd index f0032fa1a..5af2d5b25 100644 --- a/javascript/jsapi/htmlelement.bnd +++ b/javascript/jsapi/htmlelement.bnd @@ -174,6 +174,44 @@ operation setAttribute %{ } %} +/* + * + * Dom 4 says this should return a htmlcollection, libdom currently + * returns DOM 3 spec of a nodelist + */ +/* HTMLCollection Element::getElementsByTagName(DOMString localName); */ +operation getElementsByTagName %{ + dom_string *localName_dom; + /* dom_html_collection *collection;*/ + dom_nodelist *nodelist; + dom_exception exc; + + exc = dom_string_create((uint8_t *)localName, localName_len, &localName_dom); + if (exc != DOM_NO_ERR) { + return JS_FALSE; + } + + exc = dom_element_get_elements_by_tag_name(private->node, localName_dom, /*&collection*/&nodelist); + dom_string_unref(localName_dom); + if (exc != DOM_NO_ERR) { + return JS_FALSE; + } + + if (/*collection*/nodelist != NULL) { + /*jsret = jsapi_new_HTMLCollection(cx, + NULL, + NULL, + collection, + private->htmlc);*/ + jsret = jsapi_new_NodeList(cx, + NULL, + NULL, + nodelist, + private->htmlc); + } + +%} + /* * DOM 3 has these as the element traversal extension * -- cgit v1.2.3 From 1d0835098134a68add69146c822cc079da374f30 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 23 Jan 2013 15:42:49 +0000 Subject: implement Element::tagName --- javascript/jsapi/htmlelement.bnd | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'javascript/jsapi') diff --git a/javascript/jsapi/htmlelement.bnd b/javascript/jsapi/htmlelement.bnd index 5af2d5b25..fd3a9caf8 100644 --- a/javascript/jsapi/htmlelement.bnd +++ b/javascript/jsapi/htmlelement.bnd @@ -114,6 +114,9 @@ binding htmlelement { private "dom_element *" node; private "struct html_content *" htmlc; + /* tag name retrieved first time its fetched and doesnt change */ + property unshared tagName; + /* events through a single interface */ property unshared type EventHandler; } @@ -126,6 +129,23 @@ api finalise %{ /* interface Element in dom idl */ +/* readonly attribute DOMString Element::tagName; */ +getter tagName %{ + if (!JSVAL_IS_VOID(JSAPI_PROP_RVAL(cx, vp))) { + /* already created - return it */ + return JS_TRUE; + } + + dom_exception exc; + dom_string *name; + + exc = dom_element_get_tag_name(private->node, &name); + if (name != NULL) { + jsret = JS_NewStringCopyN(cx, dom_string_data(name), dom_string_length(name)); + dom_string_unref(name); + } +%} + /* DOMString? Element::getAttribute(DOMString name); */ operation getAttribute %{ dom_string *value; -- cgit v1.2.3 From db7d3acdc3b7256728bf5dcfce8ef04a8d32b65b Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 23 Jan 2013 15:49:46 +0000 Subject: add and use debug logging macro --- javascript/jsapi.h | 5 +++++ javascript/jsapi/htmldocument.bnd | 18 +++++++++--------- javascript/jsapi/htmlelement.bnd | 1 + javascript/jsapi/nodelist.bnd | 4 ++-- 4 files changed, 17 insertions(+), 11 deletions(-) (limited to 'javascript/jsapi') diff --git a/javascript/jsapi.h b/javascript/jsapi.h index b308ca531..e38188ab4 100644 --- a/javascript/jsapi.h +++ b/javascript/jsapi.h @@ -376,5 +376,10 @@ JS_NewCompartmentAndGlobalObject(JSContext *cx, #endif #define JSLOG(args...) LOG((args)) +#ifdef ENABLE_VERBOSE_JS_DEBUG +#define JSDBG(args...) LOG((args)) +#else +#define JSDBG(args...) +#endif #endif diff --git a/javascript/jsapi/htmldocument.bnd b/javascript/jsapi/htmldocument.bnd index ec7a18039..4aacccf4e 100644 --- a/javascript/jsapi/htmldocument.bnd +++ b/javascript/jsapi/htmldocument.bnd @@ -173,7 +173,7 @@ getter body %{ dom_node *body; dom_exception exc; - JSLOG("Getting your body"); + JSDBG("Getting your body"); /* document (html) element */ exc = dom_document_get_document_element(private->node, &element); @@ -189,7 +189,7 @@ getter body %{ dom_node_unref(element); } - JSLOG("returning jsobject %p",jsret); + JSDBG("returning jsobject %p",jsret); %} @@ -266,7 +266,7 @@ operation createTextNode %{ if (data != NULL) { - JSLOG("Creating text node for string \"%s\"", data); + JSDBG("Creating text node for string \"%s\"", data); exc = dom_string_create((unsigned char*)data, data_len, &data_dom); if (exc != DOM_NO_ERR) { return JS_FALSE; @@ -281,7 +281,7 @@ operation createTextNode %{ jsret = jsapi_new_Text(cx, NULL, NULL, text, private->htmlc); } - JSLOG("returning jsobject %p",jsret); + JSDBG("returning jsobject %p",jsret); %} @@ -293,7 +293,7 @@ operation createComment %{ if (data != NULL) { - JSLOG("Creating string \"%s\"", data); + JSDBG("Creating string \"%s\"", data); exc = dom_string_create((unsigned char*)data, data_len, &data_dom); @@ -301,7 +301,7 @@ operation createComment %{ return JS_FALSE; } - JSLOG("Creating comment object for dom string \"%s\"", + JSDBG("Creating comment object for dom string \"%s\"", dom_string_data(data_dom)); exc = dom_document_create_comment(private->node, data_dom, @@ -314,7 +314,7 @@ operation createComment %{ jsret = jsapi_new_Comment(cx, NULL, NULL, comment, private->htmlc); } - JSLOG("returning jsobject %p", jsret); + JSDBG("returning jsobject %p", jsret); %} @@ -325,7 +325,7 @@ operation createElement %{ dom_element *element; if (localName != NULL) { - JSLOG("Creating text node for string \"%s\"", localName); + JSDBG("Creating text node for string \"%s\"", localName); exc = dom_string_create((unsigned char*)localName, localName_len, &localName_dom); if (exc != DOM_NO_ERR) { return JS_FALSE; @@ -340,7 +340,7 @@ operation createElement %{ jsret = jsapi_new_HTMLElement(cx, NULL, NULL, element, private->htmlc); } - JSLOG("returning jsobject %p",jsret); + JSDBG("returning jsobject %p",jsret); %} diff --git a/javascript/jsapi/htmlelement.bnd b/javascript/jsapi/htmlelement.bnd index fd3a9caf8..56c98258b 100644 --- a/javascript/jsapi/htmlelement.bnd +++ b/javascript/jsapi/htmlelement.bnd @@ -29,6 +29,7 @@ preamble %{ #include "htmlelement.h" #include "text.h" #include "location.h" +#include "nodelist.h" %} diff --git a/javascript/jsapi/nodelist.bnd b/javascript/jsapi/nodelist.bnd index d7adafd93..379809659 100644 --- a/javascript/jsapi/nodelist.bnd +++ b/javascript/jsapi/nodelist.bnd @@ -56,7 +56,7 @@ api getproperty %{ JSAPI_PROP_IDVAL(cx, &queryprop); if (JSVAL_IS_INT(queryprop)) { idx = JSVAL_TO_INT(queryprop); - LOG(("Index was %d", idx)); + JSDBG("Index was %d", idx); err = dom_nodelist_item(private->nodelist, idx, &domnode); @@ -67,7 +67,7 @@ api getproperty %{ if (domnode != NULL) { jsret = jsapi_new_HTMLElement(cx, NULL, NULL, (dom_element *)domnode, private->htmlc); - JSLOG("return object:%p", jsret); + JSDBG("return object:%p", jsret); JSAPI_PROP_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(jsret)); } -- cgit v1.2.3 From 16d938dd63b1003daafcbead03779eb587dc823d Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 23 Jan 2013 16:28:35 +0000 Subject: implement Element::id --- javascript/jsapi/htmlelement.bnd | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'javascript/jsapi') diff --git a/javascript/jsapi/htmlelement.bnd b/javascript/jsapi/htmlelement.bnd index 56c98258b..3a6b01760 100644 --- a/javascript/jsapi/htmlelement.bnd +++ b/javascript/jsapi/htmlelement.bnd @@ -147,6 +147,22 @@ getter tagName %{ } %} +/* attribute DOMString Element::id; */ +getter id %{ + dom_string *value; + dom_exception exc; + + exc = dom_element_get_attribute(private->node, corestring_dom_id, &value); + if (exc != DOM_NO_ERR) { + return JS_FALSE; + } + + if (value != NULL) { + jsret = JS_NewStringCopyN(cx, dom_string_data(value), dom_string_length(value)); + dom_string_unref(value); + } +%} + /* DOMString? Element::getAttribute(DOMString name); */ operation getAttribute %{ dom_string *value; -- cgit v1.2.3 From 7ab835df8f45fcea7f12eafe422021b8232b5dd8 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 23 Jan 2013 17:00:13 +0000 Subject: implement Element::className --- javascript/jsapi/htmlelement.bnd | 16 ++++++++++++++++ utils/corestrings.c | 3 +++ utils/corestrings.h | 1 + 3 files changed, 20 insertions(+) (limited to 'javascript/jsapi') diff --git a/javascript/jsapi/htmlelement.bnd b/javascript/jsapi/htmlelement.bnd index 3a6b01760..9af6f2bb5 100644 --- a/javascript/jsapi/htmlelement.bnd +++ b/javascript/jsapi/htmlelement.bnd @@ -163,6 +163,22 @@ getter id %{ } %} +/* attribute DOMString Element::className; */ +getter className %{ + dom_string *value; + dom_exception exc; + + exc = dom_element_get_attribute(private->node, corestring_dom_class, &value); + if (exc != DOM_NO_ERR) { + return JS_FALSE; + } + + if (value != NULL) { + jsret = JS_NewStringCopyN(cx, dom_string_data(value), dom_string_length(value)); + dom_string_unref(value); + } +%} + /* DOMString? Element::getAttribute(DOMString name); */ operation getAttribute %{ dom_string *value; diff --git a/utils/corestrings.c b/utils/corestrings.c index 65666df66..f39a59c21 100644 --- a/utils/corestrings.c +++ b/utils/corestrings.c @@ -134,6 +134,7 @@ dom_string *corestring_dom_cellpadding; dom_string *corestring_dom_cellspacing; dom_string *corestring_dom_change; dom_string *corestring_dom_charset; +dom_string *corestring_dom_class; dom_string *corestring_dom_click; dom_string *corestring_dom_close; dom_string *corestring_dom_color; @@ -357,6 +358,7 @@ void corestrings_fini(void) CSS_DOM_STRING_UNREF(cellspacing); CSS_DOM_STRING_UNREF(change); CSS_DOM_STRING_UNREF(charset); + CSS_DOM_STRING_UNREF(class); CSS_DOM_STRING_UNREF(click); CSS_DOM_STRING_UNREF(close); CSS_DOM_STRING_UNREF(color); @@ -611,6 +613,7 @@ nserror corestrings_init(void) CSS_DOM_STRING_INTERN(cellspacing); CSS_DOM_STRING_INTERN(change); CSS_DOM_STRING_INTERN(charset); + CSS_DOM_STRING_INTERN(class); CSS_DOM_STRING_INTERN(click); CSS_DOM_STRING_INTERN(close); CSS_DOM_STRING_INTERN(color); diff --git a/utils/corestrings.h b/utils/corestrings.h index 08d254501..e28b713eb 100644 --- a/utils/corestrings.h +++ b/utils/corestrings.h @@ -140,6 +140,7 @@ extern struct dom_string *corestring_dom_cellpadding; extern struct dom_string *corestring_dom_cellspacing; extern struct dom_string *corestring_dom_change; extern struct dom_string *corestring_dom_charset; +extern struct dom_string *corestring_dom_class; extern struct dom_string *corestring_dom_click; extern struct dom_string *corestring_dom_close; extern struct dom_string *corestring_dom_color; -- cgit v1.2.3 From 09dc0649df1b0dd97e4c13aef3c41870eeff5572 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 23 Jan 2013 17:11:40 +0000 Subject: implement Element::removeAttribute --- javascript/jsapi/htmlelement.bnd | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'javascript/jsapi') diff --git a/javascript/jsapi/htmlelement.bnd b/javascript/jsapi/htmlelement.bnd index 9af6f2bb5..c0a7f0410 100644 --- a/javascript/jsapi/htmlelement.bnd +++ b/javascript/jsapi/htmlelement.bnd @@ -227,6 +227,23 @@ operation setAttribute %{ } %} +/* void Element::removeAttribute(DOMString name); */ +operation removeAttribute %{ + dom_string *name_dom; + dom_exception exc; + + exc = dom_string_create((unsigned char*)name, name_len, &name_dom); + if (exc != DOM_NO_ERR) { + return JS_FALSE; + } + + exc = dom_element_remove_attribute(private->node, name_dom); + dom_string_unref(name_dom); + if (exc != DOM_NO_ERR) { + return JS_FALSE; + } +%} + /* * * Dom 4 says this should return a htmlcollection, libdom currently -- cgit v1.2.3 From 67ffb8e6e97a5572f1033a7326f8ecc232b17201 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 23 Jan 2013 17:46:40 +0000 Subject: implement Element::hasAttribute --- javascript/jsapi/htmlelement.bnd | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'javascript/jsapi') diff --git a/javascript/jsapi/htmlelement.bnd b/javascript/jsapi/htmlelement.bnd index c0a7f0410..33b495195 100644 --- a/javascript/jsapi/htmlelement.bnd +++ b/javascript/jsapi/htmlelement.bnd @@ -244,6 +244,28 @@ operation removeAttribute %{ } %} +/* boolean Element::hasAttribute(DOMString name); */ +operation hasAttribute %{ + bool result; + dom_string *name_dom; + dom_exception exc; + + exc = dom_string_create((unsigned char*)name, name_len, &name_dom); + if (exc != DOM_NO_ERR) { + return JS_FALSE; + } + + exc = dom_element_has_attribute(private->node, name_dom, &result); + dom_string_unref(name_dom); + if (exc != DOM_NO_ERR) { + return JS_FALSE; + } + + if (result) { + jsret = JS_TRUE; + } +%} + /* * * Dom 4 says this should return a htmlcollection, libdom currently -- cgit v1.2.3