svgdom
Version:
Straightforward DOM implementation for SVG, HTML and XML
44 lines (34 loc) • 851 B
JavaScript
const $ = Symbol('private properties')
export class EventTarget {
constructor () {
this[$] = {}
this[$].listeners = {}
}
addEventListener (type, callback) {
if (!(type in this[$].listeners)) {
this[$].listeners[type] = []
}
this[$].listeners[type].push(callback)
}
dispatchEvent (event) {
if (!(event.type in this[$].listeners)) { return true }
var stack = this[$].listeners[event.type]
event.target = this
stack.forEach(function (el) {
el(event)
})
return !event.defaultPrevented
}
removeEventListener (type, callback) {
if (!(type in this[$].listeners)) {
return
}
var stack = this[$].listeners[type]
for (var i = 0, il = stack.length; i < il; i++) {
if (stack[i] === callback) {
stack.splice(i, 1)
return
}
}
}
}