(node)
| 1834 | } |
| 1835 | |
| 1836 | function trackValueOnNode(node) { |
| 1837 | var valueField = isCheckable(node) ? 'checked' : 'value'; |
| 1838 | var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField); |
| 1839 | var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail |
| 1840 | // and don't track value will cause over reporting of changes, |
| 1841 | // but it's better then a hard failure |
| 1842 | // (needed for certain tests that spyOn input values and Safari) |
| 1843 | |
| 1844 | if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') { |
| 1845 | return; |
| 1846 | } |
| 1847 | |
| 1848 | var get = descriptor.get, |
| 1849 | set = descriptor.set; |
| 1850 | Object.defineProperty(node, valueField, { |
| 1851 | configurable: true, |
| 1852 | get: function () { |
| 1853 | return get.call(this); |
| 1854 | }, |
| 1855 | set: function (value) { |
| 1856 | currentValue = '' + value; |
| 1857 | set.call(this, value); |
| 1858 | } |
| 1859 | }); // We could've passed this the first time |
| 1860 | // but it triggers a bug in IE11 and Edge 14/15. |
| 1861 | // Calling defineProperty() again should be equivalent. |
| 1862 | // https://github.com/facebook/react/issues/11768 |
| 1863 | |
| 1864 | Object.defineProperty(node, valueField, { |
| 1865 | enumerable: descriptor.enumerable |
| 1866 | }); |
| 1867 | var tracker = { |
| 1868 | getValue: function () { |
| 1869 | return currentValue; |
| 1870 | }, |
| 1871 | setValue: function (value) { |
| 1872 | currentValue = '' + value; |
| 1873 | }, |
| 1874 | stopTracking: function () { |
| 1875 | detachTracker(node); |
| 1876 | delete node[valueField]; |
| 1877 | } |
| 1878 | }; |
| 1879 | return tracker; |
| 1880 | } |
| 1881 | |
| 1882 | function track(node) { |
| 1883 | if (getTracker(node)) { |
no test coverage detected