summaryrefslogtreecommitdiff
path: root/javascript/jsapi/htmlcollection.bnd
blob: f4a11549b880f96a15f81ce4ee847fb514f80d67 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/* Binding to generate HTMLcolelction interface
 *
 * The js_libdom (javascript to libdom) binding type is currently the
 * only one implemented and this principly describes that binding.
 *
 * Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
 *
 * This file is part of NetSurf, http://www.netsurf-browser.org/
 *
 * Released under the terms of the MIT License,
 *         http://www.opensource.org/licenses/mit-license
 */

/* The hdrcomment are added into the geenrated output comment header */
hdrcomment "Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>";
hdrcomment "This file is part of NetSurf, http://www.netsurf-browser.org/";
hdrcomment "Released under the terms of the MIT License,";
hdrcomment "        http://www.opensource.org/licenses/mit-license";

preamble %{

#include <dom/dom.h>
        
#include "utils/config.h"
#include "utils/log.h"

#include "javascript/jsapi.h"
#include "javascript/jsapi/binding.h"

%}

webidlfile "dom.idl";

binding htmlcollection {
    type js_libdom; /* the binding type */

    interface HTMLCollection; /* The WebIDL interface to generate a binding for */

    private "dom_html_collection *" collection;
    private "struct html_content *" htmlc;
}

getter length %{
        dom_exception err;

        err = dom_html_collection_get_length(private->collection, &jsret);
        if (err != DOM_NO_ERR) {
                return JS_FALSE;
        }
        %}
  
operation item %{
        dom_exception err;
        dom_node *domnode;

        err = dom_html_collection_item(private->collection, index, &domnode);
        if (err != DOM_NO_ERR)  {
                return JS_FALSE;
        }

        if (domnode != NULL) {
                jsret = jsapi_new_HTMLElement(cx, NULL, NULL, (dom_element *)domnode, private->htmlc);
        }
        %}

operation namedItem %{
        dom_exception err;
        dom_node *domnode;
        dom_string *name_dom;

        err = dom_string_create((uint8_t *)name, name_len, &name_dom);
        if (err != DOM_NO_ERR) {
                return JS_FALSE;
        }

        err = dom_html_collection_named_item(private->collection, name_dom, &domnode);
        if (err != DOM_NO_ERR)  {
                return JS_FALSE;
        }

        if (domnode != NULL) {
                jsret = jsapi_new_HTMLElement(cx, NULL, NULL, (dom_element *)domnode, private->htmlc);
        }

%}

api finalise %{
        if (private != NULL) {
                dom_html_collection_unref(private->collection);
        }
%}