From 454666515419b8e0ddb8a0eefa4c50040ed2f904 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A9nes=20Harmath?= Date: Tue, 11 Feb 2014 01:23:26 +0100 Subject: [PATCH 1/5] Preliminary version of AngularFire definition --- angularfire/angularfire.d.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 angularfire/angularfire.d.ts diff --git a/angularfire/angularfire.d.ts b/angularfire/angularfire.d.ts new file mode 100644 index 000000000..9a5cefcae --- /dev/null +++ b/angularfire/angularfire.d.ts @@ -0,0 +1,29 @@ +interface AngularFireService { + (firebase: Firebase): AngularFire; +} + +interface AngularFire { + $add(value: any): void; + $remove(key?: string): void; + $save(key?: string): void; + $child(key: string): AngularFire; + $set(value: any): void; + $getIndex(): number; + $priority: number; + $on(eventType: string, callback: (dataSnapshot: IFirebaseDataSnapshot, prevChildName?: string) => void, cancelCallback?: ()=> void, context?: Object): (dataSnapshot: IFirebaseDataSnapshot, prevChildName?: string) => void; + $off(eventType: string, callback: (dataSnapshot: IFirebaseDataSnapshot, prevChildName?: string) => void, cancelCallback?: ()=> void, context?: Object): (dataSnapshot: IFirebaseDataSnapshot, prevChildName?: string) => void; + $bind($scope: ng.IScope, modelName: string): ng.IPromise; +} + +interface AngularFireAuthService { + (firebase: Firebase): AngularFireAuth; +} + +interface AngularFireAuth { + $getCurrentUser(): ng.IPromise; + $logout(): void; + $createUser(email: string, password: string, noLogin?: boolean): ng.IPromise; + $changePassword(email: string, oldPassword: string, newPassword: string): ng.IPromise; + $removeUser(email: string, password: string): ng.IPromise; + $sendPasswordResetEmail(email: string): ng.IPromise; +} From eb7e941bd8df2f8389cc7fe8f6f373bc452b0e4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A9nes=20Harmath?= Date: Tue, 11 Feb 2014 01:27:23 +0100 Subject: [PATCH 2/5] Add library reference --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 251263010..317c27f0c 100755 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ List of Definitions * [Ace Cloud9 Editor](http://ace.ajax.org/) (by [Diullei Gomes](https://github.com/Diullei)) * [Add To Home Screen] (http://cubiq.org/add-to-home-screen) (by [James Wilkins] (http://www.codeplex.com/site/users/view/jamesnw)) * [AmCharts](http://www.amcharts.com/) (by [Covobonomo](https://github.com/covobonomo/)) +* [AngularFire](https://www.firebase.com/docs/angular/reference.html) (by [Dénes Harmath](https://github.com/thSoft)) * [AngularJS](http://angularjs.org) (by [Diego Vilar](https://github.com/diegovilar)) ([wiki](https://github.com/borisyankov/DefinitelyTyped/wiki/AngularJS-Definitions-Usage-Notes)) * [AngularUI](http://angular-ui.github.io/) (by [Michel Salib](https://github.com/michelsalib)) * [Angular Protractor](https://github.com/angular/protractor) (by [Bill Armstrong](https://github.com/BillArmstrong)) From 1f12c5faaa5cf085a2b91b605d5c8e8e6b54a6e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A9nes=20Harmath?= Date: Tue, 11 Feb 2014 01:33:29 +0100 Subject: [PATCH 3/5] Provide missing method --- angularfire/angularfire.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/angularfire/angularfire.d.ts b/angularfire/angularfire.d.ts index 9a5cefcae..3cb409fd0 100644 --- a/angularfire/angularfire.d.ts +++ b/angularfire/angularfire.d.ts @@ -21,6 +21,7 @@ interface AngularFireAuthService { interface AngularFireAuth { $getCurrentUser(): ng.IPromise; + $login(provider: string, options?: Object): ng.IPromise; $logout(): void; $createUser(email: string, password: string, noLogin?: boolean): ng.IPromise; $changePassword(email: string, oldPassword: string, newPassword: string): ng.IPromise; From f300bab55704471a4eefeb2288164a9af58f7e7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?De=CC=81nes=20Harmath?= Date: Sat, 15 Feb 2014 21:54:35 +0100 Subject: [PATCH 4/5] Add header & tests --- angularfire/angularfire-tests.ts | 79 ++++++++++++++++++++++++++++++++ angularfire/angularfire.d.ts | 5 ++ 2 files changed, 84 insertions(+) create mode 100644 angularfire/angularfire-tests.ts diff --git a/angularfire/angularfire-tests.ts b/angularfire/angularfire-tests.ts new file mode 100644 index 000000000..672252729 --- /dev/null +++ b/angularfire/angularfire-tests.ts @@ -0,0 +1,79 @@ +/// + +// Based on https://www.firebase.com/docs/angular/index.html + +var myapp = angular.module("myapp", ["firebase"]); + +interface AngularFireScope { + items: AngularFire; +} + +myapp.controller("MyController", ["$scope", "$firebase", + function($scope: AngularFireScope, $firebase: AngularFireService) { + $scope.items = $firebase(new Firebase(URL)); + $scope.items.$add({ foo: "bar" }); + $scope.items.$remove("foo"); // Removes child named "foo". + $scope.items.$remove(); // Removes the entire object. + $scope.items.foo = "baz"; + $scope.items.$save("foo"); // new Firebase(URL + "/foo") now contains "baz". + var child = $scope.items.$child("foo"); + child.$remove(); // Same as calling $scope.items.$remove("foo"); + $scope.items.$set({ bar: "baz" }); // new Firebase(URL + "/foo") is now null. + var keys = $scope.items.$getIndex(); + keys.forEach(function(key, i) { + console.log(i, $scope.items[key]); // prints items in order they appear in Firebase + }); + $scope.items.foo.$priority = 20; + $scope.items.$save("foo"); // new Firebase(URL + "foo")'s priority is now 20. + $scope.items.$on("loaded", function() { + console.log("Initial data received!"); + }); + $scope.items.$on("change", function() { + console.log("A remote change was applied locally!"); + }); + // Detaches all `loaded` event handlers. + $scope.items.$off('loaded'); + // Stops synchronization on `$scope.items` completely. + function stopSync() { + $scope.items.$off(); + } + $scope.items.$bind($scope, "remoteItems"); + $scope.remoteItems.bar = "foo"; // new Firebase(URL + "/bar") is now "foo". + $scope.items.$bind($scope, "remote").then(function(unbind) { + unbind(); + $scope.remote.bar = "foo"; // No changes have been made to the remote data. + }); + } +]); + +interface AngularFireAuthScope { + loginObj: AngularFireAuth; +} + +myapp.controller("MyAuthController", ["$scope", "$firebaseSimpleLogin", + function($scope: AngularFireAuthScope, $firebaseSimpleLogin) { + var dataRef = new Firebase("https://myapp.firebaseio.com"); + $scope.loginObj = $firebaseSimpleLogin(dataRef); + $scope.loginObj.$getCurrentUser().then(_ => { + }); + var email = 'my@email.com'; + var password = 'mypassword'; + $scope.loginObj.$login('password', { + email: email, + password: password + }).then(function(user) { + console.log('Logged in as: ', user.uid); + }, function(error) { + console.error('Login failed: ', error); + }); + $scope.loginObj.$logout(); + $scope.loginObj.$createUser(email, password).then(_ => { + }); + $scope.loginObj.$changePassword(email, password, password).then(_ => { + }); + $scope.loginObj.$removeUser(email, password).then(_ => { + }); + $scope.loginObj.$sendPasswordResetEmail(email).then(_ => { + }); + } +]); \ No newline at end of file diff --git a/angularfire/angularfire.d.ts b/angularfire/angularfire.d.ts index 3cb409fd0..25f44332c 100644 --- a/angularfire/angularfire.d.ts +++ b/angularfire/angularfire.d.ts @@ -1,3 +1,8 @@ +// Type definitions for AngularFire 0.6.0 +// Project: http://angularfire.com +// Definitions by: Dénes Harmath +// Definitions: https://github.com/borisyankov/DefinitelyTyped + interface AngularFireService { (firebase: Firebase): AngularFire; } From 4238c803afcb92b1a17fb3c6b9bf0de6fb7ec1c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?De=CC=81nes=20Harmath?= Date: Sat, 15 Feb 2014 23:53:59 +0100 Subject: [PATCH 5/5] Fix compile errors --- angularfire/angularfire-tests.ts | 44 +++++++++++++++++--------------- angularfire/angularfire.d.ts | 12 ++++++--- firebase/firebase.d.ts | 2 +- 3 files changed, 34 insertions(+), 24 deletions(-) diff --git a/angularfire/angularfire-tests.ts b/angularfire/angularfire-tests.ts index 672252729..e3a04712c 100644 --- a/angularfire/angularfire-tests.ts +++ b/angularfire/angularfire-tests.ts @@ -1,58 +1,62 @@ /// -// Based on https://www.firebase.com/docs/angular/index.html - var myapp = angular.module("myapp", ["firebase"]); -interface AngularFireScope { +interface AngularFireScope extends ng.IScope { items: AngularFire; + remoteItems: RemoteItems; } +interface RemoteItems { + bar: string; +} + +var url = "https://myapp.firebaseio.com"; + myapp.controller("MyController", ["$scope", "$firebase", function($scope: AngularFireScope, $firebase: AngularFireService) { - $scope.items = $firebase(new Firebase(URL)); + $scope.items = $firebase(new Firebase(url)); $scope.items.$add({ foo: "bar" }); - $scope.items.$remove("foo"); // Removes child named "foo". - $scope.items.$remove(); // Removes the entire object. - $scope.items.foo = "baz"; - $scope.items.$save("foo"); // new Firebase(URL + "/foo") now contains "baz". + $scope.items.$remove("foo"); + $scope.items.$remove(); + $scope.items.$save(); var child = $scope.items.$child("foo"); - child.$remove(); // Same as calling $scope.items.$remove("foo"); - $scope.items.$set({ bar: "baz" }); // new Firebase(URL + "/foo") is now null. + child.$remove(); + $scope.items.$set({ bar: "baz" }); var keys = $scope.items.$getIndex(); keys.forEach(function(key, i) { - console.log(i, $scope.items[key]); // prints items in order they appear in Firebase + console.log(i, $scope.items[key]); }); - $scope.items.foo.$priority = 20; - $scope.items.$save("foo"); // new Firebase(URL + "foo")'s priority is now 20. $scope.items.$on("loaded", function() { console.log("Initial data received!"); }); $scope.items.$on("change", function() { console.log("A remote change was applied locally!"); }); - // Detaches all `loaded` event handlers. $scope.items.$off('loaded'); - // Stops synchronization on `$scope.items` completely. function stopSync() { $scope.items.$off(); } $scope.items.$bind($scope, "remoteItems"); - $scope.remoteItems.bar = "foo"; // new Firebase(URL + "/bar") is now "foo". + $scope.remoteItems.bar = "foo"; $scope.items.$bind($scope, "remote").then(function(unbind) { unbind(); - $scope.remote.bar = "foo"; // No changes have been made to the remote data. + $scope.remoteItems.bar = "foo"; }); } ]); -interface AngularFireAuthScope { +var foo: AngularFireObject = { + $priority: 0 +}; + +interface AngularFireAuthScope extends ng.IScope { loginObj: AngularFireAuth; } myapp.controller("MyAuthController", ["$scope", "$firebaseSimpleLogin", - function($scope: AngularFireAuthScope, $firebaseSimpleLogin) { - var dataRef = new Firebase("https://myapp.firebaseio.com"); + function($scope: AngularFireAuthScope, $firebaseSimpleLogin: AngularFireAuthService) { + var dataRef = new Firebase(url); $scope.loginObj = $firebaseSimpleLogin(dataRef); $scope.loginObj.$getCurrentUser().then(_ => { }); diff --git a/angularfire/angularfire.d.ts b/angularfire/angularfire.d.ts index 25f44332c..3f2b0aa10 100644 --- a/angularfire/angularfire.d.ts +++ b/angularfire/angularfire.d.ts @@ -3,6 +3,9 @@ // Definitions by: Dénes Harmath // Definitions: https://github.com/borisyankov/DefinitelyTyped +/// +/// + interface AngularFireService { (firebase: Firebase): AngularFire; } @@ -13,13 +16,16 @@ interface AngularFire { $save(key?: string): void; $child(key: string): AngularFire; $set(value: any): void; - $getIndex(): number; - $priority: number; + $getIndex(): string[]; $on(eventType: string, callback: (dataSnapshot: IFirebaseDataSnapshot, prevChildName?: string) => void, cancelCallback?: ()=> void, context?: Object): (dataSnapshot: IFirebaseDataSnapshot, prevChildName?: string) => void; - $off(eventType: string, callback: (dataSnapshot: IFirebaseDataSnapshot, prevChildName?: string) => void, cancelCallback?: ()=> void, context?: Object): (dataSnapshot: IFirebaseDataSnapshot, prevChildName?: string) => void; + $off(eventType?: string, callback?: (dataSnapshot: IFirebaseDataSnapshot, prevChildName?: string) => void, cancelCallback?: ()=> void, context?: Object): (dataSnapshot: IFirebaseDataSnapshot, prevChildName?: string) => void; $bind($scope: ng.IScope, modelName: string): ng.IPromise; } +interface AngularFireObject { + $priority: number; +} + interface AngularFireAuthService { (firebase: Firebase): AngularFireAuth; } diff --git a/firebase/firebase.d.ts b/firebase/firebase.d.ts index 83f9ca84b..bac32fbc6 100644 --- a/firebase/firebase.d.ts +++ b/firebase/firebase.d.ts @@ -53,7 +53,7 @@ declare class Firebase implements IFirebaseQuery { toString(): string; set(value: any, onComplete?: (error: any) => void): void; update(value: any, onComplete?: (error: any) => void): void; - remove(onComplete?: (error: any) => void); + remove(onComplete?: (error: any) => void): void; push(value: any, onComplete?: (error: any) => void): Firebase; setWithPriority(value: any, priority: string, onComplete?: (error: any) => void): void; setWithPriority(value: any, priority: number, onComplete?: (error: any) => void): void;