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

Function trackValueOnNode

code/styling/public/app.js:3763–3808  ·  view source on GitHub ↗
(node)

Source from the content-addressed store, hash-verified

3761}
3762
3763function trackValueOnNode(node) {
3764 var valueField = isCheckable(node) ? 'checked' : 'value';
3765 var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);
3766
3767 var currentValue = '' + node[valueField];
3768
3769 // if someone has already defined a value or Safari, then bail
3770 // and don't track value will cause over reporting of changes,
3771 // but it's better then a hard failure
3772 // (needed for certain tests that spyOn input values and Safari)
3773 if (node.hasOwnProperty(valueField) || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {
3774 return;
3775 }
3776
3777 Object.defineProperty(node, valueField, {
3778 configurable: true,
3779 get: function () {
3780 return descriptor.get.call(this);
3781 },
3782 set: function (value) {
3783 currentValue = '' + value;
3784 descriptor.set.call(this, value);
3785 }
3786 });
3787 // We could've passed this the first time
3788 // but it triggers a bug in IE11 and Edge 14/15.
3789 // Calling defineProperty() again should be equivalent.
3790 // https://github.com/facebook/react/issues/11768
3791 Object.defineProperty(node, valueField, {
3792 enumerable: descriptor.enumerable
3793 });
3794
3795 var tracker = {
3796 getValue: function () {
3797 return currentValue;
3798 },
3799 setValue: function (value) {
3800 currentValue = '' + value;
3801 },
3802 stopTracking: function () {
3803 detachTracker(node);
3804 delete node[valueField];
3805 }
3806 };
3807 return tracker;
3808}
3809
3810function track(node) {
3811 if (getTracker(node)) {

Callers 1

trackFunction · 0.70

Calls 2

isCheckableFunction · 0.70
detachTrackerFunction · 0.70

Tested by

no test coverage detected