diff options
Diffstat (limited to 'src/components/script/dom/document.rs')
-rw-r--r-- | src/components/script/dom/document.rs | 227 |
1 files changed, 218 insertions, 9 deletions
diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs index 15e52846aec..f497e533fba 100644 --- a/src/components/script/dom/document.rs +++ b/src/components/script/dom/document.rs @@ -2,16 +2,26 @@ * 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::document; -use dom::bindings::utils::{DOMString, WrapperCache}; +use dom::bindings::codegen::DocumentBinding; +use dom::bindings::codegen::DocumentBinding::VisibilityState; +use dom::bindings::codegen::DocumentBinding::VisibilityStateValues::Visible; +use dom::bindings::utils::{DOMString, WrapperCache, ErrorResult, null_string}; +use dom::bindings::utils::{BindingObject, CacheableWrapper}; +use dom::element::{HTMLHtmlElement, HTMLHtmlElementTypeId, Element}; +use dom::event::Event_; use dom::htmlcollection::HTMLCollection; -use dom::node::{AbstractNode, ScriptView}; +use dom::node::{AbstractNode, ScriptView, Node}; use dom::window::Window; +use dom::windowproxy::WindowProxy; use script_task::global_script_context; -use js::jsapi::{JS_AddObjectRoot, JS_RemoveObjectRoot}; +use js::JSPROP_ENUMERATE; +use js::glue::*; +use js::jsapi::{JS_AddObjectRoot, JS_RemoveObjectRoot, JSObject, JSContext}; use servo_util::tree::{TreeNodeRef, TreeUtils}; +use std::cast; +use std::ptr; use std::str::eq_slice; pub struct Document { @@ -33,13 +43,81 @@ pub fn Document(root: AbstractNode<ScriptView>, window: Option<@mut Window>) -> let rootable = base.wrapper.get_rootable(); JS_AddObjectRoot(compartment.cx.ptr, rootable); } - document::create(compartment, doc); + + let cx = global_script_context().js_compartment.cx.ptr; + doc.wrap_object_shared(cx, ptr::null()); //XXXjdm a proper scope would be nice + + match window { + Some(win) => { + //FIXME: This is a hack until Window is autogenerated + let compartment = (*win.script_task).js_compartment; + compartment.define_property(~"document", + RUST_OBJECT_TO_JSVAL(doc.wrapper.wrapper), + GetJSClassHookStubPointer(PROPERTY_STUB) as *u8, + GetJSClassHookStubPointer(STRICT_PROPERTY_STUB) as *u8, + JSPROP_ENUMERATE); + } + None => () + } doc } } +impl CacheableWrapper for Document { + fn get_wrappercache(&mut self) -> &mut WrapperCache { + unsafe { cast::transmute(&self.wrapper) } + } + + fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject { + let mut unused = false; + DocumentBinding::Wrap(cx, scope, self, &mut unused) + } +} + +impl BindingObject for Document { + fn GetParentObject(&self, _cx: *JSContext) -> @mut CacheableWrapper { + match self.window { + Some(win) => win as @mut CacheableWrapper, + None => fail!("whoops") + } + } +} + impl Document { - pub fn getElementsByTagName(&self, tag: DOMString) -> Option<@mut HTMLCollection> { + pub fn Constructor(_owner: @mut Window, _rv: &mut ErrorResult) -> @mut Document { + let root = ~HTMLHtmlElement { + parent: Element::new(HTMLHtmlElementTypeId, ~"html") + }; + + let root = unsafe { Node::as_abstract_node(root) }; + Document(root, None) + } + + pub fn URL(&self) -> DOMString { + null_string + } + + pub fn DocumentURI(&self) -> DOMString { + null_string + } + + pub fn CompatMode(&self) -> DOMString { + null_string + } + + pub fn CharacterSet(&self) -> DOMString { + null_string + } + + pub fn ContentType(&self) -> DOMString { + null_string + } + + pub fn GetDocumentElement(&self) -> Option<AbstractNode<ScriptView>> { + Some(self.root) + } + + pub fn GetElementsByTagName(&self, tag: DOMString) -> @mut HTMLCollection { let mut elements = ~[]; let tag = tag.to_str(); let _ = for self.root.traverse_preorder |child| { @@ -51,10 +129,141 @@ impl Document { } } }; - Some(HTMLCollection::new(elements)) + HTMLCollection::new(elements) + } + + pub fn GetElementsByTagNameNS(&self, _ns: DOMString, _tag: DOMString) -> @mut HTMLCollection { + HTMLCollection::new(~[]) + } + + pub fn GetElementsByClassName(&self, _class: DOMString) -> @mut HTMLCollection { + HTMLCollection::new(~[]) + + } + + pub fn GetElementById(&self, _id: DOMString) -> Option<AbstractNode<ScriptView>> { + None + } + + pub fn CreateElement(&self, _local_name: DOMString, _rv: &mut ErrorResult) -> AbstractNode<ScriptView> { + fail!("stub") + } + + pub fn CreateElementNS(&self, _namespace: DOMString, _qualified_name: DOMString, _rv: &mut ErrorResult) -> AbstractNode<ScriptView> { + fail!("stub") + } + + pub fn CreateEvent(&self, _interface: DOMString, _rv: &mut ErrorResult) -> @mut Event_ { + fail!("stub") + } + + pub fn GetInputEncoding(&self) -> DOMString { + null_string + } + + pub fn Referrer(&self) -> DOMString { + null_string + } + + pub fn LastModified(&self) -> DOMString { + null_string + } + + pub fn ReadyState(&self) -> DOMString { + null_string + } + + pub fn Title(&self) -> DOMString { + null_string + } + + pub fn SetTitle(&self, _title: DOMString, _rv: &mut ErrorResult) { + } + + pub fn Dir(&self) -> DOMString { + null_string + } + + pub fn SetDir(&self, _dir: DOMString) { + } + + pub fn GetDefaultView(&self) -> Option<@mut WindowProxy> { + None + } + + pub fn GetActiveElement(&self) -> Option<AbstractNode<ScriptView>> { + None + } + + pub fn HasFocus(&self, _rv: &mut ErrorResult) -> bool { + false + } + + pub fn GetCurrentScript(&self) -> Option<AbstractNode<ScriptView>> { + None + } + + pub fn ReleaseCapture(&self) { + } + + pub fn MozFullScreenEnabled(&self) -> bool { + false + } + + pub fn GetMozFullScreenElement(&self, _rv: &mut ErrorResult) -> Option<AbstractNode<ScriptView>> { + None + } + + pub fn GetMozPointerLockElement(&self) -> Option<AbstractNode<ScriptView>> { + None + } + + pub fn MozExitPointerLock(&self) { + } + + pub fn Hidden(&self) -> bool { + false + } + + pub fn MozHidden(&self) -> bool { + self.Hidden() + } + + pub fn VisibilityState(&self) -> VisibilityState { + Visible + } + + pub fn MozVisibilityState(&self) -> VisibilityState { + self.VisibilityState() + } + + pub fn GetSelectedStyleSheetSet(&self) -> DOMString { + null_string + } + + pub fn SetSelectedStyleSheetSet(&self, _sheet: DOMString) { + } + + pub fn GetLastStyleSheetSet(&self) -> DOMString { + null_string + } + + pub fn GetPreferredStyleSheetSet(&self) -> DOMString { + null_string + } + + pub fn EnableStyleSheetsForSet(&self, _name: DOMString) { + } + + pub fn ElementFromPoint(&self, _x: f32, _y: f32) -> Option<AbstractNode<ScriptView>> { + None + } + + pub fn QuerySelector(&self, _selectors: DOMString, _rv: &mut ErrorResult) -> Option<AbstractNode<ScriptView>> { + None } - pub fn getElementsByName(&self, name: DOMString) -> Option<@mut HTMLCollection> { + pub fn GetElementsByName(&self, name: DOMString) -> @mut HTMLCollection { let mut elements = ~[]; let name = name.to_str(); let _ = for self.root.traverse_preorder |child| { @@ -67,7 +276,7 @@ impl Document { } } }; - Some(HTMLCollection::new(elements)) + HTMLCollection::new(elements) } pub fn content_changed(&self) { |