summaryrefslogtreecommitdiff
path: root/test/data/bindings/browser-duk.bnd
blob: 44497a1de42cb50d9ffdeae99b74fe18c5788b2d (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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
/* Binding for browser using ductape and libdom
 *
 * Copyright 2015 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
 */

binding duk_libdom {
	webidl "dom.idl";
	webidl "html.idl";
	webidl "uievents.idl";
	webidl "urlutils.idl";
	webidl "console.idl";

	preface
%{
/* DukTape JavaScript bindings for NetSurf browser
 *
 * Copyright 2015 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
 */
%};

	prologue %{
/* binding prologue */
		%};

	epilogue %{
/* binding epilogue */
		%};

	postface %{
/* binding postface */
		%};	
}

#include "HTMLUnknownElement.bnd"

/* specialisations of html_element */
init HTMLFontElement("struct dom_html_element *" html_font_element::html_element);
init HTMLDirectoryElement("struct dom_html_element *" html_directory_element::html_element);
init HTMLFrameElement("struct dom_html_element *" html_frame_element::html_element);
init HTMLFrameSetElement("struct dom_html_element *" html_frame_set_element::html_element);
init HTMLMarqueeElement("struct dom_html_element *" html_marquee_element::html_element);
init HTMLAppletElement("struct dom_html_element *" html_applet_element::html_element);
init HTMLCanvasElement("struct dom_html_element *" html_canvas_element::html_element);
init HTMLTemplateElement("struct dom_html_element *" html_template_element::html_element);
init HTMLScriptElement("struct dom_html_element *" html_script_element::html_element);
init HTMLDialogElement("struct dom_html_element *" html_dialog_element::html_element);
init HTMLMenuItemElement("struct dom_html_element *" html_menu_item_element::html_element);
init HTMLMenuElement("struct dom_html_element *" html_menu_element::html_element);
init HTMLDetailsElement("struct dom_html_element *" html_details_element::html_element);
init HTMLLegendElement("struct dom_html_element *" html_legend_element::html_element);
init HTMLFieldSetElement("struct dom_html_element *" html_field_set_element::html_element);
init HTMLMeterElement("struct dom_html_element *" html_meter_element::html_element);
init HTMLProgressElement("struct dom_html_element *" html_progress_element::html_element);
init HTMLOutputElement("struct dom_html_element *" html_output_element::html_element);
init HTMLKeygenElement("struct dom_html_element *" html_keygen_element::html_element);
init HTMLTextAreaElement("struct dom_html_element *" html_text_area_element::html_element);
init HTMLOptionElement("struct dom_html_element *" html_option_element::html_element);
init HTMLOptGroupElement("struct dom_html_element *" html_opt_group_element::html_element);
init HTMLDataListElement("struct dom_html_element *" html_data_list_element::html_element);
init HTMLSelectElement("struct dom_html_element *" html_select_element::html_element);
init HTMLButtonElement("struct dom_html_element *" html_button_element::html_element);
init HTMLInputElement("struct dom_html_element *" html_input_element::html_element);
init HTMLLabelElement("struct dom_html_element *" html_label_element::html_element);
init HTMLFormElement("struct dom_html_element *" html_form_element::html_element);
init HTMLTableCellElement("struct dom_html_element *" html_table_cell_element::html_element);
init HTMLTableRowElement("struct dom_html_element *" html_table_row_element::html_element);
init HTMLTableSectionElement("struct dom_html_element *" html_table_section_element::html_element);
init HTMLTableColElement("struct dom_html_element *" html_table_col_element::html_element);
init HTMLTableCaptionElement("struct dom_html_element *" html_table_caption_element::html_element);
init HTMLTableElement("struct dom_html_element *" html_table_element::html_element);
init HTMLAreaElement("struct dom_html_element *" html_area_element::html_element);
init HTMLMapElement("struct dom_html_element *" html_map_element::html_element);
init HTMLMediaElement("struct dom_html_element *" html_media_element::html_element);
init HTMLTrackElement("struct dom_html_element *" html_track_element::html_element);
init HTMLParamElement("struct dom_html_element *" html_param_element::html_element);
init HTMLObjectElement("struct dom_html_element *" html_object_element::html_element);
init HTMLEmbedElement("struct dom_html_element *" html_embed_element::html_element);
init HTMLIFrameElement("struct dom_html_element *" html_i_frame_element::html_element);
init HTMLImageElement("struct dom_html_element *" html_image_element::html_element);
init HTMLSourceElement("struct dom_html_element *" html_source_element::html_element);
init HTMLPictureElement("struct dom_html_element *" html_picture_element::html_element);
init HTMLModElement("struct dom_html_element *" html_mod_element::html_element);
init HTMLBRElement("struct dom_html_element *" html_br_element::html_element);
init HTMLSpanElement("struct dom_html_element *" html_span_element::html_element);
init HTMLTimeElement("struct dom_html_element *" html_time_element::html_element);
init HTMLDataElement("struct dom_html_element *" html_data_element::html_element);
init HTMLAnchorElement("struct dom_html_element *" html_anchor_element::html_element);
init HTMLDivElement("struct dom_html_element *" html_div_element::html_element);
init HTMLDListElement("struct dom_html_element *" html_d_list_element::html_element);
init HTMLLIElement("struct dom_html_element *" html_li_element::html_element);
init HTMLUListElement("struct dom_html_element *" html_u_list_element::html_element);
init HTMLOListElement("struct dom_html_element *" html_o_list_element::html_element);
init HTMLQuoteElement("struct dom_html_element *" html_quote_element::html_element);
init HTMLPreElement("struct dom_html_element *" html_pre_element::html_element);
init HTMLHRElement("struct dom_html_element *" html_hr_element::html_element);
init HTMLParagraphElement("struct dom_html_element *" html_paragraph_element::html_element);
init HTMLHeadingElement("struct dom_html_element *" html_heading_element::html_element);
init HTMLBodyElement("struct dom_html_element *" html_body_element::html_element);
init HTMLStyleElement("struct dom_html_element *" html_style_element::html_element);
init HTMLMetaElement("struct dom_html_element *" html_meta_element::html_element);
init HTMLLinkElement("struct dom_html_element *" html_link_element::html_element);
init HTMLBaseElement("struct dom_html_element *" html_base_element::html_element);
init HTMLTitleElement("struct dom_html_element *" html_title_element::html_element);
init HTMLHeadElement("struct dom_html_element *" html_head_element::html_element);
init HTMLHtmlElement("struct dom_html_element *" html_html_element::html_element);

/* specialisations of HTMLTableCellElement */
init HTMLTableHeaderCellElement("struct dom_html_element *" html_table_header_cell_element::html_table_cell_element);
init HTMLTableDataCellElement("struct dom_html_element *" html_table_data_cell_element::html_table_cell_element);

/* specialisations of html_media_element */
init HTMLAudioElement("struct dom_html_element *" html_audio_element::html_media_element);
init HTMLVideoElement("struct dom_html_element *" html_video_element::html_media_element);

init HTMLElement("struct dom_html_element *" html_element::element);

init Text("struct dom_node_text *" text::character_data);
init Comment("struct dom_node_comment *" comment::character_data);
init ProcessingInstruction("struct dom_node_text *" text::character_data);

init XMLDocument("struct dom_document *" document);

init Element("struct dom_element *" element::node);
init CharacterData("struct dom_node_character_data *" character_data::node);
init DocumentFragment("struct dom_document *" document::node);
init DocumentType("struct dom_document *" document::node);
init Document("struct dom_document *" document::node);

class Node {
	private "dom_node *" node;
}

init Node("struct dom_node *" node)
%{
	priv->node = node;
	dom_node_ref(node);
%}

fini Node()
%{
	dom_node_unref(priv->node);
%}

method Node::appendChild()
%{
	if (!dukky_instanceof(ctx, PROTO_NAME(NODE))) return 0;

	DUKKY_SAFE_GET_ANOTHER(other,node,0);

	dom_exception err;
	dom_node *spare;

	err = dom_node_append_child(priv->node, other->node, &spare);
	if (err != DOM_NO_ERR) return 0;
	dom_node_unref(spare);
%}

getter Node::textContent()
%{
	dom_exception exc;
	dom_string *content;

	exc = dom_node_get_text_content(priv->node, &content);
	if (exc != DOM_NO_ERR) {
		return 0;
	}

	if (content != NULL) {
		duk_push_lstring(ctx, dom_string_data(content), dom_string_length(content));
		dom_string_unref(content);
		return 1;
	}
%}

setter Node::textContent()
%{
%}