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

Function trackValueOnNode

code/communication/public/app.js:3798–3843  ·  view source on GitHub ↗
(node)

Source from the content-addressed store, hash-verified

3796}
3797
3798function 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
3845function track(node) {
3846 if (getTracker(node)) {

Callers 1

trackFunction · 0.70

Calls 2

isCheckableFunction · 0.70
detachTrackerFunction · 0.70

Tested by

no test coverage detected