aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/node.rs
diff options
context:
space:
mode:
authorAlexandrov Sergey <splavgm@gmail.com>2016-10-05 00:16:45 +0300
committerAlexandrov Sergey <splavgm@gmail.com>2016-10-06 18:22:53 +0300
commit9876020c2258ef833044596944ab0aa5370b0a74 (patch)
treef563c5ce4efbda8105eadd206f5b4bbe24073a8d /components/script/dom/node.rs
parent318b23ed0047cc39625ca2f33a55d647b5886019 (diff)
downloadservo-9876020c2258ef833044596944ab0aa5370b0a74.tar.gz
servo-9876020c2258ef833044596944ab0aa5370b0a74.zip
add SVGElement, SVGGraphicsElement interfaces and SVGSVGElement element
Diffstat (limited to 'components/script/dom/node.rs')
-rw-r--r--components/script/dom/node.rs16
1 files changed, 13 insertions, 3 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 041d6407418..70d73725cf4 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -23,6 +23,7 @@ use dom::bindings::error::{Error, ErrorResult, Fallible};
use dom::bindings::global::GlobalRef;
use dom::bindings::inheritance::{Castable, CharacterDataTypeId, ElementTypeId};
use dom::bindings::inheritance::{EventTargetTypeId, HTMLElementTypeId, NodeTypeId};
+use dom::bindings::inheritance::{SVGElementTypeId, SVGGraphicsElementTypeId};
use dom::bindings::js::{JS, LayoutJS, MutNullableHeap};
use dom::bindings::js::Root;
use dom::bindings::js::RootedReference;
@@ -36,7 +37,7 @@ use dom::documenttype::DocumentType;
use dom::element::{Element, ElementCreator};
use dom::eventtarget::EventTarget;
use dom::htmlbodyelement::HTMLBodyElement;
-use dom::htmlcanvaselement::LayoutHTMLCanvasElementHelpers;
+use dom::htmlcanvaselement::{HTMLCanvasElement, LayoutHTMLCanvasElementHelpers};
use dom::htmlcollection::HTMLCollection;
use dom::htmlelement::HTMLElement;
use dom::htmliframeelement::{HTMLIFrameElement, HTMLIFrameElementLayoutMethods};
@@ -46,6 +47,7 @@ use dom::htmltextareaelement::{HTMLTextAreaElement, LayoutHTMLTextAreaElementHel
use dom::nodelist::NodeList;
use dom::processinginstruction::ProcessingInstruction;
use dom::range::WeakRangeVec;
+use dom::svgsvgelement::{SVGSVGElement, LayoutSVGSVGElementHelpers};
use dom::text::Text;
use dom::virtualmethods::{VirtualMethods, vtable_for};
use dom::window::Window;
@@ -59,7 +61,7 @@ use libc::{self, c_void, uintptr_t};
use msg::constellation_msg::PipelineId;
use parse::html::parse_html_fragment;
use ref_slice::ref_slice;
-use script_layout_interface::{HTMLCanvasData, OpaqueStyleAndLayoutData};
+use script_layout_interface::{HTMLCanvasData, OpaqueStyleAndLayoutData, SVGSVGData};
use script_layout_interface::{LayoutElementType, LayoutNodeType, TrustedNodeAddress};
use script_layout_interface::message::Msg;
use script_traits::UntrustedNodeAddress;
@@ -955,6 +957,7 @@ pub trait LayoutNodeHelpers {
fn selection(&self) -> Option<Range<usize>>;
fn image_url(&self) -> Option<Url>;
fn canvas_data(&self) -> Option<HTMLCanvasData>;
+ fn svg_data(&self) -> Option<SVGSVGData>;
fn iframe_pipeline_id(&self) -> PipelineId;
fn opaque(&self) -> OpaqueNode;
}
@@ -1088,10 +1091,15 @@ impl LayoutNodeHelpers for LayoutJS<Node> {
}
fn canvas_data(&self) -> Option<HTMLCanvasData> {
- self.downcast()
+ self.downcast::<HTMLCanvasElement>()
.map(|canvas| canvas.data())
}
+ fn svg_data(&self) -> Option<SVGSVGData> {
+ self.downcast::<SVGSVGElement>()
+ .map(|svg| svg.data())
+ }
+
fn iframe_pipeline_id(&self) -> PipelineId {
let iframe_element = self.downcast::<HTMLIFrameElement>()
.expect("not an iframe element!");
@@ -2687,6 +2695,8 @@ impl Into<LayoutElementType> for ElementTypeId {
LayoutElementType::HTMLTableSectionElement,
ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTextAreaElement) =>
LayoutElementType::HTMLTextAreaElement,
+ ElementTypeId::SVGElement(SVGElementTypeId::SVGGraphicsElement(SVGGraphicsElementTypeId::SVGSVGElement)) =>
+ LayoutElementType::SVGSVGElement,
_ => LayoutElementType::Element,
}
}