mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-01-12 06:52:25 +00:00
Bug 835007: Make 'transition-property: all' work as an item within a list. r=bzbarsky
No changes to the transition manager are needed since nsTransitionManager::StyleContextChanged already makes the appropriate calls to ConsiderStartingTransition for 'all', and that existing code should work fine within a loop (just like the existing code to handle shorthands or other property duplication works).
This commit is contained in:
parent
599824edae
commit
f98acfef4b
@ -9563,9 +9563,8 @@ bool
|
||||
CSSParserImpl::ParseTransitionProperty()
|
||||
{
|
||||
nsCSSValue value;
|
||||
if (ParseVariant(value, VARIANT_INHERIT | VARIANT_NONE | VARIANT_ALL,
|
||||
nullptr)) {
|
||||
// 'inherit', 'initial', 'none', and 'all' must be alone
|
||||
if (ParseVariant(value, VARIANT_INHERIT | VARIANT_NONE, nullptr)) {
|
||||
// 'inherit', 'initial', and 'none' must be alone
|
||||
if (!ExpectEndProperty()) {
|
||||
return false;
|
||||
}
|
||||
@ -9576,19 +9575,18 @@ CSSParserImpl::ParseTransitionProperty()
|
||||
// transition-property: invalid-property, left, opacity;
|
||||
nsCSSValueList* cur = value.SetListValue();
|
||||
for (;;) {
|
||||
if (!ParseVariant(cur->mValue, VARIANT_IDENTIFIER, nullptr)) {
|
||||
if (!ParseVariant(cur->mValue, VARIANT_IDENTIFIER | VARIANT_ALL, nullptr)) {
|
||||
return false;
|
||||
}
|
||||
nsDependentString str(cur->mValue.GetStringBufferValue());
|
||||
// Exclude 'none' and 'all' and 'inherit' and 'initial'
|
||||
// according to the same rules as for 'counter-reset' in CSS 2.1
|
||||
// (except 'counter-reset' doesn't exclude 'all' since it
|
||||
// doesn't support 'all' as a special value).
|
||||
if (str.LowerCaseEqualsLiteral("none") ||
|
||||
str.LowerCaseEqualsLiteral("all") ||
|
||||
str.LowerCaseEqualsLiteral("inherit") ||
|
||||
str.LowerCaseEqualsLiteral("initial")) {
|
||||
return false;
|
||||
if (cur->mValue.GetUnit() == eCSSUnit_Ident) {
|
||||
nsDependentString str(cur->mValue.GetStringBufferValue());
|
||||
// Exclude 'none' and 'inherit' and 'initial' according to the
|
||||
// same rules as for 'counter-reset' in CSS 2.1.
|
||||
if (str.LowerCaseEqualsLiteral("none") ||
|
||||
str.LowerCaseEqualsLiteral("inherit") ||
|
||||
str.LowerCaseEqualsLiteral("initial")) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (CheckEndProperty()) {
|
||||
break;
|
||||
@ -9850,25 +9848,21 @@ CSSParserImpl::ParseTransition()
|
||||
bool multipleItems = !!l->mNext;
|
||||
do {
|
||||
const nsCSSValue& val = l->mValue;
|
||||
if (val.GetUnit() != eCSSUnit_Ident) {
|
||||
NS_ABORT_IF_FALSE(val.GetUnit() == eCSSUnit_None ||
|
||||
val.GetUnit() == eCSSUnit_All, "unexpected unit");
|
||||
if (val.GetUnit() == eCSSUnit_None) {
|
||||
if (multipleItems) {
|
||||
// This is a syntax error.
|
||||
return false;
|
||||
}
|
||||
|
||||
// Unbox a solitary 'none' or 'all'.
|
||||
if (val.GetUnit() == eCSSUnit_None) {
|
||||
values[3].SetNoneValue();
|
||||
} else {
|
||||
values[3].SetAllValue();
|
||||
}
|
||||
// Unbox a solitary 'none'.
|
||||
values[3].SetNoneValue();
|
||||
break;
|
||||
}
|
||||
nsDependentString str(val.GetStringBufferValue());
|
||||
if (str.EqualsLiteral("inherit") || str.EqualsLiteral("initial")) {
|
||||
return false;
|
||||
if (val.GetUnit() == eCSSUnit_Ident) {
|
||||
nsDependentString str(val.GetStringBufferValue());
|
||||
if (str.EqualsLiteral("inherit") || str.EqualsLiteral("initial")) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} while ((l = l->mNext));
|
||||
}
|
||||
|
@ -4387,24 +4387,28 @@ nsRuleNode::ComputeDisplayData(void* aStartStruct,
|
||||
NS_ABORT_IF_FALSE(!canStoreInRuleTree,
|
||||
"should have made canStoreInRuleTree false above");
|
||||
transition->CopyPropertyFrom(parentDisplay->mTransitions[i]);
|
||||
} else if (property.unit == eCSSUnit_Initial ||
|
||||
property.unit == eCSSUnit_All) {
|
||||
} else if (property.unit == eCSSUnit_Initial) {
|
||||
transition->SetProperty(eCSSPropertyExtra_all_properties);
|
||||
} else if (property.unit == eCSSUnit_None) {
|
||||
transition->SetProperty(eCSSPropertyExtra_no_properties);
|
||||
} else if (property.list) {
|
||||
NS_ABORT_IF_FALSE(property.list->mValue.GetUnit() == eCSSUnit_Ident,
|
||||
nsPrintfCString("Invalid transition property unit %d",
|
||||
property.list->mValue.GetUnit()).get());
|
||||
const nsCSSValue &val = property.list->mValue;
|
||||
|
||||
nsDependentString
|
||||
propertyStr(property.list->mValue.GetStringBufferValue());
|
||||
nsCSSProperty prop = nsCSSProps::LookupProperty(propertyStr,
|
||||
nsCSSProps::eEnabled);
|
||||
if (prop == eCSSProperty_UNKNOWN) {
|
||||
transition->SetUnknownProperty(propertyStr);
|
||||
if (val.GetUnit() == eCSSUnit_Ident) {
|
||||
nsDependentString
|
||||
propertyStr(property.list->mValue.GetStringBufferValue());
|
||||
nsCSSProperty prop = nsCSSProps::LookupProperty(propertyStr,
|
||||
nsCSSProps::eEnabled);
|
||||
if (prop == eCSSProperty_UNKNOWN) {
|
||||
transition->SetUnknownProperty(propertyStr);
|
||||
} else {
|
||||
transition->SetProperty(prop);
|
||||
}
|
||||
} else {
|
||||
transition->SetProperty(prop);
|
||||
NS_ABORT_IF_FALSE(val.GetUnit() == eCSSUnit_All,
|
||||
nsPrintfCString("Invalid transition property unit %d",
|
||||
val.GetUnit()).get());
|
||||
transition->SetProperty(eCSSPropertyExtra_all_properties);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3200,8 +3200,8 @@ var gCSSProperties = {
|
||||
type: CSS_TYPE_TRUE_SHORTHAND,
|
||||
subproperties: [ "transition-property", "transition-duration", "transition-timing-function", "transition-delay" ],
|
||||
initial_values: [ "all 0s ease 0s", "all", "0s", "0s 0s", "ease" ],
|
||||
other_values: [ "width 1s linear 2s", "width 1s 2s linear", "width linear 1s 2s", "linear width 1s 2s", "linear 1s width 2s", "linear 1s 2s width", "1s width linear 2s", "1s width 2s linear", "1s 2s width linear", "1s linear width 2s", "1s linear 2s width", "1s 2s linear width", "width linear 1s", "width 1s linear", "linear width 1s", "linear 1s width", "1s width linear", "1s linear width", "1s 2s width", "1s width 2s", "width 1s 2s", "1s 2s linear", "1s linear 2s", "linear 1s 2s", "width 1s", "1s width", "linear 1s", "1s linear", "1s 2s", "2s 1s", "width", "linear", "1s", "height", "2s", "ease-in-out", "2s ease-in", "opacity linear", "ease-out 2s", "2s color, 1s width, 500ms height linear, 1s opacity 4s cubic-bezier(0.0, 0.1, 1.0, 1.0)", "1s \\32width linear 2s", "1s -width linear 2s", "1s -\\32width linear 2s", "1s \\32 0width linear 2s", "1s -\\32 0width linear 2s", "1s \\2width linear 2s", "1s -\\2width linear 2s" ],
|
||||
invalid_values: [ "2s, 1s width", "1s width, 2s", "2s all, 1s width", "1s width, 2s all", "1s width, 2s none", "2s none, 1s width", "2s inherit", "inherit 2s", "2s width, 1s inherit", "2s inherit, 1s width", "2s initial", "2s all, 1s width", "2s width, 1s all" ]
|
||||
other_values: [ "width 1s linear 2s", "width 1s 2s linear", "width linear 1s 2s", "linear width 1s 2s", "linear 1s width 2s", "linear 1s 2s width", "1s width linear 2s", "1s width 2s linear", "1s 2s width linear", "1s linear width 2s", "1s linear 2s width", "1s 2s linear width", "width linear 1s", "width 1s linear", "linear width 1s", "linear 1s width", "1s width linear", "1s linear width", "1s 2s width", "1s width 2s", "width 1s 2s", "1s 2s linear", "1s linear 2s", "linear 1s 2s", "width 1s", "1s width", "linear 1s", "1s linear", "1s 2s", "2s 1s", "width", "linear", "1s", "height", "2s", "ease-in-out", "2s ease-in", "opacity linear", "ease-out 2s", "2s color, 1s width, 500ms height linear, 1s opacity 4s cubic-bezier(0.0, 0.1, 1.0, 1.0)", "1s \\32width linear 2s", "1s -width linear 2s", "1s -\\32width linear 2s", "1s \\32 0width linear 2s", "1s -\\32 0width linear 2s", "1s \\2width linear 2s", "1s -\\2width linear 2s", "2s, 1s width", "1s width, 2s", "2s all, 1s width", "1s width, 2s all", "2s all, 1s width", "2s width, 1s all" ],
|
||||
invalid_values: [ "1s width, 2s none", "2s none, 1s width", "2s inherit", "inherit 2s", "2s width, 1s inherit", "2s inherit, 1s width", "2s initial" ]
|
||||
},
|
||||
"transition-delay": {
|
||||
domProp: "transitionDelay",
|
||||
@ -3224,8 +3224,8 @@ var gCSSProperties = {
|
||||
inherited: false,
|
||||
type: CSS_TYPE_LONGHAND,
|
||||
initial_values: [ "all" ],
|
||||
other_values: [ "none", "left", "top", "color", "width, height, opacity", "foobar", "auto", "\\32width", "-width", "-\\32width", "\\32 0width", "-\\32 0width", "\\2width", "-\\2width" ],
|
||||
invalid_values: [ "none, none", "all, all", "color, none", "none, color", "all, color", "color, all", "inherit, color", "color, inherit", "initial, color", "color, initial", "none, color", "color, none", "all, color", "color, all" ]
|
||||
other_values: [ "none", "left", "top", "color", "width, height, opacity", "foobar", "auto", "\\32width", "-width", "-\\32width", "\\32 0width", "-\\32 0width", "\\2width", "-\\2width", "all, all", "all, color", "color, all" ],
|
||||
invalid_values: [ "none, none", "color, none", "none, color", "inherit, color", "color, inherit", "initial, color", "color, initial", "none, color", "color, none" ]
|
||||
},
|
||||
"transition-timing-function": {
|
||||
domProp: "transitionTimingFunction",
|
||||
@ -3907,8 +3907,8 @@ var gCSSProperties = {
|
||||
alias_for: "transition",
|
||||
subproperties: [ "transition-property", "transition-duration", "transition-timing-function", "transition-delay" ],
|
||||
initial_values: [ "all 0s ease 0s", "all", "0s", "0s 0s", "ease" ],
|
||||
other_values: [ "width 1s linear 2s", "width 1s 2s linear", "width linear 1s 2s", "linear width 1s 2s", "linear 1s width 2s", "linear 1s 2s width", "1s width linear 2s", "1s width 2s linear", "1s 2s width linear", "1s linear width 2s", "1s linear 2s width", "1s 2s linear width", "width linear 1s", "width 1s linear", "linear width 1s", "linear 1s width", "1s width linear", "1s linear width", "1s 2s width", "1s width 2s", "width 1s 2s", "1s 2s linear", "1s linear 2s", "linear 1s 2s", "width 1s", "1s width", "linear 1s", "1s linear", "1s 2s", "2s 1s", "width", "linear", "1s", "height", "2s", "ease-in-out", "2s ease-in", "opacity linear", "ease-out 2s", "2s color, 1s width, 500ms height linear, 1s opacity 4s cubic-bezier(0.0, 0.1, 1.0, 1.0)", "1s \\32width linear 2s", "1s -width linear 2s", "1s -\\32width linear 2s", "1s \\32 0width linear 2s", "1s -\\32 0width linear 2s", "1s \\2width linear 2s", "1s -\\2width linear 2s" ],
|
||||
invalid_values: [ "2s, 1s width", "1s width, 2s", "2s all, 1s width", "1s width, 2s all", "1s width, 2s none", "2s none, 1s width", "2s inherit", "inherit 2s", "2s width, 1s inherit", "2s inherit, 1s width", "2s initial", "2s all, 1s width", "2s width, 1s all" ]
|
||||
other_values: [ "width 1s linear 2s", "width 1s 2s linear", "width linear 1s 2s", "linear width 1s 2s", "linear 1s width 2s", "linear 1s 2s width", "1s width linear 2s", "1s width 2s linear", "1s 2s width linear", "1s linear width 2s", "1s linear 2s width", "1s 2s linear width", "width linear 1s", "width 1s linear", "linear width 1s", "linear 1s width", "1s width linear", "1s linear width", "1s 2s width", "1s width 2s", "width 1s 2s", "1s 2s linear", "1s linear 2s", "linear 1s 2s", "width 1s", "1s width", "linear 1s", "1s linear", "1s 2s", "2s 1s", "width", "linear", "1s", "height", "2s", "ease-in-out", "2s ease-in", "opacity linear", "ease-out 2s", "2s color, 1s width, 500ms height linear, 1s opacity 4s cubic-bezier(0.0, 0.1, 1.0, 1.0)", "1s \\32width linear 2s", "1s -width linear 2s", "1s -\\32width linear 2s", "1s \\32 0width linear 2s", "1s -\\32 0width linear 2s", "1s \\2width linear 2s", "1s -\\2width linear 2s", "2s, 1s width", "1s width, 2s", "2s all, 1s width", "1s width, 2s all", "2s all, 1s width", "2s width, 1s all" ],
|
||||
invalid_values: [ "1s width, 2s none", "2s none, 1s width", "2s inherit", "inherit 2s", "2s width, 1s inherit", "2s inherit, 1s width", "2s initial" ]
|
||||
},
|
||||
"-moz-transition-delay": {
|
||||
domProp: "MozTransitionDelay",
|
||||
@ -3937,8 +3937,8 @@ var gCSSProperties = {
|
||||
alias_for: "transition-property",
|
||||
subproperties: [ "transition-property" ],
|
||||
initial_values: [ "all" ],
|
||||
other_values: [ "none", "left", "top", "color", "width, height, opacity", "foobar", "auto", "\\32width", "-width", "-\\32width", "\\32 0width", "-\\32 0width", "\\2width", "-\\2width" ],
|
||||
invalid_values: [ "none, none", "all, all", "color, none", "none, color", "all, color", "color, all", "inherit, color", "color, inherit", "initial, color", "color, initial", "none, color", "color, none", "all, color", "color, all" ]
|
||||
other_values: [ "none", "left", "top", "color", "width, height, opacity", "foobar", "auto", "\\32width", "-width", "-\\32width", "\\32 0width", "-\\32 0width", "\\2width", "-\\2width", "all, all", "all, color", "color, all" ],
|
||||
invalid_values: [ "none, none", "color, none", "none, color", "inherit, color", "color, inherit", "initial, color", "color, initial", "none, color", "color, none" ]
|
||||
},
|
||||
"-moz-transition-timing-function": {
|
||||
domProp: "MozTransitionTimingFunction",
|
||||
|
@ -61,7 +61,7 @@ var gAllowsExtraUnusual = {
|
||||
"1s linear": true, "1s 2s": true, "2s 1s": true,
|
||||
"linear": true, "1s": true, "2s": true,
|
||||
"ease-in-out": true, "2s ease-in": true,
|
||||
"ease-out 2s": true },
|
||||
"ease-out 2s": true, "1s width, 2s": true },
|
||||
"animation": { "none": true, "0s": true, "ease": true,
|
||||
"normal": true, "running": true, "1.0": true,
|
||||
"1s 2s linear": true, "1s linear 2s": true,
|
||||
|
Loading…
x
Reference in New Issue
Block a user