Make nodeType into constant for readability and reuse (#9113)
* Make nodeType into constant for readability and reuse * Fix eslint line length warning * Delete unused nodeType values * Destructure HTMLNodeType constant * Make nodeType into constant for readability and reuse * Fix eslint line length warning * Delete unused nodeType values * Destructure HTMLNodeType constant * Fix test * Format using prettier
Sung Won Cho committed
Apr 16, 2017 at 03:37 UTC
ac9d6986364fd94cd8dd0dde219b2a32a17d60e2
16 files changed
+89
-53
eslint-rules/__tests__/no-primitive-constructors-test.js
+4
-2
@@ -34,8 +34,10 @@ ruleTester.run('eslint-rules/no-primitive-constructors', rule, {
34
code: 'String(obj)',
35
errors: [
36
{
37
- message: 'Do not use the String constructor. To cast a value to a string, ' +
38
- 'concat it with the empty string (unless it\'s a symbol, which has different semantics): \'\' + value',
37
+ message:
38
+ 'Do not use the String constructor. ' +
39
+ 'To cast a value to a string, concat it with the empty string ' +
40
+ '(unless it\'s a symbol, which has different semantics): \'\' + value',
41
},
42
],
43
},
src/renderers/dom/fiber/ReactDOMFiber.js
+9
-10
@@ -30,6 +30,11 @@ var ReactInstanceMap = require('ReactInstanceMap');
30
var ReactPortal = require('ReactPortal');
31
var {isValidElement} = require('react');
32
var {injectInternals} = require('ReactFiberDevToolsHook');
33
+var {
34
+ ELEMENT_NODE,
35
+ DOCUMENT_NODE,
36
+ DOCUMENT_FRAGMENT_NODE,
37
+} = require('HTMLNodeType');
38
39
var findDOMNode = require('findDOMNode');
40
var invariant = require('fbjs/lib/invariant');
@@ -52,8 +57,6 @@ if (__DEV__) {
57
var {updatedAncestorInfo} = validateDOMNesting;
58
}
59
55
-const DOCUMENT_NODE = 9;
56
-
60
ReactDOMInjection.inject();
61
ReactControlledComponent.injection.injectFiberControlledHostComponent(
62
ReactDOMFiberComponent,
@@ -83,10 +86,6 @@ type HostContext = HostContextDev | HostContextProd;
86
let eventsEnabled: ?boolean = null;
87
let selectionInformation: ?mixed = null;
88
86
-var ELEMENT_NODE_TYPE = 1;
87
-var DOC_NODE_TYPE = 9;
88
-var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
89
-
89
/**
90
* True if the supplied DOM node is a valid node element.
91
*
@@ -96,9 +95,9 @@ var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
95
*/
96
function isValidContainer(node) {
97
return !!(node &&
99
- (node.nodeType === ELEMENT_NODE_TYPE ||
100
- node.nodeType === DOC_NODE_TYPE ||
101
- node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE));
98
+ (node.nodeType === ELEMENT_NODE ||
99
+ node.nodeType === DOCUMENT_NODE ||
100
+ node.nodeType === DOCUMENT_FRAGMENT_NODE));
101
}
102
103
function validateContainer(container) {
@@ -112,7 +111,7 @@ function getReactRootElementInContainer(container: any) {
111
return null;
112
}
113
115
- if (container.nodeType === DOC_NODE_TYPE) {
114
+ if (container.nodeType === DOCUMENT_NODE) {
115
return container.documentElement;
116
} else {
117
return container.firstChild;
src/renderers/dom/fiber/ReactDOMFiberComponent.js
+3
-4
@@ -25,6 +25,7 @@ var ReactDOMFiberOption = require('ReactDOMFiberOption');
25
var ReactDOMFiberSelect = require('ReactDOMFiberSelect');
26
var ReactDOMFiberTextarea = require('ReactDOMFiberTextarea');
27
var {getCurrentFiberOwnerName} = require('ReactDebugCurrentFiber');
28
+var {DOCUMENT_FRAGMENT_NODE} = require('HTMLNodeType');
29
30
var emptyFunction = require('fbjs/lib/emptyFunction');
31
var invariant = require('fbjs/lib/invariant');
@@ -63,9 +64,6 @@ var {
64
mathml: MATH_NAMESPACE,
65
} = DOMNamespaces;
66
66
-// Node type for document fragments (Node.DOCUMENT_FRAGMENT_NODE).
67
-var DOC_FRAGMENT_TYPE = 11;
68
-
67
function getDeclarationErrorAddendum() {
68
if (__DEV__) {
69
var ownerName = getCurrentFiberOwnerName();
@@ -144,7 +142,8 @@ if (__DEV__) {
142
}
143
144
function ensureListeningTo(rootContainerElement, registrationName) {
147
- var isDocumentFragment = rootContainerElement.nodeType === DOC_FRAGMENT_TYPE;
145
+ var isDocumentFragment = rootContainerElement.nodeType ===
146
+ DOCUMENT_FRAGMENT_NODE;
147
var doc = isDocumentFragment
148
? rootContainerElement
149
: rootContainerElement.ownerDocument;
src/renderers/dom/shared/HTMLNodeType.js
new
+26
@@ -0,0 +1,26 @@
1
+/**
2
+ * Copyright 2013-present, 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 HTMLNodeType
10
+ */
11
+
12
+'use strict';
13
+
14
+/**
15
+ * HTML nodeType values that represent the type of the node
16
+ */
17
+
18
+var HTMLNodeType = {
19
+ ELEMENT_NODE: 1,
20
+ TEXT_NODE: 3,
21
+ COMMENT_NODE: 8,
22
+ DOCUMENT_NODE: 9,
23
+ DOCUMENT_FRAGMENT_NODE: 11,
24
+};
25
+
26
+module.exports = HTMLNodeType;
src/renderers/dom/shared/ReactDOMComponentTree.js
+5
-3
@@ -14,6 +14,7 @@
14
var DOMProperty = require('DOMProperty');
15
var ReactDOMComponentFlags = require('ReactDOMComponentFlags');
16
var {HostComponent, HostText} = require('ReactTypeOfWork');
17
+var {ELEMENT_NODE, COMMENT_NODE} = require('HTMLNodeType');
18
19
var invariant = require('fbjs/lib/invariant');
20
@@ -30,11 +31,12 @@ var internalEventHandlersKey = '__reactEventHandlers$' + randomKey;
31
* Check if a given node should be cached.
32
*/
33
function shouldPrecacheNode(node, nodeID) {
33
- return (node.nodeType === 1 &&
34
+ return (node.nodeType === ELEMENT_NODE &&
35
node.getAttribute(ATTR_NAME) === '' + nodeID) ||
35
- (node.nodeType === 8 &&
36
+ (node.nodeType === COMMENT_NODE &&
37
node.nodeValue === ' react-text: ' + nodeID + ' ') ||
37
- (node.nodeType === 8 && node.nodeValue === ' react-empty: ' + nodeID + ' ');
38
+ (node.nodeType === COMMENT_NODE &&
39
+ node.nodeValue === ' react-empty: ' + nodeID + ' ');
40
}
41
42
/**
src/renderers/dom/shared/ReactInputSelection.js
+2
-1
@@ -12,6 +12,7 @@
12
'use strict';
13
14
var ReactDOMSelection = require('ReactDOMSelection');
15
+var {ELEMENT_NODE} = require('HTMLNodeType');
16
17
var containsNode = require('fbjs/lib/containsNode');
18
var focusNode = require('fbjs/lib/focusNode');
@@ -64,7 +65,7 @@ var ReactInputSelection = {
65
const ancestors = [];
66
let ancestor = priorFocusedElem;
67
while ((ancestor = ancestor.parentNode)) {
67
- if (ancestor.nodeType === 1) {
68
+ if (ancestor.nodeType === ELEMENT_NODE) {
69
ancestors.push({
70
element: ancestor,
71
left: ancestor.scrollLeft,
src/renderers/dom/shared/eventPlugins/SelectEventPlugin.js
+2
-1
@@ -17,6 +17,7 @@ var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
17
var ReactDOMComponentTree = require('ReactDOMComponentTree');
18
var ReactInputSelection = require('ReactInputSelection');
19
var SyntheticEvent = require('SyntheticEvent');
20
+var {DOCUMENT_NODE} = require('HTMLNodeType');
21
22
var getActiveElement = require('fbjs/lib/getActiveElement');
23
var isTextInputElement = require('isTextInputElement');
@@ -148,7 +149,7 @@ var SelectEventPlugin = {
149
) {
150
var doc = nativeEventTarget.window === nativeEventTarget
151
? nativeEventTarget.document
151
- : nativeEventTarget.nodeType === 9
152
+ : nativeEventTarget.nodeType === DOCUMENT_NODE
153
? nativeEventTarget
154
: nativeEventTarget.ownerDocument;
155
if (!doc || !isListeningToAllDependencies('onSelect', doc)) {
src/renderers/dom/shared/findDOMNode.js
+2
-1
@@ -11,6 +11,7 @@
11
*/
12
13
var ReactInstanceMap = require('ReactInstanceMap');
14
+var {ELEMENT_NODE} = require('HTMLNodeType');
15
var {ReactCurrentOwner} = require('ReactGlobalSharedState');
16
17
var getComponentName = require('getComponentName');
@@ -53,7 +54,7 @@ const findDOMNode = function(
54
if (componentOrElement == null) {
55
return null;
56
}
56
- if ((componentOrElement: any).nodeType === 1) {
57
+ if ((componentOrElement: any).nodeType === ELEMENT_NODE) {
58
return (componentOrElement: any);
59
}
60
src/renderers/dom/shared/setTextContent.js
+5
-2
@@ -14,6 +14,7 @@
14
var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
15
var escapeTextContentForBrowser = require('escapeTextContentForBrowser');
16
var setInnerHTML = require('setInnerHTML');
17
+var {TEXT_NODE} = require('HTMLNodeType');
18
19
/**
20
* Set the textContent property of a node, ensuring that whitespace is preserved
@@ -30,7 +31,9 @@ var setTextContent = function(node, text) {
31
var firstChild = node.firstChild;
32
33
if (
33
- firstChild && firstChild === node.lastChild && firstChild.nodeType === 3
34
+ firstChild &&
35
+ firstChild === node.lastChild &&
36
+ firstChild.nodeType === TEXT_NODE
37
) {
38
firstChild.nodeValue = text;
39
return;
@@ -42,7 +45,7 @@ var setTextContent = function(node, text) {
45
if (ExecutionEnvironment.canUseDOM) {
46
if (!('textContent' in document.documentElement)) {
47
setTextContent = function(node, text) {
45
- if (node.nodeType === 3) {
48
+ if (node.nodeType === TEXT_NODE) {
49
node.nodeValue = text;
50
return;
51
}
src/renderers/dom/shared/utils/getEventTarget.js
+3
-1
@@ -11,6 +11,8 @@
11
12
'use strict';
13
14
+var {TEXT_NODE} = require('HTMLNodeType');
15
+
16
/**
17
* Gets the target node from a native browser event by accounting for
18
* inconsistencies in browser DOM APIs.
@@ -28,7 +30,7 @@ function getEventTarget(nativeEvent) {
30
31
// Safari may fire events on text nodes (Node.TEXT_NODE is 3).
32
// @see http://www.quirksmode.org/js/events_properties.html
31
- return target.nodeType === 3 ? target.parentNode : target;
33
+ return target.nodeType === TEXT_NODE ? target.parentNode : target;
34
}
35
36
module.exports = getEventTarget;
src/renderers/dom/shared/utils/getNodeForCharacterOffset.js
+3
-1
@@ -11,6 +11,8 @@
11
12
'use strict';
13
14
+var {TEXT_NODE} = require('HTMLNodeType');
15
+
16
/**
17
* Given any node return the first leaf node without children.
18
*
@@ -53,7 +55,7 @@ function getNodeForCharacterOffset(root, offset) {
55
var nodeEnd = 0;
56
57
while (node) {
56
- if (node.nodeType === 3) {
58
+ if (node.nodeType === TEXT_NODE) {
59
nodeEnd = nodeStart + node.textContent.length;
60
61
if (nodeStart <= offset && nodeEnd >= offset) {
src/renderers/dom/stack/client/DOMLazyTree.js
+3
-6
@@ -13,13 +13,10 @@
13
14
var DOMNamespaces = require('DOMNamespaces');
15
var setInnerHTML = require('setInnerHTML');
16
-
16
+var {DOCUMENT_FRAGMENT_NODE, ELEMENT_NODE} = require('HTMLNodeType');
17
var createMicrosoftUnsafeLocalFunction = require('createMicrosoftUnsafeLocalFunction');
18
var setTextContent = require('setTextContent');
19
20
-var ELEMENT_NODE_TYPE = 1;
21
-var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
22
-
20
/**
21
* In IE (8-11) and Edge, appending nodes with no children is dramatically
22
* faster than appending a full subtree, so we essentially queue up the
@@ -63,8 +60,8 @@ var insertTreeBefore = createMicrosoftUnsafeLocalFunction(
60
// <param> nodes immediately upon insertion into the DOM, so <object>
61
// must also be populated prior to insertion into the DOM.
62
if (
66
- tree.node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE ||
67
- (tree.node.nodeType === ELEMENT_NODE_TYPE &&
63
+ tree.node.nodeType === DOCUMENT_FRAGMENT_NODE ||
64
+ (tree.node.nodeType === ELEMENT_NODE &&
65
tree.node.nodeName.toLowerCase() === 'object' &&
66
(tree.node.namespaceURI == null ||
67
tree.node.namespaceURI === DOMNamespaces.html))
src/renderers/dom/stack/client/ReactDOMComponent.js
+2
-4
@@ -30,6 +30,7 @@ var ReactDOMTextarea = require('ReactDOMTextarea');
30
var ReactInstrumentation = require('ReactInstrumentation');
31
var ReactMultiChild = require('ReactMultiChild');
32
var ReactServerRenderingTransaction = require('ReactServerRenderingTransaction');
33
+var {DOCUMENT_FRAGMENT_NODE} = require('HTMLNodeType');
34
35
var emptyFunction = require('fbjs/lib/emptyFunction');
36
var escapeTextContentForBrowser = require('escapeTextContentForBrowser');
@@ -55,9 +56,6 @@ var RESERVED_PROPS = {
56
suppressContentEditableWarning: null,
57
};
58
58
-// Node type for document fragments (Node.DOCUMENT_FRAGMENT_NODE).
59
-var DOC_FRAGMENT_TYPE = 11;
60
-
59
function getDeclarationErrorAddendum(internalInstance) {
60
if (internalInstance) {
61
var owner = internalInstance._currentElement._owner || null;
@@ -139,7 +137,7 @@ function ensureListeningTo(inst, registrationName, transaction) {
137
}
138
var containerInfo = inst._hostContainerInfo;
139
var isDocumentFragment = containerInfo._node &&
142
- containerInfo._node.nodeType === DOC_FRAGMENT_TYPE;
140
+ containerInfo._node.nodeType === DOCUMENT_FRAGMENT_NODE;
141
var doc = isDocumentFragment
142
? containerInfo._node
143
: containerInfo._ownerDocument;
src/renderers/dom/stack/client/ReactDOMContainerInfo.js
+2
-3
@@ -12,15 +12,14 @@
12
'use strict';
13
14
var validateDOMNesting = require('validateDOMNesting');
15
-
16
-var DOC_NODE_TYPE = 9;
15
+var {DOCUMENT_NODE} = require('HTMLNodeType');
16
17
function ReactDOMContainerInfo(topLevelWrapper, node) {
18
var info = {
19
_topLevelWrapper: topLevelWrapper,
20
_idCounter: 1,
21
_ownerDocument: node
23
- ? node.nodeType === DOC_NODE_TYPE ? node : node.ownerDocument
22
+ ? node.nodeType === DOCUMENT_NODE ? node : node.ownerDocument
23
: null,
24
_node: node,
25
_tag: node ? node.nodeName.toLowerCase() : null,
src/renderers/dom/stack/client/ReactDOMTextComponent.js
+4
-1
@@ -14,6 +14,7 @@
14
var DOMChildrenOperations = require('DOMChildrenOperations');
15
var DOMLazyTree = require('DOMLazyTree');
16
var ReactDOMComponentTree = require('ReactDOMComponentTree');
17
+var {COMMENT_NODE} = require('HTMLNodeType');
18
19
var escapeTextContentForBrowser = require('escapeTextContentForBrowser');
20
var invariant = require('fbjs/lib/invariant');
@@ -159,7 +160,9 @@ Object.assign(ReactDOMTextComponent.prototype, {
160
'Missing closing comment for text component %s',
161
this._domID,
162
);
162
- if (node.nodeType === 8 && node.nodeValue === ' /react-text ') {
163
+ if (
164
+ node.nodeType === COMMENT_NODE && node.nodeValue === ' /react-text '
165
+ ) {
166
this._closingComment = node;
167
break;
168
}
src/renderers/dom/stack/client/ReactMount.js
+14
-13
@@ -33,14 +33,15 @@ var setInnerHTML = require('setInnerHTML');
33
var shouldUpdateReactComponent = require('shouldUpdateReactComponent');
34
var warning = require('fbjs/lib/warning');
35
var validateCallback = require('validateCallback');
36
+var {
37
+ DOCUMENT_NODE,
38
+ ELEMENT_NODE,
39
+ DOCUMENT_FRAGMENT_NODE,
40
+} = require('HTMLNodeType');
41
42
var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
43
var ROOT_ATTR_NAME = DOMProperty.ROOT_ATTRIBUTE_NAME;
44
40
-var ELEMENT_NODE_TYPE = 1;
41
-var DOC_NODE_TYPE = 9;
42
-var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
43
-
45
var instancesByReactRootID = {};
46
47
/**
@@ -69,7 +70,7 @@ function getReactRootElementInContainer(container) {
70
return null;
71
}
72
72
- if (container.nodeType === DOC_NODE_TYPE) {
73
+ if (container.nodeType === DOCUMENT_NODE) {
74
return container.documentElement;
75
} else {
76
return container.firstChild;
@@ -181,7 +182,7 @@ function unmountComponentFromNode(instance, container) {
182
ReactInstrumentation.debugTool.onEndFlush();
183
}
184
184
- if (container.nodeType === DOC_NODE_TYPE) {
185
+ if (container.nodeType === DOCUMENT_NODE) {
186
container = container.documentElement;
187
}
188
@@ -233,9 +234,9 @@ function nodeIsRenderedByOtherInstance(container) {
234
*/
235
function isValidContainer(node) {
236
return !!(node &&
236
- (node.nodeType === ELEMENT_NODE_TYPE ||
237
- node.nodeType === DOC_NODE_TYPE ||
238
- node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE));
237
+ (node.nodeType === ELEMENT_NODE ||
238
+ node.nodeType === DOCUMENT_NODE ||
239
+ node.nodeType === DOCUMENT_FRAGMENT_NODE));
240
}
241
242
/**
@@ -638,7 +639,7 @@ var ReactMount = {
639
var containerHasNonRootReactChild = hasNonRootReactChild(container);
640
641
// Check if the container itself is a React root node.
641
- var isContainerReactRoot = container.nodeType === 1 &&
642
+ var isContainerReactRoot = container.nodeType === ELEMENT_NODE &&
643
container.hasAttribute(ROOT_ATTR_NAME);
644
645
if (__DEV__) {
@@ -701,7 +702,7 @@ var ReactMount = {
702
// insert markup into a <div> or <iframe> depending on the container
703
// type to perform the same normalizations before comparing.
704
var normalizer;
704
- if (container.nodeType === ELEMENT_NODE_TYPE) {
705
+ if (container.nodeType === ELEMENT_NODE) {
706
normalizer = document.createElement('div');
707
normalizer.innerHTML = markup;
708
normalizedMarkup = normalizer.innerHTML;
@@ -721,7 +722,7 @@ var ReactMount = {
722
rootMarkup.substring(diffIndex - 20, diffIndex + 20);
723
724
invariant(
724
- container.nodeType !== DOC_NODE_TYPE,
725
+ container.nodeType !== DOCUMENT_NODE,
726
"You're trying to render a component to the document using " +
727
'server rendering but the checksum was invalid. This usually ' +
728
'means you rendered a different component type or props on ' +
@@ -751,7 +752,7 @@ var ReactMount = {
752
}
753
754
invariant(
754
- container.nodeType !== DOC_NODE_TYPE,
755
+ container.nodeType !== DOCUMENT_NODE,
756
"You're trying to render a component to the document but " +
757
"you didn't use server rendering. We can't do this " +
758
'without using server rendering due to cross-browser quirks. ' +