corrections
Andreas Svensson committed
Dec 3, 2013 at 09:39 UTC
27b8e7a6f4987945d317ba20abdcad8252115566
2 files changed
+20
-31
src/core/__tests__/ReactDOMComponent-test.js
+1
-1
@@ -187,7 +187,7 @@ describe('ReactDOMComponent', function() {
187
var stub = ReactTestUtils.renderIntoDocument(<div value="" />);
188
189
var node = stub.getDOMNode();
190
- var nodeValue = node.value;
190
+ var nodeValue = ''; // node.value always returns undefined
191
var nodeValueSetter = mocks.getMockFunction();
192
Object.defineProperty(node, 'value', {
193
get: function() {
src/dom/DOMPropertyOperations.js
+19
-30
@@ -24,6 +24,12 @@ var DOMProperty = require('DOMProperty');
24
var escapeTextForBrowser = require('escapeTextForBrowser');
25
var memoizeStringOnly = require('memoizeStringOnly');
26
27
+function shouldIgnoreValue(name, value) {
28
+ return value == null ||
29
+ DOMProperty.hasBooleanValue[name] && !value ||
30
+ DOMProperty.hasPositiveNumericValue[name] && (isNaN(value) || value < 1);
31
+};
32
+
33
var processAttributeNameAndPrefix = memoizeStringOnly(function(name) {
34
return escapeTextForBrowser(name) + '="';
35
});
@@ -74,10 +80,7 @@ var DOMPropertyOperations = {
80
*/
81
createMarkupForProperty: function(name, value) {
82
if (DOMProperty.isStandardName[name]) {
77
- if (value == null ||
78
- DOMProperty.hasBooleanValue[name] && !value ||
79
- DOMProperty.hasPositiveNumericValue[name] &&
80
- (isNaN(+value) || +value < 1)) {
83
+ if (shouldIgnoreValue(name, value)) {
84
return '';
85
}
86
var attributeName = DOMProperty.getAttributeName[name];
@@ -107,32 +110,14 @@ var DOMPropertyOperations = {
110
var mutationMethod = DOMProperty.getMutationMethod[name];
111
if (mutationMethod) {
112
mutationMethod(node, value);
113
+ } else if (shouldIgnoreValue(name, value)) {
114
+ this.deleteValueForProperty(node, name);
115
+ } else if (DOMProperty.mustUseAttribute[name]) {
116
+ node.setAttribute(DOMProperty.getAttributeName[name], '' + value);
117
} else {
111
- if (value == null ||
112
- DOMProperty.hasBooleanValue[name] && !value ||
113
- DOMProperty.hasPositiveNumericValue[name] &&
114
- (isNaN(+value) || +value < 1)) {
115
- if (DOMProperty.mustUseAttribute[name]) {
116
- node.removeAttribute(DOMProperty.getAttributeName[name]);
117
- } else {
118
- var propName = DOMProperty.getPropertyName[name];
119
- value = DOMProperty.getDefaultValueForProperty(
120
- node.nodeName,
121
- name
122
- );
123
- if (!DOMProperty.hasSideEffects[name] ||
124
- node[propName] !== value) {
125
- node[propName] = value;
126
- }
127
- }
128
- } else if (DOMProperty.mustUseAttribute[name]) {
129
- node.setAttribute(DOMProperty.getAttributeName[name], '' + value);
130
- } else {
131
- var propName = DOMProperty.getPropertyName[name];
132
- if (!DOMProperty.hasSideEffects[name] ||
133
- node[propName] !== value) {
134
- node[propName] = value;
135
- }
118
+ var propName = DOMProperty.getPropertyName[name];
119
+ if (!DOMProperty.hasSideEffects[name] || node[propName] !== value) {
120
+ node[propName] = value;
121
}
122
}
123
} else if (DOMProperty.isCustomAttribute(name)) {
@@ -161,10 +146,14 @@ var DOMPropertyOperations = {
146
node.removeAttribute(DOMProperty.getAttributeName[name]);
147
} else {
148
var propName = DOMProperty.getPropertyName[name];
164
- node[propName] = DOMProperty.getDefaultValueForProperty(
149
+ var defaultValue = DOMProperty.getDefaultValueForProperty(
150
node.nodeName,
151
name
152
);
153
+ if (!DOMProperty.hasSideEffects[name] ||
154
+ node[propName] !== defaultValue) {
155
+ node[propName] = defaultValue;
156
+ }
157
}
158
} else if (DOMProperty.isCustomAttribute(name)) {
159
node.removeAttribute(name);