diff options
author | Chocobozzz <florian.bigard@gmail.com> | 2016-09-06 22:40:57 +0200 |
---|---|---|
committer | Chocobozzz <florian.bigard@gmail.com> | 2016-09-06 22:40:57 +0200 |
commit | ab32b0fc805b92c5a1d7ac5901cb1a38e94622ca (patch) | |
tree | 1749a7390cf0a726a179c5fa554053f5c0f0e51c /client/src | |
parent | 088a967fe0bc285aa7811515f6a9655e1144b9f9 (diff) | |
download | PeerTube-ab32b0fc805b92c5a1d7ac5901cb1a38e94622ca.tar.gz PeerTube-ab32b0fc805b92c5a1d7ac5901cb1a38e94622ca.tar.zst PeerTube-ab32b0fc805b92c5a1d7ac5901cb1a38e94622ca.zip |
Dirty update to Angular RC6
Diffstat (limited to 'client/src')
34 files changed, 367 insertions, 195 deletions
diff --git a/client/src/app/account/account.component.ts b/client/src/app/account/account.component.ts index 54939f43b..a22738d3f 100644 --- a/client/src/app/account/account.component.ts +++ b/client/src/app/account/account.component.ts | |||
@@ -1,15 +1,13 @@ | |||
1 | import { Validators } from '@angular/common'; | 1 | import { } from '@angular/common'; |
2 | import { Component, OnInit } from '@angular/core'; | 2 | import { Component, OnInit } from '@angular/core'; |
3 | import { FormControl, FormGroup, REACTIVE_FORM_DIRECTIVES } from '@angular/forms'; | 3 | import { FormControl, FormGroup, Validators } from '@angular/forms'; |
4 | import { Router } from '@angular/router'; | 4 | import { Router } from '@angular/router'; |
5 | 5 | ||
6 | import { AccountService } from './account.service'; | 6 | import { AccountService } from './account.service'; |
7 | 7 | ||
8 | @Component({ | 8 | @Component({ |
9 | selector: 'my-account', | 9 | selector: 'my-account', |
10 | template: require('./account.component.html'), | 10 | template: require('./account.component.html') |
11 | providers: [ AccountService ], | ||
12 | directives: [ REACTIVE_FORM_DIRECTIVES ] | ||
13 | }) | 11 | }) |
14 | 12 | ||
15 | export class AccountComponent implements OnInit { | 13 | export class AccountComponent implements OnInit { |
diff --git a/client/src/app/account/index.ts b/client/src/app/account/index.ts index 7445003fd..823d9fe5f 100644 --- a/client/src/app/account/index.ts +++ b/client/src/app/account/index.ts | |||
@@ -1,2 +1,3 @@ | |||
1 | export * from './account.component'; | 1 | export * from './account.component'; |
2 | export * from './account.routes'; | 2 | export * from './account.routes'; |
3 | export * from './account.service'; | ||
diff --git a/client/src/app/admin/admin.component.ts b/client/src/app/admin/admin.component.ts index 82f2529ec..64a7400e7 100644 --- a/client/src/app/admin/admin.component.ts +++ b/client/src/app/admin/admin.component.ts | |||
@@ -1,9 +1,7 @@ | |||
1 | import { Component } from '@angular/core'; | 1 | import { Component } from '@angular/core'; |
2 | import { ROUTER_DIRECTIVES } from '@angular/router'; | ||
3 | 2 | ||
4 | @Component({ | 3 | @Component({ |
5 | template: '<router-outlet></router-outlet>', | 4 | template: '<router-outlet></router-outlet>' |
6 | directives: [ ROUTER_DIRECTIVES ] | ||
7 | }) | 5 | }) |
8 | 6 | ||
9 | export class AdminComponent { | 7 | export class AdminComponent { |
diff --git a/client/src/app/admin/admin.routes.ts b/client/src/app/admin/admin.routes.ts index 80b3ecbc1..1fcace994 100644 --- a/client/src/app/admin/admin.routes.ts +++ b/client/src/app/admin/admin.routes.ts | |||
@@ -1,10 +1,10 @@ | |||
1 | import { RouterConfig } from '@angular/router'; | 1 | import { Routes } from '@angular/router'; |
2 | 2 | ||
3 | import { AdminComponent } from './admin.component'; | 3 | import { AdminComponent } from './admin.component'; |
4 | import { FriendsRoutes } from './friends'; | 4 | import { FriendsRoutes } from './friends'; |
5 | import { UsersRoutes } from './users'; | 5 | import { UsersRoutes } from './users'; |
6 | 6 | ||
7 | export const AdminRoutes: RouterConfig = [ | 7 | export const AdminRoutes: Routes = [ |
8 | { | 8 | { |
9 | path: 'admin', | 9 | path: 'admin', |
10 | component: AdminComponent, | 10 | component: AdminComponent, |
diff --git a/client/src/app/admin/friends/friend-add/friend-add.component.ts b/client/src/app/admin/friends/friend-add/friend-add.component.ts index 2b2aceb8a..55aed9156 100644 --- a/client/src/app/admin/friends/friend-add/friend-add.component.ts +++ b/client/src/app/admin/friends/friend-add/friend-add.component.ts | |||
@@ -1,5 +1,5 @@ | |||
1 | import { Component, OnInit } from '@angular/core'; | 1 | import { Component, OnInit } from '@angular/core'; |
2 | import { FormControl, FormGroup, REACTIVE_FORM_DIRECTIVES } from '@angular/forms'; | 2 | import { FormControl, FormGroup } from '@angular/forms'; |
3 | import { Router } from '@angular/router'; | 3 | import { Router } from '@angular/router'; |
4 | 4 | ||
5 | import { validateUrl } from '../../../shared'; | 5 | import { validateUrl } from '../../../shared'; |
@@ -8,8 +8,7 @@ import { FriendService } from '../shared'; | |||
8 | @Component({ | 8 | @Component({ |
9 | selector: 'my-friend-add', | 9 | selector: 'my-friend-add', |
10 | template: require('./friend-add.component.html'), | 10 | template: require('./friend-add.component.html'), |
11 | styles: [ require('./friend-add.component.scss') ], | 11 | styles: [ require('./friend-add.component.scss') ] |
12 | directives: [ REACTIVE_FORM_DIRECTIVES ] | ||
13 | }) | 12 | }) |
14 | export class FriendAddComponent implements OnInit { | 13 | export class FriendAddComponent implements OnInit { |
15 | friendAddForm: FormGroup; | 14 | friendAddForm: FormGroup; |
@@ -80,12 +79,13 @@ export class FriendAddComponent implements OnInit { | |||
80 | 79 | ||
81 | this.friendService.makeFriends(notEmptyUrls).subscribe( | 80 | this.friendService.makeFriends(notEmptyUrls).subscribe( |
82 | status => { | 81 | status => { |
83 | if (status === 409) { | 82 | // TODO: extractdatastatus |
84 | alert('Already made friends!'); | 83 | // if (status === 409) { |
85 | } else { | 84 | // alert('Already made friends!'); |
85 | // } else { | ||
86 | alert('Make friends request sent!'); | 86 | alert('Make friends request sent!'); |
87 | this.router.navigate([ '/admin/friends/list' ]); | 87 | this.router.navigate([ '/admin/friends/list' ]); |
88 | } | 88 | // } |
89 | }, | 89 | }, |
90 | error => alert(error) | 90 | error => alert(error) |
91 | ); | 91 | ); |
diff --git a/client/src/app/admin/friends/friend-list/friend-list.component.ts b/client/src/app/admin/friends/friend-list/friend-list.component.ts index 38d4799a6..c76fc4df2 100644 --- a/client/src/app/admin/friends/friend-list/friend-list.component.ts +++ b/client/src/app/admin/friends/friend-list/friend-list.component.ts | |||
@@ -1,13 +1,11 @@ | |||
1 | import { Component, OnInit } from '@angular/core'; | 1 | import { Component, OnInit } from '@angular/core'; |
2 | import { ROUTER_DIRECTIVES } from '@angular/router'; | ||
3 | 2 | ||
4 | import { Friend, FriendService } from '../shared'; | 3 | import { Friend, FriendService } from '../shared'; |
5 | 4 | ||
6 | @Component({ | 5 | @Component({ |
7 | selector: 'my-friend-list', | 6 | selector: 'my-friend-list', |
8 | template: require('./friend-list.component.html'), | 7 | template: require('./friend-list.component.html'), |
9 | styles: [ require('./friend-list.component.scss') ], | 8 | styles: [ require('./friend-list.component.scss') ] |
10 | directives: [ ROUTER_DIRECTIVES ] | ||
11 | }) | 9 | }) |
12 | export class FriendListComponent implements OnInit { | 10 | export class FriendListComponent implements OnInit { |
13 | friends: Friend[]; | 11 | friends: Friend[]; |
diff --git a/client/src/app/admin/friends/friends.component.ts b/client/src/app/admin/friends/friends.component.ts index e66280f01..bc3f54158 100644 --- a/client/src/app/admin/friends/friends.component.ts +++ b/client/src/app/admin/friends/friends.component.ts | |||
@@ -1,12 +1,7 @@ | |||
1 | import { Component } from '@angular/core'; | 1 | import { Component } from '@angular/core'; |
2 | import { ROUTER_DIRECTIVES } from '@angular/router'; | ||
3 | |||
4 | import { FriendService } from './shared'; | ||
5 | 2 | ||
6 | @Component({ | 3 | @Component({ |
7 | template: '<router-outlet></router-outlet>', | 4 | template: '<router-outlet></router-outlet>' |
8 | directives: [ ROUTER_DIRECTIVES ], | ||
9 | providers: [ FriendService ] | ||
10 | }) | 5 | }) |
11 | 6 | ||
12 | export class FriendsComponent { | 7 | export class FriendsComponent { |
diff --git a/client/src/app/admin/friends/friends.routes.ts b/client/src/app/admin/friends/friends.routes.ts index 42b4a6c14..7fdef68f9 100644 --- a/client/src/app/admin/friends/friends.routes.ts +++ b/client/src/app/admin/friends/friends.routes.ts | |||
@@ -1,10 +1,10 @@ | |||
1 | import { RouterConfig } from '@angular/router'; | 1 | import { Routes } from '@angular/router'; |
2 | 2 | ||
3 | import { FriendsComponent } from './friends.component'; | 3 | import { FriendsComponent } from './friends.component'; |
4 | import { FriendAddComponent } from './friend-add'; | 4 | import { FriendAddComponent } from './friend-add'; |
5 | import { FriendListComponent } from './friend-list'; | 5 | import { FriendListComponent } from './friend-list'; |
6 | 6 | ||
7 | export const FriendsRoutes: RouterConfig = [ | 7 | export const FriendsRoutes: Routes = [ |
8 | { | 8 | { |
9 | path: 'friends', | 9 | path: 'friends', |
10 | component: FriendsComponent, | 10 | component: FriendsComponent, |
diff --git a/client/src/app/admin/friends/index.ts b/client/src/app/admin/friends/index.ts index f3110e31d..dd4df2538 100644 --- a/client/src/app/admin/friends/index.ts +++ b/client/src/app/admin/friends/index.ts | |||
@@ -1,4 +1,5 @@ | |||
1 | export * from './friend-add'; | 1 | export * from './friend-add'; |
2 | export * from './friend-list'; | 2 | export * from './friend-list'; |
3 | export * from './shared'; | 3 | export * from './shared'; |
4 | export * from './friends.component'; | ||
4 | export * from './friends.routes'; | 5 | export * from './friends.routes'; |
diff --git a/client/src/app/admin/index.ts b/client/src/app/admin/index.ts index 292973681..3d0e67b15 100644 --- a/client/src/app/admin/index.ts +++ b/client/src/app/admin/index.ts | |||
@@ -1,3 +1,4 @@ | |||
1 | export * from './friends'; | ||
1 | export * from './users'; | 2 | export * from './users'; |
2 | export * from './admin.component'; | 3 | export * from './admin.component'; |
3 | export * from './admin.routes'; | 4 | export * from './admin.routes'; |
diff --git a/client/src/app/admin/menu-admin.component.ts b/client/src/app/admin/menu-admin.component.ts index 788592872..a9115d49f 100644 --- a/client/src/app/admin/menu-admin.component.ts +++ b/client/src/app/admin/menu-admin.component.ts | |||
@@ -1,9 +1,7 @@ | |||
1 | import { Component } from '@angular/core'; | 1 | import { Component } from '@angular/core'; |
2 | import { ROUTER_DIRECTIVES } from '@angular/router'; | ||
3 | 2 | ||
4 | @Component({ | 3 | @Component({ |
5 | selector: 'my-menu-admin', | 4 | selector: 'my-menu-admin', |
6 | template: require('./menu-admin.component.html'), | 5 | template: require('./menu-admin.component.html') |
7 | directives: [ ROUTER_DIRECTIVES ] | ||
8 | }) | 6 | }) |
9 | export class MenuAdminComponent { } | 7 | export class MenuAdminComponent { } |
diff --git a/client/src/app/admin/users/user-add/user-add.component.ts b/client/src/app/admin/users/user-add/user-add.component.ts index 8dd98cc5c..e3f4b2e1a 100644 --- a/client/src/app/admin/users/user-add/user-add.component.ts +++ b/client/src/app/admin/users/user-add/user-add.component.ts | |||
@@ -1,14 +1,12 @@ | |||
1 | import { Validators } from '@angular/common'; | ||
2 | import { Component, OnInit } from '@angular/core'; | 1 | import { Component, OnInit } from '@angular/core'; |
3 | import { FormGroup, FormControl, REACTIVE_FORM_DIRECTIVES } from '@angular/forms'; | 2 | import { FormGroup, FormControl, Validators } from '@angular/forms'; |
4 | import { Router } from '@angular/router'; | 3 | import { Router } from '@angular/router'; |
5 | 4 | ||
6 | import { UserService } from '../shared'; | 5 | import { UserService } from '../shared'; |
7 | 6 | ||
8 | @Component({ | 7 | @Component({ |
9 | selector: 'my-user-add', | 8 | selector: 'my-user-add', |
10 | template: require('./user-add.component.html'), | 9 | template: require('./user-add.component.html') |
11 | directives: [ REACTIVE_FORM_DIRECTIVES ] | ||
12 | }) | 10 | }) |
13 | export class UserAddComponent implements OnInit { | 11 | export class UserAddComponent implements OnInit { |
14 | userAddForm: FormGroup; | 12 | userAddForm: FormGroup; |
diff --git a/client/src/app/admin/users/user-list/user-list.component.ts b/client/src/app/admin/users/user-list/user-list.component.ts index c89a61bca..d3827eb28 100644 --- a/client/src/app/admin/users/user-list/user-list.component.ts +++ b/client/src/app/admin/users/user-list/user-list.component.ts | |||
@@ -1,5 +1,4 @@ | |||
1 | import { Component, OnInit } from '@angular/core'; | 1 | import { Component, OnInit } from '@angular/core'; |
2 | import { ROUTER_DIRECTIVES } from '@angular/router'; | ||
3 | 2 | ||
4 | import { User } from '../../../shared'; | 3 | import { User } from '../../../shared'; |
5 | import { UserService } from '../shared'; | 4 | import { UserService } from '../shared'; |
@@ -7,8 +6,7 @@ import { UserService } from '../shared'; | |||
7 | @Component({ | 6 | @Component({ |
8 | selector: 'my-user-list', | 7 | selector: 'my-user-list', |
9 | template: require('./user-list.component.html'), | 8 | template: require('./user-list.component.html'), |
10 | styles: [ require('./user-list.component.scss') ], | 9 | styles: [ require('./user-list.component.scss') ] |
11 | directives: [ ROUTER_DIRECTIVES ] | ||
12 | }) | 10 | }) |
13 | export class UserListComponent implements OnInit { | 11 | export class UserListComponent implements OnInit { |
14 | totalUsers: number; | 12 | totalUsers: number; |
diff --git a/client/src/app/admin/users/users.component.ts b/client/src/app/admin/users/users.component.ts index 46aa0862f..37e3b158d 100644 --- a/client/src/app/admin/users/users.component.ts +++ b/client/src/app/admin/users/users.component.ts | |||
@@ -1,12 +1,7 @@ | |||
1 | import { Component } from '@angular/core'; | 1 | import { Component } from '@angular/core'; |
2 | import { ROUTER_DIRECTIVES } from '@angular/router'; | ||
3 | |||
4 | import { UserService } from './shared'; | ||
5 | 2 | ||
6 | @Component({ | 3 | @Component({ |
7 | template: '<router-outlet></router-outlet>', | 4 | template: '<router-outlet></router-outlet>' |
8 | directives: [ ROUTER_DIRECTIVES ], | ||
9 | providers: [ UserService ] | ||
10 | }) | 5 | }) |
11 | 6 | ||
12 | export class UsersComponent { | 7 | export class UsersComponent { |
diff --git a/client/src/app/admin/users/users.routes.ts b/client/src/app/admin/users/users.routes.ts index 0457c3843..eb71bd0ae 100644 --- a/client/src/app/admin/users/users.routes.ts +++ b/client/src/app/admin/users/users.routes.ts | |||
@@ -1,10 +1,10 @@ | |||
1 | import { RouterConfig } from '@angular/router'; | 1 | import { Routes } from '@angular/router'; |
2 | 2 | ||
3 | import { UsersComponent } from './users.component'; | 3 | import { UsersComponent } from './users.component'; |
4 | import { UserAddComponent } from './user-add'; | 4 | import { UserAddComponent } from './user-add'; |
5 | import { UserListComponent } from './user-list'; | 5 | import { UserListComponent } from './user-list'; |
6 | 6 | ||
7 | export const UsersRoutes: RouterConfig = [ | 7 | export const UsersRoutes: Routes = [ |
8 | { | 8 | { |
9 | path: 'users', | 9 | path: 'users', |
10 | component: UsersComponent, | 10 | component: UsersComponent, |
diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts index 9d05c272f..e81993a3f 100644 --- a/client/src/app/app.component.ts +++ b/client/src/app/app.component.ts | |||
@@ -1,17 +1,10 @@ | |||
1 | import { Component } from '@angular/core'; | 1 | import { Component } from '@angular/core'; |
2 | import { Router, ROUTER_DIRECTIVES } from '@angular/router'; | 2 | import { Router } from '@angular/router'; |
3 | |||
4 | import { MenuAdminComponent } from './admin'; | ||
5 | import { MenuComponent } from './menu.component'; | ||
6 | import { RestExtractor, RestService, SearchComponent, SearchService } from './shared'; | ||
7 | import { VideoService } from './videos'; | ||
8 | 3 | ||
9 | @Component({ | 4 | @Component({ |
10 | selector: 'my-app', | 5 | selector: 'my-app', |
11 | template: require('./app.component.html'), | 6 | template: require('./app.component.html'), |
12 | styles: [ require('./app.component.scss') ], | 7 | styles: [ require('./app.component.scss') ] |
13 | directives: [ MenuAdminComponent, MenuComponent, ROUTER_DIRECTIVES, SearchComponent ], | ||
14 | providers: [ RestExtractor, RestService, VideoService, SearchService ] | ||
15 | }) | 8 | }) |
16 | 9 | ||
17 | export class AppComponent { | 10 | export class AppComponent { |
diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts new file mode 100644 index 000000000..950b3c48e --- /dev/null +++ b/client/src/app/app.module.ts | |||
@@ -0,0 +1,130 @@ | |||
1 | import { NgModule, ApplicationRef } from '@angular/core'; | ||
2 | import { BrowserModule } from '@angular/platform-browser'; | ||
3 | import { FormsModule, ReactiveFormsModule } from '@angular/forms'; | ||
4 | import { HttpModule, RequestOptions, XHRBackend } from '@angular/http'; | ||
5 | import { RouterModule } from '@angular/router'; | ||
6 | import { removeNgStyles, createNewHosts } from '@angularclass/hmr'; | ||
7 | |||
8 | import { FileSelectDirective } from 'ng2-file-upload/ng2-file-upload'; | ||
9 | import { ProgressbarModule } from 'ng2-bootstrap/components/progressbar'; | ||
10 | import { PaginationModule } from 'ng2-bootstrap/components/pagination'; | ||
11 | import { BytesPipe } from 'angular-pipes/src/math/bytes.pipe'; | ||
12 | |||
13 | /* | ||
14 | * Platform and Environment providers/directives/pipes | ||
15 | */ | ||
16 | import { ENV_PROVIDERS } from './environment'; | ||
17 | import { routes } from './app.routes'; | ||
18 | // App is our top level component | ||
19 | import { AppComponent } from './app.component'; | ||
20 | import { AppState } from './app.service'; | ||
21 | import { AccountComponent, AccountService } from './account'; | ||
22 | import { LoginComponent } from './login'; | ||
23 | import { | ||
24 | LoaderComponent, | ||
25 | VideosComponent, | ||
26 | VideoAddComponent, | ||
27 | VideoListComponent, | ||
28 | VideoMiniatureComponent, | ||
29 | VideoSortComponent, | ||
30 | VideoWatchComponent, | ||
31 | VideoService | ||
32 | } from './videos'; | ||
33 | import { | ||
34 | FriendsComponent, | ||
35 | FriendAddComponent, | ||
36 | FriendListComponent, | ||
37 | FriendService, | ||
38 | UsersComponent, | ||
39 | UserAddComponent, | ||
40 | UserListComponent, | ||
41 | UserService, | ||
42 | AdminComponent, | ||
43 | MenuAdminComponent | ||
44 | } from './admin'; | ||
45 | import { MenuComponent } from './menu.component'; | ||
46 | import { AuthService, AuthHttp, RestExtractor, RestService, SearchComponent, SearchService } from './shared'; | ||
47 | |||
48 | // Application wide providers | ||
49 | const APP_PROVIDERS = [ | ||
50 | AppState, | ||
51 | |||
52 | { | ||
53 | provide: AuthHttp, | ||
54 | useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, authService: AuthService) => { | ||
55 | return new AuthHttp(backend, defaultOptions, authService); | ||
56 | }, | ||
57 | deps: [ XHRBackend, RequestOptions, AuthService ] | ||
58 | }, | ||
59 | |||
60 | AuthService, | ||
61 | RestExtractor, | ||
62 | RestExtractor, RestService, VideoService, SearchService, FriendService, UserService, AccountService | ||
63 | ]; | ||
64 | /** | ||
65 | * `AppModule` is the main entry point into Angular2's bootstraping process | ||
66 | */ | ||
67 | @NgModule({ | ||
68 | bootstrap: [ AppComponent ], | ||
69 | declarations: [ | ||
70 | AppComponent, | ||
71 | BytesPipe, | ||
72 | FileSelectDirective, | ||
73 | AccountComponent, | ||
74 | LoginComponent, | ||
75 | LoaderComponent, | ||
76 | VideosComponent, | ||
77 | VideoAddComponent, | ||
78 | VideoListComponent, | ||
79 | VideoSortComponent, | ||
80 | VideoMiniatureComponent, | ||
81 | VideoWatchComponent, | ||
82 | FriendsComponent, | ||
83 | FriendAddComponent, | ||
84 | FriendListComponent, | ||
85 | UsersComponent, | ||
86 | UserAddComponent, | ||
87 | UserListComponent, | ||
88 | AdminComponent, | ||
89 | MenuAdminComponent, | ||
90 | MenuComponent, | ||
91 | SearchComponent | ||
92 | ], | ||
93 | imports: [ // import Angular's modules | ||
94 | BrowserModule, | ||
95 | FormsModule, | ||
96 | ReactiveFormsModule, | ||
97 | HttpModule, | ||
98 | RouterModule.forRoot(routes), | ||
99 | ProgressbarModule, | ||
100 | PaginationModule | ||
101 | ], | ||
102 | providers: [ // expose our Services and Providers into Angular's dependency injection | ||
103 | ENV_PROVIDERS, | ||
104 | APP_PROVIDERS | ||
105 | ] | ||
106 | }) | ||
107 | export class AppModule { | ||
108 | constructor(public appRef: ApplicationRef, public appState: AppState) {} | ||
109 | hmrOnInit(store) { | ||
110 | if (!store || !store.state) return; | ||
111 | console.log('HMR store', store); | ||
112 | this.appState._state = store.state; | ||
113 | this.appRef.tick(); | ||
114 | delete store.state; | ||
115 | } | ||
116 | hmrOnDestroy(store) { | ||
117 | const cmpLocation = this.appRef.components.map(cmp => cmp.location.nativeElement); | ||
118 | // recreate elements | ||
119 | const state = this.appState._state; | ||
120 | store.state = state; | ||
121 | store.disposeOldHosts = createNewHosts(cmpLocation); | ||
122 | // remove styles | ||
123 | removeNgStyles(); | ||
124 | } | ||
125 | hmrAfterDestroy(store) { | ||
126 | // display new elements | ||
127 | store.disposeOldHosts(); | ||
128 | delete store.disposeOldHosts; | ||
129 | } | ||
130 | } | ||
diff --git a/client/src/app/app.routes.ts b/client/src/app/app.routes.ts index d7194cb4f..03e2bce51 100644 --- a/client/src/app/app.routes.ts +++ b/client/src/app/app.routes.ts | |||
@@ -1,11 +1,11 @@ | |||
1 | import { RouterConfig } from '@angular/router'; | 1 | import { Routes } from '@angular/router'; |
2 | 2 | ||
3 | import { AccountRoutes } from './account'; | 3 | import { AccountRoutes } from './account'; |
4 | import { LoginRoutes } from './login'; | 4 | import { LoginRoutes } from './login'; |
5 | import { AdminRoutes } from './admin'; | 5 | import { AdminRoutes } from './admin'; |
6 | import { VideosRoutes } from './videos'; | 6 | import { VideosRoutes } from './videos'; |
7 | 7 | ||
8 | export const routes: RouterConfig = [ | 8 | export const routes: Routes = [ |
9 | { | 9 | { |
10 | path: '', | 10 | path: '', |
11 | redirectTo: '/videos/list', | 11 | redirectTo: '/videos/list', |
diff --git a/client/src/app/app.service.ts b/client/src/app/app.service.ts new file mode 100644 index 000000000..033c21900 --- /dev/null +++ b/client/src/app/app.service.ts | |||
@@ -0,0 +1,36 @@ | |||
1 | |||
2 | import { Injectable } from '@angular/core'; | ||
3 | |||
4 | @Injectable() | ||
5 | export class AppState { | ||
6 | _state = { }; | ||
7 | |||
8 | constructor() { ; } | ||
9 | |||
10 | // already return a clone of the current state | ||
11 | get state() { | ||
12 | return this._state = this._clone(this._state); | ||
13 | } | ||
14 | // never allow mutation | ||
15 | set state(value) { | ||
16 | throw new Error('do not mutate the `.state` directly'); | ||
17 | } | ||
18 | |||
19 | |||
20 | get(prop?: any) { | ||
21 | // use our state getter for the clone | ||
22 | const state = this.state; | ||
23 | return state.hasOwnProperty(prop) ? state[prop] : state; | ||
24 | } | ||
25 | |||
26 | set(prop: string, value: any) { | ||
27 | // internally mutate our state | ||
28 | return this._state[prop] = value; | ||
29 | } | ||
30 | |||
31 | |||
32 | _clone(object) { | ||
33 | // simple object clone | ||
34 | return JSON.parse(JSON.stringify( object )); | ||
35 | } | ||
36 | } | ||
diff --git a/client/src/app/environment.ts b/client/src/app/environment.ts new file mode 100644 index 000000000..8bba89c4e --- /dev/null +++ b/client/src/app/environment.ts | |||
@@ -0,0 +1,50 @@ | |||
1 | |||
2 | // Angular 2 | ||
3 | // rc2 workaround | ||
4 | import { enableDebugTools, disableDebugTools } from '@angular/platform-browser'; | ||
5 | import { enableProdMode, ApplicationRef } from '@angular/core'; | ||
6 | // Environment Providers | ||
7 | let PROVIDERS = [ | ||
8 | // common env directives | ||
9 | ]; | ||
10 | |||
11 | // Angular debug tools in the dev console | ||
12 | // https://github.com/angular/angular/blob/86405345b781a9dc2438c0fbe3e9409245647019/TOOLS_JS.md | ||
13 | let _decorateModuleRef = function identity(value) { return value; }; | ||
14 | |||
15 | if ('production' === ENV) { | ||
16 | // Production | ||
17 | disableDebugTools(); | ||
18 | enableProdMode(); | ||
19 | |||
20 | PROVIDERS = [ | ||
21 | ...PROVIDERS, | ||
22 | // custom providers in production | ||
23 | ]; | ||
24 | |||
25 | } else { | ||
26 | |||
27 | _decorateModuleRef = (modRef: any) => { | ||
28 | const appRef = modRef.injector.get(ApplicationRef); | ||
29 | const cmpRef = appRef.components[0]; | ||
30 | |||
31 | let _ng = (<any>window).ng; | ||
32 | enableDebugTools(cmpRef); | ||
33 | (<any>window).ng.probe = _ng.probe; | ||
34 | (<any>window).ng.coreTokens = _ng.coreTokens; | ||
35 | return modRef; | ||
36 | }; | ||
37 | |||
38 | // Development | ||
39 | PROVIDERS = [ | ||
40 | ...PROVIDERS, | ||
41 | // custom providers in development | ||
42 | ]; | ||
43 | |||
44 | } | ||
45 | |||
46 | export const decorateModuleRef = _decorateModuleRef; | ||
47 | |||
48 | export const ENV_PROVIDERS = [ | ||
49 | ...PROVIDERS | ||
50 | ]; | ||
diff --git a/client/src/app/index.ts b/client/src/app/index.ts new file mode 100644 index 000000000..da53f6aef --- /dev/null +++ b/client/src/app/index.ts | |||
@@ -0,0 +1 @@ | |||
export * from './app.module'; | |||
diff --git a/client/src/app/login/login.component.ts b/client/src/app/login/login.component.ts index 1e0ba0fe8..7a4e15c2c 100644 --- a/client/src/app/login/login.component.ts +++ b/client/src/app/login/login.component.ts | |||
@@ -1,14 +1,12 @@ | |||
1 | import { Component, OnInit } from '@angular/core'; | 1 | import { Component, OnInit } from '@angular/core'; |
2 | import { Validators } from '@angular/common'; | 2 | import { FormControl, FormGroup, Validators } from '@angular/forms'; |
3 | import { FormControl, FormGroup, REACTIVE_FORM_DIRECTIVES } from '@angular/forms'; | ||
4 | import { Router } from '@angular/router'; | 3 | import { Router } from '@angular/router'; |
5 | 4 | ||
6 | import { AuthService } from '../shared'; | 5 | import { AuthService } from '../shared'; |
7 | 6 | ||
8 | @Component({ | 7 | @Component({ |
9 | selector: 'my-login', | 8 | selector: 'my-login', |
10 | template: require('./login.component.html'), | 9 | template: require('./login.component.html') |
11 | directives: [ REACTIVE_FORM_DIRECTIVES ] | ||
12 | }) | 10 | }) |
13 | 11 | ||
14 | export class LoginComponent implements OnInit { | 12 | export class LoginComponent implements OnInit { |
diff --git a/client/src/app/menu.component.ts b/client/src/app/menu.component.ts index 6b08301df..425a12e5d 100644 --- a/client/src/app/menu.component.ts +++ b/client/src/app/menu.component.ts | |||
@@ -1,12 +1,11 @@ | |||
1 | import { Component, OnInit } from '@angular/core'; | 1 | import { Component, OnInit } from '@angular/core'; |
2 | import { Router, ROUTER_DIRECTIVES } from '@angular/router'; | 2 | import { Router } from '@angular/router'; |
3 | 3 | ||
4 | import { AuthService, AuthStatus } from './shared'; | 4 | import { AuthService, AuthStatus } from './shared'; |
5 | 5 | ||
6 | @Component({ | 6 | @Component({ |
7 | selector: 'my-menu', | 7 | selector: 'my-menu', |
8 | template: require('./menu.component.html'), | 8 | template: require('./menu.component.html') |
9 | directives: [ ROUTER_DIRECTIVES ] | ||
10 | }) | 9 | }) |
11 | export class MenuComponent implements OnInit { | 10 | export class MenuComponent implements OnInit { |
12 | isLoggedIn: boolean; | 11 | isLoggedIn: boolean; |
diff --git a/client/src/app/shared/search/search.component.ts b/client/src/app/shared/search/search.component.ts index 853f5dc7c..7878471dc 100644 --- a/client/src/app/shared/search/search.component.ts +++ b/client/src/app/shared/search/search.component.ts | |||
@@ -1,16 +1,13 @@ | |||
1 | import { Component, OnInit } from '@angular/core'; | 1 | import { Component, OnInit } from '@angular/core'; |
2 | import { Router } from '@angular/router'; | 2 | import { Router } from '@angular/router'; |
3 | 3 | ||
4 | import { DROPDOWN_DIRECTIVES} from 'ng2-bootstrap/components/dropdown'; | ||
5 | |||
6 | import { Search } from './search.model'; | 4 | import { Search } from './search.model'; |
7 | import { SearchField } from './search-field.type'; | 5 | import { SearchField } from './search-field.type'; |
8 | import { SearchService } from './search.service'; | 6 | import { SearchService } from './search.service'; |
9 | 7 | ||
10 | @Component({ | 8 | @Component({ |
11 | selector: 'my-search', | 9 | selector: 'my-search', |
12 | template: require('./search.component.html'), | 10 | template: require('./search.component.html') |
13 | directives: [ DROPDOWN_DIRECTIVES ] | ||
14 | }) | 11 | }) |
15 | 12 | ||
16 | export class SearchComponent implements OnInit { | 13 | export class SearchComponent implements OnInit { |
diff --git a/client/src/app/videos/video-add/video-add.component.ts b/client/src/app/videos/video-add/video-add.component.ts index 900ef1da3..f0695d768 100644 --- a/client/src/app/videos/video-add/video-add.component.ts +++ b/client/src/app/videos/video-add/video-add.component.ts | |||
@@ -1,20 +1,15 @@ | |||
1 | import { Validators } from '@angular/common'; | ||
2 | import { Component, ElementRef, OnInit } from '@angular/core'; | 1 | import { Component, ElementRef, OnInit } from '@angular/core'; |
3 | import { FormControl, FormGroup, REACTIVE_FORM_DIRECTIVES } from '@angular/forms'; | 2 | import { FormControl, FormGroup, Validators } from '@angular/forms'; |
4 | import { Router } from '@angular/router'; | 3 | import { Router } from '@angular/router'; |
5 | 4 | ||
6 | import { BytesPipe } from 'angular-pipes/src/math/bytes.pipe'; | 5 | import { FileUploader } from 'ng2-file-upload/ng2-file-upload'; |
7 | import { PROGRESSBAR_DIRECTIVES } from 'ng2-bootstrap/components/progressbar'; | ||
8 | import { FileSelectDirective, FileUploader } from 'ng2-file-upload/ng2-file-upload'; | ||
9 | 6 | ||
10 | import { AuthService } from '../../shared'; | 7 | import { AuthService } from '../../shared'; |
11 | 8 | ||
12 | @Component({ | 9 | @Component({ |
13 | selector: 'my-videos-add', | 10 | selector: 'my-videos-add', |
14 | styles: [ require('./video-add.component.scss') ], | 11 | styles: [ require('./video-add.component.scss') ], |
15 | template: require('./video-add.component.html'), | 12 | template: require('./video-add.component.html') |
16 | directives: [ FileSelectDirective, PROGRESSBAR_DIRECTIVES, REACTIVE_FORM_DIRECTIVES ], | ||
17 | pipes: [ BytesPipe ] | ||
18 | }) | 13 | }) |
19 | 14 | ||
20 | export class VideoAddComponent implements OnInit { | 15 | export class VideoAddComponent implements OnInit { |
diff --git a/client/src/app/videos/video-list/video-list.component.ts b/client/src/app/videos/video-list/video-list.component.ts index 9a9ffe29f..fa8e497aa 100644 --- a/client/src/app/videos/video-list/video-list.component.ts +++ b/client/src/app/videos/video-list/video-list.component.ts | |||
@@ -1,27 +1,19 @@ | |||
1 | import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; | 1 | import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; |
2 | import { AsyncPipe } from '@angular/common'; | 2 | import { ActivatedRoute, Router } from '@angular/router'; |
3 | import { ActivatedRoute, Router, ROUTER_DIRECTIVES } from '@angular/router'; | ||
4 | import { BehaviorSubject } from 'rxjs/BehaviorSubject'; | 3 | import { BehaviorSubject } from 'rxjs/BehaviorSubject'; |
5 | 4 | ||
6 | import { PAGINATION_DIRECTIVES } from 'ng2-bootstrap/components/pagination'; | ||
7 | |||
8 | import { | 5 | import { |
9 | LoaderComponent, | ||
10 | SortField, | 6 | SortField, |
11 | Video, | 7 | Video, |
12 | VideoService | 8 | VideoService |
13 | } from '../shared'; | 9 | } from '../shared'; |
14 | import { AuthService, AuthUser, RestPagination, Search, SearchField } from '../../shared'; | 10 | import { AuthService, AuthUser, RestPagination, Search, SearchField } from '../../shared'; |
15 | import { VideoMiniatureComponent } from './video-miniature.component'; | ||
16 | import { VideoSortComponent } from './video-sort.component'; | ||
17 | import { SearchService } from '../../shared'; | 11 | import { SearchService } from '../../shared'; |
18 | 12 | ||
19 | @Component({ | 13 | @Component({ |
20 | selector: 'my-videos-list', | 14 | selector: 'my-videos-list', |
21 | styles: [ require('./video-list.component.scss') ], | 15 | styles: [ require('./video-list.component.scss') ], |
22 | pipes: [ AsyncPipe ], | 16 | template: require('./video-list.component.html') |
23 | template: require('./video-list.component.html'), | ||
24 | directives: [ LoaderComponent, PAGINATION_DIRECTIVES, ROUTER_DIRECTIVES, VideoMiniatureComponent, VideoSortComponent ] | ||
25 | }) | 17 | }) |
26 | 18 | ||
27 | export class VideoListComponent implements OnInit, OnDestroy { | 19 | export class VideoListComponent implements OnInit, OnDestroy { |
diff --git a/client/src/app/videos/video-list/video-miniature.component.ts b/client/src/app/videos/video-list/video-miniature.component.ts index 84bab950e..38317f832 100644 --- a/client/src/app/videos/video-list/video-miniature.component.ts +++ b/client/src/app/videos/video-list/video-miniature.component.ts | |||
@@ -1,6 +1,4 @@ | |||
1 | import { DatePipe } from '@angular/common'; | ||
2 | import { Component, Input, Output, EventEmitter } from '@angular/core'; | 1 | import { Component, Input, Output, EventEmitter } from '@angular/core'; |
3 | import { ROUTER_DIRECTIVES } from '@angular/router'; | ||
4 | 2 | ||
5 | import { SortField, Video, VideoService } from '../shared'; | 3 | import { SortField, Video, VideoService } from '../shared'; |
6 | import { User } from '../../shared'; | 4 | import { User } from '../../shared'; |
@@ -8,9 +6,7 @@ import { User } from '../../shared'; | |||
8 | @Component({ | 6 | @Component({ |
9 | selector: 'my-video-miniature', | 7 | selector: 'my-video-miniature', |
10 | styles: [ require('./video-miniature.component.scss') ], | 8 | styles: [ require('./video-miniature.component.scss') ], |
11 | template: require('./video-miniature.component.html'), | 9 | template: require('./video-miniature.component.html') |
12 | directives: [ ROUTER_DIRECTIVES ], | ||
13 | pipes: [ DatePipe ] | ||
14 | }) | 10 | }) |
15 | 11 | ||
16 | export class VideoMiniatureComponent { | 12 | export class VideoMiniatureComponent { |
diff --git a/client/src/app/videos/video-watch/video-watch.component.ts b/client/src/app/videos/video-watch/video-watch.component.ts index d260e55c7..2a60e9327 100644 --- a/client/src/app/videos/video-watch/video-watch.component.ts +++ b/client/src/app/videos/video-watch/video-watch.component.ts | |||
@@ -1,18 +1,13 @@ | |||
1 | import { Component, ElementRef, NgZone, OnDestroy, OnInit } from '@angular/core'; | 1 | import { Component, ElementRef, NgZone, OnDestroy, OnInit } from '@angular/core'; |
2 | import { ActivatedRoute } from '@angular/router'; | 2 | import { ActivatedRoute } from '@angular/router'; |
3 | 3 | ||
4 | import { BytesPipe } from 'angular-pipes/src/math/bytes.pipe'; | 4 | import { Video, VideoService } from '../shared'; |
5 | |||
6 | import { LoaderComponent, Video, VideoService } from '../shared'; | ||
7 | import { WebTorrentService } from './webtorrent.service'; | 5 | import { WebTorrentService } from './webtorrent.service'; |
8 | 6 | ||
9 | @Component({ | 7 | @Component({ |
10 | selector: 'my-video-watch', | 8 | selector: 'my-video-watch', |
11 | template: require('./video-watch.component.html'), | 9 | template: require('./video-watch.component.html'), |
12 | styles: [ require('./video-watch.component.scss') ], | 10 | styles: [ require('./video-watch.component.scss') ] |
13 | providers: [ WebTorrentService ], | ||
14 | directives: [ LoaderComponent ], | ||
15 | pipes: [ BytesPipe ] | ||
16 | }) | 11 | }) |
17 | 12 | ||
18 | export class VideoWatchComponent implements OnInit, OnDestroy { | 13 | export class VideoWatchComponent implements OnInit, OnDestroy { |
diff --git a/client/src/app/videos/videos.component.ts b/client/src/app/videos/videos.component.ts index 76252afbb..591e7523d 100644 --- a/client/src/app/videos/videos.component.ts +++ b/client/src/app/videos/videos.component.ts | |||
@@ -1,9 +1,7 @@ | |||
1 | import { Component } from '@angular/core'; | 1 | import { Component } from '@angular/core'; |
2 | import { ROUTER_DIRECTIVES } from '@angular/router'; | ||
3 | 2 | ||
4 | @Component({ | 3 | @Component({ |
5 | template: '<router-outlet></router-outlet>', | 4 | template: '<router-outlet></router-outlet>' |
6 | directives: [ ROUTER_DIRECTIVES ] | ||
7 | }) | 5 | }) |
8 | 6 | ||
9 | export class VideosComponent { | 7 | export class VideosComponent { |
diff --git a/client/src/app/videos/videos.routes.ts b/client/src/app/videos/videos.routes.ts index 1f088b376..074f96596 100644 --- a/client/src/app/videos/videos.routes.ts +++ b/client/src/app/videos/videos.routes.ts | |||
@@ -1,11 +1,11 @@ | |||
1 | import { RouterConfig } from '@angular/router'; | 1 | import { Routes } from '@angular/router'; |
2 | 2 | ||
3 | import { VideoAddComponent } from './video-add'; | 3 | import { VideoAddComponent } from './video-add'; |
4 | import { VideoListComponent } from './video-list'; | 4 | import { VideoListComponent } from './video-list'; |
5 | import { VideosComponent } from './videos.component'; | 5 | import { VideosComponent } from './videos.component'; |
6 | import { VideoWatchComponent } from './video-watch'; | 6 | import { VideoWatchComponent } from './video-watch'; |
7 | 7 | ||
8 | export const VideosRoutes: RouterConfig = [ | 8 | export const VideosRoutes: Routes = [ |
9 | { | 9 | { |
10 | path: 'videos', | 10 | path: 'videos', |
11 | component: VideosComponent, | 11 | component: VideosComponent, |
diff --git a/client/src/custom-typings.d.ts b/client/src/custom-typings.d.ts index 14c7d8ade..95787181f 100644 --- a/client/src/custom-typings.d.ts +++ b/client/src/custom-typings.d.ts | |||
@@ -1,15 +1,27 @@ | |||
1 | /* | 1 | /* |
2 | * Custom Type Definitions | 2 | * Custom Type Definitions |
3 | * When including 3rd party modules you also need to include the type definition for the module | 3 | * When including 3rd party modules you also need to include the type definition for the module |
4 | * if they don't provide one within the module. You can try to install it with typings | 4 | * if they don't provide one within the module. You can try to install it with @types |
5 | 5 | ||
6 | typings install node --save | 6 | npm install @types/node |
7 | npm install @types/lodash | ||
7 | 8 | ||
8 | * If you can't find the type definition in the registry we can make an ambient definition in | 9 | * If you can't find the type definition in the registry we can make an ambient/global definition in |
9 | * this file for now. For example | 10 | * this file for now. For example |
10 | 11 | ||
11 | declare module "my-module" { | 12 | declare module 'my-module' { |
12 | export function doesSomething(value: string): string; | 13 | export function doesSomething(value: string): string; |
14 | } | ||
15 | |||
16 | * If you are using a CommonJS module that is using module.exports then you will have to write your | ||
17 | * types using export = yourObjectOrFunction with a namespace above it | ||
18 | * notice how we have to create a namespace that is equal to the function we're | ||
19 | * assigning the export to | ||
20 | |||
21 | declare module 'jwt-decode' { | ||
22 | function jwtDecode(token: string): any; | ||
23 | namespace jwtDecode {} | ||
24 | export = jwtDecode; | ||
13 | } | 25 | } |
14 | 26 | ||
15 | * | 27 | * |
@@ -17,33 +29,65 @@ declare module "my-module" { | |||
17 | * | 29 | * |
18 | 30 | ||
19 | declare var assert: any; | 31 | declare var assert: any; |
32 | declare var _: any; | ||
33 | declare var $: any; | ||
20 | 34 | ||
21 | * | 35 | * |
22 | * If you're importing a module that uses Node.js modules which are CommonJS you need to import as | 36 | * If you're importing a module that uses Node.js modules which are CommonJS you need to import as |
37 | * in the files such as main.browser.ts or any file within app/ | ||
23 | * | 38 | * |
24 | 39 | ||
25 | import * as _ from 'lodash' | 40 | import * as _ from 'lodash' |
26 | 41 | ||
27 | * You can include your type definitions in this file until you create one for the typings registry | 42 | * You can include your type definitions in this file until you create one for the @types |
28 | * see https://github.com/typings/registry | ||
29 | * | 43 | * |
30 | */ | 44 | */ |
31 | 45 | ||
46 | // support NodeJS modules without type definitions | ||
47 | declare module '*'; | ||
32 | 48 | ||
33 | // Extra variables that live on Global that will be replaced by webpack DefinePlugin | 49 | // Extra variables that live on Global that will be replaced by webpack DefinePlugin |
34 | declare var ENV: string; | 50 | declare var ENV: string; |
35 | declare var HMR: boolean; | 51 | declare var HMR: boolean; |
52 | declare var System: SystemJS; | ||
53 | |||
54 | interface SystemJS { | ||
55 | import: (path?: string) => Promise<any>; | ||
56 | } | ||
57 | |||
36 | interface GlobalEnvironment { | 58 | interface GlobalEnvironment { |
37 | ENV; | 59 | ENV; |
38 | HMR; | 60 | HMR; |
61 | SystemJS: SystemJS; | ||
62 | System: SystemJS; | ||
39 | } | 63 | } |
40 | 64 | ||
65 | interface Es6PromiseLoader { | ||
66 | (id: string): (exportName?: string) => Promise<any>; | ||
67 | } | ||
68 | |||
69 | type FactoryEs6PromiseLoader = () => Es6PromiseLoader; | ||
70 | type FactoryPromise = () => Promise<any>; | ||
71 | |||
72 | type AsyncRoutes = { | ||
73 | [component: string]: Es6PromiseLoader | | ||
74 | Function | | ||
75 | FactoryEs6PromiseLoader | | ||
76 | FactoryPromise | ||
77 | }; | ||
78 | |||
79 | |||
80 | type IdleCallbacks = Es6PromiseLoader | | ||
81 | Function | | ||
82 | FactoryEs6PromiseLoader | | ||
83 | FactoryPromise ; | ||
84 | |||
41 | interface WebpackModule { | 85 | interface WebpackModule { |
42 | hot: { | 86 | hot: { |
43 | data?: any, | 87 | data?: any, |
44 | idle: any, | 88 | idle: any, |
45 | accept(dependencies?: string | string[], callback?: (updatedDependencies?: any) => void): void; | 89 | accept(dependencies?: string | string[], callback?: (updatedDependencies?: any) => void): void; |
46 | decline(dependencies?: string | string[]): void; | 90 | decline(deps?: any | string | string[]): void; |
47 | dispose(callback?: (data?: any) => void): void; | 91 | dispose(callback?: (data?: any) => void): void; |
48 | addDisposeHandler(callback?: (data?: any) => void): void; | 92 | addDisposeHandler(callback?: (data?: any) => void): void; |
49 | removeDisposeHandler(callback?: (data?: any) => void): void; | 93 | removeDisposeHandler(callback?: (data?: any) => void): void; |
@@ -54,66 +98,26 @@ interface WebpackModule { | |||
54 | }; | 98 | }; |
55 | } | 99 | } |
56 | 100 | ||
101 | |||
57 | interface WebpackRequire { | 102 | interface WebpackRequire { |
58 | context(file: string, flag?: boolean, exp?: RegExp): any; | 103 | (id: string): any; |
104 | (paths: string[], callback: (...modules: any[]) => void): void; | ||
105 | ensure(ids: string[], callback: (req: WebpackRequire) => void, chunkName?: string): void; | ||
106 | context(directory: string, useSubDirectories?: boolean, regExp?: RegExp): WebpackContext; | ||
59 | } | 107 | } |
60 | 108 | ||
109 | interface WebpackContext extends WebpackRequire { | ||
110 | keys(): string[]; | ||
111 | } | ||
61 | 112 | ||
62 | interface ErrorStackTraceLimit { | 113 | interface ErrorStackTraceLimit { |
63 | stackTraceLimit: number; | 114 | stackTraceLimit: number; |
64 | } | 115 | } |
65 | 116 | ||
66 | 117 | ||
67 | |||
68 | // Extend typings | 118 | // Extend typings |
69 | interface NodeRequire extends WebpackRequire {} | 119 | interface NodeRequire extends WebpackRequire {} |
70 | interface ErrorConstructor extends ErrorStackTraceLimit {} | 120 | interface ErrorConstructor extends ErrorStackTraceLimit {} |
121 | interface NodeRequireFunction extends Es6PromiseLoader {} | ||
71 | interface NodeModule extends WebpackModule {} | 122 | interface NodeModule extends WebpackModule {} |
72 | interface Global extends GlobalEnvironment {} | 123 | interface Global extends GlobalEnvironment {} |
73 | |||
74 | |||
75 | declare namespace Reflect { | ||
76 | function decorate(decorators: ClassDecorator[], target: Function): Function; | ||
77 | function decorate( | ||
78 | decorators: (PropertyDecorator | MethodDecorator)[], | ||
79 | target: Object, | ||
80 | targetKey: string | symbol, | ||
81 | descriptor?: PropertyDescriptor): PropertyDescriptor; | ||
82 | |||
83 | function metadata(metadataKey: any, metadataValue: any): { | ||
84 | (target: Function): void; | ||
85 | (target: Object, propertyKey: string | symbol): void; | ||
86 | }; | ||
87 | function defineMetadata(metadataKey: any, metadataValue: any, target: Object): void; | ||
88 | function defineMetadata( | ||
89 | metadataKey: any, | ||
90 | metadataValue: any, | ||
91 | target: Object, | ||
92 | targetKey: string | symbol): void; | ||
93 | function hasMetadata(metadataKey: any, target: Object): boolean; | ||
94 | function hasMetadata(metadataKey: any, target: Object, targetKey: string | symbol): boolean; | ||
95 | function hasOwnMetadata(metadataKey: any, target: Object): boolean; | ||
96 | function hasOwnMetadata(metadataKey: any, target: Object, targetKey: string | symbol): boolean; | ||
97 | function getMetadata(metadataKey: any, target: Object): any; | ||
98 | function getMetadata(metadataKey: any, target: Object, targetKey: string | symbol): any; | ||
99 | function getOwnMetadata(metadataKey: any, target: Object): any; | ||
100 | function getOwnMetadata(metadataKey: any, target: Object, targetKey: string | symbol): any; | ||
101 | function getMetadataKeys(target: Object): any[]; | ||
102 | function getMetadataKeys(target: Object, targetKey: string | symbol): any[]; | ||
103 | function getOwnMetadataKeys(target: Object): any[]; | ||
104 | function getOwnMetadataKeys(target: Object, targetKey: string | symbol): any[]; | ||
105 | function deleteMetadata(metadataKey: any, target: Object): boolean; | ||
106 | function deleteMetadata(metadataKey: any, target: Object, targetKey: string | symbol): boolean; | ||
107 | } | ||
108 | |||
109 | |||
110 | // We need this here since there is a problem with Zone.js typings | ||
111 | interface Thenable<T> { | ||
112 | then<U>( | ||
113 | onFulfilled?: (value: T) => U | Thenable<U>, | ||
114 | onRejected?: (error: any) => U | Thenable<U>): Thenable<U>; | ||
115 | then<U>( | ||
116 | onFulfilled?: (value: T) => U | Thenable<U>, | ||
117 | onRejected?: (error: any) => void): Thenable<U>; | ||
118 | catch<U>(onRejected?: (error: any) => U | Thenable<U>): Thenable<U>; | ||
119 | } | ||
diff --git a/client/src/main.ts b/client/src/main.ts index 7caabe914..70bf48537 100644 --- a/client/src/main.ts +++ b/client/src/main.ts | |||
@@ -1,35 +1,20 @@ | |||
1 | import { enableProdMode, provide } from '@angular/core'; | 1 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; |
2 | import { disableDeprecatedForms, provideForms } from '@angular/forms'; | 2 | import { decorateModuleRef } from './app/environment'; |
3 | import { | 3 | import { bootloader } from '@angularclass/hmr'; |
4 | HTTP_PROVIDERS, | 4 | /* |
5 | RequestOptions, | 5 | * App Module |
6 | XHRBackend | 6 | * our top level module that holds all of our components |
7 | } from '@angular/http'; | 7 | */ |
8 | import { bootstrap } from '@angular/platform-browser-dynamic'; | 8 | import { AppModule } from './app'; |
9 | import { provideRouter } from '@angular/router'; | ||
10 | 9 | ||
11 | import { routes } from './app/app.routes'; | 10 | /* |
12 | import { AuthHttp, AuthService, RestExtractor } from './app/shared'; | 11 | * Bootstrap our Angular app with a top level NgModule |
13 | import { AppComponent } from './app/app.component'; | 12 | */ |
14 | 13 | export function main(): Promise<any> { | |
15 | if (process.env.ENV === 'production') { | 14 | return platformBrowserDynamic() |
16 | enableProdMode(); | 15 | .bootstrapModule(AppModule) |
16 | .then(decorateModuleRef) | ||
17 | .catch(err => console.error(err)); | ||
17 | } | 18 | } |
18 | 19 | ||
19 | bootstrap(AppComponent, [ | 20 | bootloader(main); |
20 | HTTP_PROVIDERS, | ||
21 | provide(AuthHttp, { | ||
22 | useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, authService: AuthService) => { | ||
23 | return new AuthHttp(backend, defaultOptions, authService); | ||
24 | }, | ||
25 | deps: [ XHRBackend, RequestOptions, AuthService ] | ||
26 | }), | ||
27 | |||
28 | AuthService, | ||
29 | RestExtractor, | ||
30 | |||
31 | provideRouter(routes), | ||
32 | |||
33 | disableDeprecatedForms(), | ||
34 | provideForms() | ||
35 | ]); | ||
diff --git a/client/src/polyfills.ts b/client/src/polyfills.ts index 740a563bb..65e211459 100644 --- a/client/src/polyfills.ts +++ b/client/src/polyfills.ts | |||
@@ -6,9 +6,28 @@ require('intl/locale-data/jsonp/en.js'); | |||
6 | import 'ie-shim'; // Internet Explorer | 6 | import 'ie-shim'; // Internet Explorer |
7 | 7 | ||
8 | // Prefer CoreJS over the polyfills above | 8 | // Prefer CoreJS over the polyfills above |
9 | import 'core-js/es6'; | 9 | import 'core-js/es6/symbol'; |
10 | import 'core-js/es6/object'; | ||
11 | import 'core-js/es6/function'; | ||
12 | import 'core-js/es6/parse-int'; | ||
13 | import 'core-js/es6/parse-float'; | ||
14 | import 'core-js/es6/number'; | ||
15 | import 'core-js/es6/math'; | ||
16 | import 'core-js/es6/string'; | ||
17 | import 'core-js/es6/date'; | ||
18 | import 'core-js/es6/array'; | ||
19 | import 'core-js/es6/regexp'; | ||
20 | import 'core-js/es6/map'; | ||
21 | import 'core-js/es6/set'; | ||
22 | import 'core-js/es6/weak-map'; | ||
23 | import 'core-js/es6/weak-set'; | ||
24 | import 'core-js/es6/typed'; | ||
25 | import 'core-js/es6/reflect'; | ||
26 | // see issue https://github.com/AngularClass/angular2-webpack-starter/issues/709 | ||
27 | // import 'core-js/es6/promise'; | ||
28 | |||
10 | import 'core-js/es7/reflect'; | 29 | import 'core-js/es7/reflect'; |
11 | require('zone.js/dist/zone'); | 30 | import 'zone.js/dist/zone'; |
12 | 31 | ||
13 | // Typescript emit helpers polyfill | 32 | // Typescript emit helpers polyfill |
14 | import 'ts-helpers'; | 33 | import 'ts-helpers'; |
diff --git a/client/src/vendor.ts b/client/src/vendor.ts index df03bc5f4..95356d9d0 100644 --- a/client/src/vendor.ts +++ b/client/src/vendor.ts | |||
@@ -12,10 +12,13 @@ import '@angular/forms'; | |||
12 | import '@angular/http'; | 12 | import '@angular/http'; |
13 | import '@angular/router'; | 13 | import '@angular/router'; |
14 | 14 | ||
15 | import '@angularclass/hmr'; | ||
16 | |||
15 | // RxJS | 17 | // RxJS |
16 | import 'rxjs/Observable'; | 18 | import 'rxjs/Observable'; |
17 | import 'rxjs/Subject'; | 19 | import 'rxjs/Subject'; |
18 | import 'rxjs/add/operator/catch'; | 20 | import 'rxjs/add/operator/catch'; |
21 | import 'rxjs/add/operator/mergeMap'; | ||
19 | import 'rxjs/add/operator/map'; | 22 | import 'rxjs/add/operator/map'; |
20 | import 'rxjs/add/observable/throw'; | 23 | import 'rxjs/add/observable/throw'; |
21 | 24 | ||