/
DOMEventManager.coffee
52 lines (35 loc) · 1.3 KB
/
DOMEventManager.coffee
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
44
45
46
47
48
49
50
51
52
{_} = require "./Underscore"
{EventEmitter} = require "./EventEmitter"
Utils = require "./Utils"
EventManagerIdCounter = 1
class DOMEventManagerElement extends EventEmitter
constructor: (@element) ->
addListener: (eventName, listener, capture=false) ->
listener.capture = capture # Make sure we store capture too
super(eventName, listener)
@element.addEventListener(eventName, listener, capture)
removeListener: (eventName, listener, capture=false) ->
super(eventName, listener)
@element.removeEventListener(eventName, listener, listener.capture)
# Keep the DOM API working
addEventListener: @::addListener
removeEventListener: @::removeListener
# Keep the Node API working
on: @::addListener
off: @::removeListener
class exports.DOMEventManager
constructor: (element) ->
@_elements = {}
wrap: (element) =>
if not element._eventManagerId
element._eventManagerId = EventManagerIdCounter++
if not @_elements[element._eventManagerId]
@_elements[element._eventManagerId] = new DOMEventManagerElement(element)
@_elements[element._eventManagerId]
remove: (element) =>
return unless element._eventManagerId
delete @_elements[element._eventManagerId]
element._eventManagerId = 0
reset: ->
for element, elementEventManager of @_elements
elementEventManager.removeAllListeners()