MCPcopy Create free account
hub / github.com/microsoft/SandDance / trackValueOnNode

Function trackValueOnNode

docs/external/js/react-dom.development.js:1836–1880  ·  view source on GitHub ↗
(node)

Source from the content-addressed store, hash-verified

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)) {

Callers 1

trackFunction · 0.85

Calls 2

isCheckableFunction · 0.85
detachTrackerFunction · 0.85

Tested by

no test coverage detected