MCPcopy Create free account
hub / github.com/krasimir/react-in-patterns / trackValueOnNode

Function trackValueOnNode

code/redux/public/app.js:4014–4059  ·  view source on GitHub ↗
(node)

Source from the content-addressed store, hash-verified

4012}
4013
4014function trackValueOnNode(node) {
4015 var valueField = isCheckable(node) ? 'checked' : 'value';
4016 var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);
4017
4018 var currentValue = '' + node[valueField];
4019
4020 // if someone has already defined a value or Safari, then bail
4021 // and don't track value will cause over reporting of changes,
4022 // but it's better then a hard failure
4023 // (needed for certain tests that spyOn input values and Safari)
4024 if (node.hasOwnProperty(valueField) || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {
4025 return;
4026 }
4027
4028 Object.defineProperty(node, valueField, {
4029 configurable: true,
4030 get: function () {
4031 return descriptor.get.call(this);
4032 },
4033 set: function (value) {
4034 currentValue = '' + value;
4035 descriptor.set.call(this, value);
4036 }
4037 });
4038 // We could've passed this the first time
4039 // but it triggers a bug in IE11 and Edge 14/15.
4040 // Calling defineProperty() again should be equivalent.
4041 // https://github.com/facebook/react/issues/11768
4042 Object.defineProperty(node, valueField, {
4043 enumerable: descriptor.enumerable
4044 });
4045
4046 var tracker = {
4047 getValue: function () {
4048 return currentValue;
4049 },
4050 setValue: function (value) {
4051 currentValue = '' + value;
4052 },
4053 stopTracking: function () {
4054 detachTracker(node);
4055 delete node[valueField];
4056 }
4057 };
4058 return tracker;
4059}
4060
4061function track(node) {
4062 if (getTracker(node)) {

Callers 1

trackFunction · 0.70

Calls 2

isCheckableFunction · 0.70
detachTrackerFunction · 0.70

Tested by

no test coverage detected