-
Notifications
You must be signed in to change notification settings - Fork 0
/
listener.go
43 lines (33 loc) · 910 Bytes
/
listener.go
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
//go:build js && wasm
package js
import "github.com/dairaga/js/v2/builtin"
type Listener map[string]Func
func (l Listener) Add(target Value, typ string, fn JSFunc) Func {
if !builtin.EventTarget.Is(target) {
panic("target is not an EventTarget")
}
cb := FuncOf(fn)
if old, ok := l[typ]; ok && old.Truthy() {
old.Release()
}
l[typ] = cb
target.Call("addEventListener", typ, cb)
return cb
}
// -----------------------------------------------------------------------------
func (l Listener) Remove(target Value, typ string) {
if !builtin.EventTarget.Is(target) {
panic("target is not an EventTarget")
}
if old, ok := l[typ]; ok && old.Truthy() {
delete(l, typ)
target.Call("removeEventListener", typ, old)
old.Release()
}
}
// -----------------------------------------------------------------------------
func (l Listener) Release() {
for _, fn := range l {
fn.Release()
}
}