Changeset 290756 in webkit
- Timestamp:
- Mar 2, 2022 2:28:28 PM (5 months ago)
- Location:
- trunk
- Files:
-
- 4 deleted
- 39 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/editing/pasteboard/data-transfer-get-data-on-drop-rich-text-expected.txt (modified) (1 diff)
-
LayoutTests/fast/css/getComputedStyle/computed-style-expected.txt (modified) (1 diff)
-
LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt (modified) (1 diff)
-
LayoutTests/fast/css/getComputedStyle/getComputedStyle-text-decoration-expected.txt (modified) (1 diff)
-
LayoutTests/fast/css/getComputedStyle/getComputedStyle-text-decoration.html (modified) (3 diffs)
-
LayoutTests/fast/css/getComputedStyle/resources/property-names.js (modified) (1 diff)
-
LayoutTests/fast/css/style-enumerate-properties-expected.txt (modified) (2 diffs)
-
LayoutTests/fast/css/style-enumerate-properties.html (modified) (2 diffs)
-
LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand-expected.txt (modified) (1 diff)
-
LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand.html (modified) (6 diffs)
-
LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-dashed-expected-mismatch.html (modified) (1 diff)
-
LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-dashed.html (modified) (1 diff)
-
LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-dotted-dashed-expected-mismatch.html (modified) (1 diff)
-
LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-dotted-dashed.html (modified) (1 diff)
-
LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-dotted-expected-mismatch.html (modified) (1 diff)
-
LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-dotted.html (modified) (1 diff)
-
LayoutTests/fast/events/input-events-paste-rich-datatransfer-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-variables/variable-presentation-attribute-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt (modified) (1 diff)
-
LayoutTests/platform/glib/fast/css/getComputedStyle (deleted)
-
LayoutTests/platform/glib/svg/css/getComputedStyle-basic-expected.txt (deleted)
-
LayoutTests/platform/gtk/fast/events/input-events-paste-rich-datatransfer-expected.txt (modified) (1 diff)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt (modified) (1 diff)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt (modified) (1 diff)
-
LayoutTests/platform/ios/fast/css/getComputedStyle (deleted)
-
LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt (modified) (1 diff)
-
LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt (modified) (1 diff)
-
LayoutTests/platform/ios/svg/css/getComputedStyle-basic-expected.txt (deleted)
-
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt (modified) (1 diff)
-
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt (modified) (1 diff)
-
LayoutTests/svg/css/getComputedStyle-basic-expected.txt (modified) (2 diffs)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/css/CSSComputedStyleDeclaration.cpp (modified) (1 diff)
-
Source/WebCore/css/CSSProperties.json (modified) (2 diffs)
-
Source/WebCore/css/StyleProperties.cpp (modified) (2 diffs)
-
Source/WebCore/css/parser/CSSPropertyParser.cpp (modified) (2 diffs)
-
Source/WebCore/editing/EditingStyle.cpp (modified) (23 diffs)
-
Source/WebCore/editing/cocoa/HTMLConverter.mm (modified) (2 diffs)
-
Source/WebCore/editing/markup.cpp (modified) (1 diff)
-
Source/WebCore/style/PropertyAllowlist.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r290751 r290756 1 2022-03-02 Oriol Brufau <obrufau@igalia.com> 2 3 [css] Implement 'text-decoration' as a shorthand. 4 https://bugs.webkit.org/show_bug.cgi?id=237175 5 6 Reviewed by Darin Adler. 7 8 Update tests to take into account that 'text-decoration' is a shorthand. 9 10 * editing/pasteboard/data-transfer-get-data-on-drop-rich-text-expected.txt: 11 * fast/css/getComputedStyle/computed-style-expected.txt: 12 * fast/css/getComputedStyle/computed-style-without-renderer-expected.txt: 13 * fast/css/getComputedStyle/getComputedStyle-text-decoration-expected.txt: 14 * fast/css/getComputedStyle/getComputedStyle-text-decoration.html: 15 * fast/css/getComputedStyle/resources/property-names.js: 16 * fast/css/style-enumerate-properties-expected.txt: 17 * fast/css/style-enumerate-properties.html: 18 * fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand-expected.txt: 19 * fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand.html: 20 * fast/css3-text/css3-text-decoration/text-decoration-dashed-expected-mismatch.html: 21 * fast/css3-text/css3-text-decoration/text-decoration-dashed.html: 22 * fast/css3-text/css3-text-decoration/text-decoration-dotted-dashed-expected-mismatch.html: 23 * fast/css3-text/css3-text-decoration/text-decoration-dotted-dashed.html: 24 * fast/css3-text/css3-text-decoration/text-decoration-dotted-expected-mismatch.html: 25 * fast/css3-text/css3-text-decoration/text-decoration-dotted.html: 26 * fast/events/input-events-paste-rich-datatransfer-expected.txt: 27 * platform/glib/fast/css/getComputedStyle/computed-style-expected.txt: Removed. 28 * platform/glib/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt: Removed. 29 * platform/glib/svg/css/getComputedStyle-basic-expected.txt: Removed. 30 * platform/gtk/fast/events/input-events-paste-rich-datatransfer-expected.txt: 31 * platform/gtk/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt: 32 * platform/gtk/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt: 33 * platform/ios/fast/css/getComputedStyle/computed-style-expected.txt: Removed. 34 * platform/ios/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt: Removed. 35 * platform/ios/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt: 36 * platform/ios/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt: 37 * platform/ios/svg/css/getComputedStyle-basic-expected.txt: Removed. 38 * platform/wpe/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt: 39 * platform/wpe/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt: 40 * svg/css/getComputedStyle-basic-expected.txt: 41 1 42 2022-03-02 J Pascoe <j_pascoe@apple.com> 2 43 -
trunk/LayoutTests/editing/pasteboard/data-transfer-get-data-on-drop-rich-text-expected.txt
r224649 r290756 6 6 }, 7 7 "drop": { 8 "text/html": "<!DOCTYPE html><strong style=\"font-family: -apple-system; font-size: 150px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: nowrap; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;color: purple;\">Rich text</strong>",8 "text/html": "<!DOCTYPE html><strong style=\"font-family: -apple-system; font-size: 150px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: nowrap; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: purple;\">Rich text</strong>", 9 9 "text/plain": "Rich text" 10 10 } -
trunk/LayoutTests/fast/css/getComputedStyle/computed-style-expected.txt
r287712 r290756 174 174 text-anchor: start; 175 175 text-combine-upright: none; 176 text-decoration: none; 176 text-decoration-color: rgb(0, 0, 0); 177 text-decoration-line: none; 178 text-decoration-style: solid; 179 text-decoration-thickness: auto; 177 180 text-emphasis-color: rgb(0, 0, 0); 178 181 text-emphasis-position: over right; -
trunk/LayoutTests/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt
r287712 r290756 173 173 text-anchor: start 174 174 text-combine-upright: none 175 text-decoration: none 175 text-decoration-color: rgb(0, 0, 0) 176 text-decoration-line: none 177 text-decoration-style: solid 178 text-decoration-thickness: auto 176 179 text-emphasis-color: rgb(0, 0, 0) 177 180 text-emphasis-position: over right -
trunk/LayoutTests/fast/css/getComputedStyle/getComputedStyle-text-decoration-expected.txt
r153891 r290756 5 5 6 6 Initial value: 7 PASS e.style.getPropertyCSSValue('text-decoration') is null 8 PASS computedStyle.textDecoration is 'none' 9 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]' 10 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none' 7 PASS e.style.textDecoration is '' 8 PASS e.style.getPropertyValue('text-decoration') is '' 9 PASS e.style.getPropertyCSSValue('text-decoration') is null 10 PASS e.style.textDecorationLine is '' 11 PASS e.style.getPropertyValue('text-decoration-line') is '' 12 PASS e.style.getPropertyCSSValue('text-decoration-line') is null 13 PASS computedStyle.textDecoration is 'none' 14 PASS computedStyle.getPropertyValue('text-decoration') is 'none' 15 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]' 16 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none' 17 PASS computedStyle.textDecorationLine is 'none' 18 PASS computedStyle.getPropertyValue('text-decoration-line') is 'none' 19 PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSPrimitiveValue]' 20 PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'none' 11 21 12 22 Initial value (explicit): 13 23 PASS e.style.textDecoration is 'initial' 14 PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValue]' 15 PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'initial' 16 PASS computedStyle.textDecoration is 'none' 17 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]' 18 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none' 24 PASS e.style.getPropertyValue('text-decoration') is 'initial' 25 PASS e.style.getPropertyCSSValue('text-decoration') is null 26 PASS e.style.textDecorationLine is 'initial' 27 PASS e.style.getPropertyValue('text-decoration-line') is 'initial' 28 PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValue]' 29 PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'initial' 30 PASS computedStyle.textDecoration is 'none' 31 PASS computedStyle.getPropertyValue('text-decoration') is 'none' 32 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]' 33 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none' 34 PASS computedStyle.textDecorationLine is 'none' 35 PASS computedStyle.getPropertyValue('text-decoration-line') is 'none' 36 PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSPrimitiveValue]' 37 PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'none' 19 38 20 39 Value 'none': 21 40 PASS e.style.textDecoration is 'none' 22 PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]' 23 PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'none' 24 PASS computedStyle.textDecoration is 'none' 25 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]' 26 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none' 41 PASS e.style.getPropertyValue('text-decoration') is 'none' 42 PASS e.style.getPropertyCSSValue('text-decoration') is null 43 PASS e.style.textDecorationLine is 'none' 44 PASS e.style.getPropertyValue('text-decoration-line') is 'none' 45 PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSPrimitiveValue]' 46 PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'none' 47 PASS computedStyle.textDecoration is 'none' 48 PASS computedStyle.getPropertyValue('text-decoration') is 'none' 49 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]' 50 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none' 51 PASS computedStyle.textDecorationLine is 'none' 52 PASS computedStyle.getPropertyValue('text-decoration-line') is 'none' 53 PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSPrimitiveValue]' 54 PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'none' 27 55 28 56 Value 'underline': 29 57 PASS e.style.textDecoration is 'underline' 30 PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]' 31 PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'underline' 58 PASS e.style.getPropertyValue('text-decoration') is 'underline' 59 PASS e.style.getPropertyCSSValue('text-decoration') is null 60 PASS e.style.textDecorationLine is 'underline' 61 PASS e.style.getPropertyValue('text-decoration-line') is 'underline' 62 PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]' 63 PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'underline' 32 64 PASS computedStyle.textDecoration is 'underline' 65 PASS computedStyle.getPropertyValue('text-decoration') is 'underline' 33 66 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]' 34 67 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'underline' 68 PASS computedStyle.textDecorationLine is 'underline' 69 PASS computedStyle.getPropertyValue('text-decoration-line') is 'underline' 70 PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]' 71 PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'underline' 35 72 36 73 Value 'overline': 37 74 PASS e.style.textDecoration is 'overline' 38 PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]' 39 PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'overline' 75 PASS e.style.getPropertyValue('text-decoration') is 'overline' 76 PASS e.style.getPropertyCSSValue('text-decoration') is null 77 PASS e.style.textDecorationLine is 'overline' 78 PASS e.style.getPropertyValue('text-decoration-line') is 'overline' 79 PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]' 80 PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'overline' 40 81 PASS computedStyle.textDecoration is 'overline' 82 PASS computedStyle.getPropertyValue('text-decoration') is 'overline' 41 83 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]' 42 84 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'overline' 85 PASS computedStyle.textDecorationLine is 'overline' 86 PASS computedStyle.getPropertyValue('text-decoration-line') is 'overline' 87 PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]' 88 PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'overline' 43 89 44 90 Value 'line-through': 45 91 PASS e.style.textDecoration is 'line-through' 46 PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]' 47 PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'line-through' 92 PASS e.style.getPropertyValue('text-decoration') is 'line-through' 93 PASS e.style.getPropertyCSSValue('text-decoration') is null 94 PASS e.style.textDecorationLine is 'line-through' 95 PASS e.style.getPropertyValue('text-decoration-line') is 'line-through' 96 PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]' 97 PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'line-through' 48 98 PASS computedStyle.textDecoration is 'line-through' 99 PASS computedStyle.getPropertyValue('text-decoration') is 'line-through' 49 100 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]' 50 101 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'line-through' 102 PASS computedStyle.textDecorationLine is 'line-through' 103 PASS computedStyle.getPropertyValue('text-decoration-line') is 'line-through' 104 PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]' 105 PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'line-through' 51 106 52 107 Value 'underline overline line-through': 53 108 PASS e.style.textDecoration is 'underline overline line-through' 54 PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]' 55 PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'underline overline line-through' 109 PASS e.style.getPropertyValue('text-decoration') is 'underline overline line-through' 110 PASS e.style.getPropertyCSSValue('text-decoration') is null 111 PASS e.style.textDecorationLine is 'underline overline line-through' 112 PASS e.style.getPropertyValue('text-decoration-line') is 'underline overline line-through' 113 PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]' 114 PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'underline overline line-through' 56 115 PASS computedStyle.textDecoration is 'underline overline line-through' 116 PASS computedStyle.getPropertyValue('text-decoration') is 'underline overline line-through' 57 117 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]' 58 118 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'underline overline line-through' 119 PASS computedStyle.textDecorationLine is 'underline overline line-through' 120 PASS computedStyle.getPropertyValue('text-decoration-line') is 'underline overline line-through' 121 PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]' 122 PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'underline overline line-through' 59 123 60 124 Value 'blink' (valid but ignored): 61 125 PASS e.style.textDecoration is 'blink' 62 PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]' 63 PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'blink' 64 PASS computedStyle.textDecoration is 'none' 65 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]' 66 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none' 126 PASS e.style.getPropertyValue('text-decoration') is 'blink' 127 PASS e.style.getPropertyCSSValue('text-decoration') is null 128 PASS e.style.textDecorationLine is 'blink' 129 PASS e.style.getPropertyValue('text-decoration-line') is 'blink' 130 PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]' 131 PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'blink' 132 PASS computedStyle.textDecoration is 'none' 133 PASS computedStyle.getPropertyValue('text-decoration') is 'none' 134 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]' 135 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none' 136 PASS computedStyle.textDecorationLine is 'none' 137 PASS computedStyle.getPropertyValue('text-decoration-line') is 'none' 138 PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSPrimitiveValue]' 139 PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'none' 67 140 68 141 Value '': 69 PASS e.style.getPropertyCSSValue('text-decoration') is null 70 PASS computedStyle.textDecoration is 'none' 71 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]' 72 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none' 142 PASS e.style.textDecoration is '' 143 PASS e.style.getPropertyValue('text-decoration') is '' 144 PASS e.style.getPropertyCSSValue('text-decoration') is null 145 PASS e.style.textDecorationLine is '' 146 PASS e.style.getPropertyValue('text-decoration-line') is '' 147 PASS e.style.getPropertyCSSValue('text-decoration-line') is null 148 PASS computedStyle.textDecoration is 'none' 149 PASS computedStyle.getPropertyValue('text-decoration') is 'none' 150 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]' 151 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none' 152 PASS computedStyle.textDecorationLine is 'none' 153 PASS computedStyle.getPropertyValue('text-decoration-line') is 'none' 154 PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSPrimitiveValue]' 155 PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'none' 73 156 74 157 Parent gets 'underline' value: 75 158 PASS e.style.textDecoration is 'underline' 76 PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]' 77 PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'underline' 159 PASS e.style.getPropertyValue('text-decoration') is 'underline' 160 PASS e.style.getPropertyCSSValue('text-decoration') is null 161 PASS e.style.textDecorationLine is 'underline' 162 PASS e.style.getPropertyValue('text-decoration-line') is 'underline' 163 PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]' 164 PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'underline' 78 165 PASS computedStyle.textDecoration is 'underline' 166 PASS computedStyle.getPropertyValue('text-decoration') is 'underline' 79 167 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]' 80 168 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'underline' 169 PASS computedStyle.textDecorationLine is 'underline' 170 PASS computedStyle.getPropertyValue('text-decoration-line') is 'underline' 171 PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]' 172 PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'underline' 81 173 82 174 Ancestor should explicitly inherit value from parent when 'inherit' value is used: 83 175 PASS e.style.textDecoration is 'inherit' 84 PASS e.style.getPropertyCSSValue('text-decoration').toString() is '[object CSSValue]' 85 PASS e.style.getPropertyCSSValue('text-decoration').cssText is 'inherit' 176 PASS e.style.getPropertyValue('text-decoration') is 'inherit' 177 PASS e.style.getPropertyCSSValue('text-decoration') is null 178 PASS e.style.textDecorationLine is 'inherit' 179 PASS e.style.getPropertyValue('text-decoration-line') is 'inherit' 180 PASS e.style.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValue]' 181 PASS e.style.getPropertyCSSValue('text-decoration-line').cssText is 'inherit' 86 182 PASS computedStyle.textDecoration is 'underline' 183 PASS computedStyle.getPropertyValue('text-decoration') is 'underline' 87 184 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSValueList]' 88 185 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'underline' 186 PASS computedStyle.textDecorationLine is 'underline' 187 PASS computedStyle.getPropertyValue('text-decoration-line') is 'underline' 188 PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSValueList]' 189 PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'underline' 89 190 90 191 Ancestor should not implicitly inherit value from parent (i.e. when value is void): 91 PASS e.style.getPropertyCSSValue('text-decoration') is null 92 PASS computedStyle.textDecoration is 'none' 93 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]' 94 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none' 192 PASS e.style.textDecoration is '' 193 PASS e.style.getPropertyValue('text-decoration') is '' 194 PASS e.style.getPropertyCSSValue('text-decoration') is null 195 PASS e.style.textDecorationLine is '' 196 PASS e.style.getPropertyValue('text-decoration-line') is '' 197 PASS e.style.getPropertyCSSValue('text-decoration-line') is null 198 PASS computedStyle.textDecoration is 'none' 199 PASS computedStyle.getPropertyValue('text-decoration') is 'none' 200 PASS computedStyle.getPropertyCSSValue('text-decoration').toString() is '[object CSSPrimitiveValue]' 201 PASS computedStyle.getPropertyCSSValue('text-decoration').cssText is 'none' 202 PASS computedStyle.textDecorationLine is 'none' 203 PASS computedStyle.getPropertyValue('text-decoration-line') is 'none' 204 PASS computedStyle.getPropertyCSSValue('text-decoration-line').toString() is '[object CSSPrimitiveValue]' 205 PASS computedStyle.getPropertyCSSValue('text-decoration-line').cssText is 'none' 95 206 96 207 PASS successfullyParsed is true -
trunk/LayoutTests/fast/css/getComputedStyle/getComputedStyle-text-decoration.html
r217390 r290756 6 6 <body> 7 7 <script> 8 function testElementStyle( propertyJS, propertyCSS,type, value)8 function testElementStyle(type, value) 9 9 { 10 10 if (type != null) { 11 shouldBe("e.style." + propertyJS, "'" + value + "'"); 12 shouldBe("e.style.getPropertyCSSValue('" + propertyCSS + "').toString()", "'" + type + "'"); 13 shouldBe("e.style.getPropertyCSSValue('" + propertyCSS + "').cssText", "'" + value + "'"); 14 } else 15 shouldBeNull("e.style.getPropertyCSSValue('" + propertyCSS + "')"); 11 shouldBe("e.style.textDecoration", "'" + value + "'"); 12 shouldBe("e.style.getPropertyValue('text-decoration')", "'" + value + "'"); 13 shouldBeNull("e.style.getPropertyCSSValue('text-decoration')"); 14 15 shouldBe("e.style.textDecorationLine", "'" + value + "'"); 16 shouldBe("e.style.getPropertyValue('text-decoration-line')", "'" + value + "'"); 17 shouldBe("e.style.getPropertyCSSValue('text-decoration-line').toString()", "'" + type + "'"); 18 shouldBe("e.style.getPropertyCSSValue('text-decoration-line').cssText", "'" + value + "'"); 19 } else { 20 shouldBe("e.style.textDecoration", "''"); 21 shouldBe("e.style.getPropertyValue('text-decoration')", "''"); 22 shouldBeNull("e.style.getPropertyCSSValue('text-decoration')"); 23 24 shouldBe("e.style.textDecorationLine", "''"); 25 shouldBe("e.style.getPropertyValue('text-decoration-line')", "''"); 26 shouldBeNull("e.style.getPropertyCSSValue('text-decoration-line')"); 27 } 16 28 } 17 29 18 function testComputedStyle( propertyJS, propertyCSS,type, value)30 function testComputedStyle(type, value) 19 31 { 20 32 computedStyle = window.getComputedStyle(e, null); 21 shouldBe("computedStyle." + propertyJS, "'" + value + "'"); 22 shouldBe("computedStyle.getPropertyCSSValue('" + propertyCSS + "').toString()", "'" + type + "'"); 23 shouldBe("computedStyle.getPropertyCSSValue('" + propertyCSS + "').cssText", "'" + value + "'"); 33 34 shouldBe("computedStyle.textDecoration", "'" + value + "'"); 35 shouldBe("computedStyle.getPropertyValue('text-decoration')", "'" + value + "'"); 36 shouldBe("computedStyle.getPropertyCSSValue('text-decoration').toString()", "'" + type + "'"); 37 shouldBe("computedStyle.getPropertyCSSValue('text-decoration').cssText", "'" + value + "'"); 38 39 shouldBe("computedStyle.textDecorationLine", "'" + value + "'"); 40 shouldBe("computedStyle.getPropertyValue('text-decoration-line')", "'" + value + "'"); 41 shouldBe("computedStyle.getPropertyCSSValue('text-decoration-line').toString()", "'" + type + "'"); 42 shouldBe("computedStyle.getPropertyCSSValue('text-decoration-line').cssText", "'" + value + "'"); 24 43 } 25 44 … … 33 52 debug("Initial value:"); 34 53 e = document.getElementById('test'); 35 testElementStyle( "textDecoration", "text-decoration",null, '');36 testComputedStyle(" textDecoration", "text-decoration", "[object CSSPrimitiveValue]", "none");54 testElementStyle(null, ''); 55 testComputedStyle("[object CSSPrimitiveValue]", "none"); 37 56 debug(''); 38 57 39 58 debug("Initial value (explicit):"); 40 59 e.style.textDecoration = 'initial'; 41 testElementStyle(" textDecoration", "text-decoration", "[object CSSValue]", "initial");42 testComputedStyle(" textDecoration", "text-decoration", "[object CSSPrimitiveValue]", "none");60 testElementStyle("[object CSSValue]", "initial"); 61 testComputedStyle("[object CSSPrimitiveValue]", "none"); 43 62 debug(''); 44 63 45 64 debug("Value 'none':"); 46 65 e.style.textDecoration = 'none'; 47 testElementStyle(" textDecoration", "text-decoration", "[object CSSPrimitiveValue]", "none");48 testComputedStyle(" textDecoration", "text-decoration", "[object CSSPrimitiveValue]", "none");66 testElementStyle("[object CSSPrimitiveValue]", "none"); 67 testComputedStyle("[object CSSPrimitiveValue]", "none"); 49 68 debug(''); 50 69 51 70 debug("Value 'underline':"); 52 71 e.style.textDecoration = 'underline'; 53 testElementStyle(" textDecoration", "text-decoration", "[object CSSValueList]", "underline");54 testComputedStyle(" textDecoration", "text-decoration", "[object CSSValueList]", "underline");72 testElementStyle("[object CSSValueList]", "underline"); 73 testComputedStyle("[object CSSValueList]", "underline"); 55 74 debug(''); 56 75 57 76 debug("Value 'overline':"); 58 77 e.style.textDecoration = 'overline'; 59 testElementStyle(" textDecoration", "text-decoration", "[object CSSValueList]", "overline");60 testComputedStyle(" textDecoration", "text-decoration", "[object CSSValueList]", "overline");78 testElementStyle("[object CSSValueList]", "overline"); 79 testComputedStyle("[object CSSValueList]", "overline"); 61 80 debug(''); 62 81 63 82 debug("Value 'line-through':"); 64 83 e.style.textDecoration = 'line-through'; 65 testElementStyle(" textDecoration", "text-decoration", "[object CSSValueList]", "line-through");66 testComputedStyle(" textDecoration", "text-decoration", "[object CSSValueList]", "line-through");84 testElementStyle("[object CSSValueList]", "line-through"); 85 testComputedStyle("[object CSSValueList]", "line-through"); 67 86 debug(''); 68 87 69 88 debug("Value 'underline overline line-through':"); 70 89 e.style.textDecoration = 'underline overline line-through'; 71 testElementStyle(" textDecoration", "text-decoration", "[object CSSValueList]", "underline overline line-through");72 testComputedStyle(" textDecoration", "text-decoration", "[object CSSValueList]", "underline overline line-through");90 testElementStyle("[object CSSValueList]", "underline overline line-through"); 91 testComputedStyle("[object CSSValueList]", "underline overline line-through"); 73 92 debug(''); 74 93 75 94 debug("Value 'blink' (valid but ignored):"); 76 95 e.style.textDecoration = 'blink'; 77 testElementStyle(" textDecoration", "text-decoration", "[object CSSValueList]", "blink");78 testComputedStyle(" textDecoration", "text-decoration", "[object CSSPrimitiveValue]", "none");96 testElementStyle("[object CSSValueList]", "blink"); 97 testComputedStyle("[object CSSPrimitiveValue]", "none"); 79 98 debug(''); 80 99 81 100 debug("Value '':"); 82 101 e.style.textDecoration = ''; 83 testElementStyle( "textDecoration", "text-decoration",null, '');84 testComputedStyle(" textDecoration", "text-decoration", "[object CSSPrimitiveValue]", "none");102 testElementStyle(null, ''); 103 testComputedStyle("[object CSSPrimitiveValue]", "none"); 85 104 debug(''); 86 105 … … 88 107 debug("Parent gets 'underline' value:"); 89 108 e = document.getElementById('test-parent'); 90 testElementStyle(" textDecoration", "text-decoration", "[object CSSValueList]", "underline");91 testComputedStyle(" textDecoration", "text-decoration", "[object CSSValueList]", "underline");109 testElementStyle("[object CSSValueList]", "underline"); 110 testComputedStyle("[object CSSValueList]", "underline"); 92 111 debug(''); 93 112 94 113 debug("Ancestor should explicitly inherit value from parent when 'inherit' value is used:"); 95 114 e = document.getElementById('test-ancestor'); 96 testElementStyle(" textDecoration", "text-decoration", "[object CSSValue]", "inherit");97 testComputedStyle(" textDecoration", "text-decoration", "[object CSSValueList]", "underline");115 testElementStyle("[object CSSValue]", "inherit"); 116 testComputedStyle("[object CSSValueList]", "underline"); 98 117 debug(''); 99 118 100 119 debug("Ancestor should not implicitly inherit value from parent (i.e. when value is void):"); 101 120 e.style.textDecoration = ''; 102 testElementStyle( "textDecoration", "text-decoration",null, '');103 testComputedStyle(" textDecoration", "text-decoration", "[object CSSPrimitiveValue]", "none");121 testElementStyle(null, ''); 122 testComputedStyle("[object CSSPrimitiveValue]", "none"); 104 123 debug(''); 105 124 -
trunk/LayoutTests/fast/css/getComputedStyle/resources/property-names.js
r287712 r290756 258 258 "text-align": true, 259 259 "text-anchor": true, 260 "text-decoration": true, 260 "text-decoration-color": true, 261 "text-decoration-line": true, 262 "text-decoration-style": true, 263 "text-decoration-thickness": true, 261 264 "text-indent": true, 262 265 "text-overflow": true, -
trunk/LayoutTests/fast/css/style-enumerate-properties-expected.txt
r275808 r290756 1 1 This test makes sure that CSSStyleDeclaration enumerates JavaScript properties for defined and non-defined CSS properties, indexed properties, and properties defined on the prototype. See Bug 23946. 2 PASS document.body.style.length is 22 PASS document.body.style.length is 5 3 3 PASS '0' in document.body.style is true 4 4 PASS '1' in document.body.style is true 5 PASS '2' in document.body.style is true 6 PASS '3' in document.body.style is true 7 PASS '4' in document.body.style is true 8 PASS document.body.style[0] is 'text-decoration-line' 9 PASS document.body.style[1] is 'text-decoration-thickness' 10 PASS document.body.style[2] is 'text-decoration-style' 11 PASS document.body.style[3] is 'text-decoration-color' 12 PASS document.body.style[4] is 'border-top-color' 5 13 PASS 'textDecoration' in document.body.style is true 6 14 PASS 'borderTopColor' in document.body.style is true … … 17 25 PASS initialIndexOfGroup5 > initialIndexOfGroup4 is true 18 26 PASS initialIndexOfGroup6 > initialIndexOfGroup5 is true 19 PASS group1 is ["0", "1", " cssText", "length", "parentRule", "cssFloat"]27 PASS group1 is ["0", "1", "2", "3", "4", "cssText", "length", "parentRule", "cssFloat"] 20 28 PASS group2 is group2Clone 21 29 PASS group2.some(property => property.startsWith("Webkit")) is true -
trunk/LayoutTests/fast/css/style-enumerate-properties.html
r275808 r290756 9 9 testRunner.dumpAsText(); 10 10 11 shouldBe("document.body.style.length", " 2");11 shouldBe("document.body.style.length", "5"); 12 12 shouldBeTrue("'0' in document.body.style"); 13 13 shouldBeTrue("'1' in document.body.style"); 14 shouldBeTrue("'2' in document.body.style"); 15 shouldBeTrue("'3' in document.body.style"); 16 shouldBeTrue("'4' in document.body.style"); 17 shouldBe("document.body.style[0]", "'text-decoration-line'"); 18 shouldBe("document.body.style[1]", "'text-decoration-thickness'"); 19 shouldBe("document.body.style[2]", "'text-decoration-style'"); 20 shouldBe("document.body.style[3]", "'text-decoration-color'"); 21 shouldBe("document.body.style[4]", "'border-top-color'"); 14 22 shouldBeTrue("'textDecoration' in document.body.style"); 15 23 shouldBeTrue("'borderTopColor' in document.body.style"); … … 61 69 62 70 // Group 1 63 shouldBe(`group1`, `["0", "1", " cssText", "length", "parentRule", "cssFloat"]`);71 shouldBe(`group1`, `["0", "1", "2", "3", "4", "cssText", "length", "parentRule", "cssFloat"]`); 64 72 65 73 // Group 2 - Camel Case -
trunk/LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand-expected.txt
r180441 r290756 6 6 Initial values: 7 7 PASS e.style.getPropertyCSSValue('-webkit-text-decoration') is null 8 PASS computedStyle.getProperty CSSValue('-webkit-text-decoration').cssTextis 'none solid rgb(0, 0, 0)'9 PASS checkComputedStyleValue( ) is true8 PASS computedStyle.getPropertyValue('-webkit-text-decoration') is 'none solid rgb(0, 0, 0)' 9 PASS checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration') is true 10 10 11 11 CSS2.1 backwards compatibility ("-webkit-text-decoration: underline overline line-through blink;"): 12 PASS e.style.getProperty CSSValue('-webkit-text-decoration-line').cssTextis 'underline overline line-through blink'13 PASS computedStyle.getProperty CSSValue('-webkit-text-decoration-line').cssTextis 'underline overline line-through'14 PASS computedStyle.getProperty CSSValue('-webkit-text-decoration').cssTextis 'underline overline line-through solid rgb(0, 0, 0)'15 PASS checkComputedStyleValue( ) is true12 PASS e.style.getPropertyValue('-webkit-text-decoration-line') is 'underline overline line-through blink' 13 PASS computedStyle.getPropertyValue('-webkit-text-decoration-line') is 'underline overline line-through' 14 PASS computedStyle.getPropertyValue('-webkit-text-decoration') is 'underline overline line-through solid rgb(0, 0, 0)' 15 PASS checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration') is true 16 16 17 17 CSS3 Shorthand ("-webkit-text-decoration: underline overline line-through blink dashed red;"): 18 PASS computedStyle.getProperty CSSValue('-webkit-text-decoration').cssTextis 'underline overline line-through dashed rgb(255, 0, 0)'19 PASS computedStyle.getProperty CSSValue('-webkit-text-decoration-line').cssTextis 'underline overline line-through'20 PASS computedStyle.getProperty CSSValue('-webkit-text-decoration-style').cssTextis 'dashed'21 PASS computedStyle.getProperty CSSValue('-webkit-text-decoration-color').cssTextis 'rgb(255, 0, 0)'22 PASS checkComputedStyleValue( ) is true18 PASS computedStyle.getPropertyValue('-webkit-text-decoration') is 'underline overline line-through dashed rgb(255, 0, 0)' 19 PASS computedStyle.getPropertyValue('-webkit-text-decoration-line') is 'underline overline line-through' 20 PASS computedStyle.getPropertyValue('-webkit-text-decoration-style') is 'dashed' 21 PASS computedStyle.getPropertyValue('-webkit-text-decoration-color') is 'rgb(255, 0, 0)' 22 PASS checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration') is true 23 23 24 24 Omitting text decoration line resets to its initial value "none" ("-webkit-text-decoration: navy dotted;"): 25 PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration').cssText is 'none dotted rgb(0, 0, 128)' 26 PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration-line').cssText is 'none' 27 PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration-style').cssText is 'dotted' 28 PASS computedStyle.getPropertyCSSValue('-webkit-text-decoration-color').cssText is 'rgb(0, 0, 128)' 29 PASS checkComputedStyleValue() is true 25 PASS computedStyle.getPropertyValue('-webkit-text-decoration') is 'none dotted rgb(0, 0, 128)' 26 PASS computedStyle.getPropertyValue('-webkit-text-decoration-line') is 'none' 27 PASS computedStyle.getPropertyValue('-webkit-text-decoration-style') is 'dotted' 28 PASS computedStyle.getPropertyValue('-webkit-text-decoration-color') is 'rgb(0, 0, 128)' 29 PASS checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration') is true 30 31 CSS2.1 backwards compatibility of non-prefixed shorthand ("text-decoration: underline overline line-through blink;"): 32 PASS e.style.getPropertyValue('text-decoration') is 'underline overline line-through blink' 33 PASS e.style.getPropertyValue('text-decoration-line') is 'underline overline line-through blink' 34 PASS e.style.getPropertyValue('text-decoration-thickness') is 'auto' 35 PASS e.style.getPropertyValue('text-decoration-style') is 'solid' 36 PASS e.style.getPropertyValue('text-decoration-color') is 'currentcolor' 37 PASS computedStyle.getPropertyValue('text-decoration') is 'underline overline line-through' 38 PASS computedStyle.getPropertyValue('text-decoration-line') is 'underline overline line-through' 39 PASS computedStyle.getPropertyValue('text-decoration-thickness') is 'auto' 40 PASS computedStyle.getPropertyValue('text-decoration-style') is 'solid' 41 PASS computedStyle.getPropertyValue('text-decoration-color') is 'rgb(0, 0, 0)' 42 PASS checkComputedStyleValue('textDecoration', 'text-decoration') is true 43 44 Setting CSS3 longhands to initial values ("text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid; text-decoration-color: currentcolor;"): 45 PASS e.style.getPropertyValue('text-decoration') is 'none' 46 PASS e.style.getPropertyValue('text-decoration-line') is 'none' 47 PASS e.style.getPropertyValue('text-decoration-thickness') is 'auto' 48 PASS e.style.getPropertyValue('text-decoration-style') is 'solid' 49 PASS e.style.getPropertyValue('text-decoration-color') is 'currentcolor' 50 PASS computedStyle.getPropertyValue('text-decoration') is 'none' 51 PASS computedStyle.getPropertyValue('text-decoration-line') is 'none' 52 PASS computedStyle.getPropertyValue('text-decoration-thickness') is 'auto' 53 PASS computedStyle.getPropertyValue('text-decoration-style') is 'solid' 54 PASS computedStyle.getPropertyValue('text-decoration-color') is 'rgb(0, 0, 0)' 55 PASS checkComputedStyleValue('textDecoration', 'text-decoration') is true 56 57 Setting CSS3 longhands to values backwards compatibile with CSS2.1 ("text-decoration-line: underline overline line-through blink; text-decoration-thickness: auto; text-decoration-style: solid; text-decoration-color: currentcolor;"): 58 PASS e.style.getPropertyValue('text-decoration') is 'underline overline line-through blink' 59 PASS e.style.getPropertyValue('text-decoration-line') is 'underline overline line-through blink' 60 PASS e.style.getPropertyValue('text-decoration-thickness') is 'auto' 61 PASS e.style.getPropertyValue('text-decoration-style') is 'solid' 62 PASS e.style.getPropertyValue('text-decoration-color') is 'currentcolor' 63 PASS computedStyle.getPropertyValue('text-decoration') is 'underline overline line-through' 64 PASS computedStyle.getPropertyValue('text-decoration-line') is 'underline overline line-through' 65 PASS computedStyle.getPropertyValue('text-decoration-thickness') is 'auto' 66 PASS computedStyle.getPropertyValue('text-decoration-style') is 'solid' 67 PASS computedStyle.getPropertyValue('text-decoration-color') is 'rgb(0, 0, 0)' 68 PASS checkComputedStyleValue('textDecoration', 'text-decoration') is true 69 70 Setting CSS3 longhands to values not backwards compatibile with CSS2.1 ("text-decoration-line: underline overline line-through blink; text-decoration-thickness: 16px; text-decoration-style: dotted; text-decoration-color: blue;"): 71 PASS e.style.getPropertyValue('text-decoration') is '' 72 PASS e.style.getPropertyValue('text-decoration-line') is 'underline overline line-through blink' 73 PASS e.style.getPropertyValue('text-decoration-thickness') is '16px' 74 PASS e.style.getPropertyValue('text-decoration-style') is 'dotted' 75 PASS e.style.getPropertyValue('text-decoration-color') is 'blue' 76 PASS computedStyle.getPropertyValue('text-decoration') is '' 77 PASS computedStyle.getPropertyValue('text-decoration-line') is 'underline overline line-through' 78 PASS computedStyle.getPropertyValue('text-decoration-thickness') is '16px' 79 PASS computedStyle.getPropertyValue('text-decoration-style') is 'dotted' 80 PASS computedStyle.getPropertyValue('text-decoration-color') is 'rgb(0, 0, 255)' 81 PASS checkComputedStyleValue('textDecoration', 'text-decoration') is false 30 82 31 83 PASS successfullyParsed is true -
trunk/LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand.html
r155263 r290756 8 8 function testElementStyle(propertyJS, propertyCSS, value) 9 9 { 10 shouldBe("e.style.getProperty CSSValue('" + propertyCSS + "').cssText", "'" + value + "'");10 shouldBe("e.style.getPropertyValue('" + propertyCSS + "')", "'" + value + "'"); 11 11 } 12 12 … … 14 14 { 15 15 computedStyle = window.getComputedStyle(e, null); 16 shouldBe("computedStyle.getProperty CSSValue('" + propertyCSS + "').cssText", "'" + value + "'");16 shouldBe("computedStyle.getPropertyValue('" + propertyCSS + "')", "'" + value + "'"); 17 17 } 18 18 19 function checkComputedStyleValue( ) {20 var before = window.getComputedStyle(e, null).getPropertyValue( '-webkit-text-decoration');21 e.style .webkitTextDecoration= 'none';22 e.style .webkitTextDecoration= before;23 return (window.getComputedStyle(e, null).getPropertyValue( '-webkit-text-decoration') == before);19 function checkComputedStyleValue(propertyJS, propertyCSS) { 20 var before = window.getComputedStyle(e, null).getPropertyValue(propertyCSS); 21 e.style[propertyJS] = 'none'; 22 e.style[propertyJS] = before; 23 return (window.getComputedStyle(e, null).getPropertyValue(propertyCSS) == before); 24 24 } 25 25 … … 37 37 shouldBeNull("e.style.getPropertyCSSValue('-webkit-text-decoration')"); 38 38 testComputedStyle("webkitTextDecoration", "-webkit-text-decoration", "none solid rgb(0, 0, 0)"); 39 shouldBe("checkComputedStyleValue( )", "true");39 shouldBe("checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration')", "true"); 40 40 debug(''); 41 41 … … 45 45 testComputedStyle("webkitTextDecorationLine", "-webkit-text-decoration-line", "underline overline line-through"); 46 46 testComputedStyle("webkitTextDecoration", "-webkit-text-decoration", "underline overline line-through solid rgb(0, 0, 0)"); 47 shouldBe("checkComputedStyleValue( )", "true");47 shouldBe("checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration')", "true"); 48 48 debug(''); 49 49 … … 54 54 testComputedStyle("webkitTextDecorationStyle", "-webkit-text-decoration-style", "dashed"); 55 55 testComputedStyle("webkitTextDecorationColor", "-webkit-text-decoration-color", "rgb(255, 0, 0)"); 56 shouldBe("checkComputedStyleValue( )", "true");56 shouldBe("checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration')", "true"); 57 57 debug(''); 58 58 … … 63 63 testComputedStyle("webkitTextDecorationStyle", "-webkit-text-decoration-style", "dotted"); 64 64 testComputedStyle("webkitTextDecorationColor", "-webkit-text-decoration-color", "rgb(0, 0, 128)"); 65 shouldBe("checkComputedStyleValue()", "true"); 65 shouldBe("checkComputedStyleValue('webkitTextDecoration', '-webkit-text-decoration')", "true"); 66 debug(''); 67 68 debug('CSS2.1 backwards compatibility of non-prefixed shorthand ("text-decoration: underline overline line-through blink;"):'); 69 e.style.cssText = "text-decoration: underline overline line-through blink"; 70 testElementStyle("textDecoration", "text-decoration", "underline overline line-through blink"); 71 testElementStyle("textDecorationLine", "text-decoration-line", "underline overline line-through blink"); 72 testElementStyle("textDecorationThickness", "text-decoration-thickness", "auto"); 73 testElementStyle("textDecorationStyle", "text-decoration-style", "solid"); 74 testElementStyle("textDecorationColor", "text-decoration-color", "currentcolor"); 75 testComputedStyle("textDecoration", "text-decoration", "underline overline line-through"); 76 testComputedStyle("textDecorationLine", "text-decoration-line", "underline overline line-through"); 77 testComputedStyle("textDecorationThickness", "text-decoration-thickness", "auto"); 78 testComputedStyle("textDecorationStyle", "text-decoration-style", "solid"); 79 testComputedStyle("textDecorationColor", "text-decoration-color", "rgb(0, 0, 0)"); 80 shouldBe("checkComputedStyleValue('textDecoration', 'text-decoration')", "true"); 81 debug(''); 82 83 debug('Setting CSS3 longhands to initial values ("text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid; text-decoration-color: currentcolor;"):'); 84 e.style.cssText = "text-decoration-line: none; text-decoration-thickness: auto; text-decoration-style: solid; text-decoration-color: currentcolor;"; 85 testElementStyle("textDecoration", "text-decoration", "none"); 86 testElementStyle("textDecorationLine", "text-decoration-line", "none"); 87 testElementStyle("textDecorationThickness", "text-decoration-thickness", "auto"); 88 testElementStyle("textDecorationStyle", "text-decoration-style", "solid"); 89 testElementStyle("textDecorationColor", "text-decoration-color", "currentcolor"); 90 testComputedStyle("textDecoration", "text-decoration", "none"); 91 testComputedStyle("textDecorationLine", "text-decoration-line", "none"); 92 testComputedStyle("textDecorationThickness", "text-decoration-thickness", "auto"); 93 testComputedStyle("textDecorationStyle", "text-decoration-style", "solid"); 94 testComputedStyle("textDecorationColor", "text-decoration-color", "rgb(0, 0, 0)"); 95 shouldBe("checkComputedStyleValue('textDecoration', 'text-decoration')", "true"); 96 debug(''); 97 98 debug('Setting CSS3 longhands to values backwards compatibile with CSS2.1 ("text-decoration-line: underline overline line-through blink; text-decoration-thickness: auto; text-decoration-style: solid; text-decoration-color: currentcolor;"):'); 99 e.style.cssText = "text-decoration-line: underline overline line-through blink; text-decoration-thickness: auto; text-decoration-style: solid; text-decoration-color: currentcolor;"; 100 testElementStyle("textDecoration", "text-decoration", "underline overline line-through blink"); 101 testElementStyle("textDecorationLine", "text-decoration-line", "underline overline line-through blink"); 102 testElementStyle("textDecorationThickness", "text-decoration-thickness", "auto"); 103 testElementStyle("textDecorationStyle", "text-decoration-style", "solid"); 104 testElementStyle("textDecorationColor", "text-decoration-color", "currentcolor"); 105 testComputedStyle("textDecoration", "text-decoration", "underline overline line-through"); 106 testComputedStyle("textDecorationLine", "text-decoration-line", "underline overline line-through"); 107 testComputedStyle("textDecorationThickness", "text-decoration-thickness", "auto"); 108 testComputedStyle("textDecorationStyle", "text-decoration-style", "solid"); 109 testComputedStyle("textDecorationColor", "text-decoration-color", "rgb(0, 0, 0)"); 110 shouldBe("checkComputedStyleValue('textDecoration', 'text-decoration')", "true"); 111 debug(''); 112 113 debug('Setting CSS3 longhands to values not backwards compatibile with CSS2.1 ("text-decoration-line: underline overline line-through blink; text-decoration-thickness: 16px; text-decoration-style: dotted; text-decoration-color: blue;"):'); 114 e.style.cssText = "text-decoration-line: underline overline line-through blink; text-decoration-thickness: 16px; text-decoration-style: dotted; text-decoration-color: blue;"; 115 testElementStyle("textDecoration", "text-decoration", ""); 116 testElementStyle("textDecorationLine", "text-decoration-line", "underline overline line-through blink"); 117 testElementStyle("textDecorationThickness", "text-decoration-thickness", "16px"); 118 testElementStyle("textDecorationStyle", "text-decoration-style", "dotted"); 119 testElementStyle("textDecorationColor", "text-decoration-color", "blue"); 120 testComputedStyle("textDecoration", "text-decoration", ""); 121 testComputedStyle("textDecorationLine", "text-decoration-line", "underline overline line-through"); 122 testComputedStyle("textDecorationThickness", "text-decoration-thickness", "16px"); 123 testComputedStyle("textDecorationStyle", "text-decoration-style", "dotted"); 124 testComputedStyle("textDecorationColor", "text-decoration-color", "rgb(0, 0, 255)"); 125 shouldBe("checkComputedStyleValue('textDecoration', 'text-decoration')", "false"); 66 126 debug(''); 67 127 -
trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-dashed-expected-mismatch.html
r201777 r290756 4 4 </head> 5 5 <body> 6 <div style="font-size: 40px; -webkit-text-decoration-style: solid; text-decoration : underline;">dotyedgdesc</div>6 <div style="font-size: 40px; -webkit-text-decoration-style: solid; text-decoration-line: underline;">dotyedgdesc</div> 7 7 </body> 8 8 </html> -
trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-dashed.html
r201777 r290756 4 4 </head> 5 5 <body> 6 <div style="font-size: 40px; -webkit-text-decoration-style: dashed; text-decoration : underline;">dotyedgdesc</div>6 <div style="font-size: 40px; -webkit-text-decoration-style: dashed; text-decoration-line: underline;">dotyedgdesc</div> 7 7 </body> 8 8 </html> -
trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-dotted-dashed-expected-mismatch.html
r201777 r290756 4 4 </head> 5 5 <body> 6 <div style="font-size: 40px; -webkit-text-decoration-style: dashed; text-decoration : underline;">dotyedgdesc</div>6 <div style="font-size: 40px; -webkit-text-decoration-style: dashed; text-decoration-line: underline;">dotyedgdesc</div> 7 7 </body> 8 8 </html> -
trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-dotted-dashed.html
r201777 r290756 4 4 </head> 5 5 <body> 6 <div style="font-size: 40px; -webkit-text-decoration-style: dotted; text-decoration : underline;">dotyedgdesc</div>6 <div style="font-size: 40px; -webkit-text-decoration-style: dotted; text-decoration-line: underline;">dotyedgdesc</div> 7 7 </body> 8 8 </html> -
trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-dotted-expected-mismatch.html
r201777 r290756 4 4 </head> 5 5 <body> 6 <div style="font-size: 40px; -webkit-text-decoration-style: solid; text-decoration : underline;">dotyedgdesc</div>6 <div style="font-size: 40px; -webkit-text-decoration-style: solid; text-decoration-line: underline;">dotyedgdesc</div> 7 7 </body> 8 8 </html> -
trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-dotted.html
r201777 r290756 4 4 </head> 5 5 <body> 6 <div style="font-size: 40px; -webkit-text-decoration-style: dotted; text-decoration : underline;">dotyedgdesc</div>6 <div style="font-size: 40px; -webkit-text-decoration-style: dotted; text-decoration-line: underline;">dotyedgdesc</div> 7 7 </body> 8 8 </html> -
trunk/LayoutTests/fast/events/input-events-paste-rich-datatransfer-expected.txt
r224649 r290756 3 3 destination after pasting (text/html): 4 4 | <b> 5 | style="caret-color: rgb(255, 0, 0); color: rgb(255, 0, 0); font-family: -webkit-standard; font-style: normal; font-variant-caps: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;"5 | style="caret-color: rgb(255, 0, 0); color: rgb(255, 0, 0); font-family: -webkit-standard; font-style: normal; font-variant-caps: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" 6 6 | "LayoutTests" 7 7 | <i> -
trunk/LayoutTests/imported/w3c/ChangeLog
r290741 r290756 1 2022-03-02 Oriol Brufau <obrufau@igalia.com> 2 3 [css] Implement 'text-decoration' as a shorthand. 4 https://bugs.webkit.org/show_bug.cgi?id=237175 5 6 Reviewed by Darin Adler. 7 8 Update tests to take into account that 'text-decoration' is a shorthand. 9 10 * web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt: 11 * web-platform-tests/css/css-variables/variable-presentation-attribute-expected.txt: 12 * web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt: 13 1 14 2022-03-02 Antoine Quint <graouts@webkit.org> 2 15 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt
r288869 r290756 287 287 PASS text-anchor 288 288 PASS text-combine-upright 289 PASS text-decoration290 289 PASS text-decoration-color 291 290 PASS text-decoration-line -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-variables/variable-presentation-attribute-expected.txt
r287909 r290756 44 44 PASS Testing 'stroke-width'. 45 45 PASS Testing 'text-anchor'. 46 FAIL Testing 'text-decoration'. assert_equals: Value Test. expected "underline" but got "none" 46 PASS Testing 'text-decoration'. 47 47 PASS Testing 'visibility'. 48 48 PASS Testing 'word-spacing'. -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt
r288869 r290756 1 1 2 2 PASS getComputedStyle returns no style for detached element 3 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 39 74 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 39 75 FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 39 76 FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 39 73 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 396 4 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 396 5 FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 396 6 FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 396 7 7 PASS getComputedStyle returns no style for shadow tree outside of flattened tree 8 8 -
trunk/LayoutTests/platform/gtk/fast/events/input-events-paste-rich-datatransfer-expected.txt
r224874 r290756 3 3 destination after pasting (text/html): 4 4 | <b> 5 | style="caret-color: rgb(255, 0, 0); color: rgb(255, 0, 0); font-family: -webkit-standard; font-style: normal; font-variant-caps: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0.4); -webkit-text-stroke-width: 0px; text-decoration: none;"5 | style="caret-color: rgb(255, 0, 0); color: rgb(255, 0, 0); font-family: -webkit-standard; font-style: normal; font-variant-caps: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0.4); -webkit-text-stroke-width: 0px;" 6 6 | "LayoutTests" 7 7 | <i> -
trunk/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt
r289758 r290756 287 287 PASS text-anchor 288 288 PASS text-combine-upright 289 PASS text-decoration290 289 PASS text-decoration-color 291 290 PASS text-decoration-line -
trunk/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt
r289459 r290756 1 1 2 2 PASS getComputedStyle returns no style for detached element 3 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 39 54 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 39 55 FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 39 56 FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 39 53 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 394 4 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 394 5 FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 394 6 FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 394 7 7 PASS getComputedStyle returns no style for shadow tree outside of flattened tree 8 8 -
trunk/LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt
r288869 r290756 257 257 PASS text-anchor 258 258 PASS text-combine-upright 259 PASS text-decoration260 259 PASS text-decoration-color 261 260 PASS text-decoration-line -
trunk/LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt
r288869 r290756 1 1 2 2 PASS getComputedStyle returns no style for detached element 3 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 39 94 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 39 95 FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 39 96 FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 39 93 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 398 4 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 398 5 FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 398 6 FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 398 7 7 PASS getComputedStyle returns no style for shadow tree outside of flattened tree 8 8 -
trunk/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt
r289758 r290756 287 287 PASS text-anchor 288 288 PASS text-combine-upright 289 PASS text-decoration290 289 PASS text-decoration-color 291 290 PASS text-decoration-line -
trunk/LayoutTests/platform/wpe/imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree-expected.txt
r289459 r290756 1 1 2 2 PASS getComputedStyle returns no style for detached element 3 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 39 44 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 39 45 FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 39 46 FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 39 43 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) assert_equals: expected 0 but got 393 4 FAIL getComputedStyle returns no style for element in non-rendered iframe (display: none) from iframe's window assert_equals: expected 0 but got 393 5 FAIL getComputedStyle returns no style for element outside the flat tree assert_equals: expected 0 but got 393 6 FAIL getComputedStyle returns no style for descendant outside the flat tree assert_equals: expected 0 but got 393 7 7 PASS getComputedStyle returns no style for shadow tree outside of flattened tree 8 8 -
trunk/LayoutTests/svg/css/getComputedStyle-basic-expected.txt
r287712 r290756 345 345 rect: style.getPropertyValue(text-combine-upright) : none 346 346 rect: style.getPropertyCSSValue(text-combine-upright) : [object CSSPrimitiveValue] 347 rect: style.getPropertyValue(text-decoration) : none 348 rect: style.getPropertyCSSValue(text-decoration) : [object CSSPrimitiveValue] 347 rect: style.getPropertyValue(text-decoration-color) : rgb(0, 0, 0) 348 rect: style.getPropertyCSSValue(text-decoration-color) : [object CSSPrimitiveValue] 349 rect: style.getPropertyValue(text-decoration-line) : none 350 rect: style.getPropertyCSSValue(text-decoration-line) : [object CSSPrimitiveValue] 351 rect: style.getPropertyValue(text-decoration-style) : solid 352 rect: style.getPropertyCSSValue(text-decoration-style) : [object CSSPrimitiveValue] 353 rect: style.getPropertyValue(text-decoration-thickness) : auto 354 rect: style.getPropertyCSSValue(text-decoration-thickness) : [object CSSPrimitiveValue] 349 355 rect: style.getPropertyValue(text-emphasis-color) : rgb(0, 0, 0) 350 356 rect: style.getPropertyCSSValue(text-emphasis-color) : [object CSSPrimitiveValue] … … 855 861 g: style.getPropertyValue(text-combine-upright) : none 856 862 g: style.getPropertyCSSValue(text-combine-upright) : [object CSSPrimitiveValue] 857 g: style.getPropertyValue(text-decoration) : none 858 g: style.getPropertyCSSValue(text-decoration) : [object CSSPrimitiveValue] 863 g: style.getPropertyValue(text-decoration-color) : rgb(0, 0, 0) 864 g: style.getPropertyCSSValue(text-decoration-color) : [object CSSPrimitiveValue] 865 g: style.getPropertyValue(text-decoration-line) : none 866 g: style.getPropertyCSSValue(text-decoration-line) : [object CSSPrimitiveValue] 867 g: style.getPropertyValue(text-decoration-style) : solid 868 g: style.getPropertyCSSValue(text-decoration-style) : [object CSSPrimitiveValue] 869 g: style.getPropertyValue(text-decoration-thickness) : auto 870 g: style.getPropertyCSSValue(text-decoration-thickness) : [object CSSPrimitiveValue] 859 871 g: style.getPropertyValue(text-emphasis-color) : rgb(0, 0, 0) 860 872 g: style.getPropertyCSSValue(text-emphasis-color) : [object CSSPrimitiveValue] -
trunk/Source/WebCore/ChangeLog
r290746 r290756 1 2022-03-02 Oriol Brufau <obrufau@igalia.com> 2 3 [css] Implement 'text-decoration' as a shorthand. 4 https://bugs.webkit.org/show_bug.cgi?id=237175 5 6 Reviewed by Darin Adler. 7 8 The 'text-decoration' property was considered to be a longhand, sharing 9 a computed value with 'text-decoration-line'. 10 11 This patch switches 'text-decoration' into a shorthand of the following 12 longhands: 'text-decoration-line', 'text-decoration-thickness', 13 'text-decoration-style' and 'text-decoration-color'. This is according 14 to https://www.w3.org/TR/css-text-decor-4/#text-decoration-property 15 16 For now I'm keeping the grammar as-is, so 'text-decoration' will only 17 accept values that are valid in 'text-decoration-line', but will set 18 the other longhands to the initial value. This should probably change 19 in a follow-up. 20 21 I'm also keeping '-webkit-text-decoration' as-is, as a shorthand of 22 'text-decoration-{line,style,color}', not including thickness for some 23 obscure reason. '-webkit-text-decoration' should probably be removed 24 anyways. 25 26 There is a bunch of editing code that was getting/setting/removing 27 'text-decoration' as a longhand, so I'm switching that to: 28 - Use 'text-decoration-line' when getting values. 29 - Use 'text-decoration' when setting values, and use a string for the 30 value, this parses it and sets each longhand to the correct value. 31 - Use 'text-decoration' get removing declarations, effectively removing 32 all longhands. 33 This preserves the previous behavior as much as possible. 34 35 Tests: fast/css/getComputedStyle/computed-style.html 36 fast/css/getComputedStyle/computed-style-without-renderer.html 37 fast/css/getComputedStyle/getComputedStyle-text-decoration.html 38 fast/css/style-enumerate-properties.html 39 fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-shorthand.html 40 fast/css3-text/css3-text-decoration/text-decoration-dashed.html 41 fast/css3-text/css3-text-decoration/text-decoration-dotted-dashed.html 42 fast/css3-text/css3-text-decoration/text-decoration-dotted.html 43 imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml.html 44 imported/w3c/web-platform-tests/css/css-variables/variable-presentation-attribute.html 45 imported/w3c/web-platform-tests/css/cssom/getComputedStyle-detached-subtree.html 46 svg/css/getComputedStyle-basic.xhtml 47 48 * css/CSSComputedStyleDeclaration.cpp: 49 (WebCore::ComputedStyleExtractor::valueForPropertyInStyle): 50 * css/CSSProperties.json: 51 * css/StyleProperties.cpp: 52 (WebCore::StyleProperties::getPropertyValue const): 53 (WebCore::StyleProperties::asText const): 54 * css/parser/CSSPropertyParser.cpp: 55 (WebCore::CSSPropertyParser::parseSingleValue): 56 (WebCore::CSSPropertyParser::parseShorthand): 57 * editing/EditingStyle.cpp: 58 (WebCore::EditingStyle::styleWithResolvedTextDecorations const): 59 (WebCore::EditingStyle::collapseTextDecorationProperties): 60 (WebCore::textDecorationValueList): 61 (WebCore::EditingStyle::conflictsWithInlineStyleOfElement const): 62 (WebCore::EditingStyle::styleIsPresentInComputedStyleOfNode const): 63 (WebCore::EditingStyle::mergeStyle): 64 (WebCore::EditingStyle::removeEquivalentProperties): 65 (WebCore::reconcileTextDecorationProperties): 66 (WebCore::StyleChange::StyleChange): 67 (WebCore::setTextDecorationProperty): 68 (WebCore::StyleChange::extractTextStyles): 69 (WebCore::diffTextDecorations): 70 (WebCore::extractPropertiesNotIn): 71 * editing/cocoa/HTMLConverter.mm: 72 (HTMLConverterCaches::propertyValueForNode): 73 (HTMLConverter::computedAttributesForElement): 74 * editing/markup.cpp: 75 (WebCore::serializePreservingVisualAppearanceInternal): 76 * style/PropertyAllowlist.cpp: 77 (WebCore::Style::isValidCueStyleProperty): 78 1 79 2022-03-02 Wenson Hsieh <wenson_hsieh@apple.com> 2 80 -
trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp
r290422 r290756 3521 3521 return cssValuePool.createValue(style.textAlign()); 3522 3522 case CSSPropertyTextDecoration: 3523 if (style.textDecorationThickness() != RenderStyle::initialTextDecorationThickness()) 3524 return nullptr; 3525 if (style.textDecorationStyle() != RenderStyle::initialTextDecorationStyle()) 3526 return nullptr; 3527 if (style.textDecorationColor() != RenderStyle::currentColor()) 3528 return nullptr; 3523 3529 return renderTextDecorationLineFlagsToCSSValue(style.textDecoration()); 3524 3530 #if ENABLE(CSS3_TEXT) -
trunk/Source/WebCore/css/CSSProperties.json
r290422 r290756 4616 4616 }, 4617 4617 "text-decoration": { 4618 "values": [ 4619 "underline", 4620 "overline", 4621 "line-through", 4622 { 4623 "value": "blink", 4624 "status": "not considering" 4625 } 4626 ], 4627 "codegen-properties": { 4628 "converter": "TextDecoration" 4618 "codegen-properties": { 4619 "longhands": [ 4620 "text-decoration-line", 4621 "text-decoration-thickness", 4622 "text-decoration-style", 4623 "text-decoration-color" 4624 ] 4629 4625 }, 4630 4626 "specification": { … … 6855 6851 ] 6856 6852 }, 6853 "values": [ 6854 "underline", 6855 "overline", 6856 "line-through", 6857 { 6858 "value": "blink", 6859 "status": "not considering" 6860 } 6861 ], 6857 6862 "specification": { 6858 6863 "category": "css-text-decor", -
trunk/Source/WebCore/css/StyleProperties.cpp
r290108 r290756 276 276 case CSSPropertyFontVariant: 277 277 return fontVariantValue(); 278 case CSSPropertyTextDecoration: { 279 auto line = getPropertyCSSValue(CSSPropertyTextDecorationLine); 280 if (!line) 281 return String(); 282 if (line->isCSSWideKeyword()) { 283 for (CSSPropertyID longhand : textDecorationShorthand()) { 284 auto value = getPropertyCSSValue(longhand); 285 if (!value || (value != line && *value != *line)) 286 return String(); 287 } 288 } else { 289 auto thickness = getPropertyCSSValue(CSSPropertyTextDecorationThickness); 290 if (!thickness || !is<CSSPrimitiveValue>(*thickness) || downcast<CSSPrimitiveValue>(*thickness).valueID() != CSSValueAuto) 291 return String(); 292 auto style = getPropertyCSSValue(CSSPropertyTextDecorationStyle); 293 if (!style || !is<CSSPrimitiveValue>(*style) || downcast<CSSPrimitiveValue>(*style).valueID() != CSSValueSolid) 294 return String(); 295 auto color = getPropertyCSSValue(CSSPropertyTextDecorationColor); 296 if (!color || !is<CSSPrimitiveValue>(*color) || downcast<CSSPrimitiveValue>(*color).valueID() != CSSValueCurrentcolor) 297 return String(); 298 } 299 return line->cssText(); 300 } 301 case CSSPropertyWebkitTextDecoration: 302 return getShorthandValue(webkitTextDecorationShorthand()); 278 303 case CSSPropertyTextDecorationSkip: 279 304 return textDecorationSkipValue(); … … 1434 1459 shorthandPropertyID = CSSPropertyScrollPaddingInline; 1435 1460 break; 1461 case CSSPropertyTextDecorationColor: 1462 case CSSPropertyTextDecorationLine: 1463 case CSSPropertyTextDecorationStyle: 1464 case CSSPropertyTextDecorationThickness: 1465 shorthandPropertyID = CSSPropertyTextDecoration; 1466 break; 1436 1467 case CSSPropertyTransitionProperty: 1437 1468 case CSSPropertyTransitionDuration: -
trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp
r290422 r290756 4474 4474 return nullptr; 4475 4475 return consumeFilter(m_range, m_context, AllowedFilterFunctions::ColorFilters); 4476 case CSSPropertyTextDecoration:4477 4476 case CSSPropertyWebkitTextDecorationsInEffect: 4478 4477 case CSSPropertyTextDecorationLine: … … 6286 6285 case CSSPropertyTransition: 6287 6286 return consumeAnimationShorthand(transitionShorthandForParsing(), important); 6288 case CSSPropertyTextDecoration: 6287 case CSSPropertyTextDecoration: { 6288 auto line = consumeTextDecorationLine(m_range); 6289 if (!line || !m_range.atEnd()) 6290 return false; 6291 auto& valuePool = CSSValuePool::singleton(); 6292 addProperty(CSSPropertyTextDecorationLine, property, line.releaseNonNull(), important); 6293 addProperty(CSSPropertyTextDecorationThickness, property, valuePool.createIdentifierValue(CSSValueAuto), important); 6294 addProperty(CSSPropertyTextDecorationStyle, property, valuePool.createIdentifierValue(CSSValueSolid), important); 6295 addProperty(CSSPropertyTextDecorationColor, property, valuePool.createIdentifierValue(CSSValueCurrentcolor), important); 6296 return true; 6297 } 6289 6298 case CSSPropertyWebkitTextDecoration: 6290 6299 // FIXME-NEWPARSER: We need to unprefix -line/-style/-color ASAP and get rid -
trunk/Source/WebCore/editing/EditingStyle.cpp
r288134 r290756 57 57 #include "StyleFontSizeFunctions.h" 58 58 #include "StyleProperties.h" 59 #include "StylePropertyShorthand.h" 59 60 #include "StyleResolver.h" 60 61 #include "StyleRule.h" … … 95 96 // Non-inheritable properties 96 97 CSSPropertyBackgroundColor, 97 CSSPropertyTextDecoration, 98 CSSPropertyTextDecorationLine, 99 CSSPropertyTextDecorationThickness, 100 CSSPropertyTextDecorationStyle, 101 CSSPropertyTextDecorationColor, 98 102 }; 99 103 100 104 const unsigned numAllEditingProperties = WTF_ARRAY_LENGTH(editingProperties); 101 const unsigned numInheritableEditingProperties = numAllEditingProperties - 2;105 const unsigned numInheritableEditingProperties = numAllEditingProperties - 5; 102 106 103 107 enum EditingPropertiesToInclude { OnlyInheritableEditingProperties, AllEditingProperties }; … … 236 240 auto& mutableStyle = *style.m_mutableStyle; 237 241 return mutableStyle.getPropertyCSSValue(CSSPropertyWebkitTextDecorationsInEffect) 238 || mutableStyle.getPropertyCSSValue(CSSPropertyTextDecoration );242 || mutableStyle.getPropertyCSSValue(CSSPropertyTextDecorationLine); 239 243 } 240 244 … … 248 252 RefPtr<CSSValue> styleValue = style.m_mutableStyle->getPropertyCSSValue(CSSPropertyWebkitTextDecorationsInEffect); 249 253 if (!styleValue) 250 styleValue = style.m_mutableStyle->getPropertyCSSValue(CSSPropertyTextDecoration );254 styleValue = style.m_mutableStyle->getPropertyCSSValue(CSSPropertyTextDecorationLine); 251 255 return is<CSSValueList>(styleValue) && downcast<CSSValueList>(*styleValue).hasValue(m_primitiveValue.get()); 252 256 } … … 596 600 597 601 if (valueList->length()) 598 style->setProperty(CSSPropertyTextDecoration , valueList.ptr());602 style->setProperty(CSSPropertyTextDecorationLine, valueList.ptr()); 599 603 else 600 style->setProperty(CSSPropertyTextDecoration, CSSValuePool::singleton().createIdentifierValue(CSSValueNone)); 604 style->setProperty(CSSPropertyTextDecorationLine, CSSValueNone); 605 style->setProperty(CSSPropertyTextDecorationThickness, CSSValueAuto); 606 style->setProperty(CSSPropertyTextDecorationStyle, CSSValueSolid); 607 style->setProperty(CSSPropertyTextDecorationColor, CSSValueCurrentcolor); 601 608 602 609 return style; … … 780 787 781 788 if (textDecorationsInEffect->isValueList()) 782 m_mutableStyle->setProperty(CSSPropertyTextDecoration, textDecorationsInEffect->cssText(), m_mutableStyle->propertyIsImportant(CSSPropertyTextDecoration ));789 m_mutableStyle->setProperty(CSSPropertyTextDecoration, textDecorationsInEffect->cssText(), m_mutableStyle->propertyIsImportant(CSSPropertyTextDecorationLine)); 783 790 else 784 791 m_mutableStyle->removeProperty(CSSPropertyTextDecoration); … … 788 795 // CSS properties that create a visual difference only when applied to text. 789 796 static const CSSPropertyID textOnlyProperties[] = { 790 CSSPropertyTextDecoration ,797 CSSPropertyTextDecorationLine, 791 798 CSSPropertyWebkitTextDecorationsInEffect, 792 799 CSSPropertyFontStyle, … … 853 860 static RefPtr<CSSValueList> textDecorationValueList(const StyleProperties& properties) 854 861 { 855 RefPtr<CSSValue> value = properties.getPropertyCSSValue(CSSPropertyTextDecoration );862 RefPtr<CSSValue> value = properties.getPropertyCSSValue(CSSPropertyTextDecorationLine); 856 863 if (!is<CSSValueList>(value)) 857 864 return nullptr; … … 896 903 if (extractedValueList->length()) { 897 904 conflicts = true; 898 if (newValueList->length()) 899 newInlineStyle->setProperty(CSSPropertyTextDecoration, WTFMove(newValueList)); 900 else 905 if (newValueList->length()) { 906 newInlineStyle->setProperty(CSSPropertyTextDecorationLine, WTFMove(newValueList)); 907 newInlineStyle->setProperty(CSSPropertyTextDecorationThickness, CSSValueAuto); 908 newInlineStyle->setProperty(CSSPropertyTextDecorationStyle, CSSValueSolid); 909 newInlineStyle->setProperty(CSSPropertyTextDecorationColor, CSSValueCurrentcolor); 910 } else 901 911 newInlineStyle->removeProperty(CSSPropertyTextDecoration); 902 912 903 913 if (extractedStyle) { 904 bool isImportant = inlineStyle->propertyIsImportant(CSSPropertyTextDecoration );914 bool isImportant = inlineStyle->propertyIsImportant(CSSPropertyTextDecorationLine); 905 915 extractedStyle->setProperty(CSSPropertyTextDecoration, extractedValueList->cssText(), isImportant); 906 916 } … … 917 927 continue; 918 928 919 if (propertyID == CSSPropertyWebkitTextDecorationsInEffect && inlineStyle->getPropertyCSSValue(CSSPropertyTextDecoration )) {929 if (propertyID == CSSPropertyWebkitTextDecorationsInEffect && inlineStyle->getPropertyCSSValue(CSSPropertyTextDecorationLine)) { 920 930 if (!newInlineStyle) 921 931 return true; … … 923 933 newInlineStyle->removeProperty(CSSPropertyTextDecoration); 924 934 if (extractedStyle) 925 extractedStyle->setProperty(CSSPropertyTextDecoration, inlineStyle->getPropertyValue(CSSPropertyTextDecoration ), inlineStyle->propertyIsImportant(CSSPropertyTextDecoration));935 extractedStyle->setProperty(CSSPropertyTextDecoration, inlineStyle->getPropertyValue(CSSPropertyTextDecorationLine), inlineStyle->propertyIsImportant(CSSPropertyTextDecorationLine)); 926 936 } 927 937 … … 1050 1060 bool hasUnderline = false; 1051 1061 bool hasLineThrough = false; 1052 if (RefPtr<CSSValue> value = computedStyle.propertyValue(CSSPropertyTextDecoration )) {1062 if (RefPtr<CSSValue> value = computedStyle.propertyValue(CSSPropertyTextDecorationLine)) { 1053 1063 if (value->isValueList()) { 1054 1064 auto& cssValuePool = CSSValuePool::singleton(); … … 1284 1294 1285 1295 // text decorations never override values. 1286 if ((property.id() == CSSPropertyTextDecoration || property.id() == CSSPropertyWebkitTextDecorationsInEffect)1296 if ((property.id() == CSSPropertyTextDecorationLine || property.id() == CSSPropertyWebkitTextDecorationsInEffect) 1287 1297 && is<CSSValueList>(*property.value()) && value) { 1288 1298 if (is<CSSValueList>(*value)) { … … 1464 1474 { 1465 1475 Vector<CSSPropertyID> propertiesToRemove; 1476 HashSet<CSSPropertyID> alreadyHandled; 1466 1477 for (auto& property : m_mutableStyle->m_propertyVector) { 1467 if (style.propertyMatches(property.id(), property.value())) 1478 CSSPropertyID id = property.id(); 1479 if (alreadyHandled.contains(id)) 1480 continue; 1481 if (!style.propertyMatches(id, property.value())) 1482 continue; 1483 if (!property.isSetFromShorthand()) { 1468 1484 propertiesToRemove.append(property.id()); 1485 continue; 1486 } 1487 // Do not remove equivalent properties when they share a shorthand with non-equivalent ones, and the removal would prevent them from being serialized with the shorthand. 1488 CSSPropertyID shorthandID = property.shorthandID(); 1489 if (m_mutableStyle->getPropertyValue(shorthandID).isEmpty()) { 1490 propertiesToRemove.append(property.id()); 1491 continue; 1492 } 1493 auto shorthand = shorthandForProperty(shorthandID); 1494 bool canRemoveAllLonghands = true; 1495 for (CSSPropertyID longhandID : shorthand) { 1496 if (id != longhandID && !style.propertyMatches(longhandID, m_mutableStyle->getPropertyCSSValue(longhandID).get())) { 1497 canRemoveAllLonghands = false; 1498 break; 1499 } 1500 } 1501 for (CSSPropertyID longhandID : shorthand) { 1502 if (canRemoveAllLonghands) 1503 propertiesToRemove.append(longhandID); 1504 alreadyHandled.add(longhandID); 1505 } 1469 1506 } 1470 1507 // FIXME: This should use mass removal. … … 1689 1726 { 1690 1727 RefPtr<CSSValue> textDecorationsInEffect = style->getPropertyCSSValue(CSSPropertyWebkitTextDecorationsInEffect); 1691 RefPtr<CSSValue> textDecoration = style->getPropertyCSSValue(CSSPropertyTextDecoration );1728 RefPtr<CSSValue> textDecoration = style->getPropertyCSSValue(CSSPropertyTextDecorationLine); 1692 1729 // We shouldn't have both text-decoration and -webkit-text-decorations-in-effect because that wouldn't make sense. 1693 1730 ASSERT(!textDecorationsInEffect || !textDecoration); … … 1735 1772 RefPtr<CSSValue> value = computedStyle.propertyValue(CSSPropertyWebkitTextDecorationsInEffect); 1736 1773 if (!is<CSSValueList>(value)) 1737 value = computedStyle.propertyValue(CSSPropertyTextDecoration );1774 value = computedStyle.propertyValue(CSSPropertyTextDecorationLine); 1738 1775 1739 1776 RefPtr<CSSValueList> valueList; … … 1754 1791 if (shouldAddStrikeThrough && !hasLineThrough) 1755 1792 valueList->append(WTFMove(lineThrough)); 1756 mutableStyle->setProperty(CSSPropertyTextDecoration, valueList .get());1793 mutableStyle->setProperty(CSSPropertyTextDecoration, valueList->cssText()); 1757 1794 } else { 1758 1795 m_applyUnderline = shouldAddUnderline && !hasUnderline; … … 1791 1828 } 1792 1829 1793 static void setTextDecorationProperty(MutableStyleProperties& style, const CSSValueList* newTextDecoration, CSSPropertyID propertyID)1830 static void setTextDecorationProperty(MutableStyleProperties& style, const CSSValueList* newTextDecoration, CSSPropertyID getID, CSSPropertyID setID) 1794 1831 { 1795 1832 if (newTextDecoration->length()) 1796 style.setProperty( propertyID, newTextDecoration->cssText(), style.propertyIsImportant(propertyID));1833 style.setProperty(setID, newTextDecoration->cssText(), style.propertyIsImportant(getID)); 1797 1834 else { 1798 1835 // text-decoration: none is redundant since it does not remove any text decorations. 1799 style.removeProperty( propertyID);1836 style.removeProperty(setID); 1800 1837 } 1801 1838 } … … 1816 1853 // Assuming reconcileTextDecorationProperties has been called, there should not be -webkit-text-decorations-in-effect 1817 1854 // Furthermore, text-decoration: none has been trimmed so that text-decoration property is always a CSSValueList. 1818 RefPtr<CSSValue> textDecoration = style.getPropertyCSSValue(CSSPropertyTextDecoration );1855 RefPtr<CSSValue> textDecoration = style.getPropertyCSSValue(CSSPropertyTextDecorationLine); 1819 1856 if (is<CSSValueList>(textDecoration)) { 1820 1857 auto& cssValuePool = CSSValuePool::singleton(); … … 1829 1866 1830 1867 // If trimTextDecorations, delete underline and line-through 1831 setTextDecorationProperty(style, newTextDecoration.get(), CSSPropertyTextDecoration );1868 setTextDecorationProperty(style, newTextDecoration.get(), CSSPropertyTextDecorationLine, CSSPropertyTextDecoration); 1832 1869 } 1833 1870 … … 1868 1905 } 1869 1906 1870 static void diffTextDecorations(MutableStyleProperties& style, CSSPropertyID propertID, CSSValue* refTextDecoration)1871 { 1872 RefPtr<CSSValue> textDecoration = style.getPropertyCSSValue( propertID);1907 static void diffTextDecorations(MutableStyleProperties& style, CSSPropertyID getID, CSSPropertyID setID, CSSValue* refTextDecoration) 1908 { 1909 RefPtr<CSSValue> textDecoration = style.getPropertyCSSValue(getID); 1873 1910 if (!is<CSSValueList>(textDecoration) || !is<CSSValueList>(refTextDecoration)) 1874 1911 return; … … 1879 1916 newTextDecoration->removeAll(&value.get()); 1880 1917 1881 setTextDecorationProperty(style, newTextDecoration.get(), propertID);1918 setTextDecorationProperty(style, newTextDecoration.get(), getID, setID); 1882 1919 } 1883 1920 … … 1898 1935 1899 1936 RefPtr<CSSValue> baseTextDecorationsInEffect = extractPropertyValue(baseStyle, CSSPropertyWebkitTextDecorationsInEffect); 1900 diffTextDecorations(mutableStyle, CSSPropertyTextDecoration , baseTextDecorationsInEffect.get());1901 diffTextDecorations(mutableStyle, CSSPropertyWebkitTextDecorationsInEffect, baseTextDecorationsInEffect.get());1937 diffTextDecorations(mutableStyle, CSSPropertyTextDecorationLine, CSSPropertyTextDecoration, baseTextDecorationsInEffect.get()); 1938 diffTextDecorations(mutableStyle, CSSPropertyWebkitTextDecorationsInEffect, CSSPropertyWebkitTextDecorationsInEffect, baseTextDecorationsInEffect.get()); 1902 1939 1903 1940 if (extractPropertyValue(baseStyle, CSSPropertyFontWeight) && fontWeightIsBold(mutableStyle) == fontWeightIsBold(baseStyle)) -
trunk/Source/WebCore/editing/cocoa/HTMLConverter.mm
r287434 r290756 642 642 inherit = true; 643 643 break; 644 case CSSPropertyTextDecoration :644 case CSSPropertyTextDecorationLine: 645 645 if (element.hasTagName(uTag) || element.hasTagName(insTag)) 646 646 return "underline"; … … 1038 1038 } 1039 1039 1040 String textDecoration = _caches->propertyValueForNode(element, CSSPropertyTextDecoration );1040 String textDecoration = _caches->propertyValueForNode(element, CSSPropertyTextDecorationLine); 1041 1041 if (textDecoration.length()) { 1042 1042 if (textDecoration.contains("underline")) -
trunk/Source/WebCore/editing/markup.cpp
r284857 r290756 936 936 // This assertion is caused at least when we select all text of a <body> element whose 937 937 // 'text-decoration' property is "inherit", and copy it. 938 if (!propertyMissingOrEqualToNone(fullySelectedRootStyle->style(), CSSPropertyTextDecoration ))938 if (!propertyMissingOrEqualToNone(fullySelectedRootStyle->style(), CSSPropertyTextDecorationLine)) { 939 939 fullySelectedRootStyle->style()->setProperty(CSSPropertyTextDecoration, CSSValueNone); 940 fullySelectedRootStyle->style()->setProperty(CSSPropertyTextDecorationThickness, CSSValueAuto); 941 fullySelectedRootStyle->style()->setProperty(CSSPropertyTextDecorationStyle, CSSValueSolid); 942 fullySelectedRootStyle->style()->setProperty(CSSPropertyTextDecorationColor, CSSValueCurrentcolor); 943 } 940 944 if (!propertyMissingOrEqualToNone(fullySelectedRootStyle->style(), CSSPropertyWebkitTextDecorationsInEffect)) 941 945 fullySelectedRootStyle->style()->setProperty(CSSPropertyWebkitTextDecorationsInEffect, CSSValueNone); -
trunk/Source/WebCore/style/PropertyAllowlist.cpp
r288433 r290756 133 133 case CSSPropertyVisibility: 134 134 case CSSPropertyWhiteSpace: 135 case CSSPropertyTextDecoration :135 case CSSPropertyTextDecorationLine: 136 136 case CSSPropertyTextShadow: 137 137 case CSSPropertyBorderStyle:
Note: See TracChangeset
for help on using the changeset viewer.