WebKit Bugzilla
Attachment 349937 Details for
Bug 189041
: Web Inspector: generate CSSKeywordCompletions from backend values
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-189041-20180917140024.patch (text/plain), 77.87 KB, created by
Devin Rousso
on 2018-09-17 14:00:25 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Devin Rousso
Created:
2018-09-17 14:00:25 PDT
Size:
77.87 KB
patch
obsolete
>diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index 5d7b9aee7586dced30843fa746b9ee67fcbdcd1c..2e196b8f6f716f65cda69829fe3b75e17310186a 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,13 @@ >+2018-09-17 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: generate CSSKeywordCompletions from backend values >+ https://bugs.webkit.org/show_bug.cgi?id=189041 >+ >+ Reviewed by Joseph Pecoraro. >+ >+ * inspector/protocol/CSS.json: >+ Include an optional `aliases` array and `inherited` boolean for `CSSPropertyInfo`. >+ > 2018-09-17 Darin Adler <darin@apple.com> > > Use OpaqueJSString rather than JSRetainPtr inside WebKit >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 6f49e4c30316adaea5de4da723a945e4ba598db8..811e6bb5afb564cf267a774e47c834c5d252c65d 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,33 @@ >+2018-09-17 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: generate CSSKeywordCompletions from backend values >+ https://bugs.webkit.org/show_bug.cgi?id=189041 >+ >+ Reviewed by Joseph Pecoraro. >+ >+ Modified existing test inspector/css/getSupportedCSSProperties.html. >+ >+ * inspector/agents/InspectorCSSAgent.cpp: >+ (WebCore::InspectorCSSAgent::getSupportedCSSProperties): >+ Send alias and longhand information for all properties, and any known keyword values for >+ those applicable. This makes use of `CSSParserFastPaths::isValidKeywordPropertyAndValue` to >+ determine if a given keyword is a valid value for each property. This only generates a list >+ for properties who have no non-keyword values. >+ >+ * css/makeprop.pl: >+ * css/makevalues.pl: >+ Create additional helper functions/constants for retrieving strings of each CSS keyword. >+ >+ * css/CSSProperty.h: >+ (WebCore::CSSProperty::aliasesForProperty): >+ >+ * css/CSSPrimitiveValue.cpp: >+ (WebCore::valueName): >+ >+ * css/CSSValuePool.cpp: >+ (WebCore::CSSValuePool::CSSValuePool): >+ (WebCore::CSSValuePool::createIdentifierValue): >+ > 2018-09-17 Jer Noble <jer.noble@apple.com> > > Enable USE_MEDIAREMOTE on iOS >diff --git a/Source/WebInspectorUI/ChangeLog b/Source/WebInspectorUI/ChangeLog >index 37c3181bd1e26cf8392e1d253e5be56d7dadd522..0328d8118bf8b7d7ff1168830c7bfa9ac95550ac 100644 >--- a/Source/WebInspectorUI/ChangeLog >+++ b/Source/WebInspectorUI/ChangeLog >@@ -1,3 +1,28 @@ >+2018-09-17 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: generate CSSKeywordCompletions from backend values >+ https://bugs.webkit.org/show_bug.cgi?id=189041 >+ >+ Reviewed by Joseph Pecoraro. >+ >+ Moves the longhands map to `WI.CSSKeywordCompletions` for more global access. Creates an >+ aliases map to support completions on aliases with the same values as the non-alias name. >+ Removes all keyword-only properties from `WI.CSSKeywordCompletions._propertyKeywordMap` as >+ they are now generated by the backend (kept for compatibility). >+ >+ * UserInterface/Models/CSSCompletions.js: >+ (WI.CSSCompletions): >+ (WI.CSSCompletions.requestCSSCompletions.propertyNamesCallback): >+ (WI.CSSCompletions.prototype.isShorthandPropertyName): >+ >+ * UserInterface/Models/CSSKeywordCompletions.js: >+ (WI.CSSKeywordCompletions.forProperty.addKeywordsForName): Added. >+ (WI.CSSKeywordCompletions.forProperty): >+ (WI.CSSKeywordCompletions.addCustomCompletions): >+ >+ * UserInterface/Models/CSSProperty.js: >+ (WI.CSSProperty.isInheritedPropertyName): >+ > 2018-09-15 Devin Rousso <drousso@apple.com> > > Web Inspector: REGRESSION: breakpoint context menu appears twice in DOM tree >diff --git a/Source/JavaScriptCore/inspector/protocol/CSS.json b/Source/JavaScriptCore/inspector/protocol/CSS.json >index 0e8b0803ac2b789e56da3ecd231bfefd5a81e8a1..01ce3c867121c623c01597459351014305a5074d 100644 >--- a/Source/JavaScriptCore/inspector/protocol/CSS.json >+++ b/Source/JavaScriptCore/inspector/protocol/CSS.json >@@ -151,8 +151,10 @@ > "type": "object", > "properties": [ > { "name": "name", "type": "string", "description": "Property name." }, >+ { "name": "aliases", "type": "array", "optional": true, "items": { "type": "string" }, "description": "Other names for this property." }, > { "name": "longhands", "type": "array", "optional": true, "items": { "type": "string" }, "description": "Longhand property names." }, >- { "name": "values", "type": "array", "optional": true, "items": { "type": "string" }, "description": "Supported values for this property." } >+ { "name": "values", "type": "array", "optional": true, "items": { "type": "string" }, "description": "Supported values for this property." }, >+ { "name": "inherited", "type": "boolean", "optional": true, "description": "Whether the property is able to be inherited." } > ] > }, > { >diff --git a/Source/WebCore/css/CSSPrimitiveValue.cpp b/Source/WebCore/css/CSSPrimitiveValue.cpp >index c60d1b4e1ba9564d156b4f79f8484662631628af..56044bece0f7a83c2325624400584c4bd3176531 100644 >--- a/Source/WebCore/css/CSSPrimitiveValue.cpp >+++ b/Source/WebCore/css/CSSPrimitiveValue.cpp >@@ -277,17 +277,9 @@ static const AtomicString& propertyName(CSSPropertyID propertyID) > > static const AtomicString& valueName(CSSValueID valueID) > { >- ASSERT_ARG(valueID, valueID >= 0); >- ASSERT_ARG(valueID, valueID < numCSSValueKeywords); >+ ASSERT_ARG(valueID, (valueID >= firstCSSValueKeyword && valueID <= lastCSSValueKeyword)); > >- if (valueID < 0) >- return nullAtom(); >- >- static AtomicString* keywordStrings = new AtomicString[numCSSValueKeywords]; // Leaked intentionally. >- AtomicString& keywordString = keywordStrings[valueID]; >- if (keywordString.isNull()) >- keywordString = getValueName(valueID); >- return keywordString; >+ return getValueNameAtomicString(valueID); > } > > CSSPrimitiveValue::CSSPrimitiveValue(CSSValueID valueID) >diff --git a/Source/WebCore/css/CSSProperty.h b/Source/WebCore/css/CSSProperty.h >index debf1951fbf836d67e792cf4d5334142bedaf8c6..125f641b2a741cc5dcea4f59366edaef3c513598 100644 >--- a/Source/WebCore/css/CSSProperty.h >+++ b/Source/WebCore/css/CSSProperty.h >@@ -78,6 +78,7 @@ public: > > static CSSPropertyID resolveDirectionAwareProperty(CSSPropertyID, TextDirection, WritingMode); > static bool isInheritedProperty(CSSPropertyID); >+ static Vector<String> aliasesForProperty(CSSPropertyID); > static bool isDirectionAwareProperty(CSSPropertyID); > static bool isDescriptorOnly(CSSPropertyID); > >diff --git a/Source/WebCore/css/CSSValuePool.cpp b/Source/WebCore/css/CSSValuePool.cpp >index e249330861ad2ceabecd750168f1f8ab3cb3c6ca..235f76f75566fc8dd5ac5c220658885623d38bed 100644 >--- a/Source/WebCore/css/CSSValuePool.cpp >+++ b/Source/WebCore/css/CSSValuePool.cpp >@@ -51,7 +51,7 @@ CSSValuePool::CSSValuePool() > m_whiteColor.construct(Color(Color::white)); > m_blackColor.construct(Color(Color::black)); > >- for (unsigned i = 0; i < numCSSValueKeywords; ++i) >+ for (unsigned i = firstCSSValueKeyword; i <= lastCSSValueKeyword; ++i) > m_identifierValues[i].construct(static_cast<CSSValueID>(i)); > > for (unsigned i = 0; i < (maximumCacheableIntegerValue + 1); ++i) { >@@ -63,7 +63,7 @@ CSSValuePool::CSSValuePool() > > Ref<CSSPrimitiveValue> CSSValuePool::createIdentifierValue(CSSValueID ident) > { >- RELEASE_ASSERT(ident >= 0 && ident < numCSSValueKeywords); >+ RELEASE_ASSERT(ident >= firstCSSValueKeyword && ident <= lastCSSValueKeyword); > return m_identifierValues[ident].get(); > } > >diff --git a/Source/WebCore/css/makeprop.pl b/Source/WebCore/css/makeprop.pl >index ae125fea67453c7279cb4b36765f3a94ecdd2ddc..29244fc654f60c72bab59a817d98f6937e95abe7 100755 >--- a/Source/WebCore/css/makeprop.pl >+++ b/Source/WebCore/css/makeprop.pl >@@ -243,11 +243,10 @@ print GPERF << "EOF"; > #include \"CSSProperty.h\" > #include \"CSSPropertyNames.h\" > #include \"HashTools.h\" >-#include <string.h> >- > #include <wtf/ASCIICType.h> > #include <wtf/text/AtomicString.h> > #include <wtf/text/WTFString.h> >+#include <string.h> > > #if defined(__clang__) > #pragma clang diagnostic push >@@ -401,6 +400,25 @@ bool CSSProperty::isInheritedProperty(CSSPropertyID id) > return isInheritedPropertyTable[id]; > } > >+Vector<String> CSSProperty::aliasesForProperty(CSSPropertyID id) >+{ >+ switch (id) { >+EOF >+ >+for my $name (@names) { >+ if (!$nameToAliases{$name}) { >+ next; >+ } >+ print GPERF " case CSSPropertyID::CSSProperty" . $nameToId{$name} . ":\n"; >+ print GPERF " return { \"" . join("\"_s, \"", @{$nameToAliases{$name}}) . "\"_s };\n"; >+} >+ >+print GPERF << "EOF"; >+ default: >+ return { }; >+ } >+} >+ > } // namespace WebCore > > #if defined(__clang__) >diff --git a/Source/WebCore/css/makevalues.pl b/Source/WebCore/css/makevalues.pl >index 9b090eac4f44180ff1334446fabab47d5043e35c..6fc684c348297e60c1759cfc1d311cd8db05bd52 100755 >--- a/Source/WebCore/css/makevalues.pl >+++ b/Source/WebCore/css/makevalues.pl >@@ -43,6 +43,7 @@ my @duplicates = (); > > my @names = (); > my @lower_names = (); >+my $numPredefinedProperties = 1; > > foreach (@NAMES) { > next if (m/(^\s*$)/); >@@ -69,8 +70,12 @@ print GPERF << "EOF"; > %{ > /* This file is automatically generated from CSSValueKeywords.in by makevalues, do not edit */ > >+#include \"config.h\" > #include \"CSSValueKeywords.h\" > #include \"HashTools.h\" >+#include <wtf/ASCIICType.h> >+#include <wtf/text/AtomicString.h> >+#include <wtf/text/WTFString.h> > #include <string.h> > > #if defined(__clang__) >@@ -125,11 +130,29 @@ const Value* findValue(const char* str, unsigned int len) > > const char* getValueName(unsigned short id) > { >- if (id >= numCSSValueKeywords || id <= 0) >+ if (id > lastCSSValueKeyword) > return 0; > return valueList[id]; > } > >+const AtomicString& getValueNameAtomicString(CSSValueID id) >+{ >+ if (id < firstCSSValueKeyword || id > lastCSSValueKeyword) >+ return nullAtom(); >+ >+ static AtomicString* valueKeywordStrings = new AtomicString[numCSSValueKeywords]; // Leaked intentionally. >+ AtomicString& valueKeywordString = valueKeywordStrings[id]; >+ if (valueKeywordString.isNull()) >+ valueKeywordString = getValueName(id); >+ return valueKeywordString; >+} >+ >+String getValueNameString(CSSValueID id) >+{ >+ // We share the StringImpl with the AtomicStrings. >+ return getValueNameAtomicString(id).string(); >+} >+ > } // namespace WebCore > > #if defined(__clang__) >@@ -146,6 +169,7 @@ print HEADER << "EOF"; > #pragma once > > #include <string.h> >+#include <wtf/Forward.h> > > namespace WebCore { > >@@ -153,7 +177,8 @@ enum CSSValueID { > CSSValueInvalid = 0, > EOF > >-my $i = 1; >+my $first = 0; # Include CSSValueInvalid in the total number of values >+my $i = $numPredefinedProperties; > my $maxLen = 0; > foreach my $name (@names) { > my $id = $name; >@@ -164,13 +189,25 @@ foreach my $name (@names) { > $maxLen = length($name); > } > } >+my $num = $i - $first; >+my $last = $i - 1; > > print HEADER "};\n\n"; >-print HEADER "const int numCSSValueKeywords = " . $i . ";\n"; >+print HEADER "const int firstCSSValueKeyword = $first;\n"; >+print HEADER "const int numCSSValueKeywords = $num;\n"; >+print HEADER "const int lastCSSValueKeyword = $last;\n"; > print HEADER "const size_t maxCSSValueKeywordLength = " . $maxLen . ";\n"; > print HEADER << "EOF"; > > const char* getValueName(unsigned short id); >+const WTF::AtomicString& getValueNameAtomicString(CSSValueID id); >+WTF::String getValueNameString(CSSValueID id); >+ >+inline CSSValueID convertToCSSValueID(int value) >+{ >+ ASSERT(value >= firstCSSValueKeyword && value <= lastCSSValueKeyword); >+ return static_cast<CSSValueID>(value); >+} > > } // namespace WebCore > EOF >diff --git a/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp b/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp >index 206eae3e60e35b3afbc5d06a0dcaa3b6dfbc7dae..5a3a4b2b8a5c1da724e89f43ab4c88dc6f0ce48b 100644 >--- a/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp >+++ b/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp >@@ -28,12 +28,15 @@ > > #include "CSSComputedStyleDeclaration.h" > #include "CSSImportRule.h" >+#include "CSSParserFastPaths.h" >+#include "CSSParserMode.h" > #include "CSSPropertyNames.h" > #include "CSSPropertySourceData.h" > #include "CSSRule.h" > #include "CSSRuleList.h" > #include "CSSStyleRule.h" > #include "CSSStyleSheet.h" >+#include "CSSValueKeywords.h" > #include "ContentSecurityPolicy.h" > #include "DOMWindow.h" > #include "FontCache.h" >@@ -715,25 +718,46 @@ void InspectorCSSAgent::getSupportedCSSProperties(ErrorString&, RefPtr<JSON::Arr > { > auto properties = JSON::ArrayOf<Inspector::Protocol::CSS::CSSPropertyInfo>::create(); > for (int i = firstCSSProperty; i <= lastCSSProperty; ++i) { >- CSSPropertyID id = convertToCSSPropertyID(i); >- if (isInternalCSSProperty(id)) >+ CSSPropertyID propertyID = convertToCSSPropertyID(i); >+ if (isInternalCSSProperty(propertyID)) > continue; > > auto property = Inspector::Protocol::CSS::CSSPropertyInfo::create() >- .setName(getPropertyNameString(id)) >+ .setName(getPropertyNameString(propertyID)) > .release(); > >- const StylePropertyShorthand& shorthand = shorthandForProperty(id); >- if (!shorthand.length()) { >- properties->addItem(WTFMove(property)); >- continue; >+ auto aliases = CSSProperty::aliasesForProperty(propertyID); >+ if (!aliases.isEmpty()) { >+ auto aliasesArray = JSON::ArrayOf<String>::create(); >+ for (auto& alias : aliases) >+ aliasesArray->addItem(alias); >+ property->setAliases(WTFMove(aliasesArray)); >+ } >+ >+ const StylePropertyShorthand& shorthand = shorthandForProperty(propertyID); >+ if (shorthand.length()) { >+ auto longhands = JSON::ArrayOf<String>::create(); >+ for (unsigned j = 0; j < shorthand.length(); ++j) { >+ CSSPropertyID longhandID = shorthand.properties()[j]; >+ longhands->addItem(getPropertyNameString(longhandID)); >+ } >+ property->setLonghands(WTFMove(longhands)); > } >- auto longhands = JSON::ArrayOf<String>::create(); >- for (unsigned j = 0; j < shorthand.length(); ++j) { >- CSSPropertyID longhandID = shorthand.properties()[j]; >- longhands->addItem(getPropertyNameString(longhandID)); >+ >+ if (CSSParserFastPaths::isKeywordPropertyID(propertyID)) { >+ auto values = JSON::ArrayOf<String>::create(); >+ for (int j = firstCSSValueKeyword; j <= lastCSSValueKeyword; ++j) { >+ CSSValueID valueID = convertToCSSValueID(j); >+ if (CSSParserFastPaths::isValidKeywordPropertyAndValue(propertyID, valueID, HTMLStandardMode)) >+ values->addItem(getValueNameString(valueID)); >+ } >+ if (values->length()) >+ property->setValues(WTFMove(values)); > } >- property->setLonghands(WTFMove(longhands)); >+ >+ if (CSSProperty::isInheritedProperty(propertyID)) >+ property->setInherited(true); >+ > properties->addItem(WTFMove(property)); > } > cssProperties = WTFMove(properties); >diff --git a/Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js b/Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js >index 46433e7e5c9d6983a5886477b7594ae1a1288cae..160944cc0c0518d36c57d586a7d08bf1d9436558 100644 >--- a/Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js >+++ b/Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js >@@ -36,7 +36,6 @@ WI.CSSCompletions = class CSSCompletions > constructor(properties, acceptEmptyPrefix) > { > this._values = []; >- this._longhands = {}; > this._shorthands = {}; > > // The `properties` parameter can be either a list of objects with 'name' / 'longhand' >@@ -51,10 +50,12 @@ WI.CSSCompletions = class CSSCompletions > > this._values.push(propertyName); > >+ let aliases = property.aliases; >+ if (aliases) >+ this._values = this._values.concat(aliases); >+ > var longhands = property.longhands; > if (longhands) { >- this._longhands[propertyName] = longhands; >- > for (var j = 0; j < longhands.length; ++j) { > var longhandName = longhands[j]; > >@@ -123,7 +124,7 @@ WI.CSSCompletions = class CSSCompletions > var keywords = WI.CSSKeywordCompletions._propertyKeywordMap[propertyName]; > for (var i = 0; i < keywords.length; ++i) { > // Skip numbers, like the ones defined for font-weight. >- if (!isNaN(Number(keywords[i]))) >+ if (keywords[i] === WI.CSSKeywordCompletions.AllPropertyNamesPlaceholder || !isNaN(Number(keywords[i]))) > continue; > valueKeywordsForCodeMirror[nameForCodeMirror(keywords[i])] = true; > } >@@ -260,7 +261,7 @@ WI.CSSCompletions = class CSSCompletions > > isShorthandPropertyName(shorthand) > { >- return shorthand in this._longhands; >+ return WI.CSSKeywordCompletions.LonghandNamesForShorthandProperty.has(shorthand); > } > > shorthandsForLonghand(longhand) >diff --git a/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js b/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js >index 043bb7151369822505890ee91119a01721dc076f..b631adbd097cddfc9b4b4503363e5176b2c6ca52 100644 >--- a/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js >+++ b/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js >@@ -34,32 +34,47 @@ WI.CSSKeywordCompletions = {}; > WI.CSSKeywordCompletions.forProperty = function(propertyName) > { > let acceptedKeywords = ["initial", "unset", "revert", "var()", "env()"]; >- let isNotPrefixed = propertyName.charAt(0) !== "-"; > >- if (propertyName in WI.CSSKeywordCompletions._propertyKeywordMap) >- acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._propertyKeywordMap[propertyName]); >- else if (isNotPrefixed && ("-webkit-" + propertyName) in WI.CSSKeywordCompletions._propertyKeywordMap) >- acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._propertyKeywordMap["-webkit-" + propertyName]); >+ function addKeywordsForName(name) { >+ let isNotPrefixed = name.charAt(0) !== "-"; > >- if (propertyName in WI.CSSKeywordCompletions._colorAwareProperties) >- acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._colors); >- else if (isNotPrefixed && ("-webkit-" + propertyName) in WI.CSSKeywordCompletions._colorAwareProperties) >- acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._colors); >- else if (propertyName.endsWith("color")) >- acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._colors); >+ if (name in WI.CSSKeywordCompletions._propertyKeywordMap) >+ acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._propertyKeywordMap[name]); >+ else if (isNotPrefixed && ("-webkit-" + name) in WI.CSSKeywordCompletions._propertyKeywordMap) >+ acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._propertyKeywordMap["-webkit-" + name]); > >- // Only suggest "inherit" on inheritable properties even though it is valid on all properties. >- if (propertyName in WI.CSSKeywordCompletions.InheritedProperties) >- acceptedKeywords.push("inherit"); >- else if (isNotPrefixed && ("-webkit-" + propertyName) in WI.CSSKeywordCompletions.InheritedProperties) >- acceptedKeywords.push("inherit"); >+ if (name in WI.CSSKeywordCompletions._colorAwareProperties) >+ acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._colors); >+ else if (isNotPrefixed && ("-webkit-" + name) in WI.CSSKeywordCompletions._colorAwareProperties) >+ acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._colors); >+ else if (name.endsWith("color")) >+ acceptedKeywords = acceptedKeywords.concat(WI.CSSKeywordCompletions._colors); >+ >+ // Only suggest "inherit" on inheritable properties even though it is valid on all properties. >+ if (WI.CSSKeywordCompletions.InheritedProperties.has(name)) >+ acceptedKeywords.push("inherit"); >+ else if (isNotPrefixed && WI.CSSKeywordCompletions.InheritedProperties.has("-webkit-" + name)) >+ acceptedKeywords.push("inherit"); >+ } >+ >+ addKeywordsForName(propertyName); >+ >+ let unaliasedName = WI.CSSKeywordCompletions.PropertyNameForAlias.get(propertyName); >+ if (unaliasedName) >+ addKeywordsForName(unaliasedName); >+ >+ let longhandNames = WI.CSSKeywordCompletions.LonghandNamesForShorthandProperty.get(propertyName); >+ if (longhandNames) { >+ for (let longhandName of longhandNames) >+ addKeywordsForName(longhandName); >+ } > > if (acceptedKeywords.includes(WI.CSSKeywordCompletions.AllPropertyNamesPlaceholder) && WI.CSSCompletions.cssNameCompletions) { > acceptedKeywords.remove(WI.CSSKeywordCompletions.AllPropertyNamesPlaceholder); > acceptedKeywords = acceptedKeywords.concat(WI.CSSCompletions.cssNameCompletions.values); > } > >- return new WI.CSSCompletions(acceptedKeywords, true); >+ return new WI.CSSCompletions(Array.from(new Set(acceptedKeywords)), true); > }; > > WI.CSSKeywordCompletions.forFunction = function(functionName) >@@ -87,8 +102,19 @@ WI.CSSKeywordCompletions.forFunction = function(functionName) > WI.CSSKeywordCompletions.addCustomCompletions = function(properties) > { > for (var property of properties) { >+ if (property.aliases) { >+ for (let alias of property.aliases) >+ WI.CSSKeywordCompletions.PropertyNameForAlias.set(alias, property.name); >+ } >+ > if (property.values) > WI.CSSKeywordCompletions.addPropertyCompletionValues(property.name, property.values); >+ >+ if (property.inherited) >+ WI.CSSKeywordCompletions.InheritedProperties.add(property.name); >+ >+ if (property.longhands) >+ WI.CSSKeywordCompletions.LonghandNamesForShorthandProperty.set(property.name, property.longhands); > } > }; > >@@ -111,34 +137,139 @@ WI.CSSKeywordCompletions.addPropertyCompletionValues = function(propertyName, ne > > WI.CSSKeywordCompletions.AllPropertyNamesPlaceholder = "__all-properties__"; > >-WI.CSSKeywordCompletions.InheritedProperties = [ >- "azimuth", "border-collapse", "border-spacing", "caption-side", "clip-rule", "color", "color-interpolation", >- "color-interpolation-filters", "color-rendering", "cursor", "direction", "elevation", "empty-cells", "fill", >- "fill-opacity", "fill-rule", "font", "font-family", "font-size", "font-style", "font-variant", "font-variant-numeric", "font-weight", "font-optical-sizing", >- "glyph-orientation-horizontal", "glyph-orientation-vertical", "hanging-punctuation", "image-rendering", "kerning", "letter-spacing", >- "line-height", "list-style", "list-style-image", "list-style-position", "list-style-type", "marker", "marker-end", >- "marker-mid", "marker-start", "orphans", "pitch", "pitch-range", "pointer-events", "quotes", "resize", "richness", >- "shape-rendering", "speak", "speak-header", "speak-numeral", "speak-punctuation", "speech-rate", "stress", "stroke", >- "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", >- "stroke-width", "tab-size", "text-align", "text-anchor", "text-decoration", "text-indent", "text-rendering", >- "text-shadow", "text-transform", "visibility", "voice-family", "volume", "white-space", "widows", "word-break", >- "word-spacing", "word-wrap", "writing-mode", "-webkit-aspect-ratio", "-webkit-border-horizontal-spacing", >- "-webkit-border-vertical-spacing", "-webkit-box-direction", "-webkit-color-correction", "font-feature-settings", >- "-webkit-font-kerning", "-webkit-font-smoothing", "-webkit-font-variant-ligatures", >- "-webkit-hyphenate-character", "-webkit-hyphenate-limit-after", "-webkit-hyphenate-limit-before", >- "-webkit-hyphenate-limit-lines", "-webkit-hyphens", "-webkit-line-align", "-webkit-line-box-contain", >- "-webkit-line-break", "-webkit-line-grid", "-webkit-line-snap", "-webkit-locale", "-webkit-nbsp-mode", >- "-webkit-print-color-adjust", "-webkit-rtl-ordering", "-webkit-text-combine", "-webkit-text-decorations-in-effect", >- "-webkit-text-emphasis", "-webkit-text-emphasis-color", "-webkit-text-emphasis-position", "-webkit-text-emphasis-style", >- "-webkit-text-fill-color", "-webkit-text-orientation", "-webkit-text-security", "-webkit-text-size-adjust", >- "-webkit-text-stroke", "-webkit-text-stroke-color", "-webkit-text-stroke-width", "-webkit-user-modify", >- "-webkit-user-select", "-webkit-writing-mode", "-webkit-cursor-visibility", "image-orientation", "image-resolution", >- "overflow-wrap", "-webkit-text-align-last", "-webkit-text-justify", "-webkit-ruby-position", "-webkit-text-decoration-line", >- "font-synthesis", >+// Populated by CSS.getSupportedCSSProperties. >+WI.CSSKeywordCompletions.PropertyNameForAlias = new Map; >+WI.CSSKeywordCompletions.LonghandNamesForShorthandProperty = new Map; > >- // iOS Properties >- "-webkit-overflow-scrolling", "-webkit-touch-callout", "-webkit-tap-highlight-color" >-].keySet(); >+WI.CSSKeywordCompletions.InheritedProperties = new Set([ >+ // Compatibility (iOS 12): `inherited` didn't exist on `CSSPropertyInfo` >+ "-apple-color-filter", >+ "-apple-trailing-word", >+ "-webkit-animation-trigger", >+ "-webkit-aspect-ratio", >+ "-webkit-border-horizontal-spacing", >+ "-webkit-border-vertical-spacing", >+ "-webkit-box-direction", >+ "-webkit-cursor-visibility", >+ "-webkit-font-kerning", >+ "-webkit-font-smoothing", >+ "-webkit-hyphenate-character", >+ "-webkit-hyphenate-limit-after", >+ "-webkit-hyphenate-limit-before", >+ "-webkit-hyphenate-limit-lines", >+ "-webkit-hyphens", >+ "-webkit-line-align", >+ "-webkit-line-break", >+ "-webkit-line-box-contain", >+ "-webkit-line-grid", >+ "-webkit-line-snap", >+ "-webkit-locale", >+ "-webkit-nbsp-mode", >+ "-webkit-overflow-scrolling", >+ "-webkit-print-color-adjust", >+ "-webkit-rtl-ordering", >+ "-webkit-ruby-position", >+ "-webkit-text-align-last", >+ "-webkit-text-combine", >+ "-webkit-text-decoration-skip", >+ "-webkit-text-decorations-in-effect", >+ "-webkit-text-emphasis", >+ "-webkit-text-emphasis-color", >+ "-webkit-text-emphasis-position", >+ "-webkit-text-emphasis-style", >+ "-webkit-text-fill-color", >+ "-webkit-text-justify", >+ "-webkit-text-orientation", >+ "-webkit-text-security", >+ "-webkit-text-size-adjust", >+ "-webkit-text-stroke", >+ "-webkit-text-stroke-color", >+ "-webkit-text-stroke-width", >+ "-webkit-text-underline-position", >+ "-webkit-text-zoom", >+ "-webkit-touch-callout", >+ "-webkit-user-modify", >+ "-webkit-user-select", >+ "border-collapse", >+ "border-spacing", >+ "caption-side", >+ "caret-color", >+ "clip-rule", >+ "color", >+ "color-interpolation", >+ "color-interpolation-filters", >+ "color-rendering", >+ "cursor", >+ "direction", >+ "empty-cells", >+ "fill", >+ "fill-opacity", >+ "fill-rule", >+ "font", >+ "font-family", >+ "font-feature-settings", >+ "font-optical-sizing", >+ "font-size", >+ "font-stretch", >+ "font-style", >+ "font-synthesis", >+ "font-variant", >+ "font-variant-alternates", >+ "font-variant-caps", >+ "font-variant-east-asian", >+ "font-variant-ligatures", >+ "font-variant-numeric", >+ "font-variant-position", >+ "font-variation-settings", >+ "font-weight", >+ "glyph-orientation-horizontal", >+ "glyph-orientation-vertical", >+ "hanging-punctuation", >+ "image-orientation", >+ "image-rendering", >+ "image-resolution", >+ "kerning", >+ "letter-spacing", >+ "line-break", >+ "line-height", >+ "list-style", >+ "list-style-image", >+ "list-style-position", >+ "list-style-type", >+ "marker", >+ "marker-end", >+ "marker-mid", >+ "marker-start", >+ "orphans", >+ "pointer-events", >+ "quotes", >+ "resize", >+ "shape-rendering", >+ "speak-as", >+ "stroke", >+ "stroke-color", >+ "stroke-dasharray", >+ "stroke-dashoffset", >+ "stroke-linecap", >+ "stroke-linejoin", >+ "stroke-miterlimit", >+ "stroke-opacity", >+ "stroke-width", >+ "tab-size", >+ "text-align", >+ "text-anchor", >+ "text-indent", >+ "text-rendering", >+ "text-shadow", >+ "text-transform", >+ "visibility", >+ "white-space", >+ "widows", >+ "word-break", >+ "word-spacing", >+ "word-wrap", >+ "writing-mode", >+]); > > WI.CSSKeywordCompletions._colors = [ > "aqua", "black", "blue", "fuchsia", "gray", "green", "lime", "maroon", "navy", "olive", "orange", "purple", "red", >@@ -174,91 +305,31 @@ WI.CSSKeywordCompletions._colorAwareProperties = [ > ].keySet(); > > WI.CSSKeywordCompletions._propertyKeywordMap = { >- "table-layout": [ >- "auto", "fixed" >- ], >- "visibility": [ >- "hidden", "visible", "collapse" >- ], >- "text-underline": [ >- "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave" >- ], > "content": [ > "list-item", "close-quote", "no-close-quote", "no-open-quote", "open-quote", "attr()", "counter()", "counters()", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "cross-fade()", "image-set()" > ], > "list-style-image": [ > "none", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "cross-fade()", "image-set()" > ], >- "clear": [ >- "none", "left", "right", "both" >- ], >- "fill-rule": [ >- "nonzero", "evenodd" >- ], >- "stroke-linecap": [ >- "butt", "round", "square" >- ], >- "stroke-linejoin": [ >- "round", "miter", "bevel" >- ], > "baseline-shift": [ > "baseline", "sub", "super" > ], > "border-bottom-width": [ > "medium", "thick", "thin", "calc()" > ], >- "margin-top-collapse": [ >- "collapse", "separate", "discard" >- ], >- "-webkit-box-orient": [ >- "horizontal", "vertical", "inline-axis", "block-axis" >- ], > "font-stretch": [ > "normal", "wider", "narrower", "ultra-condensed", "extra-condensed", "condensed", "semi-condensed", > "semi-expanded", "expanded", "extra-expanded", "ultra-expanded" > ], >- "font-optical-sizing": [ >- "auto", "none", >- ], >- "-webkit-color-correction": [ >- "default", "srgb" >- ], > "border-left-width": [ > "medium", "thick", "thin", "calc()" > ], >- "-webkit-writing-mode": [ >- "lr", "rl", "tb", "lr-tb", "rl-tb", "tb-rl", "horizontal-tb", "vertical-rl", "vertical-lr", "horizontal-bt" >- ], >- "text-line-through-mode": [ >- "continuous", "skip-white-space" >- ], >- "text-overline-mode": [ >- "continuous", "skip-white-space" >- ], >- "text-underline-mode": [ >- "continuous", "skip-white-space" >- ], >- "text-line-through-style": [ >- "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave" >- ], >- "text-overline-style": [ >- "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave" >- ], >- "text-underline-style": [ >- "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave" >- ], >- "border-collapse": [ >- "collapse", "separate" >- ], > "border-top-width": [ > "medium", "thick", "thin", "calc()" > ], > "outline-color": [ > "invert", "-webkit-focus-ring-color" > ], >- "outline-style": [ >- "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double", "auto" >- ], > "cursor": [ > "auto", "default", "none", "context-menu", "help", "pointer", "progress", "wait", "cell", "crosshair", "text", "vertical-text", > "alias", "copy", "move", "no-drop", "not-allowed", "grab", "grabbing", >@@ -305,102 +376,30 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "background-clip": [ > "border-box", "padding-box", "content-box" > ], >- "direction": [ >- "ltr", "rtl" >- ], > "enable-background": [ > "accumulate", "new" > ], >- "float": [ >- "none", "left", "right" >- ], > "hanging-punctuation": [ > "none", "first", "last", "allow-end", "force-end" > ], >- "overflow-x": [ >- "hidden", "auto", "visible", "overlay", "scroll", "marquee" >- ], >- "overflow-y": [ >- "hidden", "auto", "visible", "overlay", "scroll", "marquee", "-webkit-paged-x", "-webkit-paged-y" >- ], > "overflow": [ > "hidden", "auto", "visible", "overlay", "scroll", "marquee", "-webkit-paged-x", "-webkit-paged-y" > ], >- "margin-bottom-collapse": [ >- "collapse", "separate", "discard" >- ], > "-webkit-box-reflect": [ > "none", "left", "right", "above", "below" > ], >- "text-rendering": [ >- "auto", "optimizeSpeed", "optimizeLegibility", "geometricPrecision" >- ], >- "text-align": [ >- "-webkit-auto", "left", "right", "center", "justify", "-webkit-left", "-webkit-right", "-webkit-center", "-webkit-match-parent", "start", "end" >- ], >- "list-style-position": [ >- "outside", "inside" >- ], > "margin-bottom": [ > "auto" > ], >- "color-interpolation": [ >- "linearrgb" >- ], >- "word-wrap": [ >- "normal", "break-word" >- ], > "font-weight": [ > "normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900" > ], > "font-synthesis": [ > "none", "weight", "style" > ], >- "margin-before-collapse": [ >- "collapse", "separate", "discard" >- ], >- "text-overline-width": [ >- "normal", "medium", "auto", "thick", "thin", "calc()" >- ], >- "text-transform": [ >- "none", "capitalize", "uppercase", "lowercase" >- ], >- "border-right-style": [ >- "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double" >- ], >- "border-left-style": [ >- "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double" >- ], > "font-style": [ > "italic", "oblique", "normal" > ], >- "speak": [ >- "none", "normal", "spell-out", "digits", "literal-punctuation", "no-punctuation" >- ], >- "text-line-through": [ >- "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave", "continuous", "skip-white-space" >- ], >- "color-rendering": [ >- "auto", "optimizeSpeed", "optimizeQuality" >- ], >- "list-style-type": [ >- "none", "disc", "circle", "square", "decimal", "decimal-leading-zero", "arabic-indic", "binary", "bengali", >- "cambodian", "khmer", "devanagari", "gujarati", "gurmukhi", "kannada", "lower-hexadecimal", "lao", "malayalam", >- "mongolian", "myanmar", "octal", "oriya", "persian", "urdu", "telugu", "tibetan", "thai", "upper-hexadecimal", >- "lower-roman", "upper-roman", "lower-greek", "lower-alpha", "lower-latin", "upper-alpha", "upper-latin", "afar", >- "ethiopic-halehame-aa-et", "ethiopic-halehame-aa-er", "amharic", "ethiopic-halehame-am-et", "amharic-abegede", >- "ethiopic-abegede-am-et", "cjk-earthly-branch", "cjk-heavenly-stem", "ethiopic", "ethiopic-halehame-gez", >- "ethiopic-abegede", "ethiopic-abegede-gez", "hangul-consonant", "hangul", "lower-norwegian", "oromo", >- "ethiopic-halehame-om-et", "sidama", "ethiopic-halehame-sid-et", "somali", "ethiopic-halehame-so-et", "tigre", >- "ethiopic-halehame-tig", "tigrinya-er", "ethiopic-halehame-ti-er", "tigrinya-er-abegede", >- "ethiopic-abegede-ti-er", "tigrinya-et", "ethiopic-halehame-ti-et", "tigrinya-et-abegede", >- "ethiopic-abegede-ti-et", "upper-greek", "upper-norwegian", "asterisks", "footnotes", "hebrew", "armenian", >- "lower-armenian", "upper-armenian", "georgian", "cjk-ideographic", "hiragana", "katakana", "hiragana-iroha", >- "katakana-iroha" >- ], >- "-webkit-text-combine": [ >- "none", "horizontal" >- ], > "outline": [ > "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double" > ], >@@ -415,32 +414,9 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "-apple-system-short-subheadline", "-apple-system-short-footnote", "-apple-system-short-caption1", > "-apple-system-tall-body", "-apple-system-title0", "-apple-system-title1", "-apple-system-title2", "-apple-system-title3", "-apple-system-title4", "system-ui" > ], >- "dominant-baseline": [ >- "middle", "auto", "central", "text-before-edge", "text-after-edge", "ideographic", "alphabetic", "hanging", >- "mathematical", "use-script", "no-change", "reset-size" >- ], >- "display": [ >- "none", "inline", "block", "list-item", "compact", "inline-block", "table", "inline-table", >- "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group", >- "table-column", "table-cell", "table-caption", "-webkit-box", "-webkit-inline-box", "-wap-marquee", >- "flex", "inline-flex", "grid", "inline-grid" >- ], >- "image-rendering": [ >- "auto", "optimizeSpeed", "optimizeQuality", "-webkit-crisp-edges", "-webkit-optimize-contrast", "crisp-edges", "pixelated" >- ], >- "alignment-baseline": [ >- "baseline", "middle", "auto", "before-edge", "after-edge", "central", "text-before-edge", "text-after-edge", >- "ideographic", "alphabetic", "hanging", "mathematical" >- ], > "outline-width": [ > "medium", "thick", "thin", "calc()" > ], >- "text-line-through-width": [ >- "normal", "medium", "auto", "thick", "thin" >- ], >- "box-align": [ >- "baseline", "center", "stretch", "start", "end" >- ], > "box-shadow": [ > "none" > ], >@@ -453,9 +429,6 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "border-right-width": [ > "medium", "thick", "thin" > ], >- "border-top-style": [ >- "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double" >- ], > "line-height": [ > "normal" > ], >@@ -465,24 +438,6 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "counter-reset": [ > "none" > ], >- "text-overflow": [ >- "clip", "ellipsis" >- ], >- "-webkit-box-direction": [ >- "normal", "reverse" >- ], >- "margin-after-collapse": [ >- "collapse", "separate", "discard" >- ], >- "break-after": [ >- "left", "right", "recto", "verso", "auto", "avoid", "page", "column", "region", "avoid-page", "avoid-column", "avoid-region" >- ], >- "break-before": [ >- "left", "right", "recto", "verso", "auto", "avoid", "page", "column", "region", "avoid-page", "avoid-column", "avoid-region" >- ], >- "break-inside": [ >- "auto", "avoid", "avoid-page", "avoid-column", "avoid-region" >- ], > "page-break-after": [ > "left", "right", "auto", "always", "avoid" > ], >@@ -501,9 +456,6 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "-webkit-column-break-inside": [ > "auto", "avoid" > ], >- "-webkit-hyphens": [ >- "none", "auto", "manual" >- ], > "border-image": [ > "repeat", "stretch", "url()", "linear-gradient()", "radial-gradient()", "repeating-linear-gradient()", "repeating-radial-gradient()", "-webkit-canvas()", "cross-fade()", "image-set()" > ], >@@ -513,9 +465,6 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "-webkit-mask-box-image-repeat": [ > "repeat", "stretch", "space", "round" > ], >- "position": [ >- "absolute", "fixed", "relative", "static", "-webkit-sticky" >- ], > "font-family": [ > "serif", "sans-serif", "cursive", "fantasy", "monospace", "-webkit-body", "-webkit-pictograph", > "-apple-system", "-apple-system-headline", "-apple-system-body", >@@ -524,18 +473,6 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "-apple-system-short-footnote", "-apple-system-short-caption1", "-apple-system-tall-body", > "-apple-system-title0", "-apple-system-title1", "-apple-system-title2", "-apple-system-title3", "-apple-system-title4", "system-ui" > ], >- "text-overflow-mode": [ >- "clip", "ellipsis" >- ], >- "border-bottom-style": [ >- "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double" >- ], >- "unicode-bidi": [ >- "normal", "bidi-override", "embed", "plaintext", "isolate", "isolate-override" >- ], >- "clip-rule": [ >- "nonzero", "evenodd" >- ], > "margin-left": [ > "auto" > ], >@@ -566,42 +503,12 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "min-height": [ > "intrinsic", "min-intrinsic", "calc()" > ], >- "-webkit-logical-width": [ >- "intrinsic", "min-intrinsic", "-webkit-min-content", "-webkit-max-content", "-webkit-fill-available", "-webkit-fit-content", "calc()" >- ], >- "-webkit-logical-height": [ >- "intrinsic", "min-intrinsic", "calc()" >- ], >- "-webkit-max-logical-width": [ >- "none", "intrinsic", "min-intrinsic", "-webkit-min-content", "-webkit-max-content", "-webkit-fill-available", "-webkit-fit-content", "calc()" >- ], >- "-webkit-min-logical-width": [ >- "intrinsic", "min-intrinsic", "-webkit-min-content", "-webkit-max-content", "-webkit-fill-available", "-webkit-fit-content", "calc()" >- ], >- "-webkit-max-logical-height": [ >- "none", "intrinsic", "min-intrinsic", "calc()" >- ], >- "-webkit-min-logical-height": [ >- "intrinsic", "min-intrinsic", "calc()" >- ], >- "empty-cells": [ >- "hide", "show" >- ], >- "pointer-events": [ >- "none", "all", "auto", "visible", "visiblepainted", "visiblefill", "visiblestroke", "painted", "fill", "stroke" >- ], > "letter-spacing": [ > "normal", "calc()" > ], > "word-spacing": [ > "normal", "calc()" > ], >- "-webkit-font-kerning": [ >- "auto", "normal", "none" >- ], >- "-webkit-font-smoothing": [ >- "none", "auto", "antialiased", "subpixel-antialiased" >- ], > "border": [ > "none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double" > ], >@@ -618,21 +525,9 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "vertical-align": [ > "baseline", "middle", "sub", "super", "text-top", "text-bottom", "top", "bottom", "-webkit-baseline-middle" > ], >- "white-space": [ >- "normal", "nowrap", "pre", "pre-line", "pre-wrap" >- ], >- "word-break": [ >- "normal", "break-all", "break-word" >- ], >- "text-underline-width": [ >- "normal", "medium", "auto", "thick", "thin", "calc()" >- ], > "text-indent": [ > "-webkit-each-line", "-webkit-hanging" > ], >- "-webkit-box-lines": [ >- "single", "multiple" >- ], > "clip": [ > "auto", "rect()" > ], >@@ -663,12 +558,6 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "-webkit-marquee-increment": [ > "small", "large", "medium" > ], >- "-webkit-marquee-direction": [ >- "left", "right", "auto", "reverse", "forwards", "backwards", "ahead", "up", "down" >- ], >- "-webkit-marquee-style": [ >- "none", "scroll", "slide", "alternate" >- ], > "-webkit-marquee-repetition": [ > "infinite" > ], >@@ -678,9 +567,6 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "margin-right": [ > "auto" > ], >- "marquee-speed": [ >- "normal", "slow", "fast" >- ], > "-webkit-text-emphasis": [ > "circle", "filled", "open", "dot", "double-circle", "triangle", "sesame" > ], >@@ -695,12 +581,6 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "scale()", "scaleX()", "scaleY()", "scale3d()", "rotate()", "rotateX()", "rotateY()", "rotateZ()", "rotate3d()", "skew()", "skewX()", "skewY()", > "translate()", "translateX()", "translateY()", "translateZ()", "translate3d()", "matrix()", "matrix3d()", "perspective()" > ], >- "transform-style": [ >- "flat", "preserve-3d" >- ], >- "-webkit-cursor-visibility": [ >- "auto", "auto-hide" >- ], > "text-decoration": [ > "none", "underline", "overline", "line-through", "blink" > ], >@@ -710,35 +590,12 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "-webkit-text-decoration-line": [ > "none", "underline", "overline", "line-through", "blink" > ], >- "-webkit-text-decoration-style": [ >- "solid", "double", "dotted", "dashed", "wavy" >- ], > "-webkit-text-decoration-skip": [ > "auto", "none", "objects", "ink" > ], > "-webkit-text-underline-position": [ > "auto", "alphabetic", "under" > ], >- "image-resolution": [ >- "from-image", "snap" >- ], >- "-webkit-blend-mode": [ >- "normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "plus-darker", "plus-lighter", "hue", "saturation", "color", "luminosity", >- ], >- "mix-blend-mode": [ >- "normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "plus-darker", "plus-lighter", "hue", "saturation", "color", "luminosity", >- ], >- "mix": [ >- "auto", >- "normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "plus-darker", "plus-lighter", "hue", "saturation", "color", "luminosity", >- "clear", "copy", "destination", "source-over", "destination-over", "source-in", "destination-in", "source-out", "destination-out", "source-atop", "destination-atop", "xor" >- ], >- "geometry": [ >- "detached", "attached", "grid()" >- ], >- "overflow-wrap": [ >- "normal", "break-word" >- ], > "transition": [ > "none", "ease", "linear", "ease-in", "ease-out", "ease-in-out", "step-start", "step-end", "steps()", "cubic-bezier()", "spring()", "all", WI.CSSKeywordCompletions.AllPropertyNamesPlaceholder > ], >@@ -748,11 +605,20 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "transition-property": [ > "all", "none", WI.CSSKeywordCompletions.AllPropertyNamesPlaceholder > ], >- "-webkit-column-progression": [ >- "normal", "reverse" >+ "animation-direction": [ >+ "normal", "alternate", "reverse", "alternate-reverse" > ], >- "-webkit-box-decoration-break": [ >- "slice", "clone" >+ "animation-fill-mode": [ >+ "none", "forwards", "backwards", "both" >+ ], >+ "animation-iteration-count": [ >+ "infinite" >+ ], >+ "animation-play-state": [ >+ "paused", "running" >+ ], >+ "animation-timing-function": [ >+ "ease", "linear", "ease-in", "ease-out", "ease-in-out", "step-start", "step-end", "steps()", "cubic-bezier()", "spring()" > ], > "align-content": [ > "auto", >@@ -791,12 +657,6 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "center", "start", "end", "self-start", "self-end", "flex-start", "flex-end", "left", "right", > "true", "safe" > ], >- "flex-direction": [ >- "row", "row-reverse", "column", "column-reverse" >- ], >- "flex-wrap": [ >- "nowrap", "wrap", "wrap-reverse" >- ], > "flex-flow": [ > "row", "row-reverse", "column", "column-reverse", > "nowrap", "wrap", "wrap-reverse" >@@ -852,217 +712,509 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > "grid-template-rows": [ > "none", "auto", "-webkit-max-content", "-webkit-min-content", "minmax()", "repeat()" > ], >- "-webkit-ruby-position": [ >- "after", "before", "inter-character" >- ], >- "-webkit-text-align-last": [ >- "auto", "start", "end", "left", "right", "center", "justify" >- ], >- "-webkit-text-justify": [ >- "auto", "none", "inter-word", "inter-ideograph", "inter-cluster", "distribute", "kashida" >- ], >- "max-zoom": [ >- "auto" >- ], >- "min-zoom": [ >- "auto" >- ], >- "orientation": [ >- "auto", "portait", "landscape" >- ], > "scroll-snap-align": [ > "none", "start", "center", "end" > ], > "scroll-snap-type": [ > "none", "mandatory", "proximity", "x", "y", "inline", "block", "both" > ], >- "user-zoom": [ >- "zoom", "fixed" >- ], >- "-webkit-app-region": [ >- "drag", "no-drag" >- ], >- "-webkit-line-break": [ >- "auto", "loose", "normal", "strict", "after-white-space" >- ], > "-webkit-background-composite": [ > "clear", "copy", "source-over", "source-in", "source-out", "source-atop", "destination-over", "destination-in", "destination-out", "destination-atop", "xor", "plus-darker", "plus-lighter" > ], > "-webkit-mask-composite": [ > "clear", "copy", "source-over", "source-in", "source-out", "source-atop", "destination-over", "destination-in", "destination-out", "destination-atop", "xor", "plus-darker", "plus-lighter" > ], >- "-webkit-animation-direction": [ >- "normal", "alternate", "reverse", "alternate-reverse" >+ "-webkit-text-stroke-width": [ >+ "medium", "thick", "thin", "calc()" > ], >- "-webkit-animation-fill-mode": [ >- "none", "forwards", "backwards", "both" >+ "-webkit-aspect-ratio": [ >+ "auto", "from-dimensions", "from-intrinsic", "/" > ], >- "-webkit-animation-iteration-count": [ >- "infinite" >+ "filter": [ >+ "none", "grayscale()", "sepia()", "saturate()", "hue-rotate()", "invert()", "opacity()", "brightness()", "contrast()", "blur()", "drop-shadow()", "custom()" > ], >- "-webkit-animation-play-state": [ >- "paused", "running" >+ "-webkit-backdrop-filter": [ >+ "none", "grayscale()", "sepia()", "saturate()", "hue-rotate()", "invert()", "opacity()", "brightness()", "contrast()", "blur()", "drop-shadow()", "custom()" > ], >- "-webkit-animation-timing-function": [ >- "ease", "linear", "ease-in", "ease-out", "ease-in-out", "step-start", "step-end", "steps()", "cubic-bezier()", "spring()" >+ "-webkit-hyphenate-character": [ >+ "none" > ], >- "-webkit-column-span": [ >- "all", "none", "calc()" >+ "-webkit-hyphenate-limit-after": [ >+ "auto" > ], >- "-webkit-region-break-after": [ >- "auto", "always", "avoid", "left", "right" >+ "-webkit-hyphenate-limit-before": [ >+ "auto" > ], >- "-webkit-region-break-before": [ >- "auto", "always", "avoid", "left", "right" >+ "-webkit-hyphenate-limit-lines": [ >+ "no-limit" > ], >- "-webkit-region-break-inside": [ >- "auto", "avoid" >+ "-webkit-line-grid": [ >+ "none" > ], >- "-webkit-region-overflow": [ >- "auto", "break" >+ "-webkit-locale": [ >+ "auto" > ], >- "-webkit-backface-visibility": [ >- "visible", "hidden" >+ "-webkit-line-box-contain": [ >+ "block", "inline", "font", "glyphs", "replaced", "inline-box", "none" > ], >- "resize": [ >- "none", "both", "horizontal", "vertical", "auto" >+ "font-feature-settings": [ >+ "normal" > ], >- "caption-side": [ >- "top", "bottom", "left", "right" >+ "-webkit-animation-trigger": [ >+ "auto", "container-scroll()" > ], >- "box-sizing": [ >- "border-box", "content-box" >+ >+ // iOS Properties >+ "-webkit-text-size-adjust": [ >+ "none", "auto" >+ ], >+ >+ // Compatibility (iOS 12): `inherited` didn't exist on `CSSPropertyInfo` >+ "-apple-pay-button-style": [ >+ "black", "white", "white-outline", >+ ], >+ "-apple-pay-button-type": [ >+ "plain", "buy", "set-up", "in-store", "donate", "checkout", "book", "subscribe", >+ ], >+ "-apple-trailing-word": [ >+ "auto", "-webkit-partially-balanced", > ], > "-webkit-alt": [ >- "attr()" >+ "attr()", >+ ], >+ "-webkit-animation-direction": [ >+ "normal", "alternate", "reverse", "alternate-reverse", >+ ], >+ "-webkit-animation-fill-mode": [ >+ "none", "forwards", "backwards", "both", >+ ], >+ "-webkit-animation-iteration-count": [ >+ "infinite", >+ ], >+ "-webkit-animation-play-state": [ >+ "paused", "running", >+ ], >+ "-webkit-animation-timing-function": [ >+ "ease", "linear", "ease-in", "ease-out", "ease-in-out", "step-start", "step-end", "steps()", "cubic-bezier()", "spring()", >+ ], >+ "-webkit-appearance": [ >+ "none", "checkbox", "radio", "push-button", "square-button", "button", "button-bevel", "default-button", "inner-spin-button", "listbox", "listitem", "media-controls-background", "media-controls-dark-bar-background", "media-controls-fullscreen-background", "media-controls-light-bar-background", "media-current-time-display", "media-enter-fullscreen-button", "media-exit-fullscreen-button", "media-fullscreen-volume-slider", "media-fullscreen-volume-slider-thumb", "media-mute-button", "media-overlay-play-button", "media-play-button", "media-return-to-realtime-button", "media-rewind-button", "media-seek-back-button", "media-seek-forward-button", "media-slider", "media-sliderthumb", "media-time-remaining-display", "media-toggle-closed-captions-button", "media-volume-slider", "media-volume-slider-container", "media-volume-slider-mute-button", "media-volume-sliderthumb", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "meter", "progress-bar", "progress-bar-value", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "caret", "searchfield", "searchfield-decoration", "searchfield-results-decoration", "searchfield-results-button", "searchfield-cancel-button", "snapshotted-plugin-overlay", "textfield", "relevancy-level-indicator", "continuous-capacity-level-indicator", "discrete-capacity-level-indicator", "rating-level-indicator", "image-controls-button", "-apple-pay-button", "textarea", "attachment", "borderless-attachment", "caps-lock-indicator", >+ ], >+ "-webkit-backface-visibility": [ >+ "hidden", "visible", >+ ], >+ "-webkit-border-after-width": [ >+ "medium", "thick", "thin", "calc()", >+ ], >+ "-webkit-border-before-width": [ >+ "medium", "thick", "thin", "calc()", >+ ], >+ "-webkit-border-end-width": [ >+ "medium", "thick", "thin", "calc()", > ], > "-webkit-border-fit": [ >- "border", "lines" >+ "border", "lines", >+ ], >+ "-webkit-border-start-width": [ >+ "medium", "thick", "thin", "calc()", >+ ], >+ "-webkit-box-align": [ >+ "baseline", "center", "stretch", "start", "end", >+ ], >+ "-webkit-box-decoration-break": [ >+ "clone", "slice", >+ ], >+ "-webkit-box-direction": [ >+ "normal", "reverse", >+ ], >+ "-webkit-box-lines": [ >+ "single", "multiple", >+ ], >+ "-webkit-box-orient": [ >+ "horizontal", "vertical", "inline-axis", "block-axis", >+ ], >+ "-webkit-box-pack": [ >+ "center", "justify", "start", "end", >+ ], >+ "-webkit-column-axis": [ >+ "auto", "horizontal", "vertical", >+ ], >+ "-webkit-column-count": [ >+ "auto", "calc()", >+ ], >+ "-webkit-column-fill": [ >+ "auto", "balance", >+ ], >+ "-webkit-column-gap": [ >+ "normal", "calc()", >+ ], >+ "-webkit-column-progression": [ >+ "normal", "reverse", >+ ], >+ "-webkit-column-rule-width": [ >+ "medium", "thick", "thin", "calc()", >+ ], >+ "-webkit-column-span": [ >+ "all", "none", "calc()", >+ ], >+ "-webkit-column-width": [ >+ "auto", "calc()", >+ ], >+ "-webkit-cursor-visibility": [ >+ "auto", "auto-hide", >+ ], >+ "-webkit-font-kerning": [ >+ "none", "normal", "auto", >+ ], >+ "-webkit-font-smoothing": [ >+ "none", "auto", "antialiased", "subpixel-antialiased", >+ ], >+ "-webkit-hyphens": [ >+ "none", "auto", "manual", > ], > "-webkit-line-align": [ >- "none", "edges" >+ "none", "edges", >+ ], >+ "-webkit-line-break": [ >+ "auto", "loose", "normal", "strict", "after-white-space", > ], > "-webkit-line-snap": [ >- "none", "baseline", "contain" >+ "none", "baseline", "contain", >+ ], >+ "-webkit-logical-height": [ >+ "intrinsic", "min-intrinsic", "calc()", >+ ], >+ "-webkit-logical-width": [ >+ "intrinsic", "min-intrinsic", "-webkit-min-content", "-webkit-max-content", "-webkit-fill-available", "-webkit-fit-content", "calc()", >+ ], >+ "-webkit-margin-after-collapse": [ >+ "collapse", "separate", "discard", >+ ], >+ "-webkit-margin-before-collapse": [ >+ "collapse", "separate", "discard", >+ ], >+ "-webkit-margin-bottom-collapse": [ >+ "collapse", "separate", "discard", >+ ], >+ "-webkit-margin-top-collapse": [ >+ "collapse", "separate", "discard", >+ ], >+ "-webkit-marquee-direction": [ >+ "left", "right", "auto", "reverse", "forwards", "backwards", "ahead", "up", "down", >+ ], >+ "-webkit-marquee-style": [ >+ "none", "scroll", "slide", "alternate", >+ ], >+ "-webkit-max-logical-height": [ >+ "none", "intrinsic", "min-intrinsic", "calc()", >+ ], >+ "-webkit-max-logical-width": [ >+ "none", "intrinsic", "min-intrinsic", "-webkit-min-content", "-webkit-max-content", "-webkit-fill-available", "-webkit-fit-content", "calc()", >+ ], >+ "-webkit-min-logical-height": [ >+ "intrinsic", "min-intrinsic", "calc()", >+ ], >+ "-webkit-min-logical-width": [ >+ "intrinsic", "min-intrinsic", "-webkit-min-content", "-webkit-max-content", "-webkit-fill-available", "-webkit-fit-content", "calc()", > ], > "-webkit-nbsp-mode": [ >- "normal", "space" >+ "normal", "space", >+ ], >+ "-webkit-overflow-scrolling": [ >+ "auto", "touch", > ], > "-webkit-print-color-adjust": [ >- "exact", "economy" >+ "economy", "exact", > ], > "-webkit-rtl-ordering": [ >- "logical", "visual" >+ "logical", "visual", >+ ], >+ "-webkit-ruby-position": [ >+ "after", "before", "inter-character", >+ ], >+ "-webkit-text-align-last": [ >+ "auto", "start", "end", "left", "right", "center", "justify", >+ ], >+ "-webkit-text-combine": [ >+ "none", "horizontal", >+ ], >+ "-webkit-text-decoration-style": [ >+ "dotted", "dashed", "solid", "double", "wavy", >+ ], >+ "-webkit-text-justify": [ >+ "auto", "none", "inter-word", "inter-ideograph", "inter-cluster", "distribute", "kashida", >+ ], >+ "-webkit-text-orientation": [ >+ "sideways", "sideways-right", "upright", "mixed", > ], > "-webkit-text-security": [ >- "disc", "circle", "square", "none" >+ "none", "disc", "circle", "square", >+ ], >+ "-webkit-text-zoom": [ >+ "normal", "reset", >+ ], >+ "-webkit-transform-style": [ >+ "flat", "preserve-3d", > ], > "-webkit-user-drag": [ >- "auto", "none", "element" >+ "none", "auto", "element", > ], > "-webkit-user-modify": [ >- "read-only", "read-write", "read-write-plaintext-only" >+ "read-only", "read-write", "read-write-plaintext-only", > ], > "-webkit-user-select": [ >- "auto", "none", "text", "all" >+ "none", "all", "auto", "text", > ], >- "-webkit-text-stroke-width": [ >- "medium", "thick", "thin", "calc()" >+ "-webkit-writing-mode": [ >+ "lr", "rl", "tb", "lr-tb", "rl-tb", "tb-rl", "horizontal-tb", "vertical-rl", "vertical-lr", "horizontal-bt", > ], >- "-webkit-border-start-width": [ >- "medium", "thick", "thin", "calc()" >+ "alignment-baseline": [ >+ "baseline", "middle", "auto", "alphabetic", "before-edge", "after-edge", "central", "text-before-edge", "text-after-edge", "ideographic", "hanging", "mathematical", > ], >- "-webkit-border-end-width": [ >- "medium", "thick", "thin", "calc()" >+ "border-block-end-style": [ >+ "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double", > ], >- "-webkit-border-before-width": [ >- "medium", "thick", "thin", "calc()" >+ "border-block-start-style": [ >+ "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double", > ], >- "-webkit-border-after-width": [ >- "medium", "thick", "thin", "calc()" >+ "border-bottom-style": [ >+ "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double", > ], >- "-webkit-column-rule-width": [ >- "medium", "thick", "thin", "calc()" >+ "border-collapse": [ >+ "collapse", "separate", > ], >- "-webkit-aspect-ratio": [ >- "auto", "from-dimensions", "from-intrinsic", "/" >+ "border-inline-end-style": [ >+ "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double", > ], >- "filter": [ >- "none", "grayscale()", "sepia()", "saturate()", "hue-rotate()", "invert()", "opacity()", "brightness()", "contrast()", "blur()", "drop-shadow()", "custom()" >+ "border-inline-start-style": [ >+ "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double", > ], >- "-webkit-backdrop-filter": [ >- "none", "grayscale()", "sepia()", "saturate()", "hue-rotate()", "invert()", "opacity()", "brightness()", "contrast()", "blur()", "drop-shadow()", "custom()" >+ "border-left-style": [ >+ "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double", > ], >- "-webkit-column-count": [ >- "auto", "calc()" >+ "border-right-style": [ >+ "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double", > ], >- "-webkit-column-gap": [ >- "normal", "calc()" >+ "border-top-style": [ >+ "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double", > ], >- "-webkit-column-axis": [ >- "horizontal", "vertical", "auto" >+ "box-sizing": [ >+ "border-box", "content-box", > ], >- "-webkit-column-width": [ >- "auto", "calc()" >+ "break-after": [ >+ "left", "right", "auto", "avoid", "column", "avoid-column", "avoid-page", "page", "recto", "verso", > ], >- "-webkit-column-fill": [ >- "auto", "balance" >+ "break-before": [ >+ "left", "right", "auto", "avoid", "column", "avoid-column", "avoid-page", "page", "recto", "verso", > ], >- "-webkit-hyphenate-character": [ >- "none" >+ "break-inside": [ >+ "auto", "avoid", "avoid-column", "avoid-page", > ], >- "-webkit-hyphenate-limit-after": [ >- "auto" >+ "buffered-rendering": [ >+ "auto", "static", "dynamic", > ], >- "-webkit-hyphenate-limit-before": [ >- "auto" >+ "caption-side": [ >+ "top", "bottom", "left", "right", > ], >- "-webkit-hyphenate-limit-lines": [ >- "no-limit" >+ "clear": [ >+ "none", "left", "right", "both", > ], >- "-webkit-line-grid": [ >- "none" >+ "clip-rule": [ >+ "nonzero", "evenodd", > ], >- "-webkit-locale": [ >- "auto" >+ "color-interpolation": [ >+ "auto", "sRGB", "linearRGB", > ], >- "-webkit-text-orientation": [ >- "sideways", "sideways-right", "vertical-right", "upright" >+ "color-interpolation-filters": [ >+ "auto", "sRGB", "linearRGB", > ], >- "-webkit-line-box-contain": [ >- "block", "inline", "font", "glyphs", "replaced", "inline-box", "none" >+ "color-rendering": [ >+ "auto", "optimizeSpeed", "optimizeQuality", > ], >- "font-feature-settings": [ >- "normal" >+ "column-fill": [ >+ "auto", "balance", > ], >- "-webkit-font-variant-ligatures": [ >- "normal", "common-ligatures", "no-common-ligatures", "discretionary-ligatures", "no-discretionary-ligatures", "historical-ligatures", "no-historical-ligatures" >+ "column-rule-style": [ >+ "none", "hidden", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double", > ], >- /* >- "-webkit-appearance": [ >- "none", "checkbox", "radio", "push-button", "square-button", "button", "button-bevel", "default-button", "inner-spin-button", "listbox", "listitem", "media-enter-fullscreen-button", "media-exit-fullscreen-button", "media-fullscreen-volume-slider", "media-fullscreen-volume-slider-thumb", "media-mute-button", "media-play-button", "media-overlay-play-button", "media-seek-back-button", "media-seek-forward-button", "media-rewind-button", "media-return-to-realtime-button", "media-toggle-closed-captions-button", "media-slider", "media-sliderthumb", "media-volume-slider-container", "media-volume-slider", "media-volume-sliderthumb", "media-volume-slider-mute-button", "media-controls-background", "media-controls-fullscreen-background", "media-current-time-display", "media-time-remaining-display", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "meter", "progress-bar", "progress-bar-value", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "caret", "searchfield", "searchfield-decoration", "searchfield-results-decoration", "searchfield-results-button", "searchfield-cancel-button", "snapshotted-plugin-overlay", "textfield", "relevancy-level-indicator", "continuous-capacity-level-indicator", "discrete-capacity-level-indicator", "rating-level-indicator", "textarea", "attachment", "caps-lock-indicator", "color-well", "list-button" >+ "direction": [ >+ "ltr", "rtl", > ], >- */ >- "-webkit-animation-trigger": [ >- "auto", "container-scroll()" >+ "display": [ >+ "none", "inline", "block", "list-item", "compact", "inline-block", "table", "inline-table", "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group", "table-column", "table-cell", "table-caption", "-webkit-box", "-webkit-inline-box", "flex", "-webkit-flex", "inline-flex", "-webkit-inline-flex", "contents", "grid", "inline-grid", > ], >- >- // iOS Properties >- "-webkit-text-size-adjust": [ >- "none", "auto" >+ "dominant-baseline": [ >+ "middle", "auto", "alphabetic", "central", "text-before-edge", "text-after-edge", "ideographic", "hanging", "mathematical", "use-script", "no-change", "reset-size", > ], >- "-webkit-touch-callout": [ >- "default", "none" >+ "empty-cells": [ >+ "hide", "show", > ], >- "-webkit-overflow-scrolling": [ >- "auto", "touch" >+ "fill-rule": [ >+ "nonzero", "evenodd", > ], >- >- // Apple Pay Properties >- "-apple-pay-button-style": [ >- "black", "white", "white-outline" >+ "flex-direction": [ >+ "row", "row-reverse", "column", "column-reverse", >+ ], >+ "flex-wrap": [ >+ "nowrap", "wrap-reverse", "wrap", >+ ], >+ "float": [ >+ "none", "left", "right", >+ ], >+ "font-optical-sizing": [ >+ "none", "auto", >+ ], >+ "font-variant-alternates": [ >+ "historical-forms", "normal", >+ ], >+ "font-variant-caps": [ >+ "small-caps", "all-small-caps", "petite-caps", "all-petite-caps", "unicase", "titling-caps", "normal", >+ ], >+ "font-variant-position": [ >+ "normal", "sub", "super", >+ ], >+ "image-rendering": [ >+ "auto", "optimizeSpeed", "optimizeQuality", "crisp-edges", "pixelated", "-webkit-crisp-edges", "-webkit-optimize-contrast", >+ ], >+ "image-resolution": [ >+ "from-image", "snap", >+ ], >+ "isolation": [ >+ "auto", "isolate", >+ ], >+ "line-break": [ >+ "normal", "auto", "loose", "strict", "after-white-space", >+ ], >+ "list-style-position": [ >+ "outside", "inside", >+ ], >+ "list-style-type": [ >+ "none", "disc", "circle", "square", "decimal", "decimal-leading-zero", "arabic-indic", "binary", "bengali", "cambodian", "khmer", "devanagari", "gujarati", "gurmukhi", "kannada", "lower-hexadecimal", "lao", "malayalam", "mongolian", "myanmar", "octal", "oriya", "persian", "urdu", "telugu", "tibetan", "thai", "upper-hexadecimal", "lower-roman", "upper-roman", "lower-greek", "lower-alpha", "lower-latin", "upper-alpha", "upper-latin", "afar", "ethiopic-halehame-aa-et", "ethiopic-halehame-aa-er", "amharic", "ethiopic-halehame-am-et", "amharic-abegede", "ethiopic-abegede-am-et", "cjk-earthly-branch", "cjk-heavenly-stem", "ethiopic", "ethiopic-halehame-gez", "ethiopic-abegede", "ethiopic-abegede-gez", "hangul-consonant", "hangul", "lower-norwegian", "oromo", "ethiopic-halehame-om-et", "sidama", "ethiopic-halehame-sid-et", "somali", "ethiopic-halehame-so-et", "tigre", "ethiopic-halehame-tig", "tigrinya-er", "ethiopic-halehame-ti-er", "tigrinya-er-abegede", "ethiopic-abegede-ti-er", "tigrinya-et", "ethiopic-halehame-ti-et", "tigrinya-et-abegede", "ethiopic-abegede-ti-et", "upper-greek", "upper-norwegian", "asterisks", "footnotes", "hebrew", "armenian", "lower-armenian", "upper-armenian", "georgian", "cjk-ideographic", "hiragana", "katakana", "hiragana-iroha", "katakana-iroha", >+ ], >+ "mask-type": [ >+ "alpha", "luminance", >+ ], >+ "max-zoom": [ >+ "auto", >+ ], >+ "min-zoom": [ >+ "auto", >+ ], >+ "mix-blend-mode": [ >+ "normal", "plus-darker", "plus-lighter", "overlay", "multiply", "screen", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity", >+ ], >+ "object-fit": [ >+ "none", "contain", "cover", "fill", "scale-down", >+ ], >+ "orientation": [ >+ "auto", "portait", "landscape", >+ ], >+ "outline-style": [ >+ "none", "inset", "groove", "outset", "ridge", "dotted", "dashed", "solid", "double", "auto", >+ ], >+ "overflow-wrap": [ >+ "normal", "break-word", >+ ], >+ "overflow-x": [ >+ "hidden", "auto", "visible", "overlay", "scroll", >+ ], >+ "overflow-y": [ >+ "hidden", "auto", "visible", "overlay", "scroll", "-webkit-paged-x", "-webkit-paged-y", >+ ], >+ "pointer-events": [ >+ "none", "all", "auto", "visible", "visiblePainted", "visibleFill", "visibleStroke", "painted", "fill", "stroke", >+ ], >+ "position": [ >+ "absolute", "fixed", "relative", "static", "-webkit-sticky", >+ ], >+ "resize": [ >+ "none", "auto", "both", "horizontal", "vertical", >+ ], >+ "shape-rendering": [ >+ "auto", "optimizeSpeed", "geometricPrecision", "crispedges", >+ ], >+ "stroke-linecap": [ >+ "square", "round", "butt", >+ ], >+ "stroke-linejoin": [ >+ "round", "miter", "bevel", >+ ], >+ "table-layout": [ >+ "auto", "fixed", >+ ], >+ "text-align": [ >+ "-webkit-auto", "left", "right", "center", "justify", "-webkit-left", "-webkit-right", "-webkit-center", "-webkit-match-parent", "start", "end", >+ ], >+ "text-anchor": [ >+ "middle", "start", "end", >+ ], >+ "text-line-through": [ >+ "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave", "continuous", "skip-white-space", >+ ], >+ "text-line-through-mode": [ >+ "continuous", "skip-white-space", >+ ], >+ "text-line-through-style": [ >+ "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave", >+ ], >+ "text-line-through-width": [ >+ "normal", "medium", "auto", "thick", "thin", >+ ], >+ "text-overflow": [ >+ "clip", "ellipsis", >+ ], >+ "text-overline-mode": [ >+ "continuous", "skip-white-space", >+ ], >+ "text-overline-style": [ >+ "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave", >+ ], >+ "text-overline-width": [ >+ "normal", "medium", "auto", "thick", "thin", "calc()", >+ ], >+ "text-rendering": [ >+ "auto", "optimizeSpeed", "optimizeLegibility", "geometricPrecision", >+ ], >+ "text-transform": [ >+ "none", "capitalize", "uppercase", "lowercase", >+ ], >+ "text-underline": [ >+ "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave", >+ ], >+ "text-underline-mode": [ >+ "continuous", "skip-white-space", >+ ], >+ "text-underline-style": [ >+ "none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave", >+ ], >+ "text-underline-width": [ >+ "normal", "medium", "auto", "thick", "thin", "calc()", >+ ], >+ "transform-style": [ >+ "flat", "preserve-3d", >+ ], >+ "unicode-bidi": [ >+ "normal", "bidi-override", "embed", "isolate-override", "plaintext", "-webkit-isolate", "-webkit-isolate-override", "-webkit-plaintext", "isolate", >+ ], >+ "user-zoom": [ >+ "zoom", "fixed", >+ ], >+ "vector-effect": [ >+ "none", >+ ], >+ "visibility": [ >+ "hidden", "visible", "collapse", >+ ], >+ "white-space": [ >+ "normal", "nowrap", "pre", "pre-line", "pre-wrap", >+ ], >+ "word-break": [ >+ "normal", "break-all", "keep-all", "break-word", >+ ], >+ "word-wrap": [ >+ "normal", "break-word", >+ ], >+ "writing-mode": [ >+ "lr", "rl", "tb", "lr-tb", "rl-tb", "tb-rl", "horizontal-tb", "vertical-rl", "vertical-lr", "horizontal-bt", > ], >- "-apple-pay-button-type": [ >- "book", "buy", "check-out", "donate", "in-store", "plain", "set-up", "subscribe" >- ] > }; >diff --git a/Source/WebInspectorUI/UserInterface/Models/CSSProperty.js b/Source/WebInspectorUI/UserInterface/Models/CSSProperty.js >index 2a6d64f68f3b067131c8782d5df7f3d16fe61fbd..98025a86c211d56023cd1b4ad43e774995f4ec86 100644 >--- a/Source/WebInspectorUI/UserInterface/Models/CSSProperty.js >+++ b/Source/WebInspectorUI/UserInterface/Models/CSSProperty.js >@@ -40,7 +40,7 @@ WI.CSSProperty = class CSSProperty extends WI.Object > static isInheritedPropertyName(name) > { > console.assert(typeof name === "string"); >- if (name in WI.CSSKeywordCompletions.InheritedProperties) >+ if (WI.CSSKeywordCompletions.InheritedProperties.has(name)) > return true; > // Check if the name is a CSS variable. > return name.startsWith("--"); >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 7dd3b8aafeadbaca7bd230d7d60778b69ddf5f9c..6cca1c88aa969fd25489cc14dd6b47514eb840a2 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,13 @@ >+2018-09-17 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: generate CSSKeywordCompletions from backend values >+ https://bugs.webkit.org/show_bug.cgi?id=189041 >+ >+ Reviewed by Joseph Pecoraro. >+ >+ * inspector/css/getSupportedCSSProperties-expected.txt: >+ * inspector/css/getSupportedCSSProperties.html: >+ > 2018-09-17 Basuke Suzuki <Basuke.Suzuki@sony.com> > > [Curl] Respond with requested authentication scheme for authentication challenge. >diff --git a/LayoutTests/inspector/css/getSupportedCSSProperties-expected.txt b/LayoutTests/inspector/css/getSupportedCSSProperties-expected.txt >index af0b2cc9678b07d475fe6c7558593b5faa69a02a..a19d81d3850c9ff6434945225757ad56b5df1ad7 100644 >--- a/LayoutTests/inspector/css/getSupportedCSSProperties-expected.txt >+++ b/LayoutTests/inspector/css/getSupportedCSSProperties-expected.txt >@@ -1,2 +1,32 @@ >-box-shadow is supported >+"box-sizing" is supported >+"box-sizing" has aliases: >+ - "-webkit-box-sizing" >+"box-sizing" has keyword values: >+ - "border-box" >+ - "content-box" >+ >+"filter" is supported >+"filter" has aliases: >+ - "-webkit-filter" >+ >+"font-style" is supported >+"font-style" is inherited >+ >+"margin" is supported >+"margin" has longhands: >+ - "margin-top" >+ - "margin-right" >+ - "margin-bottom" >+ - "margin-left" >+ >+"text-transform" is supported >+"text-transform" has aliases: >+ - "-epub-text-transform" >+"text-transform" is inherited >+"text-transform" has keyword values: >+ - "none" >+ - "capitalize" >+ - "uppercase" >+ - "lowercase" >+ > >diff --git a/LayoutTests/inspector/css/getSupportedCSSProperties.html b/LayoutTests/inspector/css/getSupportedCSSProperties.html >index cc2350ae2bb4ab99b3d63505fd540fd037e8f19b..b8218b4d28e500d9831d52bf7c7a3f631daab244 100644 >--- a/LayoutTests/inspector/css/getSupportedCSSProperties.html >+++ b/LayoutTests/inspector/css/getSupportedCSSProperties.html >@@ -4,22 +4,53 @@ > <script> > function test() > { >- InspectorProtocol.sendCommand("CSS.getSupportedCSSProperties", {}, function(messageObject) { >+ InspectorProtocol.sendCommand("CSS.getSupportedCSSProperties", {}, (messageObject) => { > if ("error" in messageObject) > ProtocolTest.log(messageObject.error.message); > else { >- var cssProperty = "box-shadow"; >- var entries = messageObject["result"]["cssProperties"]; >+ let entries = messageObject["result"]["cssProperties"]; >+ >+ const expectedProperties = [ >+ "box-sizing", >+ "filter", >+ "font-style", >+ "margin", >+ "text-transform", >+ ]; >+ >+ for (let expectedProperty of expectedProperties) { >+ for (let entry of entries) { >+ if (entry.name !== expectedProperty) >+ continue; >+ >+ ProtocolTest.log(`"${expectedProperty}" is supported`); >+ >+ if (entry.aliases) { >+ ProtocolTest.log(`"${expectedProperty}" has aliases:`); >+ for (let alias of entry.aliases) >+ ProtocolTest.log(` - "${alias}"`); >+ } >+ >+ if (entry.longhands) { >+ ProtocolTest.log(`"${expectedProperty}" has longhands:`); >+ for (let longhand of entry.longhands) >+ ProtocolTest.log(` - "${longhand}"`); >+ } >+ >+ if (entry.inherited) >+ ProtocolTest.log(`"${expectedProperty}" is inherited`); >+ >+ if (entry.values) { >+ ProtocolTest.log(`"${expectedProperty}" has keyword values:`); >+ for (let value of entry.values) >+ ProtocolTest.log(` - "${value}"`); >+ } > >- for (var i = 0; i < entries.length; ++i) { >- if (entries[i].name === cssProperty) { >- ProtocolTest.log(entries[i].name + " is supported"); > break; > } >- } > >- if (i === entries.length) >- ProtocolTest.log(cssProperty + " is NOT supported"); >+ ProtocolTest.log(""); >+ } > } > > ProtocolTest.completeTest();
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 189041
:
348267
|
348268
|
348270
|
348280
|
348305
|
348609
|
349764
| 349937