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

Function trackValueOnNode

code/third-party/public/app.js:2996–3041  ·  view source on GitHub ↗
(node)

Source from the content-addressed store, hash-verified

2994}
2995
2996function trackValueOnNode(node) {
2997 var valueField = isCheckable(node) ? 'checked' : 'value';
2998 var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);
2999
3000 var currentValue = '' + node[valueField];
3001
3002 // if someone has already defined a value or Safari, then bail
3003 // and don't track value will cause over reporting of changes,
3004 // but it's better then a hard failure
3005 // (needed for certain tests that spyOn input values and Safari)
3006 if (node.hasOwnProperty(valueField) || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {
3007 return;
3008 }
3009
3010 Object.defineProperty(node, valueField, {
3011 configurable: true,
3012 get: function () {
3013 return descriptor.get.call(this);
3014 },
3015 set: function (value) {
3016 currentValue = '' + value;
3017 descriptor.set.call(this, value);
3018 }
3019 });
3020 // We could've passed this the first time
3021 // but it triggers a bug in IE11 and Edge 14/15.
3022 // Calling defineProperty() again should be equivalent.
3023 // https://github.com/facebook/react/issues/11768
3024 Object.defineProperty(node, valueField, {
3025 enumerable: descriptor.enumerable
3026 });
3027
3028 var tracker = {
3029 getValue: function () {
3030 return currentValue;
3031 },
3032 setValue: function (value) {
3033 currentValue = '' + value;
3034 },
3035 stopTracking: function () {
3036 detachTracker(node);
3037 delete node[valueField];
3038 }
3039 };
3040 return tracker;
3041}
3042
3043function track(node) {
3044 if (getTracker(node)) {

Callers 1

trackFunction · 0.70

Calls 2

isCheckableFunction · 0.70
detachTrackerFunction · 0.70

Tested by

no test coverage detected