summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2015-07-19 18:10:34 +0100
committerDaniel Silverstone <dsilvers@digital-scurf.org>2015-07-19 18:10:34 +0100
commitd4222fab05f909226617587f85223e7551b5323e (patch)
treea71f9658a44b683f805105c4ee2009bb6f394d1f
parentbfd72abdc7ec0d63e920d7650c358a5a8080af11 (diff)
downloadnetsurf-d4222fab05f909226617587f85223e7551b5323e.tar.gz
netsurf-d4222fab05f909226617587f85223e7551b5323e.tar.bz2
REWORK: ARGFHiufdsfds
-rw-r--r--javascript/Makefile3
-rw-r--r--javascript/dukky.c79
-rw-r--r--javascript/duktape/character_data.c2
-rw-r--r--javascript/duktape/comment.c2
-rw-r--r--javascript/duktape/document.c4
-rw-r--r--javascript/duktape/element.c2
-rw-r--r--javascript/duktape/html_element.c2
-rw-r--r--javascript/duktape/html_unknown_element.c2
-rw-r--r--javascript/duktape/node.c4
-rw-r--r--javascript/duktape/node_list.c4
-rw-r--r--javascript/duktape/private.h5
-rw-r--r--javascript/duktape/prototypes.h1
-rw-r--r--javascript/duktape/text.c2
-rw-r--r--javascript/duktape/window.c4
14 files changed, 71 insertions, 45 deletions
diff --git a/javascript/Makefile b/javascript/Makefile
index 7c7006dc2..3d3e2733f 100644
--- a/javascript/Makefile
+++ b/javascript/Makefile
@@ -63,7 +63,8 @@ ifeq ($(NETSURF_USE_DUKTAPE),YES)
S_DUKKY := event_target.c window.c node.c document.c \
element.c html_element.c html_unknown_element.c \
- character_data.c text.c comment.c html_collection.c node_list.c
+ character_data.c text.c comment.c html_collection.c node_list.c \
+ html_br_element.c
S_JAVASCRIPT += dukky.c duktape.c content.c fetcher.c $(addprefix duktape/,$(S_DUKKY))
diff --git a/javascript/dukky.c b/javascript/dukky.c
index e5836be6e..0e9e39a9a 100644
--- a/javascript/dukky.c
+++ b/javascript/dukky.c
@@ -22,11 +22,13 @@
*/
#include "content/content.h"
+
#include "utils/nsoption.h"
+#include "utils/log.h"
+#include "utils/corestrings.h"
#include "javascript/js.h"
#include "javascript/content.h"
-#include "utils/log.h"
#include "duktape.h"
#include "dukky.h"
@@ -46,9 +48,9 @@ static duk_ret_t dukky_populate_object(duk_context *ctx)
duk_get_prop(ctx, -2);
/* ... obj args prototab {proto/undefined} */
if (duk_is_undefined(ctx, -1)) {
- LOG("RuhRoh, couldn't find a prototype, getting htmlelement");
+ LOG("RuhRoh, couldn't find a prototype, HTMLUnknownElement it is");
duk_pop(ctx);
- duk_push_string(ctx, PROTO_NAME(html_unknown_element));
+ duk_push_string(ctx, PROTO_NAME(HTMLUNKNOWNELEMENT));
duk_get_prop(ctx, -2);
}
/* ... obj args prototab proto */
@@ -185,39 +187,57 @@ dukky_push_node_klass(duk_context *ctx, struct dom_node *node)
err = dom_node_get_node_type(node, &nodetype);
if (err != DOM_NO_ERR) {
/* Oh bum, just node then */
- duk_push_string(ctx, PROTO_NAME(node));
+ duk_push_string(ctx, PROTO_NAME(NODE));
return;
}
switch(nodetype) {
case DOM_ELEMENT_NODE: {
- dom_string *namespace;
+ dom_string *namespace, *tag;
err = dom_node_get_namespace(node, &namespace);
if (err != DOM_NO_ERR) {
/* Feck it, element */
- duk_push_string(ctx, PROTO_NAME(element));
+ LOG("dom_node_get_namespace() failed");
+ duk_push_string(ctx, PROTO_NAME(ELEMENT));
break;
}
if (namespace == NULL) {
/* No namespace, -> element */
- duk_push_string(ctx, PROTO_NAME(element));
+ LOG("no namespace");
+ duk_push_string(ctx, PROTO_NAME(ELEMENT));
break;
}
- /* TODO: Work out how to decide between Element and HTML */
- duk_push_string(ctx, PROTO_NAME(html_unknown_element));
-
+ if (dom_string_isequal(namespace, corestring_dom_html_namespace) == false) {
+ /* definitely not an HTML element of some kind */
+ duk_push_string(ctx, PROTO_NAME(ELEMENT));
+ dom_string_unref(namespace);
+ break;
+ }
dom_string_unref(namespace);
+
+ err = dom_node_get_node_name(node, &tag);
+ if (err != DOM_NO_ERR) {
+ duk_push_string(ctx, PROTO_NAME(HTMLUNKNOWNELEMENT));
+ break;
+ }
+
+ duk_push_string(ctx, PROTO_NAME(HTML));
+ duk_push_lstring(ctx, dom_string_data(tag), dom_string_length(tag));
+ dom_string_unref(tag);
+ duk_push_string(ctx, "ELEMENT");
+ duk_concat(ctx, 3);
+
break;
}
case DOM_TEXT_NODE:
- duk_push_string(ctx, PROTO_NAME(text));
+ duk_push_string(ctx, PROTO_NAME(TEXT));
break;
case DOM_COMMENT_NODE:
- duk_push_string(ctx, PROTO_NAME(comment));
+ duk_push_string(ctx, PROTO_NAME(COMMENT));
break;
case DOM_DOCUMENT_NODE:
- duk_push_string(ctx, PROTO_NAME(document));
+ duk_push_string(ctx, PROTO_NAME(DOCUMENT));
break;
case DOM_ATTRIBUTE_NODE:
case DOM_PROCESSING_INSTRUCTION_NODE:
@@ -229,7 +249,7 @@ dukky_push_node_klass(duk_context *ctx, struct dom_node *node)
case DOM_CDATA_SECTION_NODE:
default:
/* Oh bum, just node then */
- duk_push_string(ctx, PROTO_NAME(node));
+ duk_push_string(ctx, PROTO_NAME(NODE));
}
}
@@ -315,8 +335,8 @@ void js_finalise(void)
/* NADA for now */
}
-#define DUKKY_NEW_PROTOTYPE(klass, klass_name) \
- dukky_create_prototype(ctx, dukky_##klass##___proto, PROTO_NAME(klass), klass_name)
+#define DUKKY_NEW_PROTOTYPE(klass, uklass, klass_name) \
+ dukky_create_prototype(ctx, dukky_##klass##___proto, PROTO_NAME(uklass), klass_name)
jscontext *js_newcontext(int timeout, jscallback *cb, void *cbctx)
{
@@ -332,20 +352,21 @@ jscontext *js_newcontext(int timeout, jscallback *cb, void *cbctx)
duk_put_prop_string(ctx, -2, "protos");
duk_put_global_string(ctx, PROTO_MAGIC);
/* Create prototypes here? */
- DUKKY_NEW_PROTOTYPE(event_target, "EventTarget");
- DUKKY_NEW_PROTOTYPE(node, "Node");
- DUKKY_NEW_PROTOTYPE(character_data, "CharacterData");
- DUKKY_NEW_PROTOTYPE(text, "Text");
- DUKKY_NEW_PROTOTYPE(comment, "Comment");
- DUKKY_NEW_PROTOTYPE(document, "Document");
- DUKKY_NEW_PROTOTYPE(element, "Element");
- DUKKY_NEW_PROTOTYPE(html_element, "HTMLElement");
- DUKKY_NEW_PROTOTYPE(html_unknown_element, "HTMLUnknownElement");
- DUKKY_NEW_PROTOTYPE(html_collection, "HTMLCollection");
- DUKKY_NEW_PROTOTYPE(node_list, "NodeList");
+ DUKKY_NEW_PROTOTYPE(event_target, EVENTTARGET, "EventTarget");
+ DUKKY_NEW_PROTOTYPE(node, NODE, "Node");
+ DUKKY_NEW_PROTOTYPE(character_data, CHARACTERDATA, "CharacterData");
+ DUKKY_NEW_PROTOTYPE(text, TEXT, "Text");
+ DUKKY_NEW_PROTOTYPE(comment, COMMENT, "Comment");
+ DUKKY_NEW_PROTOTYPE(document, DOCUMENT, "Document");
+ DUKKY_NEW_PROTOTYPE(element, ELEMENT, "Element");
+ DUKKY_NEW_PROTOTYPE(html_element, HTMLELEMENT, "HTMLElement");
+ DUKKY_NEW_PROTOTYPE(html_unknown_element, HTMLUNKNOWNELEMENT, "HTMLUnknownElement");
+ DUKKY_NEW_PROTOTYPE(html_br_element, HTMLBRELEMENT, "HTMLBRElement");
+ DUKKY_NEW_PROTOTYPE(html_collection, HTMLCOLLECTION, "HTMLCollection");
+ DUKKY_NEW_PROTOTYPE(node_list, NODELIST, "NodeList");
/* Finally window's prototype */
- DUKKY_NEW_PROTOTYPE(window, "Window");
+ DUKKY_NEW_PROTOTYPE(window, WINDOW, "Window");
return ret;
}
@@ -370,7 +391,7 @@ jsobject *js_newcompartment(jscontext *ctx, void *win_priv, void *doc_priv)
/* win_priv is a browser_window, doc_priv is an html content struct */
duk_push_pointer(CTX, win_priv);
duk_push_pointer(CTX, doc_priv);
- dukky_create_object(CTX, PROTO_NAME(window), 2);
+ dukky_create_object(CTX, PROTO_NAME(WINDOW), 2);
duk_push_global_object(CTX);
duk_put_prop_string(CTX, -2, PROTO_MAGIC);
duk_set_global_object(CTX);
diff --git a/javascript/duktape/character_data.c b/javascript/duktape/character_data.c
index a71de478f..608c6554d 100644
--- a/javascript/duktape/character_data.c
+++ b/javascript/duktape/character_data.c
@@ -41,7 +41,7 @@ DUKKY_FUNC(character_data, __proto)
/* Populate character_data's prototypical functionality */
/* Set this prototype's prototype (left-parent)*/
- DUKKY_GET_PROTOTYPE(node);
+ DUKKY_GET_PROTOTYPE(NODE);
duk_set_prototype(ctx, 0);
/* And the initialiser/finalizer */
DUKKY_SET_DESTRUCTOR(0, character_data);
diff --git a/javascript/duktape/comment.c b/javascript/duktape/comment.c
index 877793af2..8fbf79f55 100644
--- a/javascript/duktape/comment.c
+++ b/javascript/duktape/comment.c
@@ -41,7 +41,7 @@ DUKKY_FUNC(comment, __proto)
/* Populate comment's prototypical functionality */
/* Set this prototype's prototype (left-parent)*/
- DUKKY_GET_PROTOTYPE(character_data);
+ DUKKY_GET_PROTOTYPE(CHARACTERDATA);
duk_set_prototype(ctx, 0);
/* And the initialiser/finalizer */
DUKKY_SET_DESTRUCTOR(0, comment);
diff --git a/javascript/duktape/document.c b/javascript/duktape/document.c
index 76fec7501..f09629ac6 100644
--- a/javascript/duktape/document.c
+++ b/javascript/duktape/document.c
@@ -223,7 +223,7 @@ static DUKKY_FUNC(document, getElementsByTagName)
if (nodes == NULL) return 0; /* coerced to undefined */
duk_push_pointer(ctx, nodes);
- dukky_create_object(ctx, PROTO_NAME(node_list), 1);
+ dukky_create_object(ctx, PROTO_NAME(NODELIST), 1);
dom_nodelist_unref(nodes);
return 1;
}
@@ -239,7 +239,7 @@ DUKKY_FUNC(document, __proto)
DUKKY_POPULATE_READONLY_PROPERTY(document, body);
DUKKY_POPULATE_READONLY_PROPERTY(document, head);
/* Set this prototype's prototype (left-parent)*/
- DUKKY_GET_PROTOTYPE(node);
+ DUKKY_GET_PROTOTYPE(NODE);
duk_set_prototype(ctx, 0);
/* And the initialiser/finalizer */
DUKKY_SET_DESTRUCTOR(0, document);
diff --git a/javascript/duktape/element.c b/javascript/duktape/element.c
index 23c76278a..b86e940f2 100644
--- a/javascript/duktape/element.c
+++ b/javascript/duktape/element.c
@@ -211,7 +211,7 @@ DUKKY_FUNC(element, __proto)
DUKKY_POPULATE_READONLY_PROPERTY(element, previousElementSibling);
DUKKY_POPULATE_READONLY_PROPERTY(element, childElementCount);
/* Set this prototype's prototype (left-parent)*/
- DUKKY_GET_PROTOTYPE(node);
+ DUKKY_GET_PROTOTYPE(NODE);
duk_set_prototype(ctx, 0);
/* And the initialiser/finalizer */
DUKKY_SET_DESTRUCTOR(0, element);
diff --git a/javascript/duktape/html_element.c b/javascript/duktape/html_element.c
index c129866e4..1b22f6788 100644
--- a/javascript/duktape/html_element.c
+++ b/javascript/duktape/html_element.c
@@ -41,7 +41,7 @@ DUKKY_FUNC(html_element, __proto)
/* Populate html_element's prototypical functionality */
/* Set this prototype's prototype (left-parent)*/
- DUKKY_GET_PROTOTYPE(element);
+ DUKKY_GET_PROTOTYPE(ELEMENT);
duk_set_prototype(ctx, 0);
/* And the initialiser/finalizer */
DUKKY_SET_DESTRUCTOR(0, html_element);
diff --git a/javascript/duktape/html_unknown_element.c b/javascript/duktape/html_unknown_element.c
index e728b4831..977450a02 100644
--- a/javascript/duktape/html_unknown_element.c
+++ b/javascript/duktape/html_unknown_element.c
@@ -41,7 +41,7 @@ DUKKY_FUNC(html_unknown_element, __proto)
/* Populate html_unknown_element's prototypical functionality */
/* Set this prototype's prototype (left-parent)*/
- DUKKY_GET_PROTOTYPE(html_element);
+ DUKKY_GET_PROTOTYPE(HTMLELEMENT);
duk_set_prototype(ctx, 0);
/* And the initialiser/finalizer */
DUKKY_SET_DESTRUCTOR(0, html_unknown_element);
diff --git a/javascript/duktape/node.c b/javascript/duktape/node.c
index 2d7b1cf29..c81c1be10 100644
--- a/javascript/duktape/node.c
+++ b/javascript/duktape/node.c
@@ -42,7 +42,7 @@ static DUKKY_FUNC(node, appendChild)
{
DUKKY_GET_METHOD_PRIVATE(node);
- if (!dukky_instanceof(ctx, PROTO_NAME(node))) return 0;
+ if (!dukky_instanceof(ctx, PROTO_NAME(NODE))) return 0;
DUKKY_SAFE_GET_ANOTHER(other,node,0);
@@ -82,7 +82,7 @@ DUKKY_FUNC(node, __proto)
DUKKY_ADD_METHOD(node, appendChild, 1);
DUKKY_POPULATE_READONLY_PROPERTY(node, textContent);
/* Set this prototype's prototype (left-parent)*/
- DUKKY_GET_PROTOTYPE(event_target);
+ DUKKY_GET_PROTOTYPE(EVENTTARGET);
duk_set_prototype(ctx, 0);
/* And the initialiser/finalizer */
DUKKY_SET_DESTRUCTOR(0, node);
diff --git a/javascript/duktape/node_list.c b/javascript/duktape/node_list.c
index c127c2468..5ee9ec600 100644
--- a/javascript/duktape/node_list.c
+++ b/javascript/duktape/node_list.c
@@ -40,7 +40,7 @@ static DUKKY_GETTER(node_list, length)
{
DUKKY_GET_METHOD_PRIVATE(node_list);
dom_exception err;
- unsigned long len;
+ uint32_t len;
err = dom_nodelist_get_length(priv->nodes, &len);
@@ -57,8 +57,6 @@ static DUKKY_FUNC(node_list, item)
dom_exception err;
dom_node *node;
- LOG("Looking up %u in %p", i, priv->nodes);
-
err = dom_nodelist_item(priv->nodes, i, &node);
if (err != DOM_NO_ERR) return 0; /* coerced to undefied */
diff --git a/javascript/duktape/private.h b/javascript/duktape/private.h
index 42c207987..da97031f3 100644
--- a/javascript/duktape/private.h
+++ b/javascript/duktape/private.h
@@ -12,6 +12,7 @@ struct dom_node_text;
struct dom_node_list;
struct dom_node_comment;
struct dom_html_collection;
+struct dom_html_br_element;
typedef struct {
} event_target_private_t;
@@ -52,6 +53,10 @@ typedef struct {
} html_unknown_element_private_t;
typedef struct {
+ html_element_private_t parent;
+} html_br_element_private_t;
+
+typedef struct {
node_private_t parent;
} document_private_t;
diff --git a/javascript/duktape/prototypes.h b/javascript/duktape/prototypes.h
index 1f25424ac..746f85cc5 100644
--- a/javascript/duktape/prototypes.h
+++ b/javascript/duktape/prototypes.h
@@ -11,6 +11,7 @@ DUKKY_DECLARE_INTERFACE(document, struct dom_document *);
DUKKY_DECLARE_INTERFACE(element, struct dom_element *);
DUKKY_DECLARE_INTERFACE(html_element, struct dom_html_element *);
DUKKY_DECLARE_INTERFACE(html_unknown_element, struct dom_html_element *);
+DUKKY_DECLARE_INTERFACE(html_br_element, struct dom_html_br_element *);
DUKKY_DECLARE_INTERFACE(html_collection, struct dom_html_collection *);
DUKKY_DECLARE_INTERFACE(node_list, struct dom_nodelist *);
diff --git a/javascript/duktape/text.c b/javascript/duktape/text.c
index 7669bae11..26457749d 100644
--- a/javascript/duktape/text.c
+++ b/javascript/duktape/text.c
@@ -41,7 +41,7 @@ DUKKY_FUNC(text, __proto)
/* Populate text's prototypical functionality */
/* Set this prototype's prototype (left-parent)*/
- DUKKY_GET_PROTOTYPE(character_data);
+ DUKKY_GET_PROTOTYPE(CHARACTERDATA);
duk_set_prototype(ctx, 0);
/* And the initialiser/finalizer */
DUKKY_SET_DESTRUCTOR(0, text);
diff --git a/javascript/duktape/window.c b/javascript/duktape/window.c
index 3bad2ab9a..fd070aa2c 100644
--- a/javascript/duktape/window.c
+++ b/javascript/duktape/window.c
@@ -78,10 +78,10 @@ DUKKY_FUNC(window, __proto)
/* Populate window's prototypical functionality */
DUKKY_POPULATE_FULL_PROPERTY(window, document);
/* Exposed prototypes */
- DUKKY_GET_PROTOTYPE(node);
+ DUKKY_GET_PROTOTYPE(NODE);
duk_put_prop_string(ctx, 0, "Node");
/* Set this prototype's prototype (left-parent)*/
- DUKKY_GET_PROTOTYPE(event_target);
+ DUKKY_GET_PROTOTYPE(EVENTTARGET);
duk_set_prototype(ctx, 0);
/* And the initialiser/finalizer */
DUKKY_SET_DESTRUCTOR(0, window);