]> git.lizzy.rs Git - lua_async.git/blob - events.lua
Merge branch 'master' of https://github.com/EliasFleckenstein03/lua_async
[lua_async.git] / events.lua
1 local EventPrototype = {}
2
3 function EventPrototype:preventDefault()
4         self.defaultPrevented = true
5 end
6
7 function Event(type, data)
8         return setmetatable({
9                 type = type,
10                 data = data,
11                 defaultPrevented = false,
12                 timeStamp = lua_async.clock(),
13         }, {__index = EventPrototype})
14 end
15
16 local EventTargetPrototype = {}
17
18 function EventTargetPrototype:dispatchEvent(event)
19         event.target = self
20
21         local callback = self["on" .. event.type]
22
23         if callback then
24                 callback(event)
25         end
26
27         local listeners = self.__eventListeners[event.type]
28
29         if listeners then
30                 for i, callback in ipairs(listeners) do
31                         callback(event)
32                 end
33         end
34
35         return not event.defaultPrevented
36 end
37
38 function EventTargetPrototype:addEventListener(type, callback)
39         local listeners = self.__eventListeners[type] or {}
40         table.insert(listeners, callback)
41         self.__eventListeners[type] = listeners
42 end
43
44 function EventTargetPrototype:removeEventListener(type, callback)
45         local listeners = self.__eventListeners[type]
46
47         if listeners then
48                 for k, v in pairs(listeners) do
49                         if v == callback then
50                                 table.remove(listeners, k)
51                                 break
52                         end
53                 end
54         end
55 end
56
57 function EventTarget()
58         return setmetatable({
59                 __eventListeners = {},
60         }, {__index = EventTargetPrototype})
61 end