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
53
54
55
56
57
58
59
60
61
|
local EventPrototype = {}
function EventPrototype:preventDefault()
self.defaultPrevented = true
end
function Event(type, data)
return setmetatable({
type = type,
data = data,
defaultPrevented = false,
timeStamp = lua_async.clock(),
}, {__index = EventPrototype})
end
local EventTargetPrototype = {}
function EventTargetPrototype:dispatchEvent(event)
event.target = self
local callback = self["on" + event.type]
if callback then
callback(event)
end
local listeners = self.__eventListeners[type]
if listeners then
for i, callback in ipairs(listeners) do
callback(event)
end
end
return not event.defaultPrevented
end
function EventTargetPrototype:addEventListener(type, callback)
local listeners = self.__eventListeners[type] or {}
table.insert(listeners, callback)
self.__eventListeners[type] = listeners
end
function EventTargetPrototype:removeEventListener(type, callback)
local listeners = self.__eventListeners[type]
if listeners then
for k, v in pairs(listeners) do
if v == callback then
table.remove(listeners, k)
break
end
end
end
end
function EventTarget()
return setmetatable({
__eventListeners = {},
}, {__index = EventTargetPrototype})
end
|