diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2015-10-06 17:21:44 +0200 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2015-10-21 11:37:16 +0200 |
commit | 13ea3ac413c511872784ccde416956217746553c (patch) | |
tree | 732335bbc9a5e4b42f93a0b629c76ad41cd8aa3f /components/script/dom/htmloptionelement.rs | |
parent | bd363b009db8e5e233cd862aef5c8d497495a10e (diff) | |
download | servo-13ea3ac413c511872784ccde416956217746553c.tar.gz servo-13ea3ac413c511872784ccde416956217746553c.zip |
Introduce trait Castable
This trait is used to hold onto the downcast and upcast functions of all
castable IDL interfaces. A castable IDL interface is one which either derives
from or is derived by other interfaces.
The deriving relation is represented by implementations of marker trait
DerivedFrom<T: Castable> generated in InheritTypes.
/^[ ]*use dom::bindings::codegen::InheritTypes::.*(Base|Cast|Derived)/ {
/::[a-zA-Z]+(Base|Cast|Derived);/d
s/([{ ])[a-zA-Z]+(Base|Cast|Derived), /\1/g
s/([{ ])[a-zA-Z]+(Base|Cast|Derived), /\1/g
s/, [a-zA-Z]+(Base|Cast|Derived)([},])/\2/g
s/, [a-zA-Z]+(Base|Cast|Derived)([},])/\2/g
/\{([a-zA-Z]+(Base|Cast|Derived))?\};$/d
s/\{([a-zA-Z_]+)\};$/\1;/
}
s/([a-zA-Z]+)Cast::from_ref\(\&?\**([a-zA-Z_]+)(\.r\(\))?\)/\2.upcast::<\1>()/g
s/([a-zA-Z]+)Cast::from_ref\(\&?\**([a-zA-Z_]+)(\.[a-zA-Z_]+\(\))?\)/\2\3.upcast::<\1>()/g
s/\(([a-zA-Z]+)Cast::from_ref\)/\(Castable::upcast::<\1>\)/g
s/([a-zA-Z]+)Cast::from_root/Root::upcast::<\1>/g
s/([a-zA-Z]+)Cast::from_layout_js\(\&([a-zA-Z_.]+)\)/\2.upcast::<\1>()/g
s/([a-zA-Z]+)Cast::to_ref\(\&?\**([a-zA-Z_]+)(\.r\(\))?\)/\2.downcast::<\1>()/g
s/([a-zA-Z]+)Cast::to_ref\(\&?\**([a-zA-Z_]+)(\.[a-zA-Z_]+\(\))?\)/\2\3.downcast::<\1>()/g
s/\(([a-zA-Z]+)Cast::to_ref\)/\(Castable::downcast::<\1>\)/g
s/([a-zA-Z]+)Cast::to_root/Root::downcast::<\1>/g
s/([a-zA-Z]+)Cast::to_layout_js\(&?([a-zA-Z_.]+(\(\))?)\)/\2.downcast::<\1>()/g
s/\.is_document\(\)/.is::<Document>()/g
s/\.is_htmlanchorelement\(\)/.is::<HTMLAnchorElement>()/g
s/\.is_htmlappletelement\(\)/.is::<HTMLAppletElement>()/g
s/\.is_htmlareaelement\(\)/.is::<HTMLAreaElement>()/g
s/\.is_htmlbodyelement\(\)/.is::<HTMLBodyElement>()/g
s/\.is_htmlembedelement\(\)/.is::<HTMLEmbedElement>()/g
s/\.is_htmlfieldsetelement\(\)/.is::<HTMLFieldSetElement>()/g
s/\.is_htmlformelement\(\)/.is::<HTMLFormElement>()/g
s/\.is_htmlframesetelement\(\)/.is::<HTMLFrameSetElement>()/g
s/\.is_htmlhtmlelement\(\)/.is::<HTMLHtmlElement>()/g
s/\.is_htmlimageelement\(\)/.is::<HTMLImageElement>()/g
s/\.is_htmllegendelement\(\)/.is::<HTMLLegendElement>()/g
s/\.is_htmloptgroupelement\(\)/.is::<HTMLOptGroupElement>()/g
s/\.is_htmloptionelement\(\)/.is::<HTMLOptionElement>()/g
s/\.is_htmlscriptelement\(\)/.is::<HTMLScriptElement>()/g
s/\.is_htmltabledatacellelement\(\)/.is::<HTMLTableDataCellElement>()/g
s/\.is_htmltableheadercellelement\(\)/.is::<HTMLTableHeaderCellElement>()/g
s/\.is_htmltablerowelement\(\)/.is::<HTMLTableRowElement>()/g
s/\.is_htmltablesectionelement\(\)/.is::<HTMLTableSectionElement>()/g
s/\.is_htmltitleelement\(\)/.is::<HTMLTitleElement>()/g
Diffstat (limited to 'components/script/dom/htmloptionelement.rs')
-rw-r--r-- | components/script/dom/htmloptionelement.rs | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/components/script/dom/htmloptionelement.rs b/components/script/dom/htmloptionelement.rs index b32cb7d8f11..d60ae457203 100644 --- a/components/script/dom/htmloptionelement.rs +++ b/components/script/dom/htmloptionelement.rs @@ -7,14 +7,15 @@ use dom::bindings::codegen::Bindings::CharacterDataBinding::CharacterDataMethods use dom::bindings::codegen::Bindings::HTMLOptionElementBinding; use dom::bindings::codegen::Bindings::HTMLOptionElementBinding::HTMLOptionElementMethods; use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; -use dom::bindings::codegen::InheritTypes::{CharacterDataCast, ElementCast}; -use dom::bindings::codegen::InheritTypes::{HTMLElementCast, HTMLScriptElementDerived}; -use dom::bindings::codegen::InheritTypes::{NodeCast, TextDerived}; +use dom::bindings::conversions::Castable; use dom::bindings::js::Root; +use dom::characterdata::CharacterData; use dom::document::Document; use dom::element::{AttributeMutation, Element, IN_ENABLED_STATE}; use dom::htmlelement::HTMLElement; -use dom::node::{Node}; +use dom::htmlscriptelement::HTMLScriptElement; +use dom::node::Node; +use dom::text::Text; use dom::virtualmethods::VirtualMethods; use std::cell::Cell; use util::str::{DOMString, split_html_space_chars, str_join}; @@ -54,16 +55,16 @@ impl HTMLOptionElement { fn collect_text(element: &Element, value: &mut DOMString) { let svg_script = *element.namespace() == ns!(SVG) && element.local_name() == &atom!("script"); - let html_script = element.is_htmlscriptelement(); + let html_script = element.is::<HTMLScriptElement>(); if svg_script || html_script { return; } - for child in NodeCast::from_ref(element).children() { - if child.r().is_text() { - let characterdata = CharacterDataCast::to_ref(child.r()).unwrap(); + for child in element.upcast::<Node>().children() { + if child.is::<Text>() { + let characterdata = child.downcast::<CharacterData>().unwrap(); value.push_str(&characterdata.Data()); - } else if let Some(element_child) = ElementCast::to_ref(&*child) { + } else if let Some(element_child) = child.downcast::<Element>() { collect_text(element_child, value); } } @@ -75,13 +76,13 @@ impl HTMLOptionElementMethods for HTMLOptionElement { // https://html.spec.whatwg.org/multipage/#dom-option-disabled fn SetDisabled(&self, disabled: bool) { - let elem = ElementCast::from_ref(self); + let elem = self.upcast::<Element>(); elem.set_bool_attribute(&atom!("disabled"), disabled) } // https://html.spec.whatwg.org/multipage/#dom-option-text fn Text(&self) -> DOMString { - let element = ElementCast::from_ref(self); + let element = self.upcast::<Element>(); let mut content = String::new(); collect_text(element, &mut content); str_join(split_html_space_chars(&content), " ") @@ -89,13 +90,13 @@ impl HTMLOptionElementMethods for HTMLOptionElement { // https://html.spec.whatwg.org/multipage/#dom-option-text fn SetText(&self, value: DOMString) { - let node = NodeCast::from_ref(self); + let node = self.upcast::<Node>(); node.SetTextContent(Some(value)) } // https://html.spec.whatwg.org/multipage/#attr-option-value fn Value(&self) -> DOMString { - let element = ElementCast::from_ref(self); + let element = self.upcast::<Element>(); let attr = &atom!("value"); if element.has_attribute(attr) { element.get_string_attribute(attr) @@ -109,7 +110,7 @@ impl HTMLOptionElementMethods for HTMLOptionElement { // https://html.spec.whatwg.org/multipage/#attr-option-label fn Label(&self) -> DOMString { - let element = ElementCast::from_ref(self); + let element = self.upcast::<Element>(); let attr = &atom!("label"); if element.has_attribute(attr) { element.get_string_attribute(attr) @@ -143,7 +144,7 @@ impl HTMLOptionElementMethods for HTMLOptionElement { impl VirtualMethods for HTMLOptionElement { fn super_type(&self) -> Option<&VirtualMethods> { - let htmlelement: &HTMLElement = HTMLElementCast::from_ref(self); + let htmlelement: &HTMLElement = self.upcast::<HTMLElement>(); Some(htmlelement as &VirtualMethods) } @@ -151,7 +152,7 @@ impl VirtualMethods for HTMLOptionElement { self.super_type().unwrap().attribute_mutated(attr, mutation); match attr.local_name() { &atom!(disabled) => { - let el = ElementCast::from_ref(self); + let el = self.upcast::<Element>(); match mutation { AttributeMutation::Set(_) => { el.set_disabled_state(true); @@ -189,7 +190,7 @@ impl VirtualMethods for HTMLOptionElement { s.bind_to_tree(tree_in_doc); } - let el = ElementCast::from_ref(self); + let el = self.upcast::<Element>(); el.check_parent_disabled_state_for_option(); } @@ -198,8 +199,8 @@ impl VirtualMethods for HTMLOptionElement { s.unbind_from_tree(tree_in_doc); } - let node = NodeCast::from_ref(self); - let el = ElementCast::from_ref(self); + let node = self.upcast::<Node>(); + let el = self.upcast::<Element>(); if node.GetParentNode().is_some() { el.check_parent_disabled_state_for_option(); } else { |