Split DefaultDOMPropertyConfig
This makes it a little easier to add SVG properties. It also makes use of that injection that we claim is easy to use and will likely start playing a bigger part soon. Closes #1009
Paul O'Shannessy committed
Apr 23, 2014 at 16:21 UTC
3d605da15f55de9c6d53e83cf19e277902480cf2
3 files changed
+88
-61
src/browser/ui/ReactDefaultInjection.js
+9
-12
@@ -18,22 +18,19 @@
18
19
"use strict";
20
21
-var ReactInjection = require('ReactInjection');
22
-
23
-var ExecutionEnvironment = require('ExecutionEnvironment');
24
-
25
-var DefaultDOMPropertyConfig = require('DefaultDOMPropertyConfig');
26
-
21
+var BeforeInputEventPlugin = require('BeforeInputEventPlugin');
22
var ChangeEventPlugin = require('ChangeEventPlugin');
23
var ClientReactRootIndex = require('ClientReactRootIndex');
24
var CompositionEventPlugin = require('CompositionEventPlugin');
25
var DefaultEventPluginOrder = require('DefaultEventPluginOrder');
26
var EnterLeaveEventPlugin = require('EnterLeaveEventPlugin');
27
+var ExecutionEnvironment = require('ExecutionEnvironment');
28
+var HTMLDOMPropertyConfig = require('HTMLDOMPropertyConfig');
29
var MobileSafariClickEventPlugin = require('MobileSafariClickEventPlugin');
30
var ReactBrowserComponentMixin = require('ReactBrowserComponentMixin');
31
var ReactComponentBrowserEnvironment =
32
require('ReactComponentBrowserEnvironment');
36
-var ReactEventTopLevelCallback = require('ReactEventTopLevelCallback');
33
+var ReactDefaultBatchingStrategy = require('ReactDefaultBatchingStrategy');
34
var ReactDOM = require('ReactDOM');
35
var ReactDOMButton = require('ReactDOMButton');
36
var ReactDOMForm = require('ReactDOMForm');
@@ -42,14 +39,14 @@ var ReactDOMInput = require('ReactDOMInput');
39
var ReactDOMOption = require('ReactDOMOption');
40
var ReactDOMSelect = require('ReactDOMSelect');
41
var ReactDOMTextarea = require('ReactDOMTextarea');
42
+var ReactEventTopLevelCallback = require('ReactEventTopLevelCallback');
43
+var ReactInjection = require('ReactInjection');
44
var ReactInstanceHandles = require('ReactInstanceHandles');
45
var ReactMount = require('ReactMount');
46
var SelectEventPlugin = require('SelectEventPlugin');
47
var ServerReactRootIndex = require('ServerReactRootIndex');
48
var SimpleEventPlugin = require('SimpleEventPlugin');
50
-var BeforeInputEventPlugin = require('BeforeInputEventPlugin');
51
-
52
-var ReactDefaultBatchingStrategy = require('ReactDefaultBatchingStrategy');
49
+var SVGDOMPropertyConfig = require('SVGDOMPropertyConfig');
50
51
var createFullPageComponent = require('createFullPageComponent');
52
@@ -94,12 +91,12 @@ function inject() {
91
body: createFullPageComponent(ReactDOM.body)
92
});
93
97
-
94
// This needs to happen after createFullPageComponent() otherwise the mixin
95
// gets double injected.
96
ReactInjection.CompositeComponent.injectMixin(ReactBrowserComponentMixin);
97
102
- ReactInjection.DOMProperty.injectDOMPropertyConfig(DefaultDOMPropertyConfig);
98
+ ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
99
+ ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);
100
101
ReactInjection.EmptyComponent.injectEmptyComponent(ReactDOM.script);
102
src/browser/ui/dom/HTMLDOMPropertyConfig.js
renamed
+5
-49
@@ -13,7 +13,7 @@
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*
16
- * @providesModule DefaultDOMPropertyConfig
16
+ * @providesModule HTMLDOMPropertyConfig
17
*/
18
19
/*jslint bitwise: true*/
@@ -32,7 +32,7 @@ var HAS_POSITIVE_NUMERIC_VALUE =
32
var HAS_OVERLOADED_BOOLEAN_VALUE =
33
DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;
34
35
-var DefaultDOMPropertyConfig = {
35
+var HTMLDOMPropertyConfig = {
36
isCustomAttribute: RegExp.prototype.test.bind(
37
/^(data|aria)-[a-z_][a-z\d_.\-]*$/
38
),
@@ -135,56 +135,12 @@ var DefaultDOMPropertyConfig = {
135
*/
136
autoCapitalize: null, // Supported in Mobile Safari for keyboard hints
137
autoCorrect: null, // Supported in Mobile Safari for keyboard hints
138
- property: null, // Supports OG in meta tags
139
-
140
- /**
141
- * SVG Properties
142
- */
143
- cx: MUST_USE_ATTRIBUTE,
144
- cy: MUST_USE_ATTRIBUTE,
145
- d: MUST_USE_ATTRIBUTE,
146
- dx: MUST_USE_ATTRIBUTE,
147
- dy: MUST_USE_ATTRIBUTE,
148
- fill: MUST_USE_ATTRIBUTE,
149
- fx: MUST_USE_ATTRIBUTE,
150
- fy: MUST_USE_ATTRIBUTE,
151
- gradientTransform: MUST_USE_ATTRIBUTE,
152
- gradientUnits: MUST_USE_ATTRIBUTE,
153
- offset: MUST_USE_ATTRIBUTE,
154
- points: MUST_USE_ATTRIBUTE,
155
- r: MUST_USE_ATTRIBUTE,
156
- rx: MUST_USE_ATTRIBUTE,
157
- ry: MUST_USE_ATTRIBUTE,
158
- spreadMethod: MUST_USE_ATTRIBUTE,
159
- stopColor: MUST_USE_ATTRIBUTE,
160
- stopOpacity: MUST_USE_ATTRIBUTE,
161
- stroke: MUST_USE_ATTRIBUTE,
162
- strokeLinecap: MUST_USE_ATTRIBUTE,
163
- strokeWidth: MUST_USE_ATTRIBUTE,
164
- textAnchor: MUST_USE_ATTRIBUTE,
165
- transform: MUST_USE_ATTRIBUTE,
166
- version: MUST_USE_ATTRIBUTE,
167
- viewBox: MUST_USE_ATTRIBUTE,
168
- x1: MUST_USE_ATTRIBUTE,
169
- x2: MUST_USE_ATTRIBUTE,
170
- x: MUST_USE_ATTRIBUTE,
171
- y1: MUST_USE_ATTRIBUTE,
172
- y2: MUST_USE_ATTRIBUTE,
173
- y: MUST_USE_ATTRIBUTE
138
+ property: null // Supports OG in meta tags
139
},
140
DOMAttributeNames: {
141
className: 'class',
177
- gradientTransform: 'gradientTransform',
178
- gradientUnits: 'gradientUnits',
142
htmlFor: 'for',
180
- httpEquiv: 'http-equiv',
181
- spreadMethod: 'spreadMethod',
182
- stopColor: 'stop-color',
183
- stopOpacity: 'stop-opacity',
184
- strokeLinecap: 'stroke-linecap',
185
- strokeWidth: 'stroke-width',
186
- textAnchor: 'text-anchor',
187
- viewBox: 'viewBox'
143
+ httpEquiv: 'http-equiv'
144
},
145
DOMPropertyNames: {
146
autoCapitalize: 'autocapitalize',
@@ -201,4 +157,4 @@ var DefaultDOMPropertyConfig = {
157
}
158
};
159
204
-module.exports = DefaultDOMPropertyConfig;
160
+module.exports = HTMLDOMPropertyConfig;
src/browser/ui/dom/SVGDOMPropertyConfig.js
new
+74
@@ -0,0 +1,74 @@
1
+/**
2
+ * Copyright 2013-2014 Facebook, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ *
16
+ * @providesModule SVGDOMPropertyConfig
17
+ */
18
+
19
+/*jslint bitwise: true*/
20
+
21
+"use strict";
22
+
23
+var DOMProperty = require('DOMProperty');
24
+
25
+var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;
26
+
27
+var SVGDOMPropertyConfig = {
28
+ Properties: {
29
+ cx: MUST_USE_ATTRIBUTE,
30
+ cy: MUST_USE_ATTRIBUTE,
31
+ d: MUST_USE_ATTRIBUTE,
32
+ dx: MUST_USE_ATTRIBUTE,
33
+ dy: MUST_USE_ATTRIBUTE,
34
+ fill: MUST_USE_ATTRIBUTE,
35
+ fx: MUST_USE_ATTRIBUTE,
36
+ fy: MUST_USE_ATTRIBUTE,
37
+ gradientTransform: MUST_USE_ATTRIBUTE,
38
+ gradientUnits: MUST_USE_ATTRIBUTE,
39
+ offset: MUST_USE_ATTRIBUTE,
40
+ points: MUST_USE_ATTRIBUTE,
41
+ r: MUST_USE_ATTRIBUTE,
42
+ rx: MUST_USE_ATTRIBUTE,
43
+ ry: MUST_USE_ATTRIBUTE,
44
+ spreadMethod: MUST_USE_ATTRIBUTE,
45
+ stopColor: MUST_USE_ATTRIBUTE,
46
+ stopOpacity: MUST_USE_ATTRIBUTE,
47
+ stroke: MUST_USE_ATTRIBUTE,
48
+ strokeLinecap: MUST_USE_ATTRIBUTE,
49
+ strokeWidth: MUST_USE_ATTRIBUTE,
50
+ textAnchor: MUST_USE_ATTRIBUTE,
51
+ transform: MUST_USE_ATTRIBUTE,
52
+ version: MUST_USE_ATTRIBUTE,
53
+ viewBox: MUST_USE_ATTRIBUTE,
54
+ x1: MUST_USE_ATTRIBUTE,
55
+ x2: MUST_USE_ATTRIBUTE,
56
+ x: MUST_USE_ATTRIBUTE,
57
+ y1: MUST_USE_ATTRIBUTE,
58
+ y2: MUST_USE_ATTRIBUTE,
59
+ y: MUST_USE_ATTRIBUTE
60
+ },
61
+ DOMAttributeNames: {
62
+ gradientTransform: 'gradientTransform',
63
+ gradientUnits: 'gradientUnits',
64
+ spreadMethod: 'spreadMethod',
65
+ stopColor: 'stop-color',
66
+ stopOpacity: 'stop-opacity',
67
+ strokeLinecap: 'stroke-linecap',
68
+ strokeWidth: 'stroke-width',
69
+ textAnchor: 'text-anchor',
70
+ viewBox: 'viewBox'
71
+ }
72
+};
73
+
74
+module.exports = SVGDOMPropertyConfig;