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

Function trackValueOnNode

code/dependency-injection/public/app.js:3856–3901  ·  view source on GitHub ↗
(node)

Source from the content-addressed store, hash-verified

3854}
3855
3856function trackValueOnNode(node) {
3857 var valueField = isCheckable(node) ? 'checked' : 'value';
3858 var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);
3859
3860 var currentValue = '' + node[valueField];
3861
3862 // if someone has already defined a value or Safari, then bail
3863 // and don't track value will cause over reporting of changes,
3864 // but it's better then a hard failure
3865 // (needed for certain tests that spyOn input values and Safari)
3866 if (node.hasOwnProperty(valueField) || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {
3867 return;
3868 }
3869
3870 Object.defineProperty(node, valueField, {
3871 configurable: true,
3872 get: function () {
3873 return descriptor.get.call(this);
3874 },
3875 set: function (value) {
3876 currentValue = '' + value;
3877 descriptor.set.call(this, value);
3878 }
3879 });
3880 // We could've passed this the first time
3881 // but it triggers a bug in IE11 and Edge 14/15.
3882 // Calling defineProperty() again should be equivalent.
3883 // https://github.com/facebook/react/issues/11768
3884 Object.defineProperty(node, valueField, {
3885 enumerable: descriptor.enumerable
3886 });
3887
3888 var tracker = {
3889 getValue: function () {
3890 return currentValue;
3891 },
3892 setValue: function (value) {
3893 currentValue = '' + value;
3894 },
3895 stopTracking: function () {
3896 detachTracker(node);
3897 delete node[valueField];
3898 }
3899 };
3900 return tracker;
3901}
3902
3903function track(node) {
3904 if (getTracker(node)) {

Callers 1

trackFunction · 0.70

Calls 2

isCheckableFunction · 0.70
detachTrackerFunction · 0.70

Tested by

no test coverage detected