From 9967239f2ab3c9f3564da533bf55802ff12e6fb4 Mon Sep 17 00:00:00 2001 From: "EWOUT-QMINO\\Ewout" Date: Tue, 7 Oct 2014 12:20:56 +0200 Subject: [PATCH 1/7] Added support for Array Change subscriptions. Added tests to the test_observableArrays() in knockout-tests.ts. --- knockout/knockout.d.ts | 6 +++++- knockout/tests/knockout-tests.ts | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/knockout/knockout.d.ts b/knockout/knockout.d.ts index 8fc87e98d4..a8b2af0176 100644 --- a/knockout/knockout.d.ts +++ b/knockout/knockout.d.ts @@ -53,7 +53,7 @@ interface KnockoutSubscription { } interface KnockoutSubscribable extends KnockoutSubscribableFunctions { - subscribe(callback: (newValue: T) => void, target?: any, event?: string): KnockoutSubscription; + subscribe(callback: (object: Object) => void, target?: any, event?: string): KnockoutSubscription; subscribe(callback: (newValue: TEvent) => void, target: any, event: string): KnockoutSubscription; extend(requestedExtenders: { [key: string]: any; }): KnockoutSubscribable; getSubscriptionsCount(): number; @@ -84,6 +84,8 @@ interface KnockoutObservableArrayStatic { } interface KnockoutObservableArray extends KnockoutObservable, KnockoutObservableArrayFunctions { + subscribe(callback: (newValue: T[]) => void, target?: any, event?: string): KnockoutSubscription; + subscribe(callback: (changes: KnockoutArrayChange[]) => void, target?: any, event?: string): KnockoutSubscription; extend(requestedExtenders: { [key: string]: any; }): KnockoutObservableArray; } @@ -100,6 +102,8 @@ interface KnockoutObservable extends KnockoutSubscribable, KnockoutObserva peek(): T; valueHasMutated?:{(): void;}; valueWillMutate?:{(): void;}; + + subscribe(callback: (newValue: T) => void, target?: any, event?: string): KnockoutSubscription; extend(requestedExtenders: { [key: string]: any; }): KnockoutObservable; } diff --git a/knockout/tests/knockout-tests.ts b/knockout/tests/knockout-tests.ts index 82b5aa25c0..d3cf4ee848 100644 --- a/knockout/tests/knockout-tests.ts +++ b/knockout/tests/knockout-tests.ts @@ -108,6 +108,15 @@ function testGetter() { function test_observableArrays() { var myObservableArray = ko.observableArray(); + + myObservableArray.subscribe(function(changes){ + for(var i = 0; i < changes.length; i++){ + console.log(changes[i].index); + console.log(changes[i].status); + console.log(changes[i].value); + } + }, null, "arrayChange"); + myObservableArray.push('Some value'); var anotherObservableArray = ko.observableArray([ { name: "Bungle", type: "Bear" }, From 9588d161e4fcafe3183fc9c8f95cfcfa5e8bb8e0 Mon Sep 17 00:00:00 2001 From: "EWOUT-QMINO\\Ewout" Date: Tue, 7 Oct 2014 13:41:48 +0200 Subject: [PATCH 2/7] Changed heading from: // Type definitions for Knockout v3.2.0-beta to: // Type definitions for Knockout v3.2.0 --- knockout/knockout.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/knockout/knockout.d.ts b/knockout/knockout.d.ts index a8b2af0176..7ccdcb7dfc 100644 --- a/knockout/knockout.d.ts +++ b/knockout/knockout.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Knockout v3.2.0-beta +// Type definitions for Knockout v3.2.0 // Project: http://knockoutjs.com // Definitions by: Boris Yankov , Igor Oleinikov // Definitions: https://github.com/borisyankov/DefinitelyTyped From 67c09d58fc42f7a9c2efb5c8b275cf5db3c48336 Mon Sep 17 00:00:00 2001 From: "EWOUT-QMINO\\Ewout" Date: Tue, 7 Oct 2014 15:41:10 +0200 Subject: [PATCH 3/7] Removed subscribe signatures in extending interfaces of subscribable. Changed signature of KnockoutSubscribable to have any parameter in subscribe callback. --- knockout/knockout.d.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/knockout/knockout.d.ts b/knockout/knockout.d.ts index 7ccdcb7dfc..3c452dede0 100644 --- a/knockout/knockout.d.ts +++ b/knockout/knockout.d.ts @@ -53,7 +53,7 @@ interface KnockoutSubscription { } interface KnockoutSubscribable extends KnockoutSubscribableFunctions { - subscribe(callback: (object: Object) => void, target?: any, event?: string): KnockoutSubscription; + subscribe(callback: (object: any) => void, target?: any, event?: string): KnockoutSubscription; subscribe(callback: (newValue: TEvent) => void, target: any, event: string): KnockoutSubscription; extend(requestedExtenders: { [key: string]: any; }): KnockoutSubscribable; getSubscriptionsCount(): number; @@ -84,8 +84,6 @@ interface KnockoutObservableArrayStatic { } interface KnockoutObservableArray extends KnockoutObservable, KnockoutObservableArrayFunctions { - subscribe(callback: (newValue: T[]) => void, target?: any, event?: string): KnockoutSubscription; - subscribe(callback: (changes: KnockoutArrayChange[]) => void, target?: any, event?: string): KnockoutSubscription; extend(requestedExtenders: { [key: string]: any; }): KnockoutObservableArray; } @@ -103,7 +101,6 @@ interface KnockoutObservable extends KnockoutSubscribable, KnockoutObserva valueHasMutated?:{(): void;}; valueWillMutate?:{(): void;}; - subscribe(callback: (newValue: T) => void, target?: any, event?: string): KnockoutSubscription; extend(requestedExtenders: { [key: string]: any; }): KnockoutObservable; } From 4b4d78850ffd79967d5988b54ea0727f4cb399ec Mon Sep 17 00:00:00 2001 From: "EWOUT-QMINO\\Ewout" Date: Wed, 8 Oct 2014 10:29:07 +0200 Subject: [PATCH 4/7] Refactored the properties of KnockoutObservable into a seperate interface. This way KnockoutObservableArray doesn't extend KnockoutObservable anymore, making it possible to override methods according to the knockoutjs syntax (including Array Change subscription support). --- knockout/knockout.d.ts | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/knockout/knockout.d.ts b/knockout/knockout.d.ts index 3c452dede0..703f2b48ca 100644 --- a/knockout/knockout.d.ts +++ b/knockout/knockout.d.ts @@ -53,7 +53,7 @@ interface KnockoutSubscription { } interface KnockoutSubscribable extends KnockoutSubscribableFunctions { - subscribe(callback: (object: any) => void, target?: any, event?: string): KnockoutSubscription; + subscribe(callback: (param : any) => void, target?: any, event?: string): KnockoutSubscription; subscribe(callback: (newValue: TEvent) => void, target: any, event: string): KnockoutSubscription; extend(requestedExtenders: { [key: string]: any; }): KnockoutSubscribable; getSubscriptionsCount(): number; @@ -83,7 +83,25 @@ interface KnockoutObservableArrayStatic { (value?: T[]): KnockoutObservableArray; } -interface KnockoutObservableArray extends KnockoutObservable, KnockoutObservableArrayFunctions { +interface KnockoutObservableProperties{ + (): T; + (value: T): void; + + peek(): T; + valueHasMutated?:{(): void;}; + valueWillMutate?:{(): void;}; +} + +interface KnockoutObservableArray extends KnockoutSubscribable, KnockoutObservableProperties,KnockoutObservableArrayFunctions { + subscribe(callback: (param : T[]) => void, target?: any, event?: string): KnockoutSubscription; + + subscribe(callback: (param : T[]) => void, target: any, event: string): KnockoutSubscription; + subscribe(callback: (param : T[]) => void, target: any, event: 'change'): KnockoutSubscription; + subscribe(callback: (param : T[]) => void, target: any, event: 'beforeChange'): KnockoutSubscription; + + subscribe(callback: (changes : KnockoutArrayChange[]) => void, target: any, event: string): KnockoutSubscription; + subscribe(callback: (changes : KnockoutArrayChange[]) => void, target: any, event: 'arrayChange'): KnockoutSubscription; + extend(requestedExtenders: { [key: string]: any; }): KnockoutObservableArray; } @@ -93,14 +111,8 @@ interface KnockoutObservableStatic { (value?: T): KnockoutObservable; } -interface KnockoutObservable extends KnockoutSubscribable, KnockoutObservableFunctions { - (): T; - (value: T): void; - - peek(): T; - valueHasMutated?:{(): void;}; - valueWillMutate?:{(): void;}; - +interface KnockoutObservable extends KnockoutSubscribable, KnockoutObservableProperties, KnockoutObservableFunctions { + subscribe(callback: (newValue : T) => void, target?: any, event?: string): KnockoutSubscription; extend(requestedExtenders: { [key: string]: any; }): KnockoutObservable; } From 3056dd7fb80de9286a766b321a0c3c0d99f4d39a Mon Sep 17 00:00:00 2001 From: "EWOUT-QMINO\\Ewout" Date: Wed, 8 Oct 2014 10:47:15 +0200 Subject: [PATCH 5/7] Changed overrides in KnockoutObservableArray --- knockout/knockout.d.ts | 47 +++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/knockout/knockout.d.ts b/knockout/knockout.d.ts index 703f2b48ca..d15b93343d 100644 --- a/knockout/knockout.d.ts +++ b/knockout/knockout.d.ts @@ -54,11 +54,32 @@ interface KnockoutSubscription { interface KnockoutSubscribable extends KnockoutSubscribableFunctions { subscribe(callback: (param : any) => void, target?: any, event?: string): KnockoutSubscription; + subscribe(callback: (param : any) => void, target: any, event: string): KnockoutSubscription; subscribe(callback: (newValue: TEvent) => void, target: any, event: string): KnockoutSubscription; extend(requestedExtenders: { [key: string]: any; }): KnockoutSubscribable; getSubscriptionsCount(): number; } +interface KnockoutObservableProperties{ + (): T; + (value: T): void; + + peek(): T; + valueHasMutated?:{(): void;}; + valueWillMutate?:{(): void;}; +} + +interface KnockoutObservableStatic { + fn: KnockoutObservableFunctions; + + (value?: T): KnockoutObservable; +} + +interface KnockoutObservable extends KnockoutSubscribable, KnockoutObservableProperties, KnockoutObservableFunctions { + subscribe(callback: (newValue : T) => void, target?: any, event?: string): KnockoutSubscription; + extend(requestedExtenders: { [key: string]: any; }): KnockoutObservable; +} + interface KnockoutComputedStatic { fn: KnockoutComputedFunctions; @@ -83,39 +104,17 @@ interface KnockoutObservableArrayStatic { (value?: T[]): KnockoutObservableArray; } -interface KnockoutObservableProperties{ - (): T; - (value: T): void; - - peek(): T; - valueHasMutated?:{(): void;}; - valueWillMutate?:{(): void;}; -} - interface KnockoutObservableArray extends KnockoutSubscribable, KnockoutObservableProperties,KnockoutObservableArrayFunctions { - subscribe(callback: (param : T[]) => void, target?: any, event?: string): KnockoutSubscription; + subscribe(callback: (changes : KnockoutArrayChange[]) => void, target: any, event: string): KnockoutSubscription; + subscribe(callback: (changes : KnockoutArrayChange[]) => void, target: any, event: 'arrayChange'): KnockoutSubscription; subscribe(callback: (param : T[]) => void, target: any, event: string): KnockoutSubscription; subscribe(callback: (param : T[]) => void, target: any, event: 'change'): KnockoutSubscription; subscribe(callback: (param : T[]) => void, target: any, event: 'beforeChange'): KnockoutSubscription; - subscribe(callback: (changes : KnockoutArrayChange[]) => void, target: any, event: string): KnockoutSubscription; - subscribe(callback: (changes : KnockoutArrayChange[]) => void, target: any, event: 'arrayChange'): KnockoutSubscription; - extend(requestedExtenders: { [key: string]: any; }): KnockoutObservableArray; } -interface KnockoutObservableStatic { - fn: KnockoutObservableFunctions; - - (value?: T): KnockoutObservable; -} - -interface KnockoutObservable extends KnockoutSubscribable, KnockoutObservableProperties, KnockoutObservableFunctions { - subscribe(callback: (newValue : T) => void, target?: any, event?: string): KnockoutSubscription; - extend(requestedExtenders: { [key: string]: any; }): KnockoutObservable; -} - interface KnockoutComputedDefine { read(): T; write? (value: T): void; From 3b2aa1c713581bb37b51927bb516bd8d55445048 Mon Sep 17 00:00:00 2001 From: "EWOUT-QMINO\\Ewout" Date: Wed, 8 Oct 2014 16:35:16 +0200 Subject: [PATCH 6/7] Added to test_observableArrays() to include change and beforeChange event subscriptions. --- knockout/tests/knockout-tests.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/knockout/tests/knockout-tests.ts b/knockout/tests/knockout-tests.ts index d3cf4ee848..0aee7985a6 100644 --- a/knockout/tests/knockout-tests.ts +++ b/knockout/tests/knockout-tests.ts @@ -117,6 +117,14 @@ function test_observableArrays() { } }, null, "arrayChange"); + myObservableArray.subscribe(function(newValue){ + console.log(newValue); + }, null, "change"); + + myObservableArray.subscribe(function(oldValue){ + console.log(oldValue); + }, null, "beforeChange"); + myObservableArray.push('Some value'); var anotherObservableArray = ko.observableArray([ { name: "Bungle", type: "Bear" }, From bf9a691038bc9d2159db7eea528170180594f304 Mon Sep 17 00:00:00 2001 From: "EWOUT-QMINO\\Ewout" Date: Wed, 8 Oct 2014 16:39:13 +0200 Subject: [PATCH 7/7] Added overload and test for default subscribe --- knockout/knockout.d.ts | 1 + knockout/tests/knockout-tests.ts | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/knockout/knockout.d.ts b/knockout/knockout.d.ts index d15b93343d..32c278062f 100644 --- a/knockout/knockout.d.ts +++ b/knockout/knockout.d.ts @@ -108,6 +108,7 @@ interface KnockoutObservableArray extends KnockoutSubscribable, Knockout subscribe(callback: (changes : KnockoutArrayChange[]) => void, target: any, event: string): KnockoutSubscription; subscribe(callback: (changes : KnockoutArrayChange[]) => void, target: any, event: 'arrayChange'): KnockoutSubscription; + subscribe(callback: (param : T[]) => void, target?: any, event?: string): KnockoutSubscription; subscribe(callback: (param : T[]) => void, target: any, event: string): KnockoutSubscription; subscribe(callback: (param : T[]) => void, target: any, event: 'change'): KnockoutSubscription; subscribe(callback: (param : T[]) => void, target: any, event: 'beforeChange'): KnockoutSubscription; diff --git a/knockout/tests/knockout-tests.ts b/knockout/tests/knockout-tests.ts index 0aee7985a6..ea1e332e0a 100644 --- a/knockout/tests/knockout-tests.ts +++ b/knockout/tests/knockout-tests.ts @@ -125,6 +125,10 @@ function test_observableArrays() { console.log(oldValue); }, null, "beforeChange"); + myObservableArray.subscribe(function(newValue){ + console.log(newValue); + }); + myObservableArray.push('Some value'); var anotherObservableArray = ko.observableArray([ { name: "Bungle", type: "Bear" },