1 | var LazyWatcher = require('./lib/lazy-watcher')
|
2 | var watchThrottle = require('./watch-throttle')
|
3 | var resolve = require('./resolve')
|
4 |
|
5 | module.exports = function Throttle (input, minDelay) {
|
6 |
|
7 | minDelay = minDelay || 20
|
8 |
|
9 | var binder = LazyWatcher(update, listen, unlisten)
|
10 | binder.value = resolve(input)
|
11 | var releases = []
|
12 |
|
13 | var result = function MutantThrottle (listener) {
|
14 | if (!listener) {
|
15 | return binder.getValue()
|
16 | }
|
17 | return binder.addListener(listener)
|
18 | }
|
19 |
|
20 | function update () {
|
21 | binder.value = resolve(input)
|
22 | return true
|
23 | }
|
24 |
|
25 | function listen () {
|
26 | releases.push(watchThrottle(input, minDelay, binder.onUpdate))
|
27 | }
|
28 |
|
29 | function unlisten () {
|
30 | while (releases.length) {
|
31 | releases.pop()()
|
32 | }
|
33 | }
|
34 |
|
35 | return result
|
36 | }
|