Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(472)

Side by Side Diff: tools/dom/scripts/css_code_generator.py

Issue 2976213002: Allow setting unknown CSS properties, e.g. CSS variables (Closed)
Patch Set: Update status files Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # 2 #
3 # Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 3 # Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
4 # for details. All rights reserved. Use of this source code is governed by a 4 # for details. All rights reserved. Use of this source code is governed by a
5 # BSD-style license that can be found in the LICENSE file. 5 # BSD-style license that can be found in the LICENSE file.
6 6
7 """Generates CSSStyleDeclaration template file from css property definitions 7 """Generates CSSStyleDeclaration template file from css property definitions
8 defined in WebKit.""" 8 defined in WebKit."""
9 9
10 import tempfile, os, re 10 import tempfile, os, re
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 return style; 112 return style;
113 } 113 }
114 114
115 /// Returns the value of the property if the provided *CSS* property 115 /// Returns the value of the property if the provided *CSS* property
116 /// name is supported on this element and if the value is set. Otherwise 116 /// name is supported on this element and if the value is set. Otherwise
117 /// returns an empty string. 117 /// returns an empty string.
118 /// 118 ///
119 /// Please note the property name uses camelCase, not-hyphens. 119 /// Please note the property name uses camelCase, not-hyphens.
120 String getPropertyValue(String propertyName) { 120 String getPropertyValue(String propertyName) {
121 var propValue = _getPropertyValueHelper(propertyName); 121 var propValue = _getPropertyValueHelper(propertyName);
122 return propValue != null ? propValue : ''; 122 return propValue ?? '';
123 } 123 }
124 124
125 String _getPropertyValueHelper(String propertyName) { 125 String _getPropertyValueHelper(String propertyName) {
126 if (_supportsProperty(_camelCase(propertyName))) { 126 return _getPropertyValue(_browserPropertyName(propertyName));
127 return _getPropertyValue(propertyName);
128 } else {
129 return _getPropertyValue(Device.cssPrefix + propertyName);
130 }
131 } 127 }
132 128
133 /** 129 /**
134 * Returns true if the provided *CSS* property name is supported on this 130 * Returns true if the provided *CSS* property name is supported on this
135 * element. 131 * element.
136 * 132 *
137 * Please note the property name camelCase, not-hyphens. This 133 * Please note the property name camelCase, not-hyphens. This
138 * method returns true if the property is accessible via an unprefixed _or_ 134 * method returns true if the property is accessible via an unprefixed _or_
139 * prefixed property. 135 * prefixed property.
140 */ 136 */
141 bool supportsProperty(String propertyName) { 137 bool supportsProperty(String propertyName) {
142 return _supportsProperty(propertyName) || 138 return _supportsProperty(propertyName) ||
143 _supportsProperty(_camelCase(Device.cssPrefix + propertyName)); 139 _supportsProperty(_camelCase("${Device.cssPrefix}$propertyName"));
144 } 140 }
145 141
146 bool _supportsProperty(String propertyName) { 142 bool _supportsProperty(String propertyName) {
147 $if DART2JS 143 $if DART2JS
148 return JS('bool', '# in #', propertyName, this); 144 return JS('bool', '# in #', propertyName, this);
149 $else 145 $else
150 // You can't just check the value of a property, because there is no way 146 // You can't just check the value of a property, because there is no way
151 // to distinguish between property not being present in the browser and 147 // to distinguish between property not being present in the browser and
152 // not having a value at all. (Ultimately we'll want the native method to 148 // not having a value at all. (Ultimately we'll want the native method to
153 // return null if the property doesn't exist and empty string if it's 149 // return null if the property doesn't exist and empty string if it's
154 // defined but just doesn't have a value. 150 // defined but just doesn't have a value.
155 return _hasProperty(propertyName); 151 return _hasProperty(propertyName);
156 $endif 152 $endif
157 } 153 }
158 154
159 $if DARTIUM 155 $if DARTIUM
160 bool _hasProperty(String propertyName) => 156 bool _hasProperty(String propertyName) =>
161 _blink.BlinkCSSStyleDeclaration.instance.$__get___propertyIsEnumerable_Cal lback_1_(this, propertyName); 157 _blink.BlinkCSSStyleDeclaration.instance.$__get___propertyIsEnumerable_Cal lback_1_(this, propertyName);
162 $endif 158 $endif
163 159
164 @DomName('CSSStyleDeclaration.setProperty') 160 @DomName('CSSStyleDeclaration.setProperty')
165 void setProperty(String propertyName, String value, [String priority]) { 161 void setProperty(String propertyName, String value, [String priority]) {
166 return _setPropertyHelper(_browserPropertyName(propertyName), 162 return _setPropertyHelper(_browserPropertyName(propertyName),
167 value, priority); 163 value, priority);
168 } 164 }
169 165
170 String _browserPropertyName(String propertyName) { 166 String _browserPropertyName(String propertyName) {
171 String name = _readCache(propertyName); 167 String name = _readCache(propertyName);
172 if (name is String) return name; 168 if (name is String) return name;
173 if (_supportsProperty(_camelCase(propertyName))) { 169 name = _supportedBrowserPropertyName(propertyName);
174 name = propertyName;
175 } else {
176 name = Device.cssPrefix + propertyName;
177 }
178 _writeCache(propertyName, name); 170 _writeCache(propertyName, name);
179 return name; 171 return name;
180 } 172 }
181 173
174 String _supportedBrowserPropertyName(String propertyName) {
175 if (_supportsProperty(_camelCase(propertyName))) {
176 return propertyName;
177 }
178 var prefixed = "${Device.cssPrefix}$propertyName";
179 if (_supportsProperty(prefixed)) {
180 return prefixed;
181 }
182 // May be a CSS variable, just use it as provided.
183 return propertyName;
184 }
185
182 $if DART2JS 186 $if DART2JS
183 static final _propertyCache = JS('', '{}'); 187 static final _propertyCache = JS('', '{}');
184 static String _readCache(String key) => 188 static String _readCache(String key) =>
185 JS('String|Null', '#[#]', _propertyCache, key); 189 JS('String|Null', '#[#]', _propertyCache, key);
186 static void _writeCache(String key, String value) { 190 static void _writeCache(String key, String value) {
187 JS('void', '#[#] = #', _propertyCache, key, value); 191 JS('void', '#[#] = #', _propertyCache, key, value);
188 } 192 }
189 $else 193 $else
190 static String _readCache(String key) => null; 194 static String _readCache(String key) => null;
191 static void _writeCache(String key, value) {} 195 static void _writeCache(String key, value) {}
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 class_lines.append(annotated[base_css_name]) 360 class_lines.append(annotated[base_css_name])
357 class_lines.append(""" 361 class_lines.append("""
358 set %s(String value) { 362 set %s(String value) {
359 setProperty('%s', value, ''); 363 setProperty('%s', value, '');
360 } 364 }
361 """ % (camel_case_name, css_name)) 365 """ % (camel_case_name, css_name))
362 366
363 class_file.write(''.join(class_lines)); 367 class_file.write(''.join(class_lines));
364 class_file.write('}\n') 368 class_file.write('}\n')
365 class_file.close() 369 class_file.close()
OLDNEW
« no previous file with comments | « tests/co19/co19-dartium.status ('k') | tools/dom/templates/html/impl/impl_CSSStyleDeclaration.darttemplate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698