Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dist/signals.min.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions src/org/osflash/signals/IOnceSignal.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { ISlot } from "./ISlot";

/**
*
*/
Expand Down Expand Up @@ -41,6 +42,5 @@ export interface IOnceSignal {
/**
* Unsubscribes all listeners from the signal.
*/
removeAll(): void
removeAll(): void;
}

5 changes: 2 additions & 3 deletions src/org/osflash/signals/IPrioritySignal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export interface IPrioritySignal extends ISignal {
* @return a ISlot, which contains the Function passed as the parameter
* @see ISlot
*/
addWithPriority(listener: Function, priority: number): ISlot
addWithPriority(listener: Function, priority: number): ISlot;

/**
* Subscribes a one-time listener for this signal.
Expand All @@ -34,6 +34,5 @@ export interface IPrioritySignal extends ISignal {
* @return a ISlot, which contains the Function passed as the parameter
* @see ISlot
*/
addOnceWithPriority(listener: Function, priority: number): ISlot
addOnceWithPriority(listener: Function, priority: number): ISlot;
}

2 changes: 1 addition & 1 deletion src/org/osflash/signals/ISignal.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { ISlot } from "./ISlot";
import { IOnceSignal } from "./IOnceSignal";

/**
*
*/
Expand All @@ -14,4 +15,3 @@ export interface ISignal extends IOnceSignal {
*/
add(listener: Function): ISlot;
}

1 change: 0 additions & 1 deletion src/org/osflash/signals/ISlot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,3 @@ export interface ISlot {
*/
remove(): void;
}

