diff options
author | Josh Matthews <josh@joshmatthews.net> | 2014-04-22 01:17:12 -0400 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2014-05-27 20:43:48 +0200 |
commit | 04931adf70e6dc70d09c2ceb42e2add85f58051d (patch) | |
tree | a7171cc31246f8b172d4468926ccea982f07574c /src/components/script/dom/htmlbodyelement.rs | |
parent | 33955f0ab20c5d7edd7f334459822816b2aa031e (diff) | |
download | servo-04931adf70e6dc70d09c2ceb42e2add85f58051d.tar.gz servo-04931adf70e6dc70d09c2ceb42e2add85f58051d.zip |
Compile JS strings when setting inline event handlers via element attributes.
Diffstat (limited to 'src/components/script/dom/htmlbodyelement.rs')
-rw-r--r-- | src/components/script/dom/htmlbodyelement.rs | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/components/script/dom/htmlbodyelement.rs b/src/components/script/dom/htmlbodyelement.rs index c768444126f..7f0b8efc66b 100644 --- a/src/components/script/dom/htmlbodyelement.rs +++ b/src/components/script/dom/htmlbodyelement.rs @@ -3,14 +3,16 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::codegen::BindingDeclarations::HTMLBodyElementBinding; -use dom::bindings::codegen::InheritTypes::HTMLBodyElementDerived; +use dom::bindings::codegen::InheritTypes::{HTMLBodyElementDerived, HTMLElementCast}; +use dom::bindings::codegen::InheritTypes::{EventTargetCast, NodeCast}; use dom::bindings::error::ErrorResult; use dom::bindings::js::{JSRef, Temporary}; use dom::document::Document; use dom::element::HTMLBodyElementTypeId; -use dom::eventtarget::{EventTarget, NodeTargetTypeId}; +use dom::eventtarget::{EventTarget, NodeTargetTypeId, EventTargetHelpers}; use dom::htmlelement::HTMLElement; use dom::node::{Node, ElementNodeTypeId, window_from_node}; +use dom::virtualmethods::VirtualMethods; use dom::window::WindowMethods; use js::jsapi::{JSContext, JSObject}; use servo_util::str::DOMString; @@ -115,3 +117,27 @@ impl<'a> HTMLBodyElementMethods for JSRef<'a, HTMLBodyElement> { win.SetOnunload(cx, listener) } } + +impl<'a> VirtualMethods for JSRef<'a, HTMLBodyElement> { + fn super_type<'a>(&'a mut self) -> Option<&'a mut VirtualMethods:> { + let element: &mut JSRef<HTMLElement> = HTMLElementCast::from_mut_ref(self); + Some(element as &mut VirtualMethods:) + } + + fn after_set_attr(&mut self, name: DOMString, value: DOMString) { + match self.super_type() { + Some(ref mut s) => s.after_set_attr(name.clone(), value.clone()), + _ => (), + } + + if name.starts_with("on") { + //XXXjdm This should only forward a subset of event handler names + let mut window = window_from_node(self).root(); + let mut evtarget: &mut JSRef<EventTarget> = EventTargetCast::from_mut_ref(&mut *window); + let content: &mut JSRef<Node> = NodeCast::from_mut_ref(self); + evtarget.set_event_handler_uncompiled(content, + name.slice_from(2).to_owned(), + value); + } + } +} |