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

Function trackValueOnNode

code/composition/public/app.js:3901–3946  ·  view source on GitHub ↗
(node)

Source from the content-addressed store, hash-verified

3899}
3900
3901function trackValueOnNode(node) {
3902 var valueField = isCheckable(node) ? 'checked' : 'value';
3903 var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);
3904
3905 var currentValue = '' + node[valueField];
3906
3907 // if someone has already defined a value or Safari, then bail
3908 // and don't track value will cause over reporting of changes,
3909 // but it's better then a hard failure
3910 // (needed for certain tests that spyOn input values and Safari)
3911 if (node.hasOwnProperty(valueField) || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {
3912 return;
3913 }
3914
3915 Object.defineProperty(node, valueField, {
3916 configurable: true,
3917 get: function () {
3918 return descriptor.get.call(this);
3919 },
3920 set: function (value) {
3921 currentValue = '' + value;
3922 descriptor.set.call(this, value);
3923 }
3924 });
3925 // We could've passed this the first time
3926 // but it triggers a bug in IE11 and Edge 14/15.
3927 // Calling defineProperty() again should be equivalent.
3928 // https://github.com/facebook/react/issues/11768
3929 Object.defineProperty(node, valueField, {
3930 enumerable: descriptor.enumerable
3931 });
3932
3933 var tracker = {
3934 getValue: function () {
3935 return currentValue;
3936 },
3937 setValue: function (value) {
3938 currentValue = '' + value;
3939 },
3940 stopTracking: function () {
3941 detachTracker(node);
3942 delete node[valueField];
3943 }
3944 };
3945 return tracker;
3946}
3947
3948function track(node) {
3949 if (getTracker(node)) {

Callers 1

trackFunction · 0.70

Calls 2

isCheckableFunction · 0.70
detachTrackerFunction · 0.70

Tested by

no test coverage detected