/* Binding to generate htmldocument */ #include "dom.bnd" webidlfile "html.idl"; hdrcomment "Part of NetSurf Project"; preamble %{ #include #include "utils/config.h" #include "utils/log.h" #include "utils/corestrings.h" #include "utils/domutils.h" #include "content/urldb.h" #include "javascript/jsapi.h" #include "javascript/jsapi/binding.h" %} binding document { type js_libdom; /* the binding type */ interface Document; /* Web IDL interface to generate */ /* parameters to constructor value stored in private * context structure. */ private "dom_document *" node; private "struct html_content *" htmlc; } api finalise %{ if (private != NULL) { JSLOG("dom_document %p in content %p", private->node, private->htmlc); dom_node_unref(private->node); } %} getter cookie %{ char *cookie_str; cookie_str = urldb_get_cookie(llcache_handle_get_url(private->htmlc->base.llcache)); if (cookie_str != NULL) { jsret = JS_NewStringCopyN(cx, cookie_str, strlen(cookie_str)); free(cookie_str); } %} getter documentElement %{ dom_exception exc; dom_element *element; /* document (html) element */ exc = dom_document_get_document_element(private->node, (void *)&element); if (exc != DOM_NO_ERR) { return JS_FALSE; } if (element != NULL) { jsret = jsapi_new_HTMLElement(cx, NULL, NULL, element, private->htmlc); } %} getter head %{ dom_node *element; dom_node *head; dom_exception exc; /* document (html) element */ exc = dom_document_get_document_element(private->node, &element); if (exc != DOM_NO_ERR) { return JS_FALSE; } if (element != NULL) { head = find_first_named_dom_element(element, corestring_lwc_head) ; if (head != NULL) { jsret = jsapi_new_HTMLElement(cx, NULL, NULL, (dom_element *)head, private->htmlc); } dom_node_unref(element); } %} getter body %{ dom_node *element; dom_node *body; dom_exception exc; /* document (html) element */ exc = dom_document_get_document_element(private->node, &element); if (exc != DOM_NO_ERR) { return JS_FALSE; } if (element != NULL) { body = find_first_named_dom_element(element, corestring_lwc_body) ; if (body != NULL) { jsret = jsapi_new_HTMLElement(cx, NULL, NULL, (dom_element *)body, private->htmlc); } dom_node_unref(element); } %} operation getElementById %{ dom_string *elementId_dom; dom_element *element; dom_exception exc; exc = dom_string_create((unsigned char*)elementId, elementId_len, &elementId_dom); if (exc != DOM_NO_ERR) { return JS_FALSE; } exc = dom_document_get_element_by_id(private->node, elementId_dom, &element); dom_string_unref(elementId_dom); if (exc != DOM_NO_ERR) { return JS_FALSE; } if (element != NULL) { jsret = jsapi_new_HTMLElement(cx, NULL, NULL, element, private->htmlc); } %} /* * * Dom 4 says this should return a htmlcollection, libdom currently * returns DOM 3 spec of a nodelist */ 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_document_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); } %} operation write %{ if (private->htmlc->parser != NULL) { dom_hubbub_parser_insert_chunk(private->htmlc->parser, (uint8_t *)text, text_len); } %}