From dbbe794978c8244883bd2c05ad918f5ce54d8b53 Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 21:27:03 +0200 Subject: [PATCH 01/18] move patch file to createjs bundle directory --- .../createjsPatch => bundles/createjs/patch}/createjs-patch.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/robotlegs/bender/{extensions/contextView/createjsPatch => bundles/createjs/patch}/createjs-patch.ts (100%) diff --git a/src/robotlegs/bender/extensions/contextView/createjsPatch/createjs-patch.ts b/src/robotlegs/bender/bundles/createjs/patch/createjs-patch.ts similarity index 100% rename from src/robotlegs/bender/extensions/contextView/createjsPatch/createjs-patch.ts rename to src/robotlegs/bender/bundles/createjs/patch/createjs-patch.ts From cb1aaf54111113f63614fdd28fd8da25e1dfefdf Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 21:31:14 +0200 Subject: [PATCH 02/18] apply createjs patch on view before mapping it to context --- src/robotlegs/bender/bundles/createjs/CreateJSBundle.ts | 6 +++++- .../bender/extensions/contextView/ContextViewExtension.ts | 4 ---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/robotlegs/bender/bundles/createjs/CreateJSBundle.ts b/src/robotlegs/bender/bundles/createjs/CreateJSBundle.ts index 0430193..d11a456 100644 --- a/src/robotlegs/bender/bundles/createjs/CreateJSBundle.ts +++ b/src/robotlegs/bender/bundles/createjs/CreateJSBundle.ts @@ -17,6 +17,8 @@ import { StageCrawlerExtension } from "../../extensions/viewManager/StageCrawler import { StageObserverExtension } from "../../extensions/viewManager/StageObserverExtension"; import { ViewManagerExtension } from "../../extensions/viewManager/ViewManagerExtension"; +import { applyCreateJSPatch } from "./patch/createjs-patch"; + /** * For that Classic Robotlegs flavour * @@ -59,7 +61,9 @@ export class CreateJSBundle implements IBundle { /* Private Functions */ /*============================================================================*/ - private handleContextView(): void { + private handleContextView(contextView: ContextView): void { + applyCreateJSPatch(contextView.view); + this._context.configure(ContextViewListenerConfig); } diff --git a/src/robotlegs/bender/extensions/contextView/ContextViewExtension.ts b/src/robotlegs/bender/extensions/contextView/ContextViewExtension.ts index 581c215..e0d3126 100644 --- a/src/robotlegs/bender/extensions/contextView/ContextViewExtension.ts +++ b/src/robotlegs/bender/extensions/contextView/ContextViewExtension.ts @@ -10,8 +10,6 @@ import { instanceOfType, IContext, IExtension, IInjector, ILogger } from "@robot import { IContextView } from "./api/IContextView"; import { ContextView } from "./impl/ContextView"; -import { applyCreateJSPatch } from "./createjsPatch/createjs-patch"; - /** *

This Extension waits for a ContextView to be added as a configuration * and maps it into the context's injector.

@@ -51,8 +49,6 @@ export class ContextViewExtension implements IExtension { } else { this._logger.debug("Mapping {0} as contextView", [contextView.view]); - applyCreateJSPatch(contextView.view); - this._injector.bind(IContextView).toConstantValue(contextView); } } From 39bf7e98cca7f4b2ba0437e363eab1bdd00b072b Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 21:38:43 +0200 Subject: [PATCH 03/18] update imports --- .../extensions/contextView/createjsPatch/createjsPatch.test.ts | 2 +- .../bender/extensions/mediatorMap/impl/mediatorManager.test.ts | 2 +- .../extensions/viewManager/impl/manualStageObserver.test.ts | 2 +- .../bender/extensions/viewManager/impl/stageCrawler.test.ts | 2 +- .../bender/extensions/viewManager/impl/stageObserver.test.ts | 2 +- .../bender/extensions/viewManager/impl/viewManager.test.ts | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/robotlegs/bender/extensions/contextView/createjsPatch/createjsPatch.test.ts b/test/robotlegs/bender/extensions/contextView/createjsPatch/createjsPatch.test.ts index aefcf61..d229934 100644 --- a/test/robotlegs/bender/extensions/contextView/createjsPatch/createjsPatch.test.ts +++ b/test/robotlegs/bender/extensions/contextView/createjsPatch/createjsPatch.test.ts @@ -9,7 +9,7 @@ import "../../../../../entry"; import { assert } from "chai"; -import { applyCreateJSPatch } from "../../../../../../src/robotlegs/bender/extensions/contextView/createjsPatch/createjs-patch"; +import { applyCreateJSPatch } from "../../../../../../src/robotlegs/bender/bundles/createjs/patch/createjs-patch"; describe("CreateJSPatch", () => { let stage: createjs.Stage; diff --git a/test/robotlegs/bender/extensions/mediatorMap/impl/mediatorManager.test.ts b/test/robotlegs/bender/extensions/mediatorMap/impl/mediatorManager.test.ts index 8c9a271..9a8c326 100644 --- a/test/robotlegs/bender/extensions/mediatorMap/impl/mediatorManager.test.ts +++ b/test/robotlegs/bender/extensions/mediatorMap/impl/mediatorManager.test.ts @@ -13,7 +13,7 @@ import { assert } from "chai"; import { instantiateUnmapped, IInjector, ITypeFilter, RobotlegsInjector, TypeMatcher } from "@robotlegsjs/core"; -import { applyCreateJSPatch } from "../../../../../../src/robotlegs/bender/extensions/contextView/createjsPatch/createjs-patch"; +import { applyCreateJSPatch } from "../../../../../../src/robotlegs/bender/bundles/createjs/patch/createjs-patch"; import { IMediator } from "../../../../../../src/robotlegs/bender/extensions/mediatorMap/api/IMediator"; import { IMediatorMapping } from "../../../../../../src/robotlegs/bender/extensions/mediatorMap/api/IMediatorMapping"; diff --git a/test/robotlegs/bender/extensions/viewManager/impl/manualStageObserver.test.ts b/test/robotlegs/bender/extensions/viewManager/impl/manualStageObserver.test.ts index 4b162ad..250c406 100644 --- a/test/robotlegs/bender/extensions/viewManager/impl/manualStageObserver.test.ts +++ b/test/robotlegs/bender/extensions/viewManager/impl/manualStageObserver.test.ts @@ -11,7 +11,7 @@ import { assert } from "chai"; import { IClass } from "@robotlegsjs/core"; -import { applyCreateJSPatch } from "../../../../../../src/robotlegs/bender/extensions/contextView/createjsPatch/createjs-patch"; +import { applyCreateJSPatch } from "../../../../../../src/robotlegs/bender/bundles/createjs/patch/createjs-patch"; import { ConfigureViewEvent } from "../../../../../../src/robotlegs/bender/extensions/viewManager/impl/ConfigureViewEvent"; import { ContainerRegistry } from "../../../../../../src/robotlegs/bender/extensions/viewManager/impl/ContainerRegistry"; import { ManualStageObserver } from "../../../../../../src/robotlegs/bender/extensions/viewManager/impl/ManualStageObserver"; diff --git a/test/robotlegs/bender/extensions/viewManager/impl/stageCrawler.test.ts b/test/robotlegs/bender/extensions/viewManager/impl/stageCrawler.test.ts index cfdb37b..00e32b2 100644 --- a/test/robotlegs/bender/extensions/viewManager/impl/stageCrawler.test.ts +++ b/test/robotlegs/bender/extensions/viewManager/impl/stageCrawler.test.ts @@ -11,7 +11,7 @@ import { assert } from "chai"; import { IClass } from "@robotlegsjs/core"; -import { applyCreateJSPatch } from "../../../../../../src/robotlegs/bender/extensions/contextView/createjsPatch/createjs-patch"; +import { applyCreateJSPatch } from "../../../../../../src/robotlegs/bender/bundles/createjs/patch/createjs-patch"; import { ContainerRegistry } from "../../../../../../src/robotlegs/bender/extensions/viewManager/impl/ContainerRegistry"; import { StageCrawler } from "../../../../../../src/robotlegs/bender/extensions/viewManager/impl/StageCrawler"; diff --git a/test/robotlegs/bender/extensions/viewManager/impl/stageObserver.test.ts b/test/robotlegs/bender/extensions/viewManager/impl/stageObserver.test.ts index 1c81310..78e67f4 100644 --- a/test/robotlegs/bender/extensions/viewManager/impl/stageObserver.test.ts +++ b/test/robotlegs/bender/extensions/viewManager/impl/stageObserver.test.ts @@ -11,7 +11,7 @@ import { assert } from "chai"; import { IClass } from "@robotlegsjs/core"; -import { applyCreateJSPatch } from "../../../../../../src/robotlegs/bender/extensions/contextView/createjsPatch/createjs-patch"; +import { applyCreateJSPatch } from "../../../../../../src/robotlegs/bender/bundles/createjs/patch/createjs-patch"; import { ContainerRegistry } from "../../../../../../src/robotlegs/bender/extensions/viewManager/impl/ContainerRegistry"; import { StageObserver } from "../../../../../../src/robotlegs/bender/extensions/viewManager/impl/StageObserver"; diff --git a/test/robotlegs/bender/extensions/viewManager/impl/viewManager.test.ts b/test/robotlegs/bender/extensions/viewManager/impl/viewManager.test.ts index 6cf53e8..aacbab0 100644 --- a/test/robotlegs/bender/extensions/viewManager/impl/viewManager.test.ts +++ b/test/robotlegs/bender/extensions/viewManager/impl/viewManager.test.ts @@ -11,7 +11,7 @@ import { assert } from "chai"; import { IClass } from "@robotlegsjs/core"; -import { applyCreateJSPatch } from "../../../../../../src/robotlegs/bender/extensions/contextView/createjsPatch/createjs-patch"; +import { applyCreateJSPatch } from "../../../../../../src/robotlegs/bender/bundles/createjs/patch/createjs-patch"; import { ContainerRegistry } from "../../../../../../src/robotlegs/bender/extensions/viewManager/impl/ContainerRegistry"; import { StageObserver } from "../../../../../../src/robotlegs/bender/extensions/viewManager/impl/StageObserver"; import { ViewManager } from "../../../../../../src/robotlegs/bender/extensions/viewManager/impl/ViewManager"; From daaebd3dbb8dda07615fd0a1725c0457b200eb9d Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 21:40:15 +0200 Subject: [PATCH 04/18] move createjs unit tests into it's own directory --- .../bender/bundles/{pixi => createjs}/createjsBundle.test.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/robotlegs/bender/bundles/{pixi => createjs}/createjsBundle.test.ts (100%) diff --git a/test/robotlegs/bender/bundles/pixi/createjsBundle.test.ts b/test/robotlegs/bender/bundles/createjs/createjsBundle.test.ts similarity index 100% rename from test/robotlegs/bender/bundles/pixi/createjsBundle.test.ts rename to test/robotlegs/bender/bundles/createjs/createjsBundle.test.ts From 77a3fa1ed87cebc60561ee8ef6fcf0276a5688b7 Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 21:41:11 +0200 Subject: [PATCH 05/18] move createjs patch file into bundles directory --- .../createjs/patch}/createjsPatch.test.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/robotlegs/bender/{extensions/contextView/createjsPatch => bundles/createjs/patch}/createjsPatch.test.ts (100%) diff --git a/test/robotlegs/bender/extensions/contextView/createjsPatch/createjsPatch.test.ts b/test/robotlegs/bender/bundles/createjs/patch/createjsPatch.test.ts similarity index 100% rename from test/robotlegs/bender/extensions/contextView/createjsPatch/createjsPatch.test.ts rename to test/robotlegs/bender/bundles/createjs/patch/createjsPatch.test.ts From 54f4d9cf24a4d9b156fbd6851c9e2f58c3a83646 Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 21:44:15 +0200 Subject: [PATCH 06/18] add minimal interfaces to abstract an generic display list structure --- .../extensions/contextView/api/IDisplayObject.ts | 15 +++++++++++++++ .../contextView/api/IDisplayObjectContainer.ts | 15 +++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 src/robotlegs/bender/extensions/contextView/api/IDisplayObject.ts create mode 100644 src/robotlegs/bender/extensions/contextView/api/IDisplayObjectContainer.ts diff --git a/src/robotlegs/bender/extensions/contextView/api/IDisplayObject.ts b/src/robotlegs/bender/extensions/contextView/api/IDisplayObject.ts new file mode 100644 index 0000000..a2ba853 --- /dev/null +++ b/src/robotlegs/bender/extensions/contextView/api/IDisplayObject.ts @@ -0,0 +1,15 @@ +// ------------------------------------------------------------------------------ +// Copyright (c) 2017-present, RobotlegsJS. All Rights Reserved. +// +// NOTICE: You are permitted to use, modify, and distribute this file +// in accordance with the terms of the license agreement accompanying it. +// ------------------------------------------------------------------------------ + +import { IEventDispatcher } from "@robotlegsjs/core"; + +import { IDisplayObjectContainer } from "./IDisplayObjectContainer"; + +export let IDisplayObject = Symbol("IDisplayObject"); +export interface IDisplayObject extends IEventDispatcher { + parent: IDisplayObjectContainer; +} diff --git a/src/robotlegs/bender/extensions/contextView/api/IDisplayObjectContainer.ts b/src/robotlegs/bender/extensions/contextView/api/IDisplayObjectContainer.ts new file mode 100644 index 0000000..1f66105 --- /dev/null +++ b/src/robotlegs/bender/extensions/contextView/api/IDisplayObjectContainer.ts @@ -0,0 +1,15 @@ +// ------------------------------------------------------------------------------ +// Copyright (c) 2017-present, RobotlegsJS. All Rights Reserved. +// +// NOTICE: You are permitted to use, modify, and distribute this file +// in accordance with the terms of the license agreement accompanying it. +// ------------------------------------------------------------------------------ + +import { IDisplayObject } from "./IDisplayObject"; + +export let IDisplayObjectContainer = Symbol("IDisplayObjectContainer"); +export interface IDisplayObjectContainer extends IDisplayObject { + children: IDisplayObject[]; + + contains(child: IDisplayObject): boolean; +} From e6a828e6f7e9dbfbcd945d07209b38cb9534a269 Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 21:48:36 +0200 Subject: [PATCH 07/18] use abstract display list interfaces to decouple extensions from createjs library --- .../contextView/api/IContextView.ts | 4 +- .../contextView/impl/ContextView.ts | 7 +-- .../impl/ConvertToEventDispatcher.ts | 43 ------------------- .../extensions/mediatorMap/impl/Mediator.ts | 33 ++++++-------- .../mediatorMap/impl/MediatorManager.ts | 18 ++++---- .../mediatorMap/impl/MediatorMap.ts | 4 +- .../mediatorMap/impl/MediatorViewHandler.ts | 4 +- .../viewManager/StageCrawlerExtension.ts | 6 ++- .../viewManager/ViewManagerExtension.ts | 4 +- .../viewManager/api/IViewHandler.ts | 4 +- .../viewManager/api/IViewManager.ts | 9 ++-- .../viewManager/impl/ConfigureViewEvent.ts | 8 ++-- .../viewManager/impl/ContainerBinding.ts | 11 +++-- .../viewManager/impl/ContainerRegistry.ts | 22 +++++----- .../impl/ContainerRegistryEvent.ts | 8 ++-- .../viewManager/impl/ManualStageObserver.ts | 37 ++++++++-------- .../viewManager/impl/StageCrawler.ts | 15 ++++--- .../viewManager/impl/StageObserver.ts | 36 ++++++++-------- .../viewManager/impl/ViewManager.ts | 16 ++++--- .../viewManager/impl/ViewManagerEvent.ts | 8 ++-- 20 files changed, 139 insertions(+), 158 deletions(-) delete mode 100644 src/robotlegs/bender/extensions/mediatorMap/impl/ConvertToEventDispatcher.ts diff --git a/src/robotlegs/bender/extensions/contextView/api/IContextView.ts b/src/robotlegs/bender/extensions/contextView/api/IContextView.ts index 8786798..de3edf2 100644 --- a/src/robotlegs/bender/extensions/contextView/api/IContextView.ts +++ b/src/robotlegs/bender/extensions/contextView/api/IContextView.ts @@ -5,7 +5,9 @@ // in accordance with the terms of the license agreement accompanying it. // ------------------------------------------------------------------------------ +import { IDisplayObjectContainer } from "./IDisplayObjectContainer"; + export let IContextView = Symbol("IContextView"); export interface IContextView { - view: createjs.Stage; + view: IDisplayObjectContainer; } diff --git a/src/robotlegs/bender/extensions/contextView/impl/ContextView.ts b/src/robotlegs/bender/extensions/contextView/impl/ContextView.ts index f107f22..c460388 100644 --- a/src/robotlegs/bender/extensions/contextView/impl/ContextView.ts +++ b/src/robotlegs/bender/extensions/contextView/impl/ContextView.ts @@ -8,12 +8,13 @@ import { IConfig } from "@robotlegsjs/core"; import { IContextView } from "../api/IContextView"; +import { IDisplayObjectContainer } from "../api/IDisplayObjectContainer"; /** * The Context View represents the root Container for a Context */ export class ContextView implements IContextView, IConfig { - private _view: createjs.Stage; + private _view: IDisplayObjectContainer; /*============================================================================*/ /* Constructor */ @@ -23,7 +24,7 @@ export class ContextView implements IContextView, IConfig { * The Context View represents the root Container for a Context * @param view The root Container for this Context */ - constructor(view: createjs.Stage) { + constructor(view: IDisplayObjectContainer) { if (view !== null && view !== undefined) { this._view = view; } else { @@ -43,7 +44,7 @@ export class ContextView implements IContextView, IConfig { /** * The root Container for this Context */ - public get view(): createjs.Stage { + public get view(): IDisplayObjectContainer { return this._view; } } diff --git a/src/robotlegs/bender/extensions/mediatorMap/impl/ConvertToEventDispatcher.ts b/src/robotlegs/bender/extensions/mediatorMap/impl/ConvertToEventDispatcher.ts deleted file mode 100644 index 9f8845c..0000000 --- a/src/robotlegs/bender/extensions/mediatorMap/impl/ConvertToEventDispatcher.ts +++ /dev/null @@ -1,43 +0,0 @@ -// ------------------------------------------------------------------------------ -// Copyright (c) 2017-present, RobotlegsJS. All Rights Reserved. -// -// NOTICE: You are permitted to use, modify, and distribute this file -// in accordance with the terms of the license agreement accompanying it. -// ------------------------------------------------------------------------------ - -import { IEvent, IEventDispatcher } from "@robotlegsjs/core"; - -/** - * Makes the bridge between the createjs.EventDispatcher and IEventDispatcher. - */ -export class ConvertToEventDispatcher implements IEventDispatcher { - private _createjsEventDispatcher: createjs.EventDispatcher; - - constructor(createjsEventDispatcher: createjs.EventDispatcher) { - this._createjsEventDispatcher = createjsEventDispatcher; - } - - public addEventListener(type: string, listener: Function, thisObject?: any, useCapture?: boolean, priority?: number): void { - this._createjsEventDispatcher.on(type, listener, thisObject, false, null, useCapture); - } - - public once(type: string, listener: Function, thisObject?: any, useCapture?: boolean, priority?: number): void { - this._createjsEventDispatcher.on(type, listener, thisObject, true, null, useCapture); - } - - public removeEventListener(type: string, listener: Function, thisObject?: any, useCapture?: boolean): void { - this._createjsEventDispatcher.off(type, listener, useCapture); - } - - public hasEventListener(type: string): boolean { - return this._createjsEventDispatcher.hasEventListener(type); - } - - public dispatchEvent(event: IEvent): boolean { - return this._createjsEventDispatcher.dispatchEvent(event); - } - - public willTrigger(type: string): boolean { - return this._createjsEventDispatcher.willTrigger(type); - } -} diff --git a/src/robotlegs/bender/extensions/mediatorMap/impl/Mediator.ts b/src/robotlegs/bender/extensions/mediatorMap/impl/Mediator.ts index df297ec..f8264b2 100644 --- a/src/robotlegs/bender/extensions/mediatorMap/impl/Mediator.ts +++ b/src/robotlegs/bender/extensions/mediatorMap/impl/Mediator.ts @@ -9,30 +9,22 @@ import { injectable, inject, IClass, IEvent, IEventMap, IEventDispatcher, Event import { IMediator } from "../api/IMediator"; -import { ConvertToEventDispatcher } from "./ConvertToEventDispatcher"; - /** * Classic Robotlegs mediator implementation * *

Override initialize and destroy to hook into the mediator lifecycle.

*/ @injectable() -export abstract class Mediator implements IMediator { - /*============================================================================*/ - /* Private Properties */ - /*============================================================================*/ - - private _viewConverted: ConvertToEventDispatcher; - +export abstract class Mediator implements IMediator { /*============================================================================*/ /* Protected Properties */ /*============================================================================*/ @inject(IEventMap) - protected _eventMap: IEventMap; + protected eventMap: IEventMap; @inject(IEventDispatcher) - protected _eventDispatcher: IEventDispatcher; + protected eventDispatcher: IEventDispatcher; protected _viewComponent: T; @@ -42,7 +34,6 @@ export abstract class Mediator implements IM public set view(view: T) { this._viewComponent = view; - this._viewConverted = new ConvertToEventDispatcher(this._viewComponent); } public get view(): T { @@ -68,7 +59,7 @@ export abstract class Mediator implements IM * Cleans up listeners mapped through the local EventMap. */ public postDestroy(): void { - this._eventMap.unmapAllListeners(); + this.eventMap.unmapAllListeners(); } /*============================================================================*/ @@ -83,7 +74,7 @@ export abstract class Mediator implements IM useCapture?: boolean, priority?: number ): void { - this._eventMap.mapListener(this._viewConverted, eventString, listener, thisObject, eventClass, useCapture, priority); + this.eventMap.mapListener(this._viewComponent, eventString, listener, thisObject, eventClass, useCapture, priority); } protected addContextListener( @@ -94,7 +85,7 @@ export abstract class Mediator implements IM useCapture?: boolean, priority?: number ): void { - this._eventMap.mapListener(this._eventDispatcher, eventString, listener, thisObject, eventClass, useCapture, priority); + this.eventMap.mapListener(this.eventDispatcher, eventString, listener, thisObject, eventClass, useCapture, priority); } protected addDomListener( @@ -103,7 +94,7 @@ export abstract class Mediator implements IM listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions ): void { - this._eventMap.mapDomListener(eventTarget, eventString, listener, options); + this.eventMap.mapDomListener(eventTarget, eventString, listener, options); } protected removeViewListener( @@ -113,7 +104,7 @@ export abstract class Mediator implements IM eventClass?: IClass, useCapture?: boolean ): void { - this._eventMap.unmapListener(this._viewConverted, eventString, listener, thisObject, eventClass, useCapture); + this.eventMap.unmapListener(this._viewComponent, eventString, listener, thisObject, eventClass, useCapture); } protected removeContextListener( @@ -123,16 +114,16 @@ export abstract class Mediator implements IM eventClass?: IClass, useCapture?: boolean ): void { - this._eventMap.unmapListener(this._eventDispatcher, eventString, listener, thisObject, eventClass, useCapture); + this.eventMap.unmapListener(this.eventDispatcher, eventString, listener, thisObject, eventClass, useCapture); } protected removeDomListener(eventTarget: EventTarget, eventString: string, listener: EventListenerOrEventListenerObject): void { - this._eventMap.unmapDomListener(eventTarget, eventString, listener); + this.eventMap.unmapDomListener(eventTarget, eventString, listener); } protected dispatch(event: Event): void { - if (this._eventDispatcher.hasEventListener(event.type)) { - this._eventDispatcher.dispatchEvent(event); + if (this.eventDispatcher.hasEventListener(event.type)) { + this.eventDispatcher.dispatchEvent(event); } } } diff --git a/src/robotlegs/bender/extensions/mediatorMap/impl/MediatorManager.ts b/src/robotlegs/bender/extensions/mediatorMap/impl/MediatorManager.ts index 563198d..5d35e93 100644 --- a/src/robotlegs/bender/extensions/mediatorMap/impl/MediatorManager.ts +++ b/src/robotlegs/bender/extensions/mediatorMap/impl/MediatorManager.ts @@ -5,6 +5,8 @@ // in accordance with the terms of the license agreement accompanying it. // ------------------------------------------------------------------------------ +import { Event } from "@robotlegsjs/core"; + import { IMediatorMapping } from "../api/IMediatorMapping"; import { MediatorFactory } from "./MediatorFactory"; @@ -38,9 +40,8 @@ export class MediatorManager { */ public addMediator(mediator: any, item: any, mapping: IMediatorMapping): void { // Watch Display Object for removal - if (item instanceof createjs.DisplayObject && mapping.autoRemoveEnabled) { - (item)._onRemovedFromStage = this.onRemovedFromStage.bind(this, item); - item.on("removed", (item)._onRemovedFromStage, this); + if (item.addEventListener !== undefined && mapping.autoRemoveEnabled) { + item.addEventListener("removedFromStage", this.onRemovedFromStage); } // Synchronize with item life-cycle @@ -51,8 +52,9 @@ export class MediatorManager { * @private */ public removeMediator(mediator: any, item: any, mapping: IMediatorMapping): void { - if (item instanceof createjs.DisplayObject) { - item.off("removed", (item)._onRemovedFromStage); + // Watch Display Object for removal + if (item.removeEventListener !== undefined && mapping.autoRemoveEnabled) { + item.removeEventListener("removedFromStage", this.onRemovedFromStage); } this.destroyMediator(mediator); @@ -62,9 +64,9 @@ export class MediatorManager { /* Private Functions */ /*============================================================================*/ - private onRemovedFromStage(displayObject: any, fromContainer: any): void { - this._factory.removeMediators(displayObject); - } + private onRemovedFromStage = (event: Event): void => { + this._factory.removeMediators(event.target); + }; private initializeMediator(mediator: any, mediatedItem: any): void { if ("preInitialize" in mediator) { diff --git a/src/robotlegs/bender/extensions/mediatorMap/impl/MediatorMap.ts b/src/robotlegs/bender/extensions/mediatorMap/impl/MediatorMap.ts index fcca5cd..0f636b3 100755 --- a/src/robotlegs/bender/extensions/mediatorMap/impl/MediatorMap.ts +++ b/src/robotlegs/bender/extensions/mediatorMap/impl/MediatorMap.ts @@ -7,6 +7,8 @@ import { injectable, inject, IClass, IContext, ILogger, ITypeMatcher, TypeMatcher } from "@robotlegsjs/core"; +import { IDisplayObject } from "../../contextView/api/IDisplayObject"; + import { IMediatorMap } from "../api/IMediatorMap"; import { IMediatorMapper } from "../dsl/IMediatorMapper"; import { IMediatorUnmapper } from "../dsl/IMediatorUnmapper"; @@ -94,7 +96,7 @@ export class MediatorMap implements IMediatorMap, IViewHandler { /** * @inheritDoc */ - public handleView(view: createjs.DisplayObject, type: IClass): void { + public handleView(view: IDisplayObject, type: IClass): void { this._viewHandler.handleView(view, type); } diff --git a/src/robotlegs/bender/extensions/mediatorMap/impl/MediatorViewHandler.ts b/src/robotlegs/bender/extensions/mediatorMap/impl/MediatorViewHandler.ts index 1749d94..c702f65 100755 --- a/src/robotlegs/bender/extensions/mediatorMap/impl/MediatorViewHandler.ts +++ b/src/robotlegs/bender/extensions/mediatorMap/impl/MediatorViewHandler.ts @@ -7,6 +7,8 @@ import { IClass } from "@robotlegsjs/core"; +import { IDisplayObject } from "../../contextView/api/IDisplayObject"; + import { IMediatorMapping } from "../api/IMediatorMapping"; import { IViewHandler } from "../../viewManager/api/IViewHandler"; @@ -68,7 +70,7 @@ export class MediatorViewHandler implements IViewHandler { /** * @private */ - public handleView(view: createjs.DisplayObject, type: IClass): void { + public handleView(view: IDisplayObject, type: IClass): void { let interestedMappings = this.getInterestedMappingsFor(view, type); if (interestedMappings) { this._factory.createMediators(view, type, interestedMappings); diff --git a/src/robotlegs/bender/extensions/viewManager/StageCrawlerExtension.ts b/src/robotlegs/bender/extensions/viewManager/StageCrawlerExtension.ts index a5f7243..b693d4b 100644 --- a/src/robotlegs/bender/extensions/viewManager/StageCrawlerExtension.ts +++ b/src/robotlegs/bender/extensions/viewManager/StageCrawlerExtension.ts @@ -7,6 +7,8 @@ import { IContext, IExtension, IInjector, ILogger } from "@robotlegsjs/core"; +import { IDisplayObjectContainer } from "../contextView/api/IDisplayObjectContainer"; + import { IContextView } from "../contextView/api/IContextView"; import { IViewManager } from "./api/IViewManager"; @@ -56,7 +58,7 @@ export class StageCrawlerExtension implements IExtension { private scanViewManagedContainers(): void { this._logger.debug("ViewManager is installed. Checking for managed containers..."); let viewManager: IViewManager = this._injector.get(IViewManager); - viewManager.containers.forEach((container: createjs.Container) => { + viewManager.containers.forEach((container: IDisplayObjectContainer) => { this.scanContainer(container); }); } @@ -71,7 +73,7 @@ export class StageCrawlerExtension implements IExtension { } } - private scanContainer(container: createjs.Container): void { + private scanContainer(container: IDisplayObjectContainer): void { let binding: ContainerBinding = this._containerRegistry.getBinding(container); this._logger.debug("StageCrawler scanning container {0} ...", [container]); new StageCrawler(binding).scan(container); diff --git a/src/robotlegs/bender/extensions/viewManager/ViewManagerExtension.ts b/src/robotlegs/bender/extensions/viewManager/ViewManagerExtension.ts index cd3f75f..0ecf840 100644 --- a/src/robotlegs/bender/extensions/viewManager/ViewManagerExtension.ts +++ b/src/robotlegs/bender/extensions/viewManager/ViewManagerExtension.ts @@ -7,8 +7,8 @@ import { IContext, IExtension, IInjector } from "@robotlegsjs/core"; -import { IViewManager } from "./api/IViewManager"; -import { ViewManager } from "./impl/ViewManager"; +import { IViewManager } from "../viewManager/api/IViewManager"; +import { ViewManager } from "../viewManager/impl/ViewManager"; import { ContainerRegistry } from "./impl/ContainerRegistry"; diff --git a/src/robotlegs/bender/extensions/viewManager/api/IViewHandler.ts b/src/robotlegs/bender/extensions/viewManager/api/IViewHandler.ts index ee307ca..a15ae27 100644 --- a/src/robotlegs/bender/extensions/viewManager/api/IViewHandler.ts +++ b/src/robotlegs/bender/extensions/viewManager/api/IViewHandler.ts @@ -7,6 +7,8 @@ import { IClass } from "@robotlegsjs/core"; +import { IDisplayObject } from "../../contextView/api/IDisplayObject"; + /** * View handler contract */ @@ -16,5 +18,5 @@ export interface IViewHandler { * @param view The view instance to handle * @param type The class of the view instance */ - handleView(view: createjs.DisplayObject, type: IClass): void; + handleView(view: IDisplayObject, type: IClass): void; } diff --git a/src/robotlegs/bender/extensions/viewManager/api/IViewManager.ts b/src/robotlegs/bender/extensions/viewManager/api/IViewManager.ts index 415a713..2bf61ed 100644 --- a/src/robotlegs/bender/extensions/viewManager/api/IViewManager.ts +++ b/src/robotlegs/bender/extensions/viewManager/api/IViewManager.ts @@ -6,6 +6,9 @@ // ------------------------------------------------------------------------------ import { IEventDispatcher } from "@robotlegsjs/core"; + +import { IDisplayObjectContainer } from "../../contextView/api/IDisplayObjectContainer"; + import { IViewHandler } from "./IViewHandler"; /*[Event(name="containerAdd", type="robotlegs.bender.extensions.viewManager.impl.ViewManagerEvent")]*/ @@ -21,19 +24,19 @@ export interface IViewManager extends IEventDispatcher { /** * A list of currently registered containers */ - containers: createjs.Container[]; + containers: IDisplayObjectContainer[]; /** * Adds a container as a "view root" into the context * @param container */ - addContainer(container: createjs.Container): void; + addContainer(container: IDisplayObjectContainer): void; /** * Removes a container from this context * @param container */ - removeContainer(container: createjs.Container): void; + removeContainer(container: IDisplayObjectContainer): void; /** * Registers a view handler diff --git a/src/robotlegs/bender/extensions/viewManager/impl/ConfigureViewEvent.ts b/src/robotlegs/bender/extensions/viewManager/impl/ConfigureViewEvent.ts index e1d6ad7..eb76f5c 100644 --- a/src/robotlegs/bender/extensions/viewManager/impl/ConfigureViewEvent.ts +++ b/src/robotlegs/bender/extensions/viewManager/impl/ConfigureViewEvent.ts @@ -7,6 +7,8 @@ import { Event } from "@robotlegsjs/core"; +import { IDisplayObjectContainer } from "../../contextView/api/IDisplayObjectContainer"; + /** * View Configuration Event * @private @@ -22,12 +24,12 @@ export class ConfigureViewEvent extends Event { /* Public Properties */ /*============================================================================*/ - private _view: createjs.Container; + private _view: IDisplayObjectContainer; /** * The view instance associated with this event */ - public get view(): createjs.Container { + public get view(): IDisplayObjectContainer { return this._view; } @@ -40,7 +42,7 @@ export class ConfigureViewEvent extends Event { * @param type The event type * @param view The associated view instance */ - constructor(type: string, view: createjs.Container) { + constructor(type: string, view: IDisplayObjectContainer) { super(type, true); this._view = view; } diff --git a/src/robotlegs/bender/extensions/viewManager/impl/ContainerBinding.ts b/src/robotlegs/bender/extensions/viewManager/impl/ContainerBinding.ts index 6bc6ecf..11c08cb 100644 --- a/src/robotlegs/bender/extensions/viewManager/impl/ContainerBinding.ts +++ b/src/robotlegs/bender/extensions/viewManager/impl/ContainerBinding.ts @@ -7,6 +7,9 @@ import { IClass, EventDispatcher } from "@robotlegsjs/core"; +import { IDisplayObject } from "../../contextView/api/IDisplayObject"; +import { IDisplayObjectContainer } from "../../contextView/api/IDisplayObjectContainer"; + import { IViewHandler } from "../api/IViewHandler"; import { ContainerBindingEvent } from "./ContainerBindingEvent"; @@ -36,12 +39,12 @@ export class ContainerBinding extends EventDispatcher { this._parent = value; } - private _container: createjs.Container; + private _container: IDisplayObjectContainer; /** * @private */ - public get container(): createjs.Container { + public get container(): IDisplayObjectContainer { return this._container; } @@ -58,7 +61,7 @@ export class ContainerBinding extends EventDispatcher { /** * @private */ - constructor(container: createjs.Container) { + constructor(container: IDisplayObjectContainer) { super(); this._container = container; } @@ -93,7 +96,7 @@ export class ContainerBinding extends EventDispatcher { /** * @private */ - public handleView(view: createjs.DisplayObject, type: IClass): void { + public handleView(view: IDisplayObject, type: IClass): void { let length: number = this._handlers.length; for (let i: number = 0; i < length; i++) { let handler: IViewHandler = this._handlers[i]; diff --git a/src/robotlegs/bender/extensions/viewManager/impl/ContainerRegistry.ts b/src/robotlegs/bender/extensions/viewManager/impl/ContainerRegistry.ts index 7f156cb..fedb2a0 100755 --- a/src/robotlegs/bender/extensions/viewManager/impl/ContainerRegistry.ts +++ b/src/robotlegs/bender/extensions/viewManager/impl/ContainerRegistry.ts @@ -7,6 +7,8 @@ import { EventDispatcher } from "@robotlegsjs/core"; +import { IDisplayObjectContainer } from "../../contextView/api/IDisplayObjectContainer"; + import { ContainerBinding } from "./ContainerBinding"; import { ContainerBindingEvent } from "./ContainerBindingEvent"; import { ContainerRegistryEvent } from "./ContainerRegistryEvent"; @@ -46,7 +48,7 @@ export class ContainerRegistry extends EventDispatcher { /* Private Properties */ /*============================================================================*/ - private _bindingByContainer: Map = new Map(); + private _bindingByContainer: Map = new Map(); /*============================================================================*/ /* Public Functions */ @@ -55,7 +57,7 @@ export class ContainerRegistry extends EventDispatcher { /** * @private */ - public addContainer(container: createjs.Container): ContainerBinding { + public addContainer(container: IDisplayObjectContainer): ContainerBinding { let binding = this._bindingByContainer.get(container); if (!binding) { binding = this.createBinding(container); @@ -67,7 +69,7 @@ export class ContainerRegistry extends EventDispatcher { /** * @private */ - public removeContainer(container: createjs.Container): ContainerBinding { + public removeContainer(container: IDisplayObjectContainer): ContainerBinding { let binding: ContainerBinding = this._bindingByContainer.get(container); if (binding) { @@ -82,8 +84,8 @@ export class ContainerRegistry extends EventDispatcher { * * @private */ - public findParentBinding(target: createjs.Container): ContainerBinding { - let parent: createjs.Container = target.parent; + public findParentBinding(target: IDisplayObjectContainer): ContainerBinding { + let parent: IDisplayObjectContainer = target.parent; while (parent) { let binding: ContainerBinding = this._bindingByContainer.get(parent); if (binding) { @@ -97,7 +99,7 @@ export class ContainerRegistry extends EventDispatcher { /** * @private */ - public getBinding(container: createjs.Container): ContainerBinding { + public getBinding(container: IDisplayObjectContainer): ContainerBinding { return this._bindingByContainer.get(container); } @@ -105,12 +107,12 @@ export class ContainerRegistry extends EventDispatcher { /* Private Functions */ /*============================================================================*/ - private createBinding(container: createjs.Container): ContainerBinding { + private createBinding(container: IDisplayObjectContainer): ContainerBinding { let binding: ContainerBinding = new ContainerBinding(container); this._bindings.push(binding); // Add a listener so that we can remove this binding when it has no handlers - binding.addEventListener(ContainerBindingEvent.BINDING_EMPTY, this.onBindingEmpty.bind(this)); + binding.addEventListener(ContainerBindingEvent.BINDING_EMPTY, this.onBindingEmpty); // If the new binding doesn't have a parent it is a Root binding.parent = this.findParentBinding(container); @@ -176,7 +178,7 @@ export class ContainerRegistry extends EventDispatcher { this.dispatchEvent(new ContainerRegistryEvent(ContainerRegistryEvent.ROOT_CONTAINER_REMOVE, binding.container)); } - private onBindingEmpty(event: ContainerBindingEvent): void { + private onBindingEmpty = (event: ContainerBindingEvent): void => { this.removeBinding(event.target); - } + }; } diff --git a/src/robotlegs/bender/extensions/viewManager/impl/ContainerRegistryEvent.ts b/src/robotlegs/bender/extensions/viewManager/impl/ContainerRegistryEvent.ts index 0ec0b79..d0c9811 100644 --- a/src/robotlegs/bender/extensions/viewManager/impl/ContainerRegistryEvent.ts +++ b/src/robotlegs/bender/extensions/viewManager/impl/ContainerRegistryEvent.ts @@ -7,6 +7,8 @@ import { Event } from "@robotlegsjs/core"; +import { IDisplayObjectContainer } from "../../contextView/api/IDisplayObjectContainer"; + /** * Container existence event * @private @@ -28,12 +30,12 @@ export class ContainerRegistryEvent extends Event { /* Public Properties */ /*============================================================================*/ - private _container: createjs.Container; + private _container: IDisplayObjectContainer; /** * The container associated with this event */ - public get container(): createjs.Container { + public get container(): IDisplayObjectContainer { return this._container; } @@ -46,7 +48,7 @@ export class ContainerRegistryEvent extends Event { * @param type The event type * @param container The container associated with this event */ - constructor(type: string, container: createjs.Container) { + constructor(type: string, container: IDisplayObjectContainer) { super(type); this._container = container; } diff --git a/src/robotlegs/bender/extensions/viewManager/impl/ManualStageObserver.ts b/src/robotlegs/bender/extensions/viewManager/impl/ManualStageObserver.ts index 98d947b..0940581 100644 --- a/src/robotlegs/bender/extensions/viewManager/impl/ManualStageObserver.ts +++ b/src/robotlegs/bender/extensions/viewManager/impl/ManualStageObserver.ts @@ -7,6 +7,9 @@ import { IClass } from "@robotlegsjs/core"; +import { IDisplayObject } from "../../contextView/api/IDisplayObject"; +import { IDisplayObjectContainer } from "../../contextView/api/IDisplayObjectContainer"; + import { ContainerRegistryEvent } from "./ContainerRegistryEvent"; import { ContainerRegistry } from "./ContainerRegistry"; @@ -23,7 +26,6 @@ export class ManualStageObserver { /*============================================================================*/ private _registry: ContainerRegistry; - private _eventListener: (event: ConfigureViewEvent) => void; /*============================================================================*/ /* Constructor */ @@ -36,8 +38,8 @@ export class ManualStageObserver { this._registry = containerRegistry; // We care about all containers (not just roots) - this._registry.addEventListener(ContainerRegistryEvent.CONTAINER_ADD, this.onContainerAdd, this); - this._registry.addEventListener(ContainerRegistryEvent.CONTAINER_REMOVE, this.onContainerRemove, this); + this._registry.addEventListener(ContainerRegistryEvent.CONTAINER_ADD, this.onContainerAdd); + this._registry.addEventListener(ContainerRegistryEvent.CONTAINER_REMOVE, this.onContainerRemove); // We might have arrived late on the scene this._registry.bindings.forEach((binding: ContainerBinding) => { @@ -53,8 +55,8 @@ export class ManualStageObserver { * @private */ public destroy(): void { - this._registry.removeEventListener(ContainerRegistryEvent.CONTAINER_ADD, this.onContainerAdd, this); - this._registry.removeEventListener(ContainerRegistryEvent.CONTAINER_REMOVE, this.onContainerRemove, this); + this._registry.removeEventListener(ContainerRegistryEvent.CONTAINER_ADD, this.onContainerAdd); + this._registry.removeEventListener(ContainerRegistryEvent.CONTAINER_REMOVE, this.onContainerRemove); this._registry.rootBindings.forEach((binding: ContainerBinding) => { this.removeContainerListener(binding.container); @@ -65,32 +67,31 @@ export class ManualStageObserver { /* Private Functions */ /*============================================================================*/ - private onContainerAdd(event: ContainerRegistryEvent): void { + private onContainerAdd = (event: ContainerRegistryEvent): void => { this.addContainerListener(event.container); - } + }; - private onContainerRemove(event: ContainerRegistryEvent): void { + private onContainerRemove = (event: ContainerRegistryEvent): void => { this.removeContainerListener(event.container); - } + }; - private addContainerListener(container: createjs.Container): void { + private addContainerListener(container: IDisplayObjectContainer): void { // We're interested in ALL container bindings // but just for normal, bubbling events - this._eventListener = this.onConfigureView.bind(this); - container.addEventListener(ConfigureViewEvent.CONFIGURE_VIEW, this._eventListener); + container.addEventListener(ConfigureViewEvent.CONFIGURE_VIEW, this.onConfigureView); } - private removeContainerListener(container: createjs.Container): void { - container.removeEventListener(ConfigureViewEvent.CONFIGURE_VIEW, this._eventListener); + private removeContainerListener(container: IDisplayObjectContainer): void { + container.removeEventListener(ConfigureViewEvent.CONFIGURE_VIEW, this.onConfigureView); } - private onConfigureView(event: ConfigureViewEvent): void { + private onConfigureView = (event: ConfigureViewEvent): void => { // Stop that event! event.stopPropagation(); - let container: createjs.Container = event.currentTarget; - let view: createjs.DisplayObject = event.target; + let container: IDisplayObjectContainer = event.currentTarget; + let view: IDisplayObject = event.target; let type: IClass = >view.constructor; this._registry.getBinding(container).handleView(view, type); - } + }; } diff --git a/src/robotlegs/bender/extensions/viewManager/impl/StageCrawler.ts b/src/robotlegs/bender/extensions/viewManager/impl/StageCrawler.ts index a45a50a..4821f1c 100644 --- a/src/robotlegs/bender/extensions/viewManager/impl/StageCrawler.ts +++ b/src/robotlegs/bender/extensions/viewManager/impl/StageCrawler.ts @@ -7,6 +7,9 @@ import { IClass } from "@robotlegsjs/core"; +import { IDisplayObject } from "../../contextView/api/IDisplayObject"; +import { IDisplayObjectContainer } from "../../contextView/api/IDisplayObjectContainer"; + import { ContainerBinding } from "./ContainerBinding"; /** @@ -37,7 +40,7 @@ export class StageCrawler { /** * @private */ - public scan(container: createjs.Container): void { + public scan(container: IDisplayObjectContainer): void { this.scanContainer(container); } @@ -45,19 +48,19 @@ export class StageCrawler { /* Private Functions */ /*============================================================================*/ - private scanContainer(container: createjs.Container): void { + private scanContainer(container: IDisplayObjectContainer): void { this.processView(container); - container.children.forEach(child => { - if (child instanceof createjs.Container) { - this.scanContainer(child); + container.children.forEach((child: IDisplayObject) => { + if ((child).children !== undefined) { + this.scanContainer(child); } else { this.processView(child); } }); } - private processView(view: createjs.DisplayObject): void { + private processView(view: IDisplayObject): void { this._binding.handleView(view, >view.constructor); } } diff --git a/src/robotlegs/bender/extensions/viewManager/impl/StageObserver.ts b/src/robotlegs/bender/extensions/viewManager/impl/StageObserver.ts index b97d194..598cc63 100644 --- a/src/robotlegs/bender/extensions/viewManager/impl/StageObserver.ts +++ b/src/robotlegs/bender/extensions/viewManager/impl/StageObserver.ts @@ -5,7 +5,9 @@ // in accordance with the terms of the license agreement accompanying it. // ------------------------------------------------------------------------------ -import { IClass } from "@robotlegsjs/core"; +import { IClass, IEvent } from "@robotlegsjs/core"; + +import { IDisplayObjectContainer } from "../../contextView/api/IDisplayObjectContainer"; import { ContainerBinding } from "./ContainerBinding"; import { ContainerRegistry } from "./ContainerRegistry"; @@ -20,7 +22,6 @@ export class StageObserver { /*============================================================================*/ private _registry: ContainerRegistry; - private _containerListener: (event: createjs.Event) => void; /*============================================================================*/ /* Constructor */ @@ -33,8 +34,8 @@ export class StageObserver { this._registry = containerRegistry; // We only care about roots - this._registry.addEventListener(ContainerRegistryEvent.ROOT_CONTAINER_ADD, this.onRootContainerAdd, this); - this._registry.addEventListener(ContainerRegistryEvent.ROOT_CONTAINER_REMOVE, this.onRootContainerRemove, this); + this._registry.addEventListener(ContainerRegistryEvent.ROOT_CONTAINER_ADD, this.onRootContainerAdd); + this._registry.addEventListener(ContainerRegistryEvent.ROOT_CONTAINER_REMOVE, this.onRootContainerRemove); // We might have arrived late on the scene this._registry.rootBindings.forEach((binding: ContainerBinding) => { @@ -50,8 +51,8 @@ export class StageObserver { * @private */ public destroy(): void { - this._registry.removeEventListener(ContainerRegistryEvent.ROOT_CONTAINER_ADD, this.onRootContainerAdd, this); - this._registry.removeEventListener(ContainerRegistryEvent.ROOT_CONTAINER_REMOVE, this.onRootContainerRemove, this); + this._registry.removeEventListener(ContainerRegistryEvent.ROOT_CONTAINER_ADD, this.onRootContainerAdd); + this._registry.removeEventListener(ContainerRegistryEvent.ROOT_CONTAINER_REMOVE, this.onRootContainerRemove); this._registry.rootBindings.forEach((binding: ContainerBinding) => { this.removeRootListener(binding.container); @@ -62,25 +63,24 @@ export class StageObserver { /* Private Functions */ /*============================================================================*/ - private onRootContainerAdd(event: ContainerRegistryEvent): void { + private onRootContainerAdd = (event: ContainerRegistryEvent): void => { this.addRootListener(event.container); - } + }; - private onRootContainerRemove(event: ContainerRegistryEvent): void { + private onRootContainerRemove = (event: ContainerRegistryEvent): void => { this.removeRootListener(event.container); - } + }; - private addRootListener(container: createjs.Container): void { - this._containerListener = this.onViewAddedToStage.bind(this); - container.addEventListener("added", this._containerListener); + private addRootListener(container: IDisplayObjectContainer): void { + container.addEventListener("addedToStage", this.onViewAddedToStage); } - private removeRootListener(container: createjs.Container): void { - container.removeEventListener("added", this._containerListener); + private removeRootListener(container: IDisplayObjectContainer): void { + container.removeEventListener("addedToStage", this.onViewAddedToStage); } - private onViewAddedToStage(event: createjs.Event): void { - let view: createjs.Container = event.data; + private onViewAddedToStage = (event: IEvent): void => { + let view: IDisplayObjectContainer = event.target; let type: IClass = >view.constructor; // Walk upwards from the nearest binding @@ -89,5 +89,5 @@ export class StageObserver { binding.handleView(view, type); binding = binding.parent; } - } + }; } diff --git a/src/robotlegs/bender/extensions/viewManager/impl/ViewManager.ts b/src/robotlegs/bender/extensions/viewManager/impl/ViewManager.ts index c30fe27..259b447 100644 --- a/src/robotlegs/bender/extensions/viewManager/impl/ViewManager.ts +++ b/src/robotlegs/bender/extensions/viewManager/impl/ViewManager.ts @@ -7,13 +7,15 @@ import { injectable, inject, EventDispatcher } from "@robotlegsjs/core"; +import { IDisplayObjectContainer } from "../../contextView/api/IDisplayObjectContainer"; + import { IViewHandler } from "../api/IViewHandler"; import { IViewManager } from "../api/IViewManager"; import { ViewManagerEvent } from "./ViewManagerEvent"; -import { ContainerRegistry } from "./ContainerRegistry"; -import { ContainerBinding } from "./ContainerBinding"; +import { ContainerRegistry } from "../impl/ContainerRegistry"; +import { ContainerBinding } from "../impl/ContainerBinding"; /*[Event(name="containerAdd", type="robotlegs.bender.extensions.viewManager.impl.ViewManagerEvent")]*/ /*[Event(name="containerRemove", type="robotlegs.bender.extensions.viewManager.impl.ViewManagerEvent")]*/ @@ -29,12 +31,12 @@ export class ViewManager extends EventDispatcher implements IViewManager { /* Public Properties */ /*============================================================================*/ - private _containers: createjs.Container[] = []; + private _containers: IDisplayObjectContainer[] = []; /** * @inheritDoc */ - public get containers(): createjs.Container[] { + public get containers(): IDisplayObjectContainer[] { return this._containers; } @@ -65,7 +67,7 @@ export class ViewManager extends EventDispatcher implements IViewManager { /** * @inheritDoc */ - public addContainer(container: createjs.Container): void { + public addContainer(container: IDisplayObjectContainer): void { if (!this.validContainer(container)) { return; } @@ -81,7 +83,7 @@ export class ViewManager extends EventDispatcher implements IViewManager { /** * @inheritDoc */ - public removeContainer(container: createjs.Container): void { + public removeContainer(container: IDisplayObjectContainer): void { let index: number = this._containers.indexOf(container); if (index === -1) { @@ -151,7 +153,7 @@ export class ViewManager extends EventDispatcher implements IViewManager { /* Private Functions */ /*============================================================================*/ - private validContainer(container: createjs.Container): boolean { + private validContainer(container: IDisplayObjectContainer): boolean { let isValid: boolean = this._containers.indexOf(container) < 0; if (isValid) { diff --git a/src/robotlegs/bender/extensions/viewManager/impl/ViewManagerEvent.ts b/src/robotlegs/bender/extensions/viewManager/impl/ViewManagerEvent.ts index e7fa9ae..fdded22 100644 --- a/src/robotlegs/bender/extensions/viewManager/impl/ViewManagerEvent.ts +++ b/src/robotlegs/bender/extensions/viewManager/impl/ViewManagerEvent.ts @@ -7,6 +7,8 @@ import { Event } from "@robotlegsjs/core"; +import { IDisplayObjectContainer } from "../../contextView/api/IDisplayObjectContainer"; + import { IViewHandler } from "../api/IViewHandler"; /** @@ -30,12 +32,12 @@ export class ViewManagerEvent extends Event { /* Public Properties */ /*============================================================================*/ - private _container: createjs.Container; + private _container: IDisplayObjectContainer; /** * The container associated with this event */ - public get container(): createjs.Container { + public get container(): IDisplayObjectContainer { return this._container; } @@ -58,7 +60,7 @@ export class ViewManagerEvent extends Event { * @param container The container associated with this event * @param handler The view handler associated with this event */ - constructor(type: string, container?: createjs.Container, handler?: IViewHandler) { + constructor(type: string, container?: IDisplayObjectContainer, handler?: IViewHandler) { super(type); this._container = container; this._handler = handler; From 158664f35936c2deca3724dd4736b726dfadaab3 Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 22:16:01 +0200 Subject: [PATCH 08/18] add event dispatcher definitions, to make createjs.EventDispatcher compatible with IEventDispatcher --- definitions/createjs.d.ts | 17 +++++++++++++++ .../createjs/patch/eventDispatcher-patch.ts | 21 +++++++++++++++++++ test/entry.ts | 1 + tsconfig.json | 3 ++- 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 definitions/createjs.d.ts create mode 100644 src/robotlegs/bender/bundles/createjs/patch/eventDispatcher-patch.ts diff --git a/definitions/createjs.d.ts b/definitions/createjs.d.ts new file mode 100644 index 0000000..0838bdb --- /dev/null +++ b/definitions/createjs.d.ts @@ -0,0 +1,17 @@ +// ------------------------------------------------------------------------------ +// Copyright (c) 2017-present, RobotlegsJS. All Rights Reserved. +// +// NOTICE: You are permitted to use, modify, and distribute this file +// in accordance with the terms of the license agreement accompanying it. +// ------------------------------------------------------------------------------ + +/** + * Augment CreateJS module to recognize EventDispatcher patch. + */ +declare namespace createjs { + interface IEventDispatcher { + once(type: string, listener: Function, thisObject?: any, useCapture?: boolean, priority?: number): void; + } + + export interface EventDispatcher extends IEventDispatcher {} +} diff --git a/src/robotlegs/bender/bundles/createjs/patch/eventDispatcher-patch.ts b/src/robotlegs/bender/bundles/createjs/patch/eventDispatcher-patch.ts new file mode 100644 index 0000000..2c3dfe6 --- /dev/null +++ b/src/robotlegs/bender/bundles/createjs/patch/eventDispatcher-patch.ts @@ -0,0 +1,21 @@ +// ------------------------------------------------------------------------------ +// Copyright (c) 2017-present, RobotlegsJS. All Rights Reserved. +// +// NOTICE: You are permitted to use, modify, and distribute this file +// in accordance with the terms of the license agreement accompanying it. +// ------------------------------------------------------------------------------ + +/** + * Patch PIXI event handling. + * + * - Proxy PIXI events to be compatible with EventDispatcher + * - Implements event bubbling on `dispatchEvent` when `bubbles` is true. + */ + +const EventDispatcherMixin = { + once(type: string, listener: Function, thisObject?: any, useCapture?: boolean, priority?: number): void { + this.on(type, listener, thisObject, true, null, useCapture); + } +}; + +Object.assign(createjs.EventDispatcher.prototype, EventDispatcherMixin); diff --git a/test/entry.ts b/test/entry.ts index e451446..86fffe4 100644 --- a/test/entry.ts +++ b/test/entry.ts @@ -5,6 +5,7 @@ // in accordance with the terms of the license agreement accompanying it. // ------------------------------------------------------------------------------ +/// /// import "reflect-metadata"; diff --git a/tsconfig.json b/tsconfig.json index 4739303..ee3307c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -25,6 +25,7 @@ "./src/**/*.ts" ], "files": [ - "./node_modules/@types/easeljs/index.d.ts" + "./node_modules/@types/easeljs/index.d.ts", + "./definitions/createjs.d.ts" ] } From 16c2e02469a533f5fd42a98dd7ef593ce5e4f486 Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 22:17:59 +0200 Subject: [PATCH 09/18] apply createjs patch to current view --- src/robotlegs/bender/bundles/createjs/CreateJSBundle.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/robotlegs/bender/bundles/createjs/CreateJSBundle.ts b/src/robotlegs/bender/bundles/createjs/CreateJSBundle.ts index d11a456..e165aba 100644 --- a/src/robotlegs/bender/bundles/createjs/CreateJSBundle.ts +++ b/src/robotlegs/bender/bundles/createjs/CreateJSBundle.ts @@ -62,7 +62,7 @@ export class CreateJSBundle implements IBundle { /*============================================================================*/ private handleContextView(contextView: ContextView): void { - applyCreateJSPatch(contextView.view); + applyCreateJSPatch(contextView.view); this._context.configure(ContextViewListenerConfig); } From 6212e95d3b8f9005aff430b86df27f3f2a4d2ea7 Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 22:21:28 +0200 Subject: [PATCH 10/18] update createjs patch to dispatch 'addedToStage' and 'removedFromStage' events --- .../bender/bundles/createjs/patch/createjs-patch.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/robotlegs/bender/bundles/createjs/patch/createjs-patch.ts b/src/robotlegs/bender/bundles/createjs/patch/createjs-patch.ts index a728331..1ae6426 100644 --- a/src/robotlegs/bender/bundles/createjs/patch/createjs-patch.ts +++ b/src/robotlegs/bender/bundles/createjs/patch/createjs-patch.ts @@ -10,16 +10,20 @@ * - emit "added"/"removed" events on stage */ +import "./eventDispatcher-patch"; + +import { Event } from "@robotlegsjs/core"; + function isConnectedToStage(stage: createjs.Stage, displayObject: createjs.DisplayObject): boolean { return displayObject.stage === stage; } function emitAddedEvent(stage: createjs.Stage, target: createjs.DisplayObject): void { - let event: createjs.Event = new createjs.Event("added", true, false); + let event: Event = new Event("addedToStage", true); event.data = target; - stage.dispatchEvent(event); + target.dispatchEvent(event); if (target instanceof createjs.Container) { target.children.forEach(child => emitAddedEvent(stage, child)); @@ -27,11 +31,11 @@ function emitAddedEvent(stage: createjs.Stage, target: createjs.DisplayObject): } function emitRemovedEvent(stage: createjs.Stage, target: createjs.DisplayObject): void { - let event: createjs.Event = new createjs.Event("removed", true, false); + let event: Event = new Event("removedFromStage", true); event.data = target; - stage.dispatchEvent(event); + target.dispatchEvent(event); if (target instanceof createjs.Container) { target.children.forEach(child => emitRemovedEvent(stage, child)); From 387894a05c1c93d85bfa1e363b9488a6efb72378 Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 22:23:06 +0200 Subject: [PATCH 11/18] update createjs listeners --- .../createjs/patch/createjsPatch.test.ts | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/test/robotlegs/bender/bundles/createjs/patch/createjsPatch.test.ts b/test/robotlegs/bender/bundles/createjs/patch/createjsPatch.test.ts index d229934..d7b1b84 100644 --- a/test/robotlegs/bender/bundles/createjs/patch/createjsPatch.test.ts +++ b/test/robotlegs/bender/bundles/createjs/patch/createjsPatch.test.ts @@ -58,7 +58,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("added", () => { + stage.on("addedToStage", () => { count++; }); @@ -89,7 +89,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("added", () => { + stage.on("addedToStage", () => { count++; }); @@ -109,7 +109,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("added", () => { + stage.on("addedToStage", () => { count++; }); @@ -133,7 +133,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("added", () => { + stage.on("addedToStage", () => { count++; }); @@ -161,7 +161,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("added", () => { + stage.on("addedToStage", () => { count++; }); @@ -229,7 +229,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("added", () => { + stage.on("addedToStage", () => { count++; }); @@ -253,7 +253,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("added", () => { + stage.on("addedToStage", () => { count++; }); @@ -277,7 +277,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("added", () => { + stage.on("addedToStage", () => { count++; }); @@ -326,7 +326,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("removed", () => { + stage.on("removedFromStage", () => { count++; }); @@ -352,7 +352,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("removed", () => { + stage.on("removedFromStage", () => { count++; }); @@ -382,7 +382,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("removed", () => { + stage.on("removedFromStage", () => { count++; }); @@ -419,7 +419,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("removed", () => { + stage.on("removedFromStage", () => { count++; }); @@ -445,7 +445,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("removed", () => { + stage.on("removedFromStage", () => { count++; }); @@ -487,7 +487,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("removed", () => { + stage.on("removedFromStage", () => { count++; }); @@ -509,7 +509,7 @@ describe("CreateJSPatch", () => { let count: number = 0; - stage.on("removed", () => { + stage.on("removedFromStage", () => { count++; }); @@ -550,11 +550,11 @@ describe("CreateJSPatch", () => { let countAdded: number = 0; let countRemoved: number = 0; - stage.on("added", () => { + stage.on("addedToStage", () => { countAdded++; }); - stage.on("removed", () => { + stage.on("removedFromStage", () => { countRemoved++; }); From 2dc323e06f0611acd833e2de758bd0940b5a897a Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 22:26:58 +0200 Subject: [PATCH 12/18] add reference to createjs.d.ts --- example/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/example/index.ts b/example/index.ts index 1bcb81b..c85d3da 100755 --- a/example/index.ts +++ b/example/index.ts @@ -5,6 +5,8 @@ // in accordance with the terms of the license agreement accompanying it. // ------------------------------------------------------------------------------ +/// + import "reflect-metadata"; import { Game } from "./Game"; From 903c2b217cf9cc367400063fb7ac9fd65ae44768 Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 22:33:37 +0200 Subject: [PATCH 13/18] show pointer cursor when mouse is over buttons --- example/view/RobotlegsView.ts | 4 ++++ example/view/SmileyView.ts | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/example/view/RobotlegsView.ts b/example/view/RobotlegsView.ts index 214cc6f..81d8b3f 100644 --- a/example/view/RobotlegsView.ts +++ b/example/view/RobotlegsView.ts @@ -10,6 +10,7 @@ export class RobotlegsView extends createjs.Container { super(); this.loadLogo(); + this.enable(); } private loadLogo(): void { @@ -36,8 +37,11 @@ export class RobotlegsView extends createjs.Container { graphics.drawRect(bitmap.x, bitmap.y, logo.width, logo.height); this.hitArea = area; + } + private enable(): void { this.mouseEnabled = true; this.mouseChildren = false; + this.cursor = "pointer"; } } diff --git a/example/view/SmileyView.ts b/example/view/SmileyView.ts index d9b4521..987b868 100644 --- a/example/view/SmileyView.ts +++ b/example/view/SmileyView.ts @@ -15,6 +15,7 @@ export class SmileyView extends createjs.Container { this.drawSmiley(); this.move(); + this.enable(); } private drawSmiley(): void { @@ -54,4 +55,10 @@ export class SmileyView extends createjs.Container { this.y = Math.max(this.y, this._radius); this.y = Math.min(this.y, 400 - this._radius); } + + private enable(): void { + this.mouseEnabled = true; + this.mouseChildren = false; + this.cursor = "pointer"; + } } From e37081a1e6343555dc7b2a9ee5dc80474d3ee597 Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 22:50:13 +0200 Subject: [PATCH 14/18] add lib-example to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 2020ac9..13ea86a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ coverage dist/lib dist-test lib +lib-example lib-test node_modules *.as From 84b9ed38d69912dcac5e522aa7f73f66043759e0 Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 22:53:14 +0200 Subject: [PATCH 15/18] rename tsconfig file --- example/{tscontig.json => tsconfig.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename example/{tscontig.json => tsconfig.json} (100%) diff --git a/example/tscontig.json b/example/tsconfig.json similarity index 100% rename from example/tscontig.json rename to example/tsconfig.json From 97e056b839c22f37a26a3f95dce1b1ddebfe422c Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 22:55:57 +0200 Subject: [PATCH 16/18] update example --- example/Game.ts | 4 ++++ example/index.ts | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/example/Game.ts b/example/Game.ts index 20abbd1..94cab65 100644 --- a/example/Game.ts +++ b/example/Game.ts @@ -5,6 +5,10 @@ // in accordance with the terms of the license agreement accompanying it. // ------------------------------------------------------------------------------ +/// + +import "reflect-metadata"; + import { Context, MVCSBundle } from "@robotlegsjs/core"; import { ContextView, CreateJSBundle } from "../src"; diff --git a/example/index.ts b/example/index.ts index c85d3da..9f7eacc 100755 --- a/example/index.ts +++ b/example/index.ts @@ -5,10 +5,6 @@ // in accordance with the terms of the license agreement accompanying it. // ------------------------------------------------------------------------------ -/// - -import "reflect-metadata"; - import { Game } from "./Game"; (window).initGame = () => { From f98db43bf541376d6bc1eeb3359f27f9e31e708f Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 22:57:15 +0200 Subject: [PATCH 17/18] update readme --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 27e53dc..81d00ba 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,10 @@ Usage --- ```typescript +/// + +import "reflect-metadata"; + import { Context, MVCSBundle } from "@robotlegsjs/core"; import { ContextView, CreateJSBundle } from "@robotlegsjs/createjs"; From a4bea64e74c3e5f0533160966665d3ac5c5f056c Mon Sep 17 00:00:00 2001 From: Tiago Schenkel Date: Tue, 21 Aug 2018 23:15:35 +0200 Subject: [PATCH 18/18] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 81d00ba..8e79ba5 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ Usage --- ```typescript -/// +/// import "reflect-metadata";