Skip to content

Commit

Permalink
Share supported CSS properties between style and CSSStyleDeclaration
Browse files Browse the repository at this point in the history
Avoids duplicated code when implementing the CSS properties accessors in
CSSStyleDeclaration WebIDL. Servo internal CSS properties are not
accessible.

CSS property "float" is unnacessible because we currently lack support
for BinaryName IDL annotation (#4435).

Fixes #4429, #4430.
  • Loading branch information
brunoabinader committed Jan 19, 2015
1 parent d747a33 commit dc00897
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 97 deletions.
90 changes: 1 addition & 89 deletions components/script/dom/cssstyledeclaration.rs
Expand Up @@ -342,93 +342,5 @@ impl<'a> CSSStyleDeclarationMethods for JSRef<'a, CSSStyleDeclaration> {
rval
}

css_properties!(
[Color, SetColor, "color"],
[Background, SetBackground, "background"],
[BackgroundColor, SetBackgroundColor, "background-color"],
[BackgroundPosition, SetBackgroundPosition, "background-position"],
[BackgroundImage, SetBackgroundImage, "background-image"],
[BackgroundRepeat, SetBackgroundRepeat, "background-repeat"],
[BackgroundAttachment, SetBackgroundAttachment, "background-attachment"],
[Border, SetBorder, "border"],
[BorderColor, SetBorderColor, "border-color"],
[BorderRadius, SetBorderRadius, "border-radius"],
[BorderStyle, SetBorderStyle, "border-style"],
[BorderWidth, SetBorderWidth, "border-width"],
[BorderBottom, SetBorderBottom, "border-bottom"],
[BorderBottomColor, SetBorderBottomColor, "border-bottom-color"],
[BorderBottomStyle, SetBorderBottomStyle, "border-bottom-style"],
[BorderBottomWidth, SetBorderBottomWidth, "border-bottom-width"],
[BorderLeft, SetBorderLeft, "border-left"],
[BorderLeftColor, SetBorderLeftColor, "border-left-color"],
[BorderLeftStyle, SetBorderLeftStyle, "border-left-style"],
[BorderLeftWidth, SetBorderLeftWidth, "border-left-width"],
[BorderRight, SetBorderRight, "border-right"],
[BorderRightColor, SetBorderRightColor, "border-right-color"],
[BorderRightStyle, SetBorderRightStyle, "border-right-style"],
[BorderRightWidth, SetBorderRightWidth, "border-right-width"],
[BorderTop, SetBorderTop, "border-top"],
[BorderTopColor, SetBorderTopColor, "border-top-color"],
[BorderTopStyle, SetBorderTopStyle, "border-top-style"],
[BorderTopWidth, SetBorderTopWidth, "border-top-width"],
[Content, SetContent, "content"],
[Display, SetDisplay, "display"],
[Opacity, SetOpacity, "opacity"],
[Width, SetWidth, "width"],
[MinWidth, SetMinWidth, "min-width"],
[MaxWidth, SetMaxWidth, "max-width"],
[Height, SetHeight, "height"],
[MinHeight, SetMinHeight, "min-height"],
[MaxHeight, SetMaxHeight, "max-height"],
[Clear, SetClear, "clear"],
[Direction, SetDirection, "direction"],
[LineHeight, SetLineHeight, "line-height"],
[VerticalAlign, SetVerticalAlign, "vertical-align"],
[ListStyle, SetListStyle, "list-style"],
[ListStylePosition, SetListStylePosition, "list-style-position"],
[ListStyleType, SetListStyleType, "list-style-type"],
[ListStyleImage, SetListStyleImage, "list-style-image"],
[Visibility, SetVisibility, "visibility"],
[Cursor, SetCursor, "cursor"],
[BoxShadow, SetBoxShadow, "box-shadow"],
[BoxSizing, SetBoxSizing, "box-sizing"],
[Overflow, SetOverflow, "overflow"],
[OverflowWrap, SetOverflowWrap, "overflow-wrap"],
[TableLayout, SetTableLayout, "table-layout"],
[EmptyCells, SetEmptyCells, "empty-cells"],
[CaptionSide, SetCaptionSide, "caption-side"],
[WhiteSpace, SetWhiteSpace, "white-space"],
[WritingMode, SetWritingMode, "writing-mode"],
[LetterSpacing, SetLetterSpacing, "letter-spacing"],
[WordSpacing, SetWordSpacing, "word-spacing"],
[WordWrap, SetWordWrap, "word-wrap"],
[TextAlign, SetTextAlign, "text-align"],
[TextDecoration, SetTextDecoration, "text-decoration"],
[TextIndent, SetTextIndent, "text-indent"],
[TextOrientation, SetTextOrientation, "text-orientation"],
[TextTransform, SetTextTransform, "text-transform"],
[Font, SetFont, "font"],
[FontFamily, SetFontFamily, "font-family"],
[FontSize, SetFontSize, "font-size"],
[FontStyle, SetFontStyle, "font-style"],
[FontVariant, SetFontVariant, "font-variant"],
[FontWeight, SetFontWeight, "font-weight"],
[Margin, SetMargin, "margin"],
[MarginBottom, SetMarginBottom, "margin-bottom"],
[MarginLeft, SetMarginLeft, "margin-left"],
[MarginRight, SetMarginRight, "margin-right"],
[MarginTop, SetMarginTop, "margin-top"],
[Padding, SetPadding, "padding"],
[PaddingBottom, SetPaddingBottom, "padding-bottom"],
[PaddingLeft, SetPaddingLeft, "padding-left"],
[PaddingRight, SetPaddingRight, "padding-right"],
[PaddingTop, SetPaddingTop, "padding-top"],
[Outline, SetOutline, "outline"],
[Position, SetPosition, "position"],
[Bottom, SetBottom, "bottom"],
[Left, SetLeft, "left"],
[Right, SetRight, "right"],
[Top, SetTop, "top"],
[ZIndex, SetZIndex, "z-index"]
)
css_properties_accessors!(css_properties)
}
18 changes: 18 additions & 0 deletions components/script/dom/webidls/CSSStyleDeclaration.webidl
Expand Up @@ -46,6 +46,8 @@ partial interface CSSStyleDeclaration {
[TreatNullAs=EmptyString] attribute DOMString borderWidth;
[TreatNullAs=EmptyString] attribute DOMString borderBottom;
[TreatNullAs=EmptyString] attribute DOMString borderBottomColor;
[TreatNullAs=EmptyString] attribute DOMString borderBottomLeftRadius;
[TreatNullAs=EmptyString] attribute DOMString borderBottomRightRadius;
[TreatNullAs=EmptyString] attribute DOMString borderBottomStyle;
[TreatNullAs=EmptyString] attribute DOMString borderBottomWidth;
[TreatNullAs=EmptyString] attribute DOMString borderLeft;
Expand All @@ -58,6 +60,8 @@ partial interface CSSStyleDeclaration {
[TreatNullAs=EmptyString] attribute DOMString borderRightWidth;
[TreatNullAs=EmptyString] attribute DOMString borderTop;
[TreatNullAs=EmptyString] attribute DOMString borderTopColor;
[TreatNullAs=EmptyString] attribute DOMString borderTopLeftRadius;
[TreatNullAs=EmptyString] attribute DOMString borderTopRightRadius;
[TreatNullAs=EmptyString] attribute DOMString borderTopStyle;
[TreatNullAs=EmptyString] attribute DOMString borderTopWidth;

Expand All @@ -80,10 +84,16 @@ partial interface CSSStyleDeclaration {

[TreatNullAs=EmptyString] attribute DOMString clear;

[TreatNullAs=EmptyString] attribute DOMString clip;

[TreatNullAs=EmptyString] attribute DOMString direction;

[TreatNullAs=EmptyString] attribute DOMString filter;

[TreatNullAs=EmptyString] attribute DOMString lineHeight;

[TreatNullAs=EmptyString] attribute DOMString mixBlendMode;

[TreatNullAs=EmptyString] attribute DOMString verticalAlign;

[TreatNullAs=EmptyString] attribute DOMString listStyle;
Expand All @@ -103,13 +113,15 @@ partial interface CSSStyleDeclaration {
[TreatNullAs=EmptyString] attribute DOMString writingMode;

[TreatNullAs=EmptyString] attribute DOMString letterSpacing;
[TreatNullAs=EmptyString] attribute DOMString wordBreak;
[TreatNullAs=EmptyString] attribute DOMString wordSpacing;
[TreatNullAs=EmptyString] attribute DOMString wordWrap;

[TreatNullAs=EmptyString] attribute DOMString textAlign;
[TreatNullAs=EmptyString] attribute DOMString textDecoration;
[TreatNullAs=EmptyString] attribute DOMString textIndent;
[TreatNullAs=EmptyString] attribute DOMString textOrientation;
[TreatNullAs=EmptyString] attribute DOMString textRendering;
[TreatNullAs=EmptyString] attribute DOMString textTransform;

[TreatNullAs=EmptyString] attribute DOMString font;
Expand All @@ -132,9 +144,15 @@ partial interface CSSStyleDeclaration {
[TreatNullAs=EmptyString] attribute DOMString paddingTop;

[TreatNullAs=EmptyString] attribute DOMString outline;
[TreatNullAs=EmptyString] attribute DOMString outlineColor;
[TreatNullAs=EmptyString] attribute DOMString outlineStyle;
[TreatNullAs=EmptyString] attribute DOMString outlineWidth;
[TreatNullAs=EmptyString] attribute DOMString outlineOffset;

[TreatNullAs=EmptyString] attribute DOMString position;

[TreatNullAs=EmptyString] attribute DOMString pointerEvents;

[TreatNullAs=EmptyString] attribute DOMString top;
[TreatNullAs=EmptyString] attribute DOMString right;
[TreatNullAs=EmptyString] attribute DOMString left;
Expand Down
1 change: 1 addition & 0 deletions components/script/lib.rs
Expand Up @@ -35,6 +35,7 @@ extern crate script_traits;
extern crate "plugins" as servo_plugins;
extern crate "net" as servo_net;
extern crate "util" as servo_util;
#[phase(plugin, link)]
extern crate style;
extern crate "msg" as servo_msg;
extern crate url;
Expand Down
34 changes: 26 additions & 8 deletions components/style/properties/mod.rs.mako
Expand Up @@ -39,14 +39,14 @@ def to_rust_ident(name):
name += "_"
return name
def to_camel_case(ident):
return re.sub("_([a-z])", lambda m: m.group(1).upper(), ident.strip("_").capitalize())
class Longhand(object):
def __init__(self, name, derived_from=None, experimental=False):
self.name = name
self.ident = to_rust_ident(name)
self.camel_case, _ = re.subn(
"_([a-z])",
lambda m: m.group(1).upper(),
self.ident.strip("_").capitalize())
self.camel_case = to_camel_case(self.ident)
self.style_struct = THIS_STYLE_STRUCT
self.experimental = experimental
if derived_from is None:
Expand All @@ -58,6 +58,8 @@ class Shorthand(object):
def __init__(self, name, sub_properties):
self.name = name
self.ident = to_rust_ident(name)
self.camel_case = to_camel_case(self.ident)
self.derived_from = None
self.sub_properties = [LONGHANDS_BY_NAME[s] for s in sub_properties]
class StyleStruct(object):
Expand Down Expand Up @@ -3358,16 +3360,32 @@ pub fn make_inline(style: &ComputedValues) -> ComputedValues {

pub fn is_supported_property(property: &str) -> bool {
match property {
% for property in SHORTHANDS:
"${property.name}" => true,
% endfor
% for property in LONGHANDS:
% for property in SHORTHANDS + LONGHANDS:
"${property.name}" => true,
% endfor
_ => false,
}
}

#[macro_export]
macro_rules! css_properties_accessors(
($macro: ident) => (
$macro!(
% for property in SHORTHANDS + LONGHANDS:
## Servo internal CSS properties are not accessible.
## FIXME: Add BinaryName WebIDL annotation (#4435).
% if property.derived_from is None and property.name != "float":
% if property != LONGHANDS[-1]:
[${property.camel_case}, Set${property.camel_case}, "${property.name}"],
% else:
[${property.camel_case}, Set${property.camel_case}, "${property.name}"]
% endif
% endif
% endfor
)
)
)

pub fn longhands_from_shorthand(shorthand: &str) -> Option<Vec<String>> {
match shorthand {
% for property in SHORTHANDS:
Expand Down

5 comments on commit dc00897

@bors-servo
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bors-servo
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merging brunoabinader/servo/share-css-properties-style-script = dc00897 into auto

@bors-servo
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

brunoabinader/servo/share-css-properties-style-script = dc00897 merged ok, testing candidate = 1e85bb6

@bors-servo
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bors-servo
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fast-forwarding master to auto = 1e85bb6

Please sign in to comment.