From 85a4792280290e7a2ce12ec200032dee1848ad12 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 4 May 2019 17:57:45 +0100 Subject: Add createElementNS Signed-off-by: Daniel Silverstone --- content/handlers/javascript/duktape/Document.bnd | 40 ++++++++++++++++++++++++ content/handlers/javascript/duktape/dukky.c | 3 +- 2 files changed, 42 insertions(+), 1 deletion(-) (limited to 'content/handlers/javascript') diff --git a/content/handlers/javascript/duktape/Document.bnd b/content/handlers/javascript/duktape/Document.bnd index 23e0425e2..8901115d6 100644 --- a/content/handlers/javascript/duktape/Document.bnd +++ b/content/handlers/javascript/duktape/Document.bnd @@ -147,6 +147,46 @@ method Document::createElement() return 1; %} +method Document::createElementNS() +%{ + dom_node *newnode; + dom_exception err; + duk_size_t text_len; + duk_size_t ns_len; + const char *ns = duk_safe_to_lstring(ctx, 0, &ns_len); + const char *text = duk_safe_to_lstring(ctx, 0, &text_len); + dom_string *text_str; + dom_string *ns_str; + + err = dom_string_create((const uint8_t*)ns, ns_len, &ns_str); + if (err != DOM_NO_ERR) return 0; /* coerced to undefined */ + + err = dom_string_create((const uint8_t*)text, text_len, &text_str); + if (err != DOM_NO_ERR) { + dom_string_unref(ns_str); + return 0; /* coerced to undefined */ + } + + err = dom_document_create_element_ns(priv->parent.node, + ns_str, + text_str, + &newnode); + if (err != DOM_NO_ERR) { + dom_string_unref(ns_str); + dom_string_unref(text_str); + return 0; /* coerced to undefined */ + } + + dom_string_unref(text_str); + dom_string_unref(ns_str); + + dukky_push_node(ctx, newnode); + + dom_node_unref(newnode); + + return 1; +%} + getter Document::head() %{ struct dom_nodelist *nodes; diff --git a/content/handlers/javascript/duktape/dukky.c b/content/handlers/javascript/duktape/dukky.c index 171736338..8fa011ebc 100644 --- a/content/handlers/javascript/duktape/dukky.c +++ b/content/handlers/javascript/duktape/dukky.c @@ -721,7 +721,8 @@ bool js_exec(jscontext *ctx, const char *txt, size_t txtlen, const char *name) assert(ctx); if (txt == NULL || txtlen == 0) return false; duk_set_top(CTX, 0); - NSLOG(dukky, DEEPDEBUG, "%zd bytes: %s", txtlen, txt); + NSLOG(dukky, DEEPDEBUG, "Running %zd bytes from %s", txtlen, name); + NSLOG(dukky, DEEPDEBUG, "\n%s\n", txt); (void) nsu_getmonotonic_ms(&ctx->exec_start_time); if (name != NULL) { -- cgit v1.2.3