servo: Merge #8041 - Introduce trait Castable (from nox:castable); r=jdm
Removes all those messy FooCast structures in InheritTypes.rs. Source-Repo: https://github.com/servo/servo Source-Revision: 674589c370d978f543e71f995d58c5b28e6e9842
This commit is contained in:
@@ -5,13 +5,13 @@
|
||||
use dom::attr::Attr;
|
||||
use dom::bindings::codegen::Bindings::HTMLOptGroupElementBinding;
|
||||
use dom::bindings::codegen::Bindings::HTMLOptGroupElementBinding::HTMLOptGroupElementMethods;
|
||||
use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, HTMLOptionElementCast};
|
||||
use dom::bindings::codegen::InheritTypes::{HTMLOptionElementDerived, NodeCast};
|
||||
use dom::bindings::conversions::Castable;
|
||||
use dom::bindings::js::Root;
|
||||
use dom::document::Document;
|
||||
use dom::element::{AttributeMutation, IN_ENABLED_STATE};
|
||||
use dom::element::{AttributeMutation, Element, IN_ENABLED_STATE};
|
||||
use dom::htmlelement::HTMLElement;
|
||||
use dom::node::{Node};
|
||||
use dom::htmloptionelement::HTMLOptionElement;
|
||||
use dom::node::Node;
|
||||
use dom::virtualmethods::VirtualMethods;
|
||||
use util::str::DOMString;
|
||||
|
||||
@@ -50,8 +50,7 @@ impl HTMLOptGroupElementMethods for HTMLOptGroupElement {
|
||||
|
||||
impl VirtualMethods for HTMLOptGroupElement {
|
||||
fn super_type(&self) -> Option<&VirtualMethods> {
|
||||
let htmlelement: &HTMLElement = HTMLElementCast::from_ref(self);
|
||||
Some(htmlelement as &VirtualMethods)
|
||||
Some(self.upcast::<HTMLElement>() as &VirtualMethods)
|
||||
}
|
||||
|
||||
fn attribute_mutated(&self, attr: &Attr, mutation: AttributeMutation) {
|
||||
@@ -66,22 +65,21 @@ impl VirtualMethods for HTMLOptGroupElement {
|
||||
},
|
||||
AttributeMutation::Removed => false,
|
||||
};
|
||||
let node = NodeCast::from_ref(self);
|
||||
let el = ElementCast::from_ref(self);
|
||||
let el = self.upcast::<Element>();
|
||||
el.set_disabled_state(disabled_state);
|
||||
el.set_enabled_state(!disabled_state);
|
||||
let options = node.children().filter(|child| {
|
||||
child.is_htmloptionelement()
|
||||
}).map(|child| Root::from_ref(HTMLOptionElementCast::to_ref(child.r()).unwrap()));
|
||||
let options = el.upcast::<Node>().children().filter(|child| {
|
||||
child.is::<HTMLOptionElement>()
|
||||
}).map(|child| Root::from_ref(child.downcast::<HTMLOptionElement>().unwrap()));
|
||||
if disabled_state {
|
||||
for option in options {
|
||||
let el = ElementCast::from_ref(option.r());
|
||||
let el = option.upcast::<Element>();
|
||||
el.set_disabled_state(true);
|
||||
el.set_enabled_state(false);
|
||||
}
|
||||
} else {
|
||||
for option in options {
|
||||
let el = ElementCast::from_ref(option.r());
|
||||
let el = option.upcast::<Element>();
|
||||
el.check_disabled_attribute();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user