diff options
-rw-r--r-- | components/script/dom/element.rs | 20 | ||||
-rw-r--r-- | components/script/dom/htmlfontelement.rs | 62 | ||||
-rw-r--r-- | components/script/dom/virtualmethods.rs | 10 | ||||
-rw-r--r-- | components/script/dom/webidls/HTMLFontElement.webidl | 2 | ||||
-rw-r--r-- | tests/ref/basic.list | 1 | ||||
-rw-r--r-- | tests/ref/font_color_attribute_a.html | 9 | ||||
-rw-r--r-- | tests/ref/font_color_attribute_ref.html | 9 | ||||
-rw-r--r-- | tests/wpt/metadata/html/dom/interfaces.html.ini | 6 | ||||
-rw-r--r-- | tests/wpt/metadata/html/dom/reflection-obsolete.html.ini | 129 |
9 files changed, 105 insertions, 143 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index f0ff55e2e5b..e8ae592e63c 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -17,7 +17,8 @@ use dom::bindings::codegen::Bindings::HTMLInputElementBinding::HTMLInputElementM use dom::bindings::codegen::Bindings::NamedNodeMapBinding::NamedNodeMapMethods; use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use dom::bindings::codegen::InheritTypes::{ElementCast, ElementDerived, EventTargetCast}; -use dom::bindings::codegen::InheritTypes::{HTMLBodyElementDerived, HTMLInputElementCast}; +use dom::bindings::codegen::InheritTypes::{HTMLBodyElementDerived, HTMLFontElementDerived}; +use dom::bindings::codegen::InheritTypes::{HTMLInputElementCast}; use dom::bindings::codegen::InheritTypes::{HTMLInputElementDerived, HTMLTableElementCast}; use dom::bindings::codegen::InheritTypes::{HTMLTableElementDerived, HTMLTableCellElementDerived}; use dom::bindings::codegen::InheritTypes::{HTMLTableRowElementDerived, HTMLTextAreaElementDerived}; @@ -45,6 +46,7 @@ use dom::htmlanchorelement::HTMLAnchorElement; use dom::htmlbodyelement::{HTMLBodyElement, HTMLBodyElementHelpers}; use dom::htmlcollection::HTMLCollection; use dom::htmlelement::HTMLElementTypeId; +use dom::htmlfontelement::{HTMLFontElement, HTMLFontElementHelpers}; use dom::htmlinputelement::{HTMLInputElement, RawLayoutHTMLInputElementHelpers, HTMLInputElementHelpers}; use dom::htmltableelement::{HTMLTableElement, HTMLTableElementHelpers}; use dom::htmltablecellelement::{HTMLTableCellElement, HTMLTableCellElementHelpers}; @@ -64,7 +66,7 @@ use style::properties::{PropertyDeclarationBlock, PropertyDeclaration, parse_sty use style::properties::DeclaredValue::SpecifiedValue; use style::properties::longhands::{self, border_spacing}; use style::values::CSSFloat; -use style::values::specified::{self, CSSColor}; +use style::values::specified::{self, CSSColor, CSSRGBA}; use util::geometry::Au; use util::namespace; use util::smallvec::VecLike; @@ -269,6 +271,20 @@ impl RawLayoutElementHelpers for Element { CSSColor { parsed: Color::RGBA(color), authored: None })))); } + let color = if self.is_htmlfontelement() { + let this: &HTMLFontElement = mem::transmute(self); + this.get_color() + } else { + None + }; + + if let Some(color) = color { + hints.push(from_declaration( + PropertyDeclaration::Color(SpecifiedValue(CSSRGBA { + parsed: color, + authored: None, + })))); + } let cellspacing = if self.is_htmltableelement() { let this: &HTMLTableElement = mem::transmute(self); diff --git a/components/script/dom/htmlfontelement.rs b/components/script/dom/htmlfontelement.rs index 2df515cbc83..d2faa87441c 100644 --- a/components/script/dom/htmlfontelement.rs +++ b/components/script/dom/htmlfontelement.rs @@ -2,19 +2,26 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +use dom::attr::{Attr, AttrHelpers}; use dom::bindings::codegen::Bindings::HTMLFontElementBinding; -use dom::bindings::codegen::InheritTypes::HTMLFontElementDerived; +use dom::bindings::codegen::Bindings::HTMLFontElementBinding::HTMLFontElementMethods; +use dom::bindings::codegen::InheritTypes::{HTMLElementCast, HTMLFontElementDerived}; use dom::bindings::js::{JSRef, Temporary}; use dom::document::Document; use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::element::ElementTypeId; use dom::htmlelement::{HTMLElement, HTMLElementTypeId}; use dom::node::{Node, NodeTypeId}; -use util::str::DOMString; +use dom::virtualmethods::VirtualMethods; +use util::str::{self, DOMString}; + +use cssparser::RGBA; +use std::cell::Cell; #[dom_struct] pub struct HTMLFontElement { - htmlelement: HTMLElement + htmlelement: HTMLElement, + color: Cell<Option<RGBA>>, } impl HTMLFontElementDerived for EventTarget { @@ -26,7 +33,8 @@ impl HTMLFontElementDerived for EventTarget { impl HTMLFontElement { fn new_inherited(localName: DOMString, prefix: Option<DOMString>, document: JSRef<Document>) -> HTMLFontElement { HTMLFontElement { - htmlelement: HTMLElement::new_inherited(HTMLElementTypeId::HTMLFontElement, localName, prefix, document) + htmlelement: HTMLElement::new_inherited(HTMLElementTypeId::HTMLFontElement, localName, prefix, document), + color: Cell::new(None), } } @@ -37,3 +45,49 @@ impl HTMLFontElement { } } +impl<'a> HTMLFontElementMethods for JSRef<'a, HTMLFontElement> { + make_getter!(Color, "color"); + make_setter!(SetColor, "color"); +} + +impl<'a> VirtualMethods for JSRef<'a,HTMLFontElement> { + fn super_type<'b>(&'b self) -> Option<&'b VirtualMethods> { + let htmlelement: &JSRef<HTMLElement> = HTMLElementCast::from_borrowed_ref(self); + Some(htmlelement as &VirtualMethods) + } + + fn after_set_attr(&self, attr: JSRef<Attr>) { + if let Some(ref s) = self.super_type() { + s.after_set_attr(attr); + } + + match attr.local_name() { + &atom!("color") => { + self.color.set(str::parse_legacy_color(&attr.value()).ok()) + } + _ => {} + } + } + + fn before_remove_attr(&self, attr: JSRef<Attr>) { + if let Some(ref s) = self.super_type() { + s.before_remove_attr(attr); + } + + match attr.local_name() { + &atom!("color") => self.color.set(None), + _ => () + } + } +} + +pub trait HTMLFontElementHelpers { + fn get_color(&self) -> Option<RGBA>; +} + +impl HTMLFontElementHelpers for HTMLFontElement { + fn get_color(&self) -> Option<RGBA> { + self.color.get() + } +} + diff --git a/components/script/dom/virtualmethods.rs b/components/script/dom/virtualmethods.rs index 2147ee07c48..a83c801831d 100644 --- a/components/script/dom/virtualmethods.rs +++ b/components/script/dom/virtualmethods.rs @@ -12,6 +12,7 @@ use dom::bindings::codegen::InheritTypes::HTMLButtonElementCast; use dom::bindings::codegen::InheritTypes::HTMLCanvasElementCast; use dom::bindings::codegen::InheritTypes::HTMLElementCast; use dom::bindings::codegen::InheritTypes::HTMLFieldSetElementCast; +use dom::bindings::codegen::InheritTypes::HTMLFontElementCast; use dom::bindings::codegen::InheritTypes::HTMLFormElementCast; use dom::bindings::codegen::InheritTypes::HTMLHeadElementCast; use dom::bindings::codegen::InheritTypes::HTMLIFrameElementCast; @@ -42,6 +43,8 @@ use dom::htmlbuttonelement::HTMLButtonElement; use dom::htmlcanvaselement::HTMLCanvasElement; use dom::htmlelement::{HTMLElement, HTMLElementTypeId}; use dom::htmlfieldsetelement::HTMLFieldSetElement; +use dom::htmlfontelement::HTMLFontElement; +use dom::htmlformelement::HTMLFormElement; use dom::htmlheadelement::HTMLHeadElement; use dom::htmliframeelement::HTMLIFrameElement; use dom::htmlimageelement::HTMLImageElement; @@ -169,8 +172,13 @@ pub fn vtable_for<'a>(node: &'a JSRef<'a, Node>) -> &'a (VirtualMethods + 'a) { let element: &'a JSRef<'a, HTMLFieldSetElement> = HTMLFieldSetElementCast::to_borrowed_ref(node).unwrap(); element as &'a (VirtualMethods + 'a) } + NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLFontElement)) => { + let element: &'a JSRef<'a, HTMLFontElement> = HTMLFontElementCast::to_borrowed_ref(node).unwrap(); + element as &'a (VirtualMethods + 'a) + } NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLFormElement)) => { - HTMLFormElementCast::to_borrowed_ref(node).unwrap() as &'a (VirtualMethods + 'a) + let element: &'a JSRef<'a, HTMLFormElement> = HTMLFormElementCast::to_borrowed_ref(node).unwrap(); + element as &'a (VirtualMethods + 'a) } NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLHeadElement)) => { let element: &'a JSRef<'a, HTMLHeadElement> = HTMLHeadElementCast::to_borrowed_ref(node).unwrap(); diff --git a/components/script/dom/webidls/HTMLFontElement.webidl b/components/script/dom/webidls/HTMLFontElement.webidl index 9a58672baf5..03b68498db7 100644 --- a/components/script/dom/webidls/HTMLFontElement.webidl +++ b/components/script/dom/webidls/HTMLFontElement.webidl @@ -5,7 +5,7 @@ // https://www.whatwg.org/html/#htmlfontelement interface HTMLFontElement : HTMLElement { - //[TreatNullAs=EmptyString] attribute DOMString color; + [TreatNullAs=EmptyString] attribute DOMString color; // attribute DOMString face; // attribute DOMString size; }; diff --git a/tests/ref/basic.list b/tests/ref/basic.list index 9a9e015e4fb..847fe5499f8 100644 --- a/tests/ref/basic.list +++ b/tests/ref/basic.list @@ -102,6 +102,7 @@ flaky_cpu == append_style_a.html append_style_b.html == floated_table_with_margin_a.html floated_table_with_margin_ref.html == focus_selector.html focus_selector_ref.html == font_advance.html font_advance_ref.html +== font_color_attribute_a.html font_color_attribute_ref.html == font_size.html font_size_ref.html == font_style.html font_style_ref.html == height_compute_reset.html height_compute.html diff --git a/tests/ref/font_color_attribute_a.html b/tests/ref/font_color_attribute_a.html new file mode 100644 index 00000000000..320f662ea15 --- /dev/null +++ b/tests/ref/font_color_attribute_a.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<html> +<head> +</head> +<body> +<p><font color=blue>Servo</font></p> +</body> +</html> + diff --git a/tests/ref/font_color_attribute_ref.html b/tests/ref/font_color_attribute_ref.html new file mode 100644 index 00000000000..7fab0492782 --- /dev/null +++ b/tests/ref/font_color_attribute_ref.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<html> +<head> +</head> +<body> +<p><font style="color: blue">Servo</font></p> +</body> +</html> + diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index c0e0586d1b1..6dfe517ace6 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -9255,18 +9255,12 @@ [HTMLFontElement interface object length] expected: FAIL - [HTMLFontElement interface: attribute color] - expected: FAIL - [HTMLFontElement interface: attribute face] expected: FAIL [HTMLFontElement interface: attribute size] expected: FAIL - [HTMLFontElement interface: document.createElement("font") must inherit property "color" with the proper type (0)] - expected: FAIL - [HTMLFontElement interface: document.createElement("font") must inherit property "face" with the proper type (1)] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/reflection-obsolete.html.ini b/tests/wpt/metadata/html/dom/reflection-obsolete.html.ini index 9cf4851242b..4b892b43332 100644 --- a/tests/wpt/metadata/html/dom/reflection-obsolete.html.ini +++ b/tests/wpt/metadata/html/dom/reflection-obsolete.html.ini @@ -8523,135 +8523,6 @@ [font.tabIndex: IDL set to -2147483648 followed by getAttribute()] expected: FAIL - [font.color: typeof IDL attribute] - expected: FAIL - - [font.color: IDL get with DOM attribute unset] - expected: FAIL - - [font.color: setAttribute() to "" followed by IDL get] - expected: FAIL - - [font.color: setAttribute() to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo " followed by IDL get] - expected: FAIL - - [font.color: setAttribute() to undefined followed by IDL get] - expected: FAIL - - [font.color: setAttribute() to 7 followed by IDL get] - expected: FAIL - - [font.color: setAttribute() to 1.5 followed by IDL get] - expected: FAIL - - [font.color: setAttribute() to true followed by IDL get] - expected: FAIL - - [font.color: setAttribute() to false followed by IDL get] - expected: FAIL - - [font.color: setAttribute() to object "[object Object\]" followed by IDL get] - expected: FAIL - - [font.color: setAttribute() to NaN followed by IDL get] - expected: FAIL - - [font.color: setAttribute() to Infinity followed by IDL get] - expected: FAIL - - [font.color: setAttribute() to -Infinity followed by IDL get] - expected: FAIL - - [font.color: setAttribute() to "\\0" followed by IDL get] - expected: FAIL - - [font.color: setAttribute() to null followed by IDL get] - expected: FAIL - - [font.color: setAttribute() to object "test-toString" followed by IDL get] - expected: FAIL - - [font.color: setAttribute() to object "test-valueOf" followed by IDL get] - expected: FAIL - - [font.color: IDL set to "" followed by getAttribute()] - expected: FAIL - - [font.color: IDL set to " \\0\\x01\\x02\\x03\\x04\\x05\\x06\\x07 \\b\\t\\n\\v\\f\\r\\x0e\\x0f \\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17 \\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f foo " followed by getAttribute()] - expected: FAIL - - [font.color: IDL set to undefined followed by getAttribute()] - expected: FAIL - - [font.color: IDL set to undefined followed by IDL get] - expected: FAIL - - [font.color: IDL set to 7 followed by getAttribute()] - expected: FAIL - - [font.color: IDL set to 7 followed by IDL get] - expected: FAIL - - [font.color: IDL set to 1.5 followed by getAttribute()] - expected: FAIL - - [font.color: IDL set to 1.5 followed by IDL get] - expected: FAIL - - [font.color: IDL set to true followed by getAttribute()] - expected: FAIL - - [font.color: IDL set to true followed by IDL get] - expected: FAIL - - [font.color: IDL set to false followed by getAttribute()] - expected: FAIL - - [font.color: IDL set to false followed by IDL get] - expected: FAIL - - [font.color: IDL set to object "[object Object\]" followed by getAttribute()] - expected: FAIL - - [font.color: IDL set to object "[object Object\]" followed by IDL get] - expected: FAIL - - [font.color: IDL set to NaN followed by getAttribute()] - expected: FAIL - - [font.color: IDL set to NaN followed by IDL get] - expected: FAIL - - [font.color: IDL set to Infinity followed by getAttribute()] - expected: FAIL - - [font.color: IDL set to Infinity followed by IDL get] - expected: FAIL - - [font.color: IDL set to -Infinity followed by getAttribute()] - expected: FAIL - - [font.color: IDL set to -Infinity followed by IDL get] - expected: FAIL - - [font.color: IDL set to "\\0" followed by getAttribute()] - expected: FAIL - - [font.color: IDL set to null followed by getAttribute()] - expected: FAIL - - [font.color: IDL set to null followed by IDL get] - expected: FAIL - - [font.color: IDL set to object "test-toString" followed by getAttribute()] - expected: FAIL - - [font.color: IDL set to object "test-toString" followed by IDL get] - expected: FAIL - - [font.color: IDL set to object "test-valueOf" followed by IDL get] - expected: FAIL - [font.face: typeof IDL attribute] expected: FAIL |