Skip to content

Commit ac9d698

Browse files
Sung Won Chotrueadm
Sung Won Cho
authored andcommitted
Make nodeType into constant for readability and reuse (facebook#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
1 parent 7bf686b commit ac9d698

16 files changed

+89
-53
lines changed

eslint-rules/__tests__/no-primitive-constructors-test.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@ ruleTester.run('eslint-rules/no-primitive-constructors', rule, {
3434
code: 'String(obj)',
3535
errors: [
3636
{
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',
3941
},
4042
],
4143
},

src/renderers/dom/fiber/ReactDOMFiber.js

+9-10
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ var ReactInstanceMap = require('ReactInstanceMap');
3030
var ReactPortal = require('ReactPortal');
3131
var {isValidElement} = require('react');
3232
var {injectInternals} = require('ReactFiberDevToolsHook');
33+
var {
34+
ELEMENT_NODE,
35+
DOCUMENT_NODE,
36+
DOCUMENT_FRAGMENT_NODE,
37+
} = require('HTMLNodeType');
3338

3439
var findDOMNode = require('findDOMNode');
3540
var invariant = require('fbjs/lib/invariant');
@@ -52,8 +57,6 @@ if (__DEV__) {
5257
var {updatedAncestorInfo} = validateDOMNesting;
5358
}
5459

55-
const DOCUMENT_NODE = 9;
56-
5760
ReactDOMInjection.inject();
5861
ReactControlledComponent.injection.injectFiberControlledHostComponent(
5962
ReactDOMFiberComponent,
@@ -83,10 +86,6 @@ type HostContext = HostContextDev | HostContextProd;
8386
let eventsEnabled: ?boolean = null;
8487
let selectionInformation: ?mixed = null;
8588

86-
var ELEMENT_NODE_TYPE = 1;
87-
var DOC_NODE_TYPE = 9;
88-
var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
89-
9089
/**
9190
* True if the supplied DOM node is a valid node element.
9291
*
@@ -96,9 +95,9 @@ var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
9695
*/
9796
function isValidContainer(node) {
9897
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));
102101
}
103102

104103
function validateContainer(container) {
@@ -112,7 +111,7 @@ function getReactRootElementInContainer(container: any) {
112111
return null;
113112
}
114113

115-
if (container.nodeType === DOC_NODE_TYPE) {
114+
if (container.nodeType === DOCUMENT_NODE) {
116115
return container.documentElement;
117116
} else {
118117
return container.firstChild;

src/renderers/dom/fiber/ReactDOMFiberComponent.js

+3-4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ var ReactDOMFiberOption = require('ReactDOMFiberOption');
2525
var ReactDOMFiberSelect = require('ReactDOMFiberSelect');
2626
var ReactDOMFiberTextarea = require('ReactDOMFiberTextarea');
2727
var {getCurrentFiberOwnerName} = require('ReactDebugCurrentFiber');
28+
var {DOCUMENT_FRAGMENT_NODE} = require('HTMLNodeType');
2829

2930
var emptyFunction = require('fbjs/lib/emptyFunction');
3031
var invariant = require('fbjs/lib/invariant');
@@ -63,9 +64,6 @@ var {
6364
mathml: MATH_NAMESPACE,
6465
} = DOMNamespaces;
6566

66-
// Node type for document fragments (Node.DOCUMENT_FRAGMENT_NODE).
67-
var DOC_FRAGMENT_TYPE = 11;
68-
6967
function getDeclarationErrorAddendum() {
7068
if (__DEV__) {
7169
var ownerName = getCurrentFiberOwnerName();
@@ -144,7 +142,8 @@ if (__DEV__) {
144142
}
145143

146144
function ensureListeningTo(rootContainerElement, registrationName) {
147-
var isDocumentFragment = rootContainerElement.nodeType === DOC_FRAGMENT_TYPE;
145+
var isDocumentFragment = rootContainerElement.nodeType ===
146+
DOCUMENT_FRAGMENT_NODE;
148147
var doc = isDocumentFragment
149148
? rootContainerElement
150149
: rootContainerElement.ownerDocument;
+26
Original file line numberDiff line numberDiff line change
@@ -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
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
var DOMProperty = require('DOMProperty');
1515
var ReactDOMComponentFlags = require('ReactDOMComponentFlags');
1616
var {HostComponent, HostText} = require('ReactTypeOfWork');
17+
var {ELEMENT_NODE, COMMENT_NODE} = require('HTMLNodeType');
1718

1819
var invariant = require('fbjs/lib/invariant');
1920

@@ -30,11 +31,12 @@ var internalEventHandlersKey = '__reactEventHandlers$' + randomKey;
3031
* Check if a given node should be cached.
3132
*/
3233
function shouldPrecacheNode(node, nodeID) {
33-
return (node.nodeType === 1 &&
34+
return (node.nodeType === ELEMENT_NODE &&
3435
node.getAttribute(ATTR_NAME) === '' + nodeID) ||
35-
(node.nodeType === 8 &&
36+
(node.nodeType === COMMENT_NODE &&
3637
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 + ' ');
3840
}
3941

4042
/**

src/renderers/dom/shared/ReactInputSelection.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
'use strict';
1313

1414
var ReactDOMSelection = require('ReactDOMSelection');
15+
var {ELEMENT_NODE} = require('HTMLNodeType');
1516

1617
var containsNode = require('fbjs/lib/containsNode');
1718
var focusNode = require('fbjs/lib/focusNode');
@@ -64,7 +65,7 @@ var ReactInputSelection = {
6465
const ancestors = [];
6566
let ancestor = priorFocusedElem;
6667
while ((ancestor = ancestor.parentNode)) {
67-
if (ancestor.nodeType === 1) {
68+
if (ancestor.nodeType === ELEMENT_NODE) {
6869
ancestors.push({
6970
element: ancestor,
7071
left: ancestor.scrollLeft,

src/renderers/dom/shared/eventPlugins/SelectEventPlugin.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ var ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
1717
var ReactDOMComponentTree = require('ReactDOMComponentTree');
1818
var ReactInputSelection = require('ReactInputSelection');
1919
var SyntheticEvent = require('SyntheticEvent');
20+
var {DOCUMENT_NODE} = require('HTMLNodeType');
2021

2122
var getActiveElement = require('fbjs/lib/getActiveElement');
2223
var isTextInputElement = require('isTextInputElement');
@@ -148,7 +149,7 @@ var SelectEventPlugin = {
148149
) {
149150
var doc = nativeEventTarget.window === nativeEventTarget
150151
? nativeEventTarget.document
151-
: nativeEventTarget.nodeType === 9
152+
: nativeEventTarget.nodeType === DOCUMENT_NODE
152153
? nativeEventTarget
153154
: nativeEventTarget.ownerDocument;
154155
if (!doc || !isListeningToAllDependencies('onSelect', doc)) {

src/renderers/dom/shared/findDOMNode.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
*/
1212

1313
var ReactInstanceMap = require('ReactInstanceMap');
14+
var {ELEMENT_NODE} = require('HTMLNodeType');
1415
var {ReactCurrentOwner} = require('ReactGlobalSharedState');
1516

1617
var getComponentName = require('getComponentName');
@@ -53,7 +54,7 @@ const findDOMNode = function(
5354
if (componentOrElement == null) {
5455
return null;
5556
}
56-
if ((componentOrElement: any).nodeType === 1) {
57+
if ((componentOrElement: any).nodeType === ELEMENT_NODE) {
5758
return (componentOrElement: any);
5859
}
5960

src/renderers/dom/shared/setTextContent.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment');
1515
var escapeTextContentForBrowser = require('escapeTextContentForBrowser');
1616
var setInnerHTML = require('setInnerHTML');
17+
var {TEXT_NODE} = require('HTMLNodeType');
1718

1819
/**
1920
* Set the textContent property of a node, ensuring that whitespace is preserved
@@ -30,7 +31,9 @@ var setTextContent = function(node, text) {
3031
var firstChild = node.firstChild;
3132

3233
if (
33-
firstChild && firstChild === node.lastChild && firstChild.nodeType === 3
34+
firstChild &&
35+
firstChild === node.lastChild &&
36+
firstChild.nodeType === TEXT_NODE
3437
) {
3538
firstChild.nodeValue = text;
3639
return;
@@ -42,7 +45,7 @@ var setTextContent = function(node, text) {
4245
if (ExecutionEnvironment.canUseDOM) {
4346
if (!('textContent' in document.documentElement)) {
4447
setTextContent = function(node, text) {
45-
if (node.nodeType === 3) {
48+
if (node.nodeType === TEXT_NODE) {
4649
node.nodeValue = text;
4750
return;
4851
}

src/renderers/dom/shared/utils/getEventTarget.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
'use strict';
1313

14+
var {TEXT_NODE} = require('HTMLNodeType');
15+
1416
/**
1517
* Gets the target node from a native browser event by accounting for
1618
* inconsistencies in browser DOM APIs.
@@ -28,7 +30,7 @@ function getEventTarget(nativeEvent) {
2830

2931
// Safari may fire events on text nodes (Node.TEXT_NODE is 3).
3032
// @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;
3234
}
3335

3436
module.exports = getEventTarget;

src/renderers/dom/shared/utils/getNodeForCharacterOffset.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
'use strict';
1313

14+
var {TEXT_NODE} = require('HTMLNodeType');
15+
1416
/**
1517
* Given any node return the first leaf node without children.
1618
*
@@ -53,7 +55,7 @@ function getNodeForCharacterOffset(root, offset) {
5355
var nodeEnd = 0;
5456

5557
while (node) {
56-
if (node.nodeType === 3) {
58+
if (node.nodeType === TEXT_NODE) {
5759
nodeEnd = nodeStart + node.textContent.length;
5860

5961
if (nodeStart <= offset && nodeEnd >= offset) {

src/renderers/dom/stack/client/DOMLazyTree.js

+3-6
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,10 @@
1313

1414
var DOMNamespaces = require('DOMNamespaces');
1515
var setInnerHTML = require('setInnerHTML');
16-
16+
var {DOCUMENT_FRAGMENT_NODE, ELEMENT_NODE} = require('HTMLNodeType');
1717
var createMicrosoftUnsafeLocalFunction = require('createMicrosoftUnsafeLocalFunction');
1818
var setTextContent = require('setTextContent');
1919

20-
var ELEMENT_NODE_TYPE = 1;
21-
var DOCUMENT_FRAGMENT_NODE_TYPE = 11;
22-
2320
/**
2421
* In IE (8-11) and Edge, appending nodes with no children is dramatically
2522
* faster than appending a full subtree, so we essentially queue up the
@@ -63,8 +60,8 @@ var insertTreeBefore = createMicrosoftUnsafeLocalFunction(
6360
// <param> nodes immediately upon insertion into the DOM, so <object>
6461
// must also be populated prior to insertion into the DOM.
6562
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 &&
6865
tree.node.nodeName.toLowerCase() === 'object' &&
6966
(tree.node.namespaceURI == null ||
7067
tree.node.namespaceURI === DOMNamespaces.html))

src/renderers/dom/stack/client/ReactDOMComponent.js

+2-4
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ var ReactDOMTextarea = require('ReactDOMTextarea');
3030
var ReactInstrumentation = require('ReactInstrumentation');
3131
var ReactMultiChild = require('ReactMultiChild');
3232
var ReactServerRenderingTransaction = require('ReactServerRenderingTransaction');
33+
var {DOCUMENT_FRAGMENT_NODE} = require('HTMLNodeType');
3334

3435
var emptyFunction = require('fbjs/lib/emptyFunction');
3536
var escapeTextContentForBrowser = require('escapeTextContentForBrowser');
@@ -55,9 +56,6 @@ var RESERVED_PROPS = {
5556
suppressContentEditableWarning: null,
5657
};
5758

58-
// Node type for document fragments (Node.DOCUMENT_FRAGMENT_NODE).
59-
var DOC_FRAGMENT_TYPE = 11;
60-
6159
function getDeclarationErrorAddendum(internalInstance) {
6260
if (internalInstance) {
6361
var owner = internalInstance._currentElement._owner || null;
@@ -139,7 +137,7 @@ function ensureListeningTo(inst, registrationName, transaction) {
139137
}
140138
var containerInfo = inst._hostContainerInfo;
141139
var isDocumentFragment = containerInfo._node &&
142-
containerInfo._node.nodeType === DOC_FRAGMENT_TYPE;
140+
containerInfo._node.nodeType === DOCUMENT_FRAGMENT_NODE;
143141
var doc = isDocumentFragment
144142
? containerInfo._node
145143
: containerInfo._ownerDocument;

src/renderers/dom/stack/client/ReactDOMContainerInfo.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,14 @@
1212
'use strict';
1313

1414
var validateDOMNesting = require('validateDOMNesting');
15-
16-
var DOC_NODE_TYPE = 9;
15+
var {DOCUMENT_NODE} = require('HTMLNodeType');
1716

1817
function ReactDOMContainerInfo(topLevelWrapper, node) {
1918
var info = {
2019
_topLevelWrapper: topLevelWrapper,
2120
_idCounter: 1,
2221
_ownerDocument: node
23-
? node.nodeType === DOC_NODE_TYPE ? node : node.ownerDocument
22+
? node.nodeType === DOCUMENT_NODE ? node : node.ownerDocument
2423
: null,
2524
_node: node,
2625
_tag: node ? node.nodeName.toLowerCase() : null,

src/renderers/dom/stack/client/ReactDOMTextComponent.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
var DOMChildrenOperations = require('DOMChildrenOperations');
1515
var DOMLazyTree = require('DOMLazyTree');
1616
var ReactDOMComponentTree = require('ReactDOMComponentTree');
17+
var {COMMENT_NODE} = require('HTMLNodeType');
1718

1819
var escapeTextContentForBrowser = require('escapeTextContentForBrowser');
1920
var invariant = require('fbjs/lib/invariant');
@@ -159,7 +160,9 @@ Object.assign(ReactDOMTextComponent.prototype, {
159160
'Missing closing comment for text component %s',
160161
this._domID,
161162
);
162-
if (node.nodeType === 8 && node.nodeValue === ' /react-text ') {
163+
if (
164+
node.nodeType === COMMENT_NODE && node.nodeValue === ' /react-text '
165+
) {
163166
this._closingComment = node;
164167
break;
165168
}

0 commit comments

Comments
 (0)