@samitouri / QOS-React-2 / commits / 3d605da15f

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;