Added events processor
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
import { EventHandlerOptions, EventHandlers } from "./types"
|
||||
|
||||
// Define event types
|
||||
enum ArEventTypes {
|
||||
CLICK = "click",
|
||||
INPUT = "input",
|
||||
SELECTIONCHANGE = "selectionchange",
|
||||
KEYDOWN = "keydown",
|
||||
BOLD = "bold",
|
||||
ITALIC = "italic",
|
||||
UNDERLINE = "underline",
|
||||
STRIKETHROUGH = "strikethrough",
|
||||
SUBSCRIPT = "subscript",
|
||||
SUPERSCRIPT = "superscript",
|
||||
}
|
||||
|
||||
// Define event handlers
|
||||
const eventHandlers: EventHandlers = {
|
||||
[ArEventTypes.CLICK]: {
|
||||
handler1: () => console.log("Handler 1 for Click event triggered!"),
|
||||
handler2: () => console.log("Handler 2 for Click event triggered!"),
|
||||
},
|
||||
[ArEventTypes.INPUT]: {
|
||||
handler1: () => console.log("Handler 1 for Input event triggered!"),
|
||||
handler2: () => console.log("Handler 2 for Input event triggered!"),
|
||||
},
|
||||
[ArEventTypes.KEYDOWN]: {
|
||||
handler1: () => console.log("Handler 1 for Keydown event triggered!"),
|
||||
handler2: () => console.log("Handler 2 for Keydown event triggered!"),
|
||||
},
|
||||
[ArEventTypes.BOLD]: {
|
||||
handler: () => console.log("Bold handler triggered!"),
|
||||
},
|
||||
[ArEventTypes.ITALIC]: {
|
||||
handler: () => console.log("Italic handler triggered!"),
|
||||
},
|
||||
[ArEventTypes.UNDERLINE]: {
|
||||
handler: () => console.log("Underline handler triggered!"),
|
||||
},
|
||||
// Add more handlers as needed
|
||||
}
|
||||
|
||||
// Define keyboard shortcut handlers
|
||||
const macShortcuts: { [key: string]: ArEventTypes } = {
|
||||
"cmd+b": ArEventTypes.BOLD, // Bold
|
||||
"cmd+i": ArEventTypes.ITALIC, // Italic
|
||||
"cmd+u": ArEventTypes.UNDERLINE, // Underline
|
||||
"cmd+s": ArEventTypes.STRIKETHROUGH, // Strikethrough
|
||||
"cmd+z": ArEventTypes.SUBSCRIPT, // Subscript
|
||||
"cmd+y": ArEventTypes.SUPERSCRIPT, // Superscript
|
||||
}
|
||||
|
||||
const windowsShortcuts: { [key: string]: ArEventTypes } = {
|
||||
"ctrl+b": ArEventTypes.BOLD, // Bold
|
||||
"ctrl+i": ArEventTypes.ITALIC, // Italic
|
||||
"ctrl+u": ArEventTypes.UNDERLINE, // Underline
|
||||
"ctrl+s": ArEventTypes.STRIKETHROUGH, // Strikethrough
|
||||
"ctrl+z": ArEventTypes.SUBSCRIPT, // Subscript
|
||||
"ctrl+y": ArEventTypes.SUPERSCRIPT, // Superscript
|
||||
}
|
||||
|
||||
class EventsManager {
|
||||
public static hook(options?: EventHandlerOptions) {
|
||||
const includedHandlers = new Set<string>()
|
||||
const excludedHandlers = new Set<string>()
|
||||
|
||||
// Process include options
|
||||
options?.include?.forEach(({ eventType, handlerNames }) => {
|
||||
handlerNames.forEach((handlerName) => {
|
||||
const handlerKey = `${eventType}:${handlerName}`
|
||||
includedHandlers.add(handlerKey)
|
||||
})
|
||||
})
|
||||
|
||||
// Process exclude options
|
||||
options?.exclude?.forEach(({ eventType, handlerNames }) => {
|
||||
handlerNames.forEach((handlerName) => {
|
||||
const handlerKey = `${eventType}:${handlerName}`
|
||||
if (includedHandlers.has(handlerKey)) {
|
||||
console.warn(
|
||||
`Excluding handler ${handlerName} for event ${eventType} as it is present in both include and exclude lists.`,
|
||||
)
|
||||
}
|
||||
excludedHandlers.add(handlerKey)
|
||||
})
|
||||
})
|
||||
|
||||
// Hook event handlers
|
||||
for (const [eventType, handlers] of Object.entries(eventHandlers)) {
|
||||
for (const [handlerName, handler] of Object.entries(handlers)) {
|
||||
const handlerKey = `${eventType}:${handlerName}`
|
||||
if (includedHandlers.size > 0 && !includedHandlers.has(handlerKey)) {
|
||||
continue
|
||||
}
|
||||
if (excludedHandlers.has(handlerKey)) {
|
||||
continue
|
||||
}
|
||||
document.addEventListener(eventType, handler)
|
||||
}
|
||||
}
|
||||
|
||||
// Determine platform and hook keyboard shortcut handlers
|
||||
const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.platform)
|
||||
const shortcuts = isMac ? macShortcuts : windowsShortcuts
|
||||
|
||||
document.addEventListener("keydown", (event) => {
|
||||
const key = `${isMac ? "cmd" : "ctrl"}+${event.key.toLowerCase()}`
|
||||
const eventType = shortcuts[key]
|
||||
if (eventType && !excludedHandlers.has(`${eventType}:handler`)) {
|
||||
if (
|
||||
includedHandlers.size === 0 ||
|
||||
includedHandlers.has(`${eventType}:handler`)
|
||||
) {
|
||||
eventHandlers[eventType].handler()
|
||||
event.preventDefault() // Prevent default action for the shortcut
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Export the module
|
||||
export default EventsManager
|
||||
export { ArEventTypes }
|
||||
|
||||
10
src/packages/event-manager/src/types.d.ts
vendored
Normal file
10
src/packages/event-manager/src/types.d.ts
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
export type EventHandlerOptions = {
|
||||
include?: { eventType: ArEventTypes; handlerNames: string[] }[]
|
||||
exclude?: { eventType: ArEventTypes; handlerNames: string[] }[]
|
||||
}
|
||||
|
||||
export interface EventHandlers {
|
||||
[key: string]: {
|
||||
[handlerName: string]: () => void
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user