mcp-quiz-server
Version:
๐ง AI-Powered Quiz Management via Model Context Protocol (MCP) - Create, manage, and take quizzes directly from VS Code, Claude, and other AI agents.
52 lines โข 2.06 kB
JavaScript
export class EventManagement {
static addListener(element, event, handler, key) {
if (this.eventListeners.has(key)) {
const existing = this.eventListeners.get(key);
existing.element.removeEventListener(existing.event, existing.handler);
}
element.addEventListener(event, handler);
this.eventListeners.set(key, {
element,
event,
handler,
});
console.log(`๐ Event listener added: ${key} (${event})`);
}
static removeListener(key) {
if (this.eventListeners.has(key)) {
const listener = this.eventListeners.get(key);
listener.element.removeEventListener(listener.event, listener.handler);
this.eventListeners.delete(key);
console.log(`๐๏ธ Event listener removed: ${key}`);
}
}
static cleanup(keys) {
const keysToClean = keys || Array.from(this.eventListeners.keys());
keysToClean.forEach(key => {
this.removeListener(key);
});
console.log(`๐งน Event cleanup completed: ${keysToClean.length} listeners removed`);
}
static getActiveListenerCount() {
return this.eventListeners.size;
}
static getActiveListenerKeys() {
return Array.from(this.eventListeners.keys());
}
static delegate(container, selector, event, handler, key) {
const delegatedHandler = (e) => {
const target = e.target.closest(selector);
if (target) {
handler(e, target);
}
};
this.addListener(container, event, delegatedHandler, key);
}
static componentCleanup(componentPrefix) {
const componentKeys = Array.from(this.eventListeners.keys()).filter(key => key.startsWith(componentPrefix));
this.cleanup(componentKeys);
console.log(`๐๏ธ Component cleanup: ${componentPrefix} (${componentKeys.length} listeners)`);
}
}
EventManagement.eventListeners = new Map();
//# sourceMappingURL=EventManagement.js.map