/* Binding for browser using ductape and libdom * * Copyright 2015 Vincent Sanders * * 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 "console.idl"; preface %{ /* DukTape JavaScript bindings for NetSurf browser * * Copyright 2015 Vincent Sanders * 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() %{ %}