/// /// class EventBus { private handlers: any = {}; // Map from functions to arrays of callbacks. private lastEvent: any = {}; register(clazz, callback: (event: any) => any, sendLast : boolean = false, win: any = null) { var name = clazz.name; var classObject = this.handlers[name]; if (!classObject) { classObject = {clazz: clazz, handlers: []}; this.handlers[name] = classObject; } var handlers = classObject.handlers; handlers.push(callback); if (sendLast && this.lastEvent[name]) { callback(this.lastEvent[name]); } if (win !== null) { $(win).on("beforeunload", function () { for (var i = 0; i < handlers.length; i++) { if (handlers[i] === callback) { handlers.splice(i, 1); break; } } }); } } fireEvent(event) { var name = event.constructor.name; this.lastEvent[name] = event; var classObject = this.handlers[name]; if (classObject) { var handlers = classObject.handlers; for (var i = 0; i < handlers.length; i++) { handlers[i](event); } } } private static instance = new EventBus(); static getInstance() { // Global, I'm serious. var win : any = window; while (win.opener) { win = win.opener; } return win.EventBus.instance; } } class SudoSliderApiEvent { callback:(api:any) => any; name:string; constructor(callback:(api:any) => any, name:string) { this.callback = callback; this.name = name; } } class SudoSliderUpdateOptionsEvent { newDefinitions:OptionDefinition[]; constructor(newDefinitions:OptionDefinition[]) { this.newDefinitions = newDefinitions; } } class SudoSliderSlidesUpdateEvent { newSlides:{html: string}[]; constructor(newSlides:{html: string}[]) { this.newSlides = newSlides; } } class SliderBuilderStyleChangeEvent { style : string; constructor(style: string) { this.style = style; } } class RegisterWindowEvent { win : Window; constructor(win : Window) { this.win = win; } } class ImportEvent { slides:{html: string}[]; style : string; definitions:OptionDefinition[]; constructor(slides:{html: string}[], style : string, definitions:OptionDefinition[]) { this.slides = slides; this.style = style; this.definitions = definitions; } }