aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/htmlbodyelement.rs
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2014-04-22 01:17:12 -0400
committerMs2ger <ms2ger@gmail.com>2014-05-27 20:43:48 +0200
commit04931adf70e6dc70d09c2ceb42e2add85f58051d (patch)
treea7171cc31246f8b172d4468926ccea982f07574c /src/components/script/dom/htmlbodyelement.rs
parent33955f0ab20c5d7edd7f334459822816b2aa031e (diff)
downloadservo-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.rs30
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);
+ }
+ }
+}