(node)
| 3899 | } |
| 3900 | |
| 3901 | function trackValueOnNode(node) { |
| 3902 | var valueField = isCheckable(node) ? 'checked' : 'value'; |
| 3903 | var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField); |
| 3904 | |
| 3905 | var currentValue = '' + node[valueField]; |
| 3906 | |
| 3907 | // if someone has already defined a value or Safari, then bail |
| 3908 | // and don't track value will cause over reporting of changes, |
| 3909 | // but it's better then a hard failure |
| 3910 | // (needed for certain tests that spyOn input values and Safari) |
| 3911 | if (node.hasOwnProperty(valueField) || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') { |
| 3912 | return; |
| 3913 | } |
| 3914 | |
| 3915 | Object.defineProperty(node, valueField, { |
| 3916 | configurable: true, |
| 3917 | get: function () { |
| 3918 | return descriptor.get.call(this); |
| 3919 | }, |
| 3920 | set: function (value) { |
| 3921 | currentValue = '' + value; |
| 3922 | descriptor.set.call(this, value); |
| 3923 | } |
| 3924 | }); |
| 3925 | // We could've passed this the first time |
| 3926 | // but it triggers a bug in IE11 and Edge 14/15. |
| 3927 | // Calling defineProperty() again should be equivalent. |
| 3928 | // https://github.com/facebook/react/issues/11768 |
| 3929 | Object.defineProperty(node, valueField, { |
| 3930 | enumerable: descriptor.enumerable |
| 3931 | }); |
| 3932 | |
| 3933 | var tracker = { |
| 3934 | getValue: function () { |
| 3935 | return currentValue; |
| 3936 | }, |
| 3937 | setValue: function (value) { |
| 3938 | currentValue = '' + value; |
| 3939 | }, |
| 3940 | stopTracking: function () { |
| 3941 | detachTracker(node); |
| 3942 | delete node[valueField]; |
| 3943 | } |
| 3944 | }; |
| 3945 | return tracker; |
| 3946 | } |
| 3947 | |
| 3948 | function track(node) { |
| 3949 | if (getTracker(node)) { |
no test coverage detected