feat(integration): extract SillyTavern event handlers to dedicated module

- Create src/systems/integration/sillytavern.js with all event handlers
- Move commitTrackerData() (deferred from Epic 1)
- Move sendPlotProgression() to plotProgression.js
- Move updateGenerationModeUI() to layout.js
- Add registerAllEvents() and unregisterAllEvents() to events.js
- Centralize event registration in index.js initialization

This completes Epic 6: Integration Layer Extraction
~340 lines extracted from index.js
index.js reduced from ~783 lines to 423 lines
This commit is contained in:
Lucas 'Paperboy' Rose-Winters
2025-10-17 14:20:58 +11:00
parent 175ff9560c
commit 0764bc63a1
5 changed files with 486 additions and 388 deletions
+41
View File
@@ -45,3 +45,44 @@ export function emit(eventType, ...args) {
* Re-export event types for convenience
*/
export { event_types };
// Store registered handlers for cleanup
const registeredHandlers = new Map();
/**
* Registers all extension event handlers
* @param {Object} handlers - Map of event types to handler functions or arrays of handler functions
* @example
* registerAllEvents({
* [event_types.MESSAGE_SENT]: onMessageSent,
* [event_types.CHAT_CHANGED]: [onCharacterChanged, updatePersonaAvatar]
* });
*/
export function registerAllEvents(handlers) {
for (const [eventType, handler] of Object.entries(handlers)) {
// Handler can be a single function or an array of functions
const handlerArray = Array.isArray(handler) ? handler : [handler];
for (const handlerFn of handlerArray) {
eventSource.on(eventType, handlerFn);
// Store for later cleanup
if (!registeredHandlers.has(eventType)) {
registeredHandlers.set(eventType, []);
}
registeredHandlers.get(eventType).push(handlerFn);
}
}
}
/**
* Unregisters all extension event handlers (for cleanup/reload)
*/
export function unregisterAllEvents() {
for (const [eventType, handlers] of registeredHandlers.entries()) {
for (const handler of handlers) {
eventSource.off(eventType, handler);
}
}
registeredHandlers.clear();
}