37 changes: 19 additions & 18 deletions src/org/osflash/signals/MonoSignal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export class MonoSignal implements ISignal {
*/
constructor(...valueClasses) {
// Cannot use super.apply(null, valueClasses), so allow the subclass to call super(valueClasses).
this.valueClasses = (valueClasses.length == 1 && valueClasses[0] instanceof Array) ? valueClasses[0] : valueClasses;
this.valueClasses = (valueClasses.length === 1 && valueClasses[0] instanceof Array) ? valueClasses[0] : valueClasses;
}

/**
Expand All @@ -44,11 +44,11 @@ export class MonoSignal implements ISignal {
public set valueClasses(value: any[]) {
// Clone so the Array cannot be affected from outside.
this._valueClasses = value ? value.slice() : [];
for (var i: number = this._valueClasses.length; i--;) {
for (let i: number = this._valueClasses.length; i--;) {
if (typeof this._valueClasses[i] !== "function") {
throw new Error('Invalid valueClasses argument: ' +
'item at index ' + i + ' should be a Class but was:<' +
this._valueClasses[i] + '>.' + this._valueClasses[i]); //@CHANGED - temp replacement for getQualifiedClassByName()
throw new Error("Invalid valueClasses argument: " +
"item at index " + i + " should be a Class but was:<" +
this._valueClasses[i] + "'>." + this._valueClasses[i]); // @CHANGED - temp replacement for getQualifiedClassByName()
}
}
}
Expand Down Expand Up @@ -78,8 +78,8 @@ export class MonoSignal implements ISignal {

/** @inheritDoc */
public remove(listener: Function): ISlot {
if (this.slot && this.slot.listener == listener) {
var theSlot: ISlot = this.slot;
if (this.slot && this.slot.listener === listener) {
let theSlot: ISlot = this.slot;
this.slot = null;
return theSlot;
}
Expand All @@ -89,7 +89,9 @@ export class MonoSignal implements ISignal {

/** @inheritDoc */
public removeAll(): void {
if (this.slot) this.slot.remove();
if (this.slot) {
this.slot.remove();
}
}

/**
Expand All @@ -99,18 +101,18 @@ export class MonoSignal implements ISignal {
*/
public dispatch(...valueObjects): void {
// If valueClasses is empty, value objects are not type-checked.
var numValueClasses: number = this._valueClasses.length;
var numValueObjects: number = valueObjects.length;
let numValueClasses: number = this._valueClasses.length;
let numValueObjects: number = valueObjects.length;

// Cannot dispatch fewer objects than declared classes.
if (numValueObjects < numValueClasses) {
throw new Error('Incorrect number of arguments. ' +
'Expected at least ' + numValueClasses + ' but received ' +
numValueObjects + '.');
throw new Error("Incorrect number of arguments. " +
"Expected at least " + numValueClasses + " but received " +
numValueObjects + ".");
}

// Cannot dispatch differently typed objects than declared classes.
for (var i: number = 0; i < numValueClasses; i++) {
for (let i: number = 0; i < numValueClasses; i++) {
// Optimized for the optimistic case that values are correct.
if (
valueObjects[i] === null ||
Expand All @@ -119,8 +121,8 @@ export class MonoSignal implements ISignal {
continue;
}

throw new Error('Value object <' + valueObjects[i]
+ '> is not an instance of <' + this._valueClasses[i] + '>.');
throw new Error("Value object <" + valueObjects[i]
+ "> is not an instance of <" + this._valueClasses[i] + ">.");
}

// Broadcast to the one listener.
Expand All @@ -132,11 +134,10 @@ export class MonoSignal implements ISignal {
protected registerListener(listener: Function, once: boolean = false): ISlot {
if (this.slot) {
// If the listener exits previously added, definitely don't add it.
throw new Error('You cannot add or addOnce with a listener already added, remove the current listener first.');
throw new Error("You cannot add or addOnce with a listener already added, remove the current listener first.");
}

return (this.slot = new Slot(listener, this, once));
}

}

51 changes: 28 additions & 23 deletions src/org/osflash/signals/OnceSignal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export class OnceSignal implements IOnceSignal {
*/
constructor(...valueClasses) {
// Cannot use super.apply(null, valueClasses), so allow the subclass to call super(valueClasses).
this.valueClasses = (valueClasses.length == 1 && valueClasses[0] instanceof Array) ? valueClasses[0] : valueClasses;
this.valueClasses = (valueClasses.length === 1 && valueClasses[0] instanceof Array) ? valueClasses[0] : valueClasses;
}

/**
Expand All @@ -51,11 +51,11 @@ export class OnceSignal implements IOnceSignal {
public set valueClasses(value: any[]) {
// Clone so the Array cannot be affected from outside.
this._valueClasses = value ? value.slice() : [];
for (var i: number = this._valueClasses.length; i--;) {
for (let i: number = this._valueClasses.length; i--;) {
if (!(this._valueClasses[i] instanceof Object)) {
throw new Error('Invalid valueClasses argument: ' +
'item at index ' + i + ' should be a Class but was:<' +
this._valueClasses[i] + '>.' + this._valueClasses[i]); //@CHANGED - temp replacement for getQualifiedClassByName()
throw new Error("Invalid valueClasses argument: " +
"item at index " + i + " should be a Class but was:<" +
this._valueClasses[i] + ">." + this._valueClasses[i]); // @CHANGED - temp replacement for getQualifiedClassByName()
}
}
}
Expand All @@ -76,8 +76,10 @@ export class OnceSignal implements IOnceSignal {

/** @inheritDoc */
public remove(listener: Function): ISlot {
var slot: ISlot = this.slots.find(listener);
if (!slot) return null;
let slot: ISlot = this.slots.find(listener);
if (!slot) {
return null;
}

this.slots = this.slots.filterNot(listener);
return slot;
Expand All @@ -96,18 +98,18 @@ export class OnceSignal implements IOnceSignal {
public dispatch(...valueObjects): void {

// If valueClasses is empty, value objects are not type-checked.
var numValueClasses: number = this._valueClasses.length;
var numValueObjects: number = valueObjects.length;
let numValueClasses: number = this._valueClasses.length;
let numValueObjects: number = valueObjects.length;

// Cannot dispatch fewer objects than declared classes.
if (numValueObjects < numValueClasses) {
throw new Error('Incorrect number of arguments. ' +
'Expected at least ' + numValueClasses + ' but received ' +
numValueObjects + '.');
throw new Error("Incorrect number of arguments. " +
"Expected at least " + numValueClasses + " but received " +
numValueObjects + ".");
}

// Cannot dispatch differently typed objects than declared classes.
for (var i: number = 0; i < numValueClasses; i++) {
for (let i: number = 0; i < numValueClasses; i++) {
// Optimized for the optimistic case that values are correct.
if (
valueObjects[i] === null ||
Expand All @@ -116,12 +118,12 @@ export class OnceSignal implements IOnceSignal {
continue;
}

throw new Error('Value object <' + valueObjects[i]
+ '> is not an instance of <' + this._valueClasses[i] + '>.');
throw new Error("Value object <" + valueObjects[i]
+ "> is not an instance of <" + this._valueClasses[i] + ">.");
}

// Broadcast to listeners.
var slotsToProcess: SlotList = this.slots;
let slotsToProcess: SlotList = this.slots;
if (slotsToProcess.nonEmpty) {
while (slotsToProcess.nonEmpty) {
slotsToProcess.head.execute(valueObjects);
Expand All @@ -132,7 +134,7 @@ export class OnceSignal implements IOnceSignal {

protected registerListener(listener: Function, once: boolean = false): ISlot {
if (this.registrationPossible(listener, once)) {
var newSlot: ISlot = new Slot(listener, this, once);
let newSlot: ISlot = new Slot(listener, this, once);
this.slots = this.slots.prepend(newSlot);
return newSlot;
}
Expand All @@ -141,18 +143,21 @@ export class OnceSignal implements IOnceSignal {
}

protected registrationPossible(listener: Function, once: boolean): boolean {
if (!this.slots.nonEmpty) return true;
if (!this.slots.nonEmpty) {
return true;
}

var existingSlot: ISlot = this.slots.find(listener);
if (!existingSlot) return true;
let existingSlot: ISlot = this.slots.find(listener);
if (!existingSlot) {
return true;
}

if (existingSlot.once != once) {
if (existingSlot.once !== once) {
// If the listener was previously added, definitely don't add it again.
// But throw an exception if their once values differ.
throw new Error('You cannot addOnce() then add() the same listener without removing the relationship first.');
throw new Error("You cannot addOnce() then add() the same listener without removing the relationship first.");
}

return false; // Listener was already registered.
}
}

6 changes: 2 additions & 4 deletions src/org/osflash/signals/PrioritySignal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export class PrioritySignal extends Signal implements IPrioritySignal {

constructor(...valueClasses) {
// Cannot use super.apply(null, valueClasses), so allow the subclass to call super(valueClasses).
valueClasses = (valueClasses.length == 1 && valueClasses[0] instanceof Array) ? valueClasses[0] : valueClasses;
valueClasses = (valueClasses.length === 1 && valueClasses[0] instanceof Array) ? valueClasses[0] : valueClasses;

super(valueClasses);
}
Expand Down Expand Up @@ -37,13 +37,11 @@ export class PrioritySignal extends Signal implements IPrioritySignal {

protected registerListenerWithPriority(listener: Function, once: boolean = false, priority: number = 0): ISlot {
if (this.registrationPossible(listener, once)) {
var slot: ISlot = new Slot(listener, this, once, priority);
let slot: ISlot = new Slot(listener, this, once, priority);
this.slots = this.slots.insertWithPriority(slot);
return slot;
}

return this.slots.find(listener);
}

}

6 changes: 2 additions & 4 deletions src/org/osflash/signals/Promise.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export class Promise extends OnceSignal {
/** @inheritDoc */
/*override*/
public addOnce(listener: Function): ISlot {
var slot: ISlot = super.addOnce(listener);
let slot: ISlot = super.addOnce(listener);
if (this.isDispatched) {
slot.execute(this.valueObjects);
slot.remove();
Expand All @@ -25,12 +25,10 @@ export class Promise extends OnceSignal {
public dispatch(...valueObjects): void {
if (this.isDispatched) {
throw new Error("You cannot dispatch() a Promise more than once");
}
else {
} else {
this.isDispatched = true;
this.valueObjects = valueObjects;
super.dispatch.apply(this, valueObjects);
}
}
}

3 changes: 1 addition & 2 deletions src/org/osflash/signals/Signal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export class Signal extends OnceSignal implements ISignal {
*/
constructor(...valueClasses) {
// Cannot use super.apply(null, valueClasses), so allow the subclass to call super(valueClasses).
valueClasses = (valueClasses.length == 1 && valueClasses[0] instanceof Array) ? valueClasses[0] : valueClasses;
valueClasses = (valueClasses.length === 1 && valueClasses[0] instanceof Array) ? valueClasses[0] : valueClasses;

super(valueClasses);
}
Expand All @@ -46,4 +46,3 @@ export class Signal extends OnceSignal implements ISignal {
return this.registerListener(listener);
}
}

Loading