Skip to content

Commit 251d6c3

Browse files
committed
Move SVG attribute deprecation warnings into a devtool
In facebook#5590 a new system was introduced for tracking dev-time warnings. This commit uses it for reporting SVG attribute deprecation warnings.
1 parent 232a47a commit 251d6c3

File tree

4 files changed

+83
-43
lines changed

4 files changed

+83
-43
lines changed

src/renderers/dom/shared/DOMPropertyOperations.js

Lines changed: 12 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -50,32 +50,6 @@ function shouldIgnoreValue(propertyInfo, value) {
5050
(propertyInfo.hasOverloadedBooleanValue && value === false);
5151
}
5252

53-
if (__DEV__) {
54-
var reactProps = {
55-
children: true,
56-
dangerouslySetInnerHTML: true,
57-
key: true,
58-
ref: true,
59-
};
60-
var warnedSVGProperties = {};
61-
62-
var warnDeprecatedSVGProperty = function(name, attributeName) {
63-
if (reactProps.hasOwnProperty(name) && reactProps[name] ||
64-
warnedSVGProperties.hasOwnProperty(name) && warnedSVGProperties[name]) {
65-
return;
66-
}
67-
68-
warnedSVGProperties[name] = true;
69-
warning(
70-
false,
71-
'SVG property %s is deprecated. Use the original attribute name ' +
72-
'%s for SVG tags instead.',
73-
name,
74-
attributeName
75-
);
76-
};
77-
}
78-
7953
/**
8054
* Operations for dealing with DOM properties.
8155
*/
@@ -158,21 +132,21 @@ var DOMPropertyOperations = {
158132
* @return {string} Markup string, or empty string if the property was invalid.
159133
*/
160134
createMarkupForSVGAttribute: function(name, value) {
135+
if (__DEV__) {
136+
ReactDOMInstrumentation.debugTool.onCreateMarkupForSVGAttribute(name, value);
137+
}
161138
if (!isAttributeNameSafe(name) || value == null) {
162139
return '';
163140
}
164141
var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ?
165142
DOMProperty.properties[name] : null;
166143
if (propertyInfo) {
167-
var { attributeName, attributeNamespace } = propertyInfo;
168-
if (__DEV__) {
169-
if (!attributeNamespace && name !== attributeName) {
170-
warnDeprecatedSVGProperty(name, attributeName);
171-
}
172-
}
144+
// Migration path for deprecated camelCase aliases for SVG attributes
145+
var { attributeName } = propertyInfo;
173146
return attributeName + '=' + quoteAttributeValueForBrowser(value);
147+
} else {
148+
return name + '=' + quoteAttributeValueForBrowser(value);
174149
}
175-
return name + '=' + quoteAttributeValueForBrowser(value);
176150
},
177151

178152
/**
@@ -235,15 +209,11 @@ var DOMPropertyOperations = {
235209
},
236210

237211
setValueForSVGAttribute: function(node, name, value) {
238-
var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ?
239-
DOMProperty.properties[name] : null;
240-
if (propertyInfo) {
241-
if (__DEV__) {
242-
var { attributeName, attributeNamespace } = propertyInfo;
243-
if (!attributeNamespace && name !== attributeName) {
244-
warnDeprecatedSVGProperty(name, attributeName);
245-
}
246-
}
212+
if (__DEV__) {
213+
ReactDOMInstrumentation.debugTool.onSetValueForSVGAttribute(node, name, value);
214+
}
215+
if (DOMProperty.properties.hasOwnProperty(name)) {
216+
// Migration path for deprecated camelCase aliases for SVG attributes
247217
DOMPropertyOperations.setValueForProperty(node, name, value);
248218
} else {
249219
DOMPropertyOperations.setValueForAttribute(node, name, value);

src/renderers/dom/shared/ReactDOMDebugTool.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
'use strict';
1313

1414
var ReactDOMUnknownPropertyDevtool = require('ReactDOMUnknownPropertyDevtool');
15+
var ReactDOMSVGDeprecatedAttributeDevtool =
16+
require('ReactDOMSVGDeprecatedAttributeDevtool');
1517

1618
var warning = require('warning');
1719

@@ -53,14 +55,21 @@ var ReactDOMDebugTool = {
5355
onCreateMarkupForProperty(name, value) {
5456
emitEvent('onCreateMarkupForProperty', name, value);
5557
},
58+
onCreateMarkupForSVGAttribute(name, value) {
59+
emitEvent('onCreateMarkupForSVGAttribute', name, value);
60+
},
5661
onSetValueForProperty(node, name, value) {
5762
emitEvent('onSetValueForProperty', node, name, value);
5863
},
64+
onSetValueForSVGAttribute(node, name, value) {
65+
emitEvent('onSetValueForSVGAttribute', node, name, value);
66+
},
5967
onDeleteValueForProperty(node, name) {
6068
emitEvent('onDeleteValueForProperty', node, name);
6169
},
6270
};
6371

6472
ReactDOMDebugTool.addDevtool(ReactDOMUnknownPropertyDevtool);
73+
ReactDOMDebugTool.addDevtool(ReactDOMSVGDeprecatedAttributeDevtool);
6574

6675
module.exports = ReactDOMDebugTool;
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/**
2+
* Copyright 2013-2015, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*
9+
* @providesModule ReactDOMSVGDeprecatedAttributeDevtool
10+
*/
11+
12+
'use strict';
13+
14+
var DOMProperty = require('DOMProperty');
15+
16+
var warning = require('warning');
17+
18+
if (__DEV__) {
19+
var reactProps = {
20+
children: true,
21+
dangerouslySetInnerHTML: true,
22+
key: true,
23+
ref: true,
24+
};
25+
var warnedSVGAttributes = {};
26+
27+
var warnDeprecatedSVGAttribute = function(name) {
28+
if (!DOMProperty.properties.hasOwnProperty(name)) {
29+
return;
30+
}
31+
32+
if (reactProps.hasOwnProperty(name) && reactProps[name] ||
33+
warnedSVGAttributes.hasOwnProperty(name) && warnedSVGAttributes[name]) {
34+
return;
35+
}
36+
37+
var { attributeName, attributeNamespace } = DOMProperty.properties[name];
38+
if (attributeNamespace || name === attributeName) {
39+
return;
40+
}
41+
42+
warning(
43+
false,
44+
'SVG property %s is deprecated. Use the original attribute name ' +
45+
'%s for SVG tags instead.',
46+
name,
47+
attributeName
48+
);
49+
};
50+
}
51+
52+
var ReactDOMSVGDeprecatedAttributeDevtool = {
53+
onCreateMarkupForSVGAttribute(name, value) {
54+
warnDeprecatedSVGAttribute(name);
55+
},
56+
onSetValueForSVGAttribute(node, name, value) {
57+
warnDeprecatedSVGAttribute(name);
58+
},
59+
};
60+
61+
module.exports = ReactDOMSVGDeprecatedAttributeDevtool;

src/renderers/dom/shared/devtools/ReactDOMUnknownPropertyDevtool.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,6 @@ var ReactDOMUnknownPropertyDevtool = {
8282
onDeleteValueForProperty(node, name) {
8383
warnUnknownProperty(name);
8484
},
85-
}
85+
};
8686

8787
module.exports = ReactDOMUnknownPropertyDevtool;

0 commit comments

Comments
 (0)