1 |
|
2 |
|
3 | const _callbacks = [];
|
4 | let _mouseUpListenerIsActive = false;
|
5 |
|
6 | function _handleMouseUp() {
|
7 | _callbacks.forEach(callback => {
|
8 | callback();
|
9 | });
|
10 | }
|
11 |
|
12 | const subscribe = function(callback: () => void): {remove: () => void} {
|
13 | if (_callbacks.indexOf(callback) === -1) {
|
14 | _callbacks.push(callback);
|
15 | }
|
16 |
|
17 | if (!_mouseUpListenerIsActive) {
|
18 | window.addEventListener('mouseup', _handleMouseUp);
|
19 | _mouseUpListenerIsActive = true;
|
20 | }
|
21 |
|
22 | return {
|
23 | remove: function() {
|
24 | const index = _callbacks.indexOf(callback);
|
25 | _callbacks.splice(index, 1);
|
26 |
|
27 | if (_callbacks.length === 0 && _mouseUpListenerIsActive) {
|
28 | window.removeEventListener('mouseup', _handleMouseUp);
|
29 | _mouseUpListenerIsActive = false;
|
30 | }
|
31 | },
|
32 | };
|
33 | };
|
34 |
|
35 | export default {
|
36 | subscribe: subscribe,
|
37 | __triggerForTests: _handleMouseUp,
|
38 | };
|