-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmouse.js
43 lines (39 loc) · 1.03 KB
/
mouse.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// @flow
const { pull, map, filter, log } = require('pull-stream');
const { event } = require('./event');
const many = require('pull-many');
function mouse(target /*: HTMLElement */) {
const sources = [
pull(
event({ target, event: 'mouseup' }),
map(event => ['UP', event.clientX, event.clientY])
),
pull(
event({ target, event: 'mouseover' }),
map(event => ['MOVE', event.clientX, event.clientY])
),
pull(
event({ target, event: 'mousemove' }),
map(event => ['MOVE', event.clientX, event.clientY])
),
pull(
event({ target, event: 'mousedown' }),
map(event => ['DOWN', event.clientX, event.clientY])
)
];
return pull(many(sources));
}
function mousemove(target /*: HTMLElement */) {
let down = false;
return pull(
mouse(target),
map(([state /*: MouseState */, x /*: number */, y /*: number */]) => {
down = state === 'UP' ? false : (down || state === 'DOWN');
return [x, y, down];
})
);
}
module.exports = {
mouse,
mousemove
};