Skip to content

Commit

Permalink
only flatten listeners on remove
Browse files Browse the repository at this point in the history
  • Loading branch information
pzuraq committed Sep 10, 2018
1 parent 87897d6 commit 8c0d32c
Showing 1 changed file with 40 additions and 15 deletions.
55 changes: 40 additions & 15 deletions packages/@ember/-internals/meta/lib/meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,7 @@ export class Meta {

removeFromListeners(eventName: string, target: object | null, method: Function | string): void {
this.pushListener(eventName, target, method, ListenerKind.REMOVE);
this.flattenedListeners();
}

removeAllListeners(event: string) {
Expand Down Expand Up @@ -636,27 +637,51 @@ export class Meta {
return this._listeners;
}

matchingListeners(eventName: string): (string | boolean | object | null)[] | undefined | void {
let listeners = this.flattenedListeners();
// matchingListeners(eventName: string): (string | boolean | object | null)[] | undefined | void {
// let listeners = this.flattenedListeners();

// if (listeners !== undefined) {
// let result = [];

// for (let index = 0; index < listeners.length; index++) {
// let listener = listeners[index];

if (listeners !== undefined) {
let result = [];
// // REMOVE and REMOVE_ALL listeners are placeholders that tell us not to
// // inherit, so they never match. Only ADD and ONCE can match.
// if (
// listener.event === eventName &&
// (listener.kind === ListenerKind.ADD || listener.kind === ListenerKind.ONCE)
// ) {
// result.push(listener.target!, listener.method, listener.kind === ListenerKind.ONCE);
// }
// }

for (let index = 0; index < listeners.length; index++) {
let listener = listeners[index];
// return result.length === 0 ? undefined : result;
// }
// }

// REMOVE and REMOVE_ALL listeners are placeholders that tell us not to
// inherit, so they never match. Only ADD and ONCE can match.
if (
listener.event === eventName &&
(listener.kind === ListenerKind.ADD || listener.kind === ListenerKind.ONCE)
) {
result.push(listener.target!, listener.method, listener.kind === ListenerKind.ONCE);
matchingListeners(eventName: string): (string | boolean | object | null)[] | undefined | void {
let pointer: Meta | null = this;
// fix type
let result: any[] | undefined;
while (pointer !== null) {
let listeners = pointer._listeners;
if (listeners !== undefined) {
for (let index = 0; index < listeners.length; index += 1) {
let listener = listeners[index];

if (listener.event === eventName && (listener.kind === ListenerKind.ADD || listener.kind === ListenerKind.ONCE)) {
result = result || [];
result.push(listener.target!, listener.method, listener.kind === ListenerKind.ONCE);
}
}
}

return result.length === 0 ? undefined : result;
if (pointer._isFlattened()) {
break;
}
pointer = pointer.parent;
}
return result;
}
}

Expand Down

0 comments on commit 8c0d32c

Please sign in to comment.