migrated knockout asset to bower
[openemr.git] / public / assets / knockout-2-2-1 / src / subscribables / extenders.js
blob962c9f70d056fbb301d8ab553ba6a3fe60f5e855
1 ko.extenders = {
2     'throttle': function(target, timeout) {
3         // Throttling means two things:
5         // (1) For dependent observables, we throttle *evaluations* so that, no matter how fast its dependencies
6         //     notify updates, the target doesn't re-evaluate (and hence doesn't notify) faster than a certain rate
7         target['throttleEvaluation'] = timeout;
9         // (2) For writable targets (observables, or writable dependent observables), we throttle *writes*
10         //     so the target cannot change value synchronously or faster than a certain rate
11         var writeTimeoutInstance = null;
12         return ko.dependentObservable({
13             'read': target,
14             'write': function(value) {
15                 clearTimeout(writeTimeoutInstance);
16                 writeTimeoutInstance = setTimeout(function() {
17                     target(value);
18                 }, timeout);
19             }
20         });
21     },
23     'notify': function(target, notifyWhen) {
24         target["equalityComparer"] = notifyWhen == "always"
25             ? function() { return false } // Treat all values as not equal
26             : ko.observable["fn"]["equalityComparer"];
27         return target;
28     }
31 function applyExtenders(requestedExtenders) {
32     var target = this;
33     if (requestedExtenders) {
34         for (var key in requestedExtenders) {
35             var extenderHandler = ko.extenders[key];
36             if (typeof extenderHandler == 'function') {
37                 target = extenderHandler(target, requestedExtenders[key]);
38             }
39         }
40     }
41     return target;
44 ko.exportSymbol('extenders', ko.extenders);