mirror of
https://github.com/servo/servo.git
synced 2025-06-17 04:44:28 +00:00
Generate HTMLIFrameElement bindings.
This commit is contained in:
parent
c8be8edbb2
commit
ddf4bee6df
13 changed files with 217 additions and 24 deletions
|
@ -552,6 +552,7 @@ addHTMLElement('HTMLElement')
|
|||
addHTMLElement('HTMLHeadElement')
|
||||
addHTMLElement('HTMLHtmlElement')
|
||||
addHTMLElement('HTMLHRElement')
|
||||
addHTMLElement('HTMLIFrameElement')
|
||||
addHTMLElement('HTMLImageElement')
|
||||
addHTMLElement('HTMLParagraphElement')
|
||||
addHTMLElement('HTMLScriptElement')
|
||||
|
|
|
@ -4622,6 +4622,7 @@ class CGBindingRoot(CGThing):
|
|||
'dom::htmlelement::HTMLElement', #XXXjdm
|
||||
'dom::htmldocument::HTMLDocument', #XXXjdm
|
||||
'dom::htmlhrelement::HTMLHRElement',
|
||||
'dom::htmliframeelement::HTMLIFrameElement', #XXXjdm
|
||||
'dom::htmlimageelement::HTMLImageElement', #XXXjdm
|
||||
'dom::htmlscriptelement::HTMLScriptElement',
|
||||
'dom::bindings::utils::*',
|
||||
|
|
|
@ -10,8 +10,6 @@
|
|||
* liability, trademark and document use rules apply.
|
||||
*/
|
||||
|
||||
interface Element;
|
||||
|
||||
interface HTMLCollection {
|
||||
readonly attribute unsigned long length;
|
||||
getter Element? item(unsigned long index);
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* The origin of this IDL file is
|
||||
* http://www.whatwg.org/specs/web-apps/current-work/#the-iframe-element
|
||||
* http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis
|
||||
* © Copyright 2004-2011 Apple Computer, Inc., Mozilla Foundation, and
|
||||
* Opera Software ASA. You are granted a license to use, reproduce
|
||||
* and create derivative works of this document.
|
||||
*/
|
||||
|
||||
interface HTMLIFrameElement : HTMLElement {
|
||||
[SetterThrows, Pure]
|
||||
attribute DOMString src;
|
||||
[SetterThrows, Pure]
|
||||
attribute DOMString srcdoc;
|
||||
[SetterThrows, Pure]
|
||||
attribute DOMString name;
|
||||
// [PutForwards=value] readonly attribute DOMSettableTokenList sandbox;
|
||||
// We're implementing sandbox as a string for now, see bug 845057.
|
||||
attribute DOMString sandbox;
|
||||
// attribute boolean seamless;
|
||||
[SetterThrows, Pure]
|
||||
attribute boolean allowFullscreen;
|
||||
[SetterThrows, Pure]
|
||||
attribute DOMString width;
|
||||
[SetterThrows, Pure]
|
||||
attribute DOMString height;
|
||||
readonly attribute Document? contentDocument;
|
||||
readonly attribute WindowProxy? contentWindow;
|
||||
};
|
||||
|
||||
// http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis
|
||||
partial interface HTMLIFrameElement {
|
||||
[SetterThrows, Pure]
|
||||
attribute DOMString align;
|
||||
[SetterThrows, Pure]
|
||||
attribute DOMString scrolling;
|
||||
[SetterThrows, Pure]
|
||||
attribute DOMString frameBorder;
|
||||
[SetterThrows, Pure]
|
||||
attribute DOMString longDesc;
|
||||
|
||||
[TreatNullAs=EmptyString,SetterThrows,Pure] attribute DOMString marginHeight;
|
||||
[TreatNullAs=EmptyString,SetterThrows,Pure] attribute DOMString marginWidth;
|
||||
};
|
||||
|
||||
partial interface HTMLIFrameElement {
|
||||
// GetSVGDocument
|
||||
Document? getSVGDocument();
|
||||
};
|
||||
|
||||
/*partial interface HTMLIFrameElement {
|
||||
// nsIDOMMozBrowserFrame
|
||||
[ChromeOnly,SetterThrows]
|
||||
attribute boolean mozbrowser;
|
||||
};
|
||||
|
||||
partial interface HTMLIFrameElement {
|
||||
// nsIMozBrowserFrame
|
||||
[ChromeOnly]
|
||||
readonly attribute DOMString appManifestURL;
|
||||
};
|
||||
|
||||
HTMLIFrameElement implements MozFrameLoaderOwner;*/
|
|
@ -8,13 +8,14 @@ use dom::bindings::utils;
|
|||
use dom::bindings::utils::{CacheableWrapper, WrapperCache, DerivedWrapper};
|
||||
use dom::element::{HTMLHeadElementTypeId, HTMLHtmlElementTypeId, HTMLAnchorElementTypeId};
|
||||
use dom::element::{HTMLDivElementTypeId, HTMLImageElementTypeId, HTMLSpanElementTypeId};
|
||||
use dom::element::{HTMLBodyElementTypeId, HTMLHRElementTypeId};
|
||||
use dom::element::{HTMLBodyElementTypeId, HTMLHRElementTypeId, HTMLIframeElementTypeId};
|
||||
use dom::element::{HTMLParagraphElementTypeId, HTMLScriptElementTypeId};
|
||||
use dom::element::{HTMLHeadElement, HTMLHtmlElement, HTMLDivElement, HTMLSpanElement};
|
||||
use dom::element::{HTMLParagraphElement};
|
||||
use dom::htmlanchorelement::HTMLAnchorElement;
|
||||
use dom::htmlbodyelement::HTMLBodyElement;
|
||||
use dom::htmlhrelement::HTMLHRElement;
|
||||
use dom::htmliframeelement::HTMLIFrameElement;
|
||||
use dom::htmlimageelement::HTMLImageElement;
|
||||
use dom::htmlscriptelement::HTMLScriptElement;
|
||||
use dom::node::{AbstractNode, Node, ElementNodeTypeId, TextNodeTypeId, CommentNodeTypeId};
|
||||
|
@ -88,6 +89,7 @@ pub fn create(cx: *JSContext, node: &mut AbstractNode<ScriptView>) -> *JSObject
|
|||
ElementNodeTypeId(HTMLHeadElementTypeId) => generate_element!(HTMLHeadElement),
|
||||
ElementNodeTypeId(HTMLHRElementTypeId) => generate_element!(HTMLHRElement),
|
||||
ElementNodeTypeId(HTMLHtmlElementTypeId) => generate_element!(HTMLHtmlElement),
|
||||
ElementNodeTypeId(HTMLIframeElementTypeId) => generate_element!(HTMLIFrameElement),
|
||||
ElementNodeTypeId(HTMLImageElementTypeId) => generate_element!(HTMLImageElement),
|
||||
ElementNodeTypeId(HTMLParagraphElementTypeId) => generate_element!(HTMLParagraphElement),
|
||||
ElementNodeTypeId(HTMLScriptElementTypeId) => generate_element!(HTMLScriptElement),
|
||||
|
|
|
@ -617,7 +617,7 @@ pub extern fn ThrowingConstructor(_cx: *JSContext, _argc: uint, _vp: *JSVal) ->
|
|||
}
|
||||
|
||||
pub fn initialize_global(global: *JSObject) {
|
||||
let protoArray = @mut ([0 as *JSObject, ..40]);
|
||||
let protoArray = @mut ([0 as *JSObject, ..41]);
|
||||
assert!(protoArray.len() == PrototypeList::id::_ID_Count as uint);
|
||||
unsafe {
|
||||
//XXXjdm we should be storing the box pointer instead of the inner
|
||||
|
|
|
@ -5,9 +5,10 @@
|
|||
//! Element nodes.
|
||||
|
||||
use dom::bindings::codegen::{HTMLHeadElementBinding, HTMLHtmlElementBinding};
|
||||
use dom::bindings::codegen::{HTMLAnchorElementBinding, HTMLBodyElementBinding, HTMLDivElementBinding, HTMLSpanElementBinding};
|
||||
use dom::bindings::codegen::{HTMLHRElementBinding};
|
||||
use dom::bindings::codegen::{HTMLAnchorElementBinding, HTMLBodyElementBinding};
|
||||
use dom::bindings::codegen::{HTMLHRElementBinding, HTMLIFrameElementBinding};
|
||||
use dom::bindings::codegen::{HTMLParagraphElementBinding, HTMLScriptElementBinding};
|
||||
use dom::bindings::codegen::{HTMLDivElementBinding, HTMLSpanElementBinding};
|
||||
use dom::bindings::codegen::{HTMLImageElementBinding};
|
||||
use dom::bindings::utils::{null_string, str};
|
||||
use dom::bindings::utils::{BindingObject, CacheableWrapper, DOMString, ErrorResult, WrapperCache};
|
||||
|
@ -18,6 +19,7 @@ use dom::htmlbodyelement::HTMLBodyElement;
|
|||
use dom::htmlcollection::HTMLCollection;
|
||||
use dom::htmlelement::HTMLElement;
|
||||
use dom::htmlhrelement::HTMLHRElement;
|
||||
use dom::htmliframeelement::HTMLIFrameElement;
|
||||
use dom::htmlimageelement::HTMLImageElement;
|
||||
use dom::htmlscriptelement::HTMLScriptElement;
|
||||
use dom::node::{ElementNodeTypeId, Node, ScriptView, AbstractNode};
|
||||
|
@ -28,13 +30,8 @@ use newcss::stylesheet::Stylesheet;
|
|||
use js::jsapi::{JSContext, JSObject};
|
||||
|
||||
use std::cell::Cell;
|
||||
use std::comm::ChanOne;
|
||||
use std::comm;
|
||||
use std::str::eq_slice;
|
||||
use extra::net::url::Url;
|
||||
use geom::size::Size2D;
|
||||
|
||||
use servo_msg::constellation_msg::SubpageId;
|
||||
|
||||
pub struct Element {
|
||||
parent: Node<ScriptView>,
|
||||
|
@ -195,6 +192,8 @@ generate_cacheable_wrapper!(HTMLBodyElement, HTMLBodyElementBinding::Wrap)
|
|||
generate_binding_object!(HTMLBodyElement)
|
||||
generate_cacheable_wrapper!(HTMLDivElement, HTMLDivElementBinding::Wrap)
|
||||
generate_binding_object!(HTMLDivElement)
|
||||
generate_cacheable_wrapper!(HTMLIFrameElement, HTMLIFrameElementBinding::Wrap)
|
||||
generate_binding_object!(HTMLIFrameElement)
|
||||
generate_cacheable_wrapper!(HTMLImageElement, HTMLImageElementBinding::Wrap)
|
||||
generate_binding_object!(HTMLImageElement)
|
||||
generate_cacheable_wrapper!(HTMLParagraphElement, HTMLParagraphElementBinding::Wrap)
|
||||
|
@ -214,13 +213,6 @@ pub struct HTMLHeadingElement {
|
|||
level: HeadingLevel,
|
||||
}
|
||||
|
||||
pub struct HTMLIframeElement {
|
||||
parent: HTMLElement,
|
||||
frame: Option<Url>,
|
||||
subpage_id: Option<SubpageId>,
|
||||
size_future_chan: Option<ChanOne<Size2D<uint>>>,
|
||||
}
|
||||
|
||||
//
|
||||
// Element methods
|
||||
//
|
||||
|
|
126
src/components/script/dom/htmliframeelement.rs
Normal file
126
src/components/script/dom/htmliframeelement.rs
Normal file
|
@ -0,0 +1,126 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use dom::bindings::utils::{DOMString, null_string, ErrorResult};
|
||||
use dom::document::AbstractDocument;
|
||||
use dom::htmlelement::HTMLElement;
|
||||
use dom::windowproxy::WindowProxy;
|
||||
use geom::size::Size2D;
|
||||
|
||||
use servo_msg::constellation_msg::SubpageId;
|
||||
|
||||
use std::comm::ChanOne;
|
||||
use extra::net::url::Url;
|
||||
|
||||
pub struct HTMLIFrameElement {
|
||||
parent: HTMLElement,
|
||||
frame: Option<Url>,
|
||||
subpage_id: Option<SubpageId>,
|
||||
size_future_chan: Option<ChanOne<Size2D<uint>>>,
|
||||
}
|
||||
|
||||
impl HTMLIFrameElement {
|
||||
pub fn Src(&self) -> DOMString {
|
||||
null_string
|
||||
}
|
||||
|
||||
pub fn SetSrc(&mut self, _src: &DOMString, _rv: &mut ErrorResult) {
|
||||
}
|
||||
|
||||
pub fn Srcdoc(&self) -> DOMString {
|
||||
null_string
|
||||
}
|
||||
|
||||
pub fn SetSrcdoc(&mut self, _srcdoc: &DOMString, _rv: &mut ErrorResult) {
|
||||
}
|
||||
|
||||
pub fn Name(&self) -> DOMString {
|
||||
null_string
|
||||
}
|
||||
|
||||
pub fn SetName(&mut self, _name: &DOMString, _rv: &mut ErrorResult) {
|
||||
}
|
||||
|
||||
pub fn Sandbox(&self) -> DOMString {
|
||||
null_string
|
||||
}
|
||||
|
||||
pub fn SetSandbox(&self, _sandbox: &DOMString) {
|
||||
}
|
||||
|
||||
pub fn AllowFullscreen(&self) -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
pub fn SetAllowFullscreen(&mut self, _allow: bool, _rv: &mut ErrorResult) {
|
||||
}
|
||||
|
||||
pub fn Width(&self) -> DOMString {
|
||||
null_string
|
||||
}
|
||||
|
||||
pub fn SetWidth(&mut self, _width: &DOMString, _rv: &mut ErrorResult) {
|
||||
}
|
||||
|
||||
pub fn Height(&self) -> DOMString {
|
||||
null_string
|
||||
}
|
||||
|
||||
pub fn SetHeight(&mut self, _height: &DOMString, _rv: &mut ErrorResult) {
|
||||
}
|
||||
|
||||
pub fn GetContentDocument(&self) -> Option<AbstractDocument> {
|
||||
None
|
||||
}
|
||||
|
||||
pub fn GetContentWindow(&self) -> Option<@mut WindowProxy> {
|
||||
None
|
||||
}
|
||||
|
||||
pub fn Align(&self) -> DOMString {
|
||||
null_string
|
||||
}
|
||||
|
||||
pub fn SetAlign(&mut self, _align: &DOMString, _rv: &mut ErrorResult) {
|
||||
}
|
||||
|
||||
pub fn Scrolling(&self) -> DOMString {
|
||||
null_string
|
||||
}
|
||||
|
||||
pub fn SetScrolling(&mut self, _scrolling: &DOMString, _rv: &mut ErrorResult) {
|
||||
}
|
||||
|
||||
pub fn FrameBorder(&self) -> DOMString {
|
||||
null_string
|
||||
}
|
||||
|
||||
pub fn SetFrameBorder(&mut self, _frameborder: &DOMString, _rv: &mut ErrorResult) {
|
||||
}
|
||||
|
||||
pub fn LongDesc(&self) -> DOMString {
|
||||
null_string
|
||||
}
|
||||
|
||||
pub fn SetLongDesc(&mut self, _longdesc: &DOMString, _rv: &mut ErrorResult) {
|
||||
}
|
||||
|
||||
pub fn MarginHeight(&self) -> DOMString {
|
||||
null_string
|
||||
}
|
||||
|
||||
pub fn SetMarginHeight(&mut self, _marginheight: &DOMString, _rv: &mut ErrorResult) {
|
||||
}
|
||||
|
||||
pub fn MarginWidth(&self) -> DOMString {
|
||||
null_string
|
||||
}
|
||||
|
||||
pub fn SetMarginWidth(&mut self, _marginwidth: &DOMString, _rv: &mut ErrorResult) {
|
||||
}
|
||||
|
||||
pub fn GetSVGDocument(&self) -> Option<AbstractDocument> {
|
||||
None
|
||||
}
|
||||
}
|
|
@ -11,9 +11,10 @@ use dom::bindings::utils::{BindingObject, CacheableWrapper, rust_box};
|
|||
use dom::bindings;
|
||||
use dom::characterdata::CharacterData;
|
||||
use dom::document::AbstractDocument;
|
||||
use dom::element::{Element, ElementTypeId, HTMLImageElementTypeId, HTMLIframeElementTypeId, HTMLIframeElement};
|
||||
use dom::element::{Element, ElementTypeId, HTMLImageElementTypeId, HTMLIframeElementTypeId};
|
||||
use dom::element::{HTMLStyleElementTypeId};
|
||||
use dom::htmlimageelement::HTMLImageElement;
|
||||
use dom::htmliframeelement::HTMLIFrameElement;
|
||||
use dom::window::Window;
|
||||
|
||||
use std::cast;
|
||||
|
@ -401,14 +402,14 @@ impl<'self, View> AbstractNode<View> {
|
|||
self.type_id() == ElementNodeTypeId(HTMLIframeElementTypeId)
|
||||
}
|
||||
|
||||
pub fn with_imm_iframe_element<R>(self, f: &fn(&HTMLIframeElement) -> R) -> R {
|
||||
pub fn with_imm_iframe_element<R>(self, f: &fn(&HTMLIFrameElement) -> R) -> R {
|
||||
if !self.is_iframe_element() {
|
||||
fail!(~"node is not an iframe element");
|
||||
}
|
||||
self.transmute(f)
|
||||
}
|
||||
|
||||
pub fn with_mut_iframe_element<R>(self, f: &fn(&mut HTMLIframeElement) -> R) -> R {
|
||||
pub fn with_mut_iframe_element<R>(self, f: &fn(&mut HTMLIFrameElement) -> R) -> R {
|
||||
if !self.is_iframe_element() {
|
||||
fail!(~"node is not an iframe element");
|
||||
}
|
||||
|
|
|
@ -18,8 +18,8 @@ use dom::element::{HTMLAnchorElementTypeId, HTMLAsideElementTypeId, HTMLBRElemen
|
|||
use dom::element::{HTMLAsideElement, HTMLBRElement,
|
||||
HTMLBoldElement, HTMLDivElement, HTMLFontElement, HTMLFormElement,
|
||||
HTMLHeadElement, HTMLHeadingElement, HTMLHtmlElement,
|
||||
HTMLInputElement, HTMLIframeElement,
|
||||
HTMLItalicElement, HTMLLinkElement, HTMLListItemElement, HTMLMetaElement,
|
||||
HTMLInputElement, HTMLItalicElement, HTMLLinkElement,
|
||||
HTMLListItemElement, HTMLMetaElement,
|
||||
HTMLOListElement, HTMLOptionElement, HTMLParagraphElement,
|
||||
HTMLSectionElement, HTMLSelectElement, HTMLSmallElement,
|
||||
HTMLSpanElement, HTMLStyleElement, HTMLTableBodyElement,
|
||||
|
@ -30,6 +30,7 @@ use dom::element::{HTMLHeadingElementTypeId, Heading1, Heading2, Heading3, Headi
|
|||
use dom::htmlanchorelement::HTMLAnchorElement;
|
||||
use dom::htmlbodyelement::HTMLBodyElement;
|
||||
use dom::htmlhrelement::HTMLHRElement;
|
||||
use dom::htmliframeelement::HTMLIFrameElement;
|
||||
use dom::htmlimageelement::HTMLImageElement;
|
||||
use dom::htmlscriptelement::HTMLScriptElement;
|
||||
use dom::element::{Element, Attr};
|
||||
|
@ -229,7 +230,7 @@ fn build_element_from_tag(cx: *JSContext, tag: &str) -> AbstractNode<ScriptView>
|
|||
handle_element!(cx, tag, "ul", HTMLUListElementTypeId, HTMLUListElement, []);
|
||||
|
||||
handle_element!(cx, tag, "img", HTMLImageElementTypeId, HTMLImageElement, [(image: None)]);
|
||||
handle_element!(cx, tag, "iframe", HTMLIframeElementTypeId, HTMLIframeElement, [(frame: None), (size_future_chan: None), (subpage_id: None)]);
|
||||
handle_element!(cx, tag, "iframe", HTMLIframeElementTypeId, HTMLIFrameElement, [(frame: None), (size_future_chan: None), (subpage_id: None)]);
|
||||
|
||||
handle_element!(cx, tag, "h1", HTMLHeadingElementTypeId, HTMLHeadingElement, [(level: Heading1)]);
|
||||
handle_element!(cx, tag, "h2", HTMLHeadingElementTypeId, HTMLHeadingElement, [(level: Heading2)]);
|
||||
|
|
|
@ -51,6 +51,7 @@ pub mod dom {
|
|||
pub mod HTMLHeadElementBinding;
|
||||
pub mod HTMLHRElementBinding;
|
||||
pub mod HTMLHtmlElementBinding;
|
||||
pub mod HTMLIFrameElementBinding;
|
||||
pub mod HTMLImageElementBinding;
|
||||
pub mod HTMLParagraphElementBinding;
|
||||
pub mod HTMLScriptElementBinding;
|
||||
|
@ -81,6 +82,7 @@ pub mod dom {
|
|||
pub mod htmldocument;
|
||||
pub mod htmlelement;
|
||||
pub mod htmlhrelement;
|
||||
pub mod htmliframeelement;
|
||||
pub mod htmlimageelement;
|
||||
pub mod htmlscriptelement;
|
||||
pub mod mouseevent;
|
||||
|
|
|
@ -16,5 +16,6 @@
|
|||
<embed></embed>
|
||||
<form></form>
|
||||
<applet></applet>
|
||||
<iframe></iframe>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -130,6 +130,7 @@ document.title = "foo";
|
|||
window.alert(document.title);
|
||||
|
||||
window.alert(document.links[0]);
|
||||
window.alert(document.getElementsByTagName('iframe')[0]);
|
||||
|
||||
window.alert(document.getElementsByTagName("body")[0]);
|
||||
//TODO: Doesn't work until we throw proper exceptions instead of returning 0 on
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue