UNPKG

847 BJavaScriptView Raw
1/* @flow */
2
3const _callbacks = [];
4let _mouseUpListenerIsActive = false;
5
6function _handleMouseUp() {
7 _callbacks.forEach(callback => {
8 callback();
9 });
10}
11
12const 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
35export default {
36 subscribe: subscribe,
37 __triggerForTests: _handleMouseUp,
38};