mirror of
https://github.com/marktext/marktext.git
synced 2025-05-03 05:40:39 +08:00
event.js done
This commit is contained in:
parent
e27282ce9a
commit
40ae1cf650
@ -1,23 +1,77 @@
|
||||
import {
|
||||
getUniqueId
|
||||
} from './utils'
|
||||
|
||||
class Event {
|
||||
constructor () {
|
||||
this.events = []
|
||||
this.listeners = {}
|
||||
this.eventIds = new Set([]) // use to store eventId
|
||||
}
|
||||
|
||||
attachDOMEvent () {
|
||||
|
||||
/**
|
||||
* [attachDOMEvent] bind event listener to target, and return a unique ID,
|
||||
* this ID
|
||||
*/
|
||||
attachDOMEvent (target, event, listener, capture) {
|
||||
if (this.checkHasBind(target, event, listener, capture)) return false
|
||||
const eventId = getUniqueId(this.eventIds)
|
||||
target.addEventListener(event, listener, capture)
|
||||
this.events.push({
|
||||
eventId,
|
||||
target,
|
||||
event,
|
||||
listener,
|
||||
capture
|
||||
})
|
||||
return eventId
|
||||
}
|
||||
|
||||
detachDOMEvent () {
|
||||
|
||||
/**
|
||||
* [detachDOMEvent removeEventListener]
|
||||
* @param {[type]} eventId [unique eventId]
|
||||
*/
|
||||
detachDOMEvent (eventId) {
|
||||
if (!eventId) return false
|
||||
const removeEvent = this.events.filter(e => e.eventId === eventId)[0]
|
||||
if (removeEvent) {
|
||||
const { target, event, listener, capture } = removeEvent
|
||||
target.removeEventListener(event, listener, capture)
|
||||
}
|
||||
}
|
||||
|
||||
subscribe () {
|
||||
|
||||
/**
|
||||
* [detachAllDomEvents remove all the DOM events handler]
|
||||
*/
|
||||
detachAllDomEvents () {
|
||||
this.events.forEach(event => this.detachDOMEvent(event.eventId))
|
||||
}
|
||||
|
||||
dispatch () {
|
||||
|
||||
/**
|
||||
* [subscribe] subscribe custom event
|
||||
*/
|
||||
subscribe (event, listener) {
|
||||
const eventListener = this.listeners[event]
|
||||
if (eventListener && Array.isArray(eventListener)) {
|
||||
eventListener.push(listener)
|
||||
} else {
|
||||
this.listeners[event] = [listener]
|
||||
}
|
||||
}
|
||||
// dispatch custom event
|
||||
dispatch (event, ...data) {
|
||||
const eventListener = this.listeners[event]
|
||||
if (eventListener && Array.isArray(eventListener)) {
|
||||
eventListener.forEach(listener => listener(...data))
|
||||
}
|
||||
}
|
||||
// Determine whether the event has been bind
|
||||
checkHasBind(cTarget, cEvent, cListener, cCapture) {
|
||||
let i
|
||||
let len = this.events.length
|
||||
for (i = 0; i < len; i++) {
|
||||
const { target, event, listener, capture } = this.events[i]
|
||||
if (target === cTarget && event === cEvent && listener === cListener && capture === cCapture) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -104,10 +104,14 @@ class Aganippe {
|
||||
}
|
||||
|
||||
getMarkdown () {
|
||||
|
||||
// TODO
|
||||
}
|
||||
getHtml () {
|
||||
|
||||
// TODO
|
||||
}
|
||||
destroy () {
|
||||
// TODO
|
||||
// destroy the event bind.
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user