mirror of
https://github.com/marktext/marktext.git
synced 2025-05-03 23:32:04 +08:00
event.js done
This commit is contained in:
parent
e27282ce9a
commit
40ae1cf650
@ -1,23 +1,77 @@
|
|||||||
|
import {
|
||||||
|
getUniqueId
|
||||||
|
} from './utils'
|
||||||
|
|
||||||
class Event {
|
class Event {
|
||||||
constructor () {
|
constructor () {
|
||||||
this.events = []
|
this.events = []
|
||||||
this.listeners = {}
|
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 () {
|
getMarkdown () {
|
||||||
|
// TODO
|
||||||
}
|
}
|
||||||
getHtml () {
|
getHtml () {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
destroy () {
|
||||||
|
// TODO
|
||||||
|
// destroy the event bind.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user