(node)
| 3796 | } |
| 3797 | |
| 3798 | function trackValueOnNode(node) { |
| 3799 | var valueField = isCheckable(node) ? 'checked' : 'value'; |
| 3800 | var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField); |
| 3801 | |
| 3802 | var currentValue = '' + node[valueField]; |
| 3803 | |
| 3804 | // if someone has already defined a value or Safari, then bail |
| 3805 | // and don't track value will cause over reporting of changes, |
| 3806 | // but it's better then a hard failure |
| 3807 | // (needed for certain tests that spyOn input values and Safari) |
| 3808 | if (node.hasOwnProperty(valueField) || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') { |
| 3809 | return; |
| 3810 | } |
| 3811 | |
| 3812 | Object.defineProperty(node, valueField, { |
| 3813 | configurable: true, |
| 3814 | get: function () { |
| 3815 | return descriptor.get.call(this); |
| 3816 | }, |
| 3817 | set: function (value) { |
| 3818 | currentValue = '' + value; |
| 3819 | descriptor.set.call(this, value); |
| 3820 | } |
| 3821 | }); |
| 3822 | // We could've passed this the first time |
| 3823 | // but it triggers a bug in IE11 and Edge 14/15. |
| 3824 | // Calling defineProperty() again should be equivalent. |
| 3825 | // https://github.com/facebook/react/issues/11768 |
| 3826 | Object.defineProperty(node, valueField, { |
| 3827 | enumerable: descriptor.enumerable |
| 3828 | }); |
| 3829 | |
| 3830 | var tracker = { |
| 3831 | getValue: function () { |
| 3832 | return currentValue; |
| 3833 | }, |
| 3834 | setValue: function (value) { |
| 3835 | currentValue = '' + value; |
| 3836 | }, |
| 3837 | stopTracking: function () { |
| 3838 | detachTracker(node); |
| 3839 | delete node[valueField]; |
| 3840 | } |
| 3841 | }; |
| 3842 | return tracker; |
| 3843 | } |
| 3844 | |
| 3845 | function track(node) { |
| 3846 | if (getTracker(node)) { |
no test coverage detected