diff options
author | BO41 <lukasw41@gmail.com> | 2018-10-18 09:08:59 +0200 |
---|---|---|
committer | Rigel Kent <par@rigelk.eu> | 2018-10-18 09:08:59 +0200 |
commit | 244b4ae3973bc1511464a08158a123767f83179c (patch) | |
tree | 24f4399489167bc92921e3fe0c1c04a87d7c1161 /client/src | |
parent | 28e51e831bd121f063600a597d7b02f8fd846de9 (diff) | |
download | PeerTube-244b4ae3973bc1511464a08158a123767f83179c.tar.gz PeerTube-244b4ae3973bc1511464a08158a123767f83179c.tar.zst PeerTube-244b4ae3973bc1511464a08158a123767f83179c.zip |
NoImplicitAny flag true (#1157)
this enables the `noImplicitAny` flag in the Typescript compiler
> When the noImplicitAny flag is true and the TypeScript compiler cannot infer the type, it still generates the JavaScript files, but it also reports an error. Many seasoned developers prefer this stricter setting because type checking catches more unintentional errors at compile time.
closes: #1131
replaces #1137
Diffstat (limited to 'client/src')
59 files changed, 174 insertions, 171 deletions
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts index 25b303f44..9a9298825 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts | |||
@@ -62,7 +62,7 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { | |||
62 | } | 62 | } |
63 | 63 | ||
64 | ngOnInit () { | 64 | ngOnInit () { |
65 | const formGroupData = { | 65 | const formGroupData: any = { |
66 | instanceName: this.customConfigValidatorsService.INSTANCE_NAME, | 66 | instanceName: this.customConfigValidatorsService.INSTANCE_NAME, |
67 | instanceShortDescription: this.customConfigValidatorsService.INSTANCE_SHORT_DESCRIPTION, | 67 | instanceShortDescription: this.customConfigValidatorsService.INSTANCE_SHORT_DESCRIPTION, |
68 | instanceDescription: null, | 68 | instanceDescription: null, |
@@ -202,7 +202,7 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { | |||
202 | } | 202 | } |
203 | 203 | ||
204 | private updateForm () { | 204 | private updateForm () { |
205 | const data = { | 205 | const data: any = { |
206 | instanceName: this.customConfig.instance.name, | 206 | instanceName: this.customConfig.instance.name, |
207 | instanceShortDescription: this.customConfig.instance.shortDescription, | 207 | instanceShortDescription: this.customConfig.instance.shortDescription, |
208 | instanceDescription: this.customConfig.instance.description, | 208 | instanceDescription: this.customConfig.instance.description, |
diff --git a/client/src/app/+admin/users/user-edit/user-edit.ts b/client/src/app/+admin/users/user-edit/user-edit.ts index 99ce5804b..a4d696e69 100644 --- a/client/src/app/+admin/users/user-edit/user-edit.ts +++ b/client/src/app/+admin/users/user-edit/user-edit.ts | |||
@@ -7,7 +7,7 @@ export abstract class UserEdit extends FormReactive { | |||
7 | 7 | ||
8 | videoQuotaOptions: { value: string, label: string }[] = [] | 8 | videoQuotaOptions: { value: string, label: string }[] = [] |
9 | videoQuotaDailyOptions: { value: string, label: string }[] = [] | 9 | videoQuotaDailyOptions: { value: string, label: string }[] = [] |
10 | roles = Object.keys(USER_ROLE_LABELS).map(key => ({ value: key.toString(), label: USER_ROLE_LABELS[key] })) | 10 | roles = Object.keys(USER_ROLE_LABELS).map((key: any) => ({ value: key.toString(), label: USER_ROLE_LABELS[key] })) |
11 | 11 | ||
12 | protected abstract serverService: ServerService | 12 | protected abstract serverService: ServerService |
13 | protected abstract configService: ConfigService | 13 | protected abstract configService: ConfigService |
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 ab2250722..0d7f88d2b 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 | |||
@@ -45,12 +45,12 @@ export class UserListComponent extends RestTable implements OnInit { | |||
45 | { | 45 | { |
46 | label: this.i18n('Ban'), | 46 | label: this.i18n('Ban'), |
47 | handler: users => this.openBanUserModal(users), | 47 | handler: users => this.openBanUserModal(users), |
48 | isDisplayed: users => users.every(u => u.blocked === false) | 48 | isDisplayed: users => users.every((u: any) => u.blocked === false) |
49 | }, | 49 | }, |
50 | { | 50 | { |
51 | label: this.i18n('Unban'), | 51 | label: this.i18n('Unban'), |
52 | handler: users => this.unbanUsers(users), | 52 | handler: users => this.unbanUsers(users), |
53 | isDisplayed: users => users.every(u => u.blocked === true) | 53 | isDisplayed: users => users.every((u: any) => u.blocked === true) |
54 | } | 54 | } |
55 | ] | 55 | ] |
56 | } | 56 | } |
diff --git a/client/src/app/+my-account/my-account-video-channels/my-account-video-channel-update.component.ts b/client/src/app/+my-account/my-account-video-channels/my-account-video-channel-update.component.ts index 56697030b..f2b8a4e26 100644 --- a/client/src/app/+my-account/my-account-video-channels/my-account-video-channel-update.component.ts +++ b/client/src/app/+my-account/my-account-video-channels/my-account-video-channel-update.component.ts | |||
@@ -17,7 +17,7 @@ import { VideoChannelValidatorsService } from '@app/shared/forms/form-validators | |||
17 | styleUrls: [ './my-account-video-channel-edit.component.scss' ] | 17 | styleUrls: [ './my-account-video-channel-edit.component.scss' ] |
18 | }) | 18 | }) |
19 | export class MyAccountVideoChannelUpdateComponent extends MyAccountVideoChannelEdit implements OnInit, OnDestroy { | 19 | export class MyAccountVideoChannelUpdateComponent extends MyAccountVideoChannelEdit implements OnInit, OnDestroy { |
20 | @ViewChild('avatarfileInput') avatarfileInput | 20 | @ViewChild('avatarfileInput') avatarfileInput: any |
21 | 21 | ||
22 | error: string | 22 | error: string |
23 | 23 | ||
diff --git a/client/src/app/+my-account/my-account-videos/my-account-videos.component.ts b/client/src/app/+my-account/my-account-videos/my-account-videos.component.ts index 7560f0128..52307f09e 100644 --- a/client/src/app/+my-account/my-account-videos/my-account-videos.component.ts +++ b/client/src/app/+my-account/my-account-videos/my-account-videos.component.ts | |||
@@ -66,7 +66,7 @@ export class MyAccountVideosComponent extends AbstractVideoList implements OnIni | |||
66 | } | 66 | } |
67 | 67 | ||
68 | isInSelectionMode () { | 68 | isInSelectionMode () { |
69 | return Object.keys(this.checkedVideos).some(k => this.checkedVideos[ k ] === true) | 69 | return Object.keys(this.checkedVideos).some((k: any) => this.checkedVideos[ k ] === true) |
70 | } | 70 | } |
71 | 71 | ||
72 | getVideosObservable (page: number) { | 72 | getVideosObservable (page: number) { |
@@ -81,7 +81,7 @@ export class MyAccountVideosComponent extends AbstractVideoList implements OnIni | |||
81 | 81 | ||
82 | async deleteSelectedVideos () { | 82 | async deleteSelectedVideos () { |
83 | const toDeleteVideosIds = Object.keys(this.checkedVideos) | 83 | const toDeleteVideosIds = Object.keys(this.checkedVideos) |
84 | .filter(k => this.checkedVideos[ k ] === true) | 84 | .filter((k: any) => this.checkedVideos[ k ] === true) |
85 | .map(k => parseInt(k, 10)) | 85 | .map(k => parseInt(k, 10)) |
86 | 86 | ||
87 | const res = await this.confirmService.confirm( | 87 | const res = await this.confirmService.confirm( |
@@ -168,9 +168,10 @@ export class MyAccountVideosComponent extends AbstractVideoList implements OnIni | |||
168 | } | 168 | } |
169 | 169 | ||
170 | private spliceVideosById (id: number) { | 170 | private spliceVideosById (id: number) { |
171 | for (const key of Object.keys(this.loadedPages)) { | 171 | let key: any |
172 | for (key of Object.keys(this.loadedPages)) { | ||
172 | const videos = this.loadedPages[ key ] | 173 | const videos = this.loadedPages[ key ] |
173 | const index = videos.findIndex(v => v.id === id) | 174 | const index = videos.findIndex((v: any) => v.id === id) |
174 | 175 | ||
175 | if (index !== -1) { | 176 | if (index !== -1) { |
176 | videos.splice(index, 1) | 177 | videos.splice(index, 1) |
diff --git a/client/src/app/+my-account/my-account-videos/video-change-ownership/video-change-ownership.component.ts b/client/src/app/+my-account/my-account-videos/video-change-ownership/video-change-ownership.component.ts index 7437b939a..eb3f9404f 100644 --- a/client/src/app/+my-account/my-account-videos/video-change-ownership/video-change-ownership.component.ts +++ b/client/src/app/+my-account/my-account-videos/video-change-ownership/video-change-ownership.component.ts | |||
@@ -49,7 +49,8 @@ export class VideoChangeOwnershipComponent extends FormReactive implements OnIni | |||
49 | .catch((_) => _) // Called when closing (cancel) the modal without validating, do nothing | 49 | .catch((_) => _) // Called when closing (cancel) the modal without validating, do nothing |
50 | } | 50 | } |
51 | 51 | ||
52 | search (event) { | 52 | // TODO: typing |
53 | search (event: any) { | ||
53 | const query = event.query | 54 | const query = event.query |
54 | this.userService.autocomplete(query) | 55 | this.userService.autocomplete(query) |
55 | .subscribe( | 56 | .subscribe( |
diff --git a/client/src/app/+my-account/shared/actor-avatar-info.component.ts b/client/src/app/+my-account/shared/actor-avatar-info.component.ts index 7b80b1ed4..b4505a7f2 100644 --- a/client/src/app/+my-account/shared/actor-avatar-info.component.ts +++ b/client/src/app/+my-account/shared/actor-avatar-info.component.ts | |||
@@ -10,7 +10,7 @@ import { Account } from '@app/shared/account/account.model' | |||
10 | styleUrls: [ './actor-avatar-info.component.scss' ] | 10 | styleUrls: [ './actor-avatar-info.component.scss' ] |
11 | }) | 11 | }) |
12 | export class ActorAvatarInfoComponent { | 12 | export class ActorAvatarInfoComponent { |
13 | @ViewChild('avatarfileInput') avatarfileInput | 13 | @ViewChild('avatarfileInput') avatarfileInput: any |
14 | 14 | ||
15 | @Input() actor: VideoChannel | Account | 15 | @Input() actor: VideoChannel | Account |
16 | 16 | ||
diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index 34e890b40..371199442 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts | |||
@@ -69,7 +69,7 @@ export function metaFactory (serverService: ServerService): MetaLoader { | |||
69 | providers: [ | 69 | providers: [ |
70 | { | 70 | { |
71 | provide: TRANSLATIONS, | 71 | provide: TRANSLATIONS, |
72 | useFactory: (locale) => { | 72 | useFactory: (locale: string) => { |
73 | // On dev mode, test localization | 73 | // On dev mode, test localization |
74 | if (isOnDevLocale()) { | 74 | if (isOnDevLocale()) { |
75 | locale = buildFileLocale(getDevLocale()) | 75 | locale = buildFileLocale(getDevLocale()) |
diff --git a/client/src/app/core/auth/auth.service.ts b/client/src/app/core/auth/auth.service.ts index 9c36b946e..5315c8b1d 100644 --- a/client/src/app/core/auth/auth.service.ts +++ b/client/src/app/core/auth/auth.service.ts | |||
@@ -221,7 +221,7 @@ export class AuthService { | |||
221 | } | 221 | } |
222 | 222 | ||
223 | refreshUserInformation () { | 223 | refreshUserInformation () { |
224 | const obj = { | 224 | const obj: any = { |
225 | access_token: this.user.getAccessToken(), | 225 | access_token: this.user.getAccessToken(), |
226 | refresh_token: null, | 226 | refresh_token: null, |
227 | token_type: this.user.getTokenType(), | 227 | token_type: this.user.getTokenType(), |
diff --git a/client/src/app/core/server/server.service.ts b/client/src/app/core/server/server.service.ts index 2f1ef1fc2..1663a052c 100644 --- a/client/src/app/core/server/server.service.ts +++ b/client/src/app/core/server/server.service.ts | |||
@@ -155,7 +155,7 @@ export class ServerService { | |||
155 | .pipe( | 155 | .pipe( |
156 | switchMap(translations => { | 156 | switchMap(translations => { |
157 | return this.http.get(ServerService.BASE_VIDEO_URL + attributeName) | 157 | return this.http.get(ServerService.BASE_VIDEO_URL + attributeName) |
158 | .pipe(map(data => ({ data, translations }))) | 158 | .pipe(map((data: any) => ({ data, translations }))) |
159 | }) | 159 | }) |
160 | ) | 160 | ) |
161 | .subscribe(({ data, translations }) => { | 161 | .subscribe(({ data, translations }) => { |
diff --git a/client/src/app/core/theme/theme.service.ts b/client/src/app/core/theme/theme.service.ts index a6eef0898..50c19ecac 100644 --- a/client/src/app/core/theme/theme.service.ts +++ b/client/src/app/core/theme/theme.service.ts | |||
@@ -5,7 +5,7 @@ import { peertubeLocalStorage } from '@app/shared/misc/peertube-local-storage' | |||
5 | export class ThemeService { | 5 | export class ThemeService { |
6 | private theme = document.querySelector('body') | 6 | private theme = document.querySelector('body') |
7 | private darkTheme = false | 7 | private darkTheme = false |
8 | private previousTheme = {} | 8 | private previousTheme: { [ id: string ]: string } = {} |
9 | 9 | ||
10 | constructor () { | 10 | constructor () { |
11 | // initialise the alternative theme with dark theme colors | 11 | // initialise the alternative theme with dark theme colors |
@@ -33,7 +33,7 @@ export class ThemeService { | |||
33 | } | 33 | } |
34 | } | 34 | } |
35 | 35 | ||
36 | private switchProperty (property, newValue?) { | 36 | private switchProperty (property: string, newValue?: string) { |
37 | const propertyOldvalue = window.getComputedStyle(this.theme).getPropertyValue('--' + property) | 37 | const propertyOldvalue = window.getComputedStyle(this.theme).getPropertyValue('--' + property) |
38 | this.theme.style.setProperty('--' + property, (newValue) ? newValue : this.previousTheme[property]) | 38 | this.theme.style.setProperty('--' + property, (newValue) ? newValue : this.previousTheme[property]) |
39 | this.previousTheme[property] = propertyOldvalue | 39 | this.previousTheme[property] = propertyOldvalue |
diff --git a/client/src/app/menu/menu.component.ts b/client/src/app/menu/menu.component.ts index 95926f5f0..348700c09 100644 --- a/client/src/app/menu/menu.component.ts +++ b/client/src/app/menu/menu.component.ts | |||
@@ -18,7 +18,7 @@ export class MenuComponent implements OnInit { | |||
18 | userHasAdminAccess = false | 18 | userHasAdminAccess = false |
19 | helpVisible = false | 19 | helpVisible = false |
20 | 20 | ||
21 | private routesPerRight = { | 21 | private routesPerRight: any = { |
22 | [UserRight.MANAGE_USERS]: '/admin/users', | 22 | [UserRight.MANAGE_USERS]: '/admin/users', |
23 | [UserRight.MANAGE_SERVER_FOLLOW]: '/admin/friends', | 23 | [UserRight.MANAGE_SERVER_FOLLOW]: '/admin/friends', |
24 | [UserRight.MANAGE_VIDEO_ABUSES]: '/admin/moderation/video-abuses', | 24 | [UserRight.MANAGE_VIDEO_ABUSES]: '/admin/moderation/video-abuses', |
diff --git a/client/src/app/search/advanced-search.model.ts b/client/src/app/search/advanced-search.model.ts index 033fa9bba..1d6c89282 100644 --- a/client/src/app/search/advanced-search.model.ts +++ b/client/src/app/search/advanced-search.model.ts | |||
@@ -53,7 +53,7 @@ export class AdvancedSearch { | |||
53 | } | 53 | } |
54 | 54 | ||
55 | containsValues () { | 55 | containsValues () { |
56 | const obj = this.toUrlObject() | 56 | const obj: any = this.toUrlObject() |
57 | for (const k of Object.keys(obj)) { | 57 | for (const k of Object.keys(obj)) { |
58 | if (k === 'sort') continue // Exception | 58 | if (k === 'sort') continue // Exception |
59 | 59 | ||
@@ -113,7 +113,7 @@ export class AdvancedSearch { | |||
113 | size () { | 113 | size () { |
114 | let acc = 0 | 114 | let acc = 0 |
115 | 115 | ||
116 | const obj = this.toUrlObject() | 116 | const obj: any = this.toUrlObject() |
117 | for (const k of Object.keys(obj)) { | 117 | for (const k of Object.keys(obj)) { |
118 | if (k === 'sort') continue // Exception | 118 | if (k === 'sort') continue // Exception |
119 | 119 | ||
diff --git a/client/src/app/shared/buttons/action-dropdown.component.ts b/client/src/app/shared/buttons/action-dropdown.component.ts index 022ab5ee8..9877f639d 100644 --- a/client/src/app/shared/buttons/action-dropdown.component.ts +++ b/client/src/app/shared/buttons/action-dropdown.component.ts | |||
@@ -2,9 +2,9 @@ import { Component, Input } from '@angular/core' | |||
2 | 2 | ||
3 | export type DropdownAction<T> = { | 3 | export type DropdownAction<T> = { |
4 | label?: string | 4 | label?: string |
5 | handler?: (T) => any | 5 | handler?: (T: any) => any |
6 | linkBuilder?: (T) => (string | number)[] | 6 | linkBuilder?: (T: any) => (string | number)[] |
7 | isDisplayed?: (T) => boolean | 7 | isDisplayed?: (T: any) => boolean |
8 | } | 8 | } |
9 | 9 | ||
10 | @Component({ | 10 | @Component({ |
diff --git a/client/src/app/shared/buttons/button.component.ts b/client/src/app/shared/buttons/button.component.ts index 967cb1409..cccf98bc3 100644 --- a/client/src/app/shared/buttons/button.component.ts +++ b/client/src/app/shared/buttons/button.component.ts | |||
@@ -8,9 +8,9 @@ import { Component, Input } from '@angular/core' | |||
8 | 8 | ||
9 | export class ButtonComponent { | 9 | export class ButtonComponent { |
10 | @Input() label = '' | 10 | @Input() label = '' |
11 | @Input() className = undefined | 11 | @Input() className: any = undefined |
12 | @Input() icon = undefined | 12 | @Input() icon: any = undefined |
13 | @Input() title = undefined | 13 | @Input() title: any = undefined |
14 | 14 | ||
15 | getTitle () { | 15 | getTitle () { |
16 | return this.title || this.label | 16 | return this.title || this.label |
diff --git a/client/src/app/shared/buttons/edit-button.component.ts b/client/src/app/shared/buttons/edit-button.component.ts index 7abaacc26..ea552663a 100644 --- a/client/src/app/shared/buttons/edit-button.component.ts +++ b/client/src/app/shared/buttons/edit-button.component.ts | |||
@@ -8,5 +8,5 @@ import { Component, Input } from '@angular/core' | |||
8 | 8 | ||
9 | export class EditButtonComponent { | 9 | export class EditButtonComponent { |
10 | @Input() label: string | 10 | @Input() label: string |
11 | @Input() routerLink = [] | 11 | @Input() routerLink: any = [] |
12 | } | 12 | } |
diff --git a/client/src/app/shared/misc/help.component.ts b/client/src/app/shared/misc/help.component.ts index ba0452e77..ccce1ccfa 100644 --- a/client/src/app/shared/misc/help.component.ts +++ b/client/src/app/shared/misc/help.component.ts | |||
@@ -60,7 +60,7 @@ export class HelpComponent implements OnInit, OnChanges { | |||
60 | } | 60 | } |
61 | 61 | ||
62 | private createMarkdownList (rules: string[]) { | 62 | private createMarkdownList (rules: string[]) { |
63 | const rulesToText = { | 63 | const rulesToText: any = { |
64 | 'emphasis': this.i18n('Emphasis'), | 64 | 'emphasis': this.i18n('Emphasis'), |
65 | 'link': this.i18n('Links'), | 65 | 'link': this.i18n('Links'), |
66 | 'newline': this.i18n('New lines'), | 66 | 'newline': this.i18n('New lines'), |
diff --git a/client/src/app/shared/misc/peertube-local-storage.ts b/client/src/app/shared/misc/peertube-local-storage.ts index 260f994b6..fb5c45acf 100644 --- a/client/src/app/shared/misc/peertube-local-storage.ts +++ b/client/src/app/shared/misc/peertube-local-storage.ts | |||
@@ -6,7 +6,7 @@ class MemoryStorage { | |||
6 | [key: string]: any | 6 | [key: string]: any |
7 | [index: number]: string | 7 | [index: number]: string |
8 | 8 | ||
9 | getItem (key) { | 9 | getItem (key: any) { |
10 | const stringKey = String(key) | 10 | const stringKey = String(key) |
11 | if (valuesMap.has(key)) { | 11 | if (valuesMap.has(key)) { |
12 | return String(valuesMap.get(stringKey)) | 12 | return String(valuesMap.get(stringKey)) |
@@ -15,11 +15,11 @@ class MemoryStorage { | |||
15 | return null | 15 | return null |
16 | } | 16 | } |
17 | 17 | ||
18 | setItem (key, val) { | 18 | setItem (key: any, val: any) { |
19 | valuesMap.set(String(key), String(val)) | 19 | valuesMap.set(String(key), String(val)) |
20 | } | 20 | } |
21 | 21 | ||
22 | removeItem (key) { | 22 | removeItem (key: any) { |
23 | valuesMap.delete(key) | 23 | valuesMap.delete(key) |
24 | } | 24 | } |
25 | 25 | ||
diff --git a/client/src/app/shared/misc/utils.ts b/client/src/app/shared/misc/utils.ts index c8b7ebc67..78be2e5dd 100644 --- a/client/src/app/shared/misc/utils.ts +++ b/client/src/app/shared/misc/utils.ts | |||
@@ -102,7 +102,7 @@ function objectToFormData (obj: any, form?: FormData, namespace?: string) { | |||
102 | return fd | 102 | return fd |
103 | } | 103 | } |
104 | 104 | ||
105 | function lineFeedToHtml (obj: object, keyToNormalize: string) { | 105 | function lineFeedToHtml (obj: any, keyToNormalize: string) { |
106 | return immutableAssign(obj, { | 106 | return immutableAssign(obj, { |
107 | [keyToNormalize]: obj[keyToNormalize].replace(/\r?\n|\r/g, '<br />') | 107 | [keyToNormalize]: obj[keyToNormalize].replace(/\r?\n|\r/g, '<br />') |
108 | }) | 108 | }) |
diff --git a/client/src/app/shared/overview/videos-overview.model.ts b/client/src/app/shared/overview/videos-overview.model.ts index cf02bdb3d..c8eafc8e8 100644 --- a/client/src/app/shared/overview/videos-overview.model.ts +++ b/client/src/app/shared/overview/videos-overview.model.ts | |||
@@ -16,4 +16,5 @@ export class VideosOverview implements VideosOverviewServer { | |||
16 | tag: string | 16 | tag: string |
17 | videos: Video[] | 17 | videos: Video[] |
18 | }[] | 18 | }[] |
19 | [key: string]: any | ||
19 | } | 20 | } |
diff --git a/client/src/app/shared/rest/rest-extractor.service.ts b/client/src/app/shared/rest/rest-extractor.service.ts index 6492aa66d..934f6c618 100644 --- a/client/src/app/shared/rest/rest-extractor.service.ts +++ b/client/src/app/shared/rest/rest-extractor.service.ts | |||
@@ -33,7 +33,7 @@ export class RestExtractor { | |||
33 | return this.applyToResultListData(result, this.convertDateToHuman, [ fieldsToConvert ]) | 33 | return this.applyToResultListData(result, this.convertDateToHuman, [ fieldsToConvert ]) |
34 | } | 34 | } |
35 | 35 | ||
36 | convertDateToHuman (target: object, fieldsToConvert: string[]) { | 36 | convertDateToHuman (target: any, fieldsToConvert: string[]) { |
37 | fieldsToConvert.forEach(field => target[field] = dateToHuman(target[field])) | 37 | fieldsToConvert.forEach(field => target[field] = dateToHuman(target[field])) |
38 | 38 | ||
39 | return target | 39 | return target |
@@ -83,7 +83,7 @@ export class RestExtractor { | |||
83 | errorMessage = err | 83 | errorMessage = err |
84 | } | 84 | } |
85 | 85 | ||
86 | const errorObj = { | 86 | const errorObj: any = { |
87 | message: errorMessage, | 87 | message: errorMessage, |
88 | status: undefined, | 88 | status: undefined, |
89 | body: undefined | 89 | body: undefined |
diff --git a/client/src/app/shared/rest/rest.service.ts b/client/src/app/shared/rest/rest.service.ts index 4560c2024..41824a18f 100644 --- a/client/src/app/shared/rest/rest.service.ts +++ b/client/src/app/shared/rest/rest.service.ts | |||
@@ -32,7 +32,7 @@ export class RestService { | |||
32 | return newParams | 32 | return newParams |
33 | } | 33 | } |
34 | 34 | ||
35 | addObjectParams (params: HttpParams, object: object) { | 35 | addObjectParams (params: HttpParams, object: any) { |
36 | for (const name of Object.keys(object)) { | 36 | for (const name of Object.keys(object)) { |
37 | const value = object[name] | 37 | const value = object[name] |
38 | if (!value) continue | 38 | if (!value) continue |
diff --git a/client/src/app/shared/users/user.model.ts b/client/src/app/shared/users/user.model.ts index 7c840ffa7..e6b612054 100644 --- a/client/src/app/shared/users/user.model.ts +++ b/client/src/app/shared/users/user.model.ts | |||
@@ -43,6 +43,7 @@ export class User implements UserServerModel { | |||
43 | 43 | ||
44 | blocked: boolean | 44 | blocked: boolean |
45 | blockedReason?: string | 45 | blockedReason?: string |
46 | [key: string]: any | ||
46 | 47 | ||
47 | constructor (hash: UserConstructorHash) { | 48 | constructor (hash: UserConstructorHash) { |
48 | this.id = hash.id | 49 | this.id = hash.id |
diff --git a/client/src/app/shared/video/abstract-video-list.ts b/client/src/app/shared/video/abstract-video-list.ts index 1f43f974c..87814d4ba 100644 --- a/client/src/app/shared/video/abstract-video-list.ts +++ b/client/src/app/shared/video/abstract-video-list.ts | |||
@@ -27,7 +27,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy { | |||
27 | sort: VideoSortField = '-publishedAt' | 27 | sort: VideoSortField = '-publishedAt' |
28 | categoryOneOf?: number | 28 | categoryOneOf?: number |
29 | defaultSort: VideoSortField = '-publishedAt' | 29 | defaultSort: VideoSortField = '-publishedAt' |
30 | syndicationItems = [] | 30 | syndicationItems: any = [] |
31 | 31 | ||
32 | loadOnInit = true | 32 | loadOnInit = true |
33 | marginContent = true | 33 | marginContent = true |
@@ -59,7 +59,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy { | |||
59 | private resizeSubscription: Subscription | 59 | private resizeSubscription: Subscription |
60 | 60 | ||
61 | abstract getVideosObservable (page: number): Observable<{ videos: Video[], totalVideos: number}> | 61 | abstract getVideosObservable (page: number): Observable<{ videos: Video[], totalVideos: number}> |
62 | abstract generateSyndicationList () | 62 | abstract generateSyndicationList (): any |
63 | 63 | ||
64 | get user () { | 64 | get user () { |
65 | return this.authService.getUser() | 65 | return this.authService.getUser() |
@@ -209,7 +209,7 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy { | |||
209 | } | 209 | } |
210 | 210 | ||
211 | protected setNewRouteParams () { | 211 | protected setNewRouteParams () { |
212 | const paramsObject = this.buildRouteParams() | 212 | const paramsObject: any = this.buildRouteParams() |
213 | 213 | ||
214 | const queryParams = Object.keys(paramsObject).map(p => p + '=' + paramsObject[p]).join('&') | 214 | const queryParams = Object.keys(paramsObject).map(p => p + '=' + paramsObject[p]).join('&') |
215 | this.location.replaceState(this.currentRoute, queryParams) | 215 | this.location.replaceState(this.currentRoute, queryParams) |
diff --git a/client/src/app/shared/video/video-edit.model.ts b/client/src/app/shared/video/video-edit.model.ts index 0046be964..a62277e04 100644 --- a/client/src/app/shared/video/video-edit.model.ts +++ b/client/src/app/shared/video/video-edit.model.ts | |||
@@ -25,6 +25,7 @@ export class VideoEdit implements VideoUpdate { | |||
25 | uuid?: string | 25 | uuid?: string |
26 | id?: number | 26 | id?: number |
27 | scheduleUpdate?: VideoScheduleUpdate | 27 | scheduleUpdate?: VideoScheduleUpdate |
28 | [key: string]: any | ||
28 | 29 | ||
29 | constructor (video?: Video & { tags: string[], commentsEnabled: boolean, support: string, thumbnailUrl: string, previewUrl: string }) { | 30 | constructor (video?: Video & { tags: string[], commentsEnabled: boolean, support: string, thumbnailUrl: string, previewUrl: string }) { |
30 | if (video) { | 31 | if (video) { |
@@ -49,7 +50,7 @@ export class VideoEdit implements VideoUpdate { | |||
49 | } | 50 | } |
50 | } | 51 | } |
51 | 52 | ||
52 | patch (values: Object) { | 53 | patch (values: any) { |
53 | Object.keys(values).forEach((key) => { | 54 | Object.keys(values).forEach((key) => { |
54 | this[ key ] = values[ key ] | 55 | this[ key ] = values[ key ] |
55 | }) | 56 | }) |
diff --git a/client/src/app/shared/video/video-feed.component.ts b/client/src/app/shared/video/video-feed.component.ts index 6922153c0..be6c80c3f 100644 --- a/client/src/app/shared/video/video-feed.component.ts +++ b/client/src/app/shared/video/video-feed.component.ts | |||
@@ -6,5 +6,5 @@ import { Component, Input } from '@angular/core' | |||
6 | templateUrl: './video-feed.component.html' | 6 | templateUrl: './video-feed.component.html' |
7 | }) | 7 | }) |
8 | export class VideoFeedComponent { | 8 | export class VideoFeedComponent { |
9 | @Input() syndicationItems | 9 | @Input() syndicationItems: any |
10 | } | 10 | } |
diff --git a/client/src/app/shared/video/video.service.ts b/client/src/app/shared/video/video.service.ts index 724a0bde9..6283cf84d 100644 --- a/client/src/app/shared/video/video.service.ts +++ b/client/src/app/shared/video/video.service.ts | |||
@@ -276,7 +276,7 @@ export class VideoService implements VideosProvider { | |||
276 | return this.authHttp | 276 | return this.authHttp |
277 | .get(environment.apiUrl + descriptionPath) | 277 | .get(environment.apiUrl + descriptionPath) |
278 | .pipe( | 278 | .pipe( |
279 | map(res => res[ 'description' ]), | 279 | map((res: any) => res[ 'description' ]), |
280 | catchError(err => this.restExtractor.handleError(err)) | 280 | catchError(err => this.restExtractor.handleError(err)) |
281 | ) | 281 | ) |
282 | } | 282 | } |
diff --git a/client/src/app/videos/+video-edit/shared/video-caption-add-modal.component.ts b/client/src/app/videos/+video-edit/shared/video-caption-add-modal.component.ts index 07c33030a..a2c9237ad 100644 --- a/client/src/app/videos/+video-edit/shared/video-caption-add-modal.component.ts +++ b/client/src/app/videos/+video-edit/shared/video-caption-add-modal.component.ts | |||
@@ -19,7 +19,7 @@ export class VideoCaptionAddModalComponent extends FormReactive implements OnIni | |||
19 | 19 | ||
20 | @ViewChild('modal') modal: ElementRef | 20 | @ViewChild('modal') modal: ElementRef |
21 | 21 | ||
22 | videoCaptionLanguages = [] | 22 | videoCaptionLanguages: any = [] |
23 | 23 | ||
24 | private openedModal: NgbModalRef | 24 | private openedModal: NgbModalRef |
25 | private closingModal = false | 25 | private closingModal = false |
@@ -73,7 +73,7 @@ export class VideoCaptionAddModalComponent extends FormReactive implements OnIni | |||
73 | this.hide() | 73 | this.hide() |
74 | 74 | ||
75 | const languageId = this.form.value[ 'language' ] | 75 | const languageId = this.form.value[ 'language' ] |
76 | const languageObject = this.videoCaptionLanguages.find(l => l.id === languageId) | 76 | const languageObject = this.videoCaptionLanguages.find((l: any) => l.id === languageId) |
77 | 77 | ||
78 | this.captionAdded.emit({ | 78 | this.captionAdded.emit({ |
79 | language: languageObject, | 79 | language: languageObject, |
diff --git a/client/src/app/videos/+video-edit/shared/video-edit.component.ts b/client/src/app/videos/+video-edit/shared/video-edit.component.ts index eb9396d70..a56733e57 100644 --- a/client/src/app/videos/+video-edit/shared/video-edit.component.ts +++ b/client/src/app/videos/+video-edit/shared/video-edit.component.ts | |||
@@ -48,7 +48,7 @@ export class VideoEditComponent implements OnInit, OnDestroy { | |||
48 | calendarTimezone: string | 48 | calendarTimezone: string |
49 | calendarDateFormat: string | 49 | calendarDateFormat: string |
50 | 50 | ||
51 | private schedulerInterval | 51 | private schedulerInterval: any |
52 | private firstPatchDone = false | 52 | private firstPatchDone = false |
53 | private initialVideoCaptions: string[] = [] | 53 | private initialVideoCaptions: string[] = [] |
54 | 54 | ||
@@ -77,13 +77,13 @@ export class VideoEditComponent implements OnInit, OnDestroy { | |||
77 | } | 77 | } |
78 | 78 | ||
79 | updateForm () { | 79 | updateForm () { |
80 | const defaultValues = { | 80 | const defaultValues: any = { |
81 | nsfw: 'false', | 81 | nsfw: 'false', |
82 | commentsEnabled: 'true', | 82 | commentsEnabled: 'true', |
83 | waitTranscoding: 'true', | 83 | waitTranscoding: 'true', |
84 | tags: [] | 84 | tags: [] |
85 | } | 85 | } |
86 | const obj = { | 86 | const obj: any = { |
87 | name: this.videoValidatorsService.VIDEO_NAME, | 87 | name: this.videoValidatorsService.VIDEO_NAME, |
88 | privacy: this.videoValidatorsService.VIDEO_PRIVACY, | 88 | privacy: this.videoValidatorsService.VIDEO_PRIVACY, |
89 | channelId: this.videoValidatorsService.VIDEO_CHANNEL, | 89 | channelId: this.videoValidatorsService.VIDEO_CHANNEL, |
diff --git a/client/src/app/videos/+video-edit/video-add-components/video-import-torrent.component.ts b/client/src/app/videos/+video-edit/video-add-components/video-import-torrent.component.ts index 0f7184ff8..9a50e2ab2 100644 --- a/client/src/app/videos/+video-edit/video-add-components/video-import-torrent.component.ts +++ b/client/src/app/videos/+video-edit/video-add-components/video-import-torrent.component.ts | |||
@@ -23,7 +23,7 @@ import { VideoImportService } from '@app/shared/video-import' | |||
23 | }) | 23 | }) |
24 | export class VideoImportTorrentComponent extends VideoSend implements OnInit, CanComponentDeactivate { | 24 | export class VideoImportTorrentComponent extends VideoSend implements OnInit, CanComponentDeactivate { |
25 | @Output() firstStepDone = new EventEmitter<string>() | 25 | @Output() firstStepDone = new EventEmitter<string>() |
26 | @ViewChild('torrentfileInput') torrentfileInput | 26 | @ViewChild('torrentfileInput') torrentfileInput: any |
27 | 27 | ||
28 | videoFileName: string | 28 | videoFileName: string |
29 | magnetUri = '' | 29 | magnetUri = '' |
diff --git a/client/src/app/videos/+video-edit/video-add-components/video-send.ts b/client/src/app/videos/+video-edit/video-add-components/video-send.ts index 6d1bac3f2..cf9d47cbe 100644 --- a/client/src/app/videos/+video-edit/video-add-components/video-send.ts +++ b/client/src/app/videos/+video-edit/video-add-components/video-send.ts | |||
@@ -30,7 +30,7 @@ export abstract class VideoSend extends FormReactive implements OnInit, CanCompo | |||
30 | protected videoService: VideoService | 30 | protected videoService: VideoService |
31 | protected videoCaptionService: VideoCaptionService | 31 | protected videoCaptionService: VideoCaptionService |
32 | 32 | ||
33 | abstract canDeactivate () | 33 | abstract canDeactivate (): any |
34 | 34 | ||
35 | ngOnInit () { | 35 | ngOnInit () { |
36 | this.buildForm({}) | 36 | this.buildForm({}) |
diff --git a/client/src/app/videos/+video-edit/video-add-components/video-upload.component.ts b/client/src/app/videos/+video-edit/video-add-components/video-upload.component.ts index 941dc5441..fa6ee0c23 100644 --- a/client/src/app/videos/+video-edit/video-add-components/video-upload.component.ts +++ b/client/src/app/videos/+video-edit/video-add-components/video-upload.component.ts | |||
@@ -25,7 +25,7 @@ import { VideoCaptionService } from '@app/shared/video-caption' | |||
25 | }) | 25 | }) |
26 | export class VideoUploadComponent extends VideoSend implements OnInit, OnDestroy, CanComponentDeactivate { | 26 | export class VideoUploadComponent extends VideoSend implements OnInit, OnDestroy, CanComponentDeactivate { |
27 | @Output() firstStepDone = new EventEmitter<string>() | 27 | @Output() firstStepDone = new EventEmitter<string>() |
28 | @ViewChild('videofileInput') videofileInput | 28 | @ViewChild('videofileInput') videofileInput: any |
29 | 29 | ||
30 | // So that it can be accessed in the template | 30 | // So that it can be accessed in the template |
31 | readonly SPECIAL_SCHEDULED_PRIVACY = VideoEdit.SPECIAL_SCHEDULED_PRIVACY | 31 | readonly SPECIAL_SCHEDULED_PRIVACY = VideoEdit.SPECIAL_SCHEDULED_PRIVACY |
diff --git a/client/src/app/videos/+video-watch/comment/linkifier.service.ts b/client/src/app/videos/+video-watch/comment/linkifier.service.ts index 3f4072efd..9ad419a69 100644 --- a/client/src/app/videos/+video-watch/comment/linkifier.service.ts +++ b/client/src/app/videos/+video-watch/comment/linkifier.service.ts | |||
@@ -1,7 +1,7 @@ | |||
1 | import { Injectable } from '@angular/core' | 1 | import { Injectable } from '@angular/core' |
2 | import { getAbsoluteAPIUrl } from '@app/shared/misc/utils' | 2 | import { getAbsoluteAPIUrl } from '@app/shared/misc/utils' |
3 | import * as linkify from 'linkifyjs' | 3 | const linkify = require('linkifyjs') |
4 | import * as linkifyHtml from 'linkifyjs/html' | 4 | const linkifyHtml = require('linkifyjs/html') |
5 | 5 | ||
6 | @Injectable() | 6 | @Injectable() |
7 | export class LinkifierService { | 7 | export class LinkifierService { |
@@ -40,7 +40,7 @@ export class LinkifierService { | |||
40 | const TT_UNDERSCORE = TT.UNDERSCORE | 40 | const TT_UNDERSCORE = TT.UNDERSCORE |
41 | const TT_DOT = TT.DOT | 41 | const TT_DOT = TT.DOT |
42 | 42 | ||
43 | function MENTION (value) { | 43 | function MENTION (value: any) { |
44 | this.v = value | 44 | this.v = value |
45 | } | 45 | } |
46 | 46 | ||
diff --git a/client/src/app/videos/+video-watch/comment/video-comment-add.component.ts b/client/src/app/videos/+video-watch/comment/video-comment-add.component.ts index fb7de0e04..ba3c0398e 100644 --- a/client/src/app/videos/+video-watch/comment/video-comment-add.component.ts +++ b/client/src/app/videos/+video-watch/comment/video-comment-add.component.ts | |||
@@ -76,7 +76,7 @@ export class VideoCommentAddComponent extends FormReactive implements OnInit { | |||
76 | this.formValidated() | 76 | this.formValidated() |
77 | } | 77 | } |
78 | 78 | ||
79 | openVisitorModal (event) { | 79 | openVisitorModal (event: any) { |
80 | if (this.user === null) { // we only open it for visitors | 80 | if (this.user === null) { // we only open it for visitors |
81 | // fixing ng-bootstrap ModalService and the "Expression Changed After It Has Been Checked" Error | 81 | // fixing ng-bootstrap ModalService and the "Expression Changed After It Has Been Checked" Error |
82 | event.srcElement.blur() | 82 | event.srcElement.blur() |
diff --git a/client/src/app/videos/+video-watch/comment/video-comment.component.ts b/client/src/app/videos/+video-watch/comment/video-comment.component.ts index e90008de9..982470786 100644 --- a/client/src/app/videos/+video-watch/comment/video-comment.component.ts +++ b/client/src/app/videos/+video-watch/comment/video-comment.component.ts | |||
@@ -26,7 +26,7 @@ export class VideoCommentComponent implements OnInit, OnChanges { | |||
26 | @Output() resetReply = new EventEmitter() | 26 | @Output() resetReply = new EventEmitter() |
27 | 27 | ||
28 | sanitizedCommentHTML = '' | 28 | sanitizedCommentHTML = '' |
29 | newParentComments = [] | 29 | newParentComments: any = [] |
30 | 30 | ||
31 | constructor ( | 31 | constructor ( |
32 | private linkifierService: LinkifierService, | 32 | private linkifierService: LinkifierService, |
diff --git a/client/src/app/videos/+video-watch/comment/video-comment.model.ts b/client/src/app/videos/+video-watch/comment/video-comment.model.ts index fe591811e..824fb24c3 100644 --- a/client/src/app/videos/+video-watch/comment/video-comment.model.ts +++ b/client/src/app/videos/+video-watch/comment/video-comment.model.ts | |||
@@ -14,7 +14,7 @@ export class VideoComment implements VideoCommentServerModel { | |||
14 | account: AccountInterface | 14 | account: AccountInterface |
15 | totalReplies: number | 15 | totalReplies: number |
16 | by: string | 16 | by: string |
17 | accountAvatarUrl | 17 | accountAvatarUrl: string |
18 | 18 | ||
19 | constructor (hash: VideoCommentServerModel) { | 19 | constructor (hash: VideoCommentServerModel) { |
20 | this.id = hash.id | 20 | this.id = hash.id |
diff --git a/client/src/app/videos/+video-watch/comment/video-comment.service.ts b/client/src/app/videos/+video-watch/comment/video-comment.service.ts index 9bcb4b7de..7d9c2d0ad 100644 --- a/client/src/app/videos/+video-watch/comment/video-comment.service.ts +++ b/client/src/app/videos/+video-watch/comment/video-comment.service.ts | |||
@@ -32,7 +32,7 @@ export class VideoCommentService { | |||
32 | 32 | ||
33 | return this.authHttp.post(url, normalizedComment) | 33 | return this.authHttp.post(url, normalizedComment) |
34 | .pipe( | 34 | .pipe( |
35 | map(data => this.extractVideoComment(data['comment'])), | 35 | map((data: any) => this.extractVideoComment(data['comment'])), |
36 | catchError(err => this.restExtractor.handleError(err)) | 36 | catchError(err => this.restExtractor.handleError(err)) |
37 | ) | 37 | ) |
38 | } | 38 | } |
@@ -43,7 +43,7 @@ export class VideoCommentService { | |||
43 | 43 | ||
44 | return this.authHttp.post(url, normalizedComment) | 44 | return this.authHttp.post(url, normalizedComment) |
45 | .pipe( | 45 | .pipe( |
46 | map(data => this.extractVideoComment(data[ 'comment' ])), | 46 | map((data: any) => this.extractVideoComment(data[ 'comment' ])), |
47 | catchError(err => this.restExtractor.handleError(err)) | 47 | catchError(err => this.restExtractor.handleError(err)) |
48 | ) | 48 | ) |
49 | } | 49 | } |
diff --git a/client/src/app/videos/+video-watch/comment/video-comments.component.ts b/client/src/app/videos/+video-watch/comment/video-comments.component.ts index c864d82b7..4c1bdf2dd 100644 --- a/client/src/app/videos/+video-watch/comment/video-comments.component.ts +++ b/client/src/app/videos/+video-watch/comment/video-comments.component.ts | |||
@@ -35,7 +35,7 @@ export class VideoCommentsComponent implements OnInit, OnChanges, OnDestroy { | |||
35 | threadComments: { [ id: number ]: VideoCommentThreadTree } = {} | 35 | threadComments: { [ id: number ]: VideoCommentThreadTree } = {} |
36 | threadLoading: { [ id: number ]: boolean } = {} | 36 | threadLoading: { [ id: number ]: boolean } = {} |
37 | 37 | ||
38 | syndicationItems = [] | 38 | syndicationItems: any = [] |
39 | 39 | ||
40 | private sub: Subscription | 40 | private sub: Subscription |
41 | 41 | ||
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 c5deddf05..ed5e723c9 100644 --- a/client/src/app/videos/+video-watch/video-watch.component.ts +++ b/client/src/app/videos/+video-watch/video-watch.component.ts | |||
@@ -7,7 +7,7 @@ import { VideoSupportComponent } from '@app/videos/+video-watch/modal/video-supp | |||
7 | import { MetaService } from '@ngx-meta/core' | 7 | import { MetaService } from '@ngx-meta/core' |
8 | import { NotificationsService } from 'angular2-notifications' | 8 | import { NotificationsService } from 'angular2-notifications' |
9 | import { forkJoin, Subscription } from 'rxjs' | 9 | import { forkJoin, Subscription } from 'rxjs' |
10 | import * as videojs from 'video.js' | 10 | const videojs = require('video.js') |
11 | import 'videojs-hotkeys' | 11 | import 'videojs-hotkeys' |
12 | import { Hotkey, HotkeysService } from 'angular2-hotkeys' | 12 | import { Hotkey, HotkeysService } from 'angular2-hotkeys' |
13 | import * as WebTorrent from 'webtorrent' | 13 | import * as WebTorrent from 'webtorrent' |
@@ -45,7 +45,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy { | |||
45 | @ViewChild('videoBlacklistModal') videoBlacklistModal: VideoBlacklistComponent | 45 | @ViewChild('videoBlacklistModal') videoBlacklistModal: VideoBlacklistComponent |
46 | @ViewChild('subscribeButton') subscribeButton: SubscribeButtonComponent | 46 | @ViewChild('subscribeButton') subscribeButton: SubscribeButtonComponent |
47 | 47 | ||
48 | player: videojs.Player | 48 | player: any |
49 | playerElement: HTMLVideoElement | 49 | playerElement: HTMLVideoElement |
50 | userRating: UserVideoRateType = null | 50 | userRating: UserVideoRateType = null |
51 | video: VideoDetails = null | 51 | video: VideoDetails = null |
@@ -435,7 +435,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy { | |||
435 | this.zone.runOutsideAngular(async () => { | 435 | this.zone.runOutsideAngular(async () => { |
436 | videojs(this.playerElement, videojsOptions, function () { | 436 | videojs(this.playerElement, videojsOptions, function () { |
437 | self.player = this | 437 | self.player = this |
438 | this.on('customError', (event, data) => self.handleError(data.err)) | 438 | this.on('customError', (data: any) => self.handleError(data.err)) |
439 | 439 | ||
440 | addContextMenu(self.player, self.video.embedUrl) | 440 | addContextMenu(self.player, self.video.embedUrl) |
441 | }) | 441 | }) |
@@ -448,7 +448,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy { | |||
448 | this.checkUserRating() | 448 | this.checkUserRating() |
449 | } | 449 | } |
450 | 450 | ||
451 | private setRating (nextRating) { | 451 | private setRating (nextRating: string) { |
452 | let method | 452 | let method |
453 | switch (nextRating) { | 453 | switch (nextRating) { |
454 | case 'like': | 454 | case 'like': |
@@ -466,11 +466,11 @@ export class VideoWatchComponent implements OnInit, OnDestroy { | |||
466 | .subscribe( | 466 | .subscribe( |
467 | () => { | 467 | () => { |
468 | // Update the video like attribute | 468 | // Update the video like attribute |
469 | this.updateVideoRating(this.userRating, nextRating) | 469 | this.updateVideoRating(this.userRating, nextRating as VideoRateType) |
470 | this.userRating = nextRating | 470 | this.userRating = nextRating as UserVideoRateType |
471 | }, | 471 | }, |
472 | 472 | ||
473 | err => this.notificationsService.error(this.i18n('Error'), err.message) | 473 | (err: any) => this.notificationsService.error(this.i18n('Error'), err.message) |
474 | ) | 474 | ) |
475 | } | 475 | } |
476 | 476 | ||
diff --git a/client/src/assets/player/peertube-chunk-store.ts b/client/src/assets/player/peertube-chunk-store.ts index 767e46821..ac3f9e654 100644 --- a/client/src/assets/player/peertube-chunk-store.ts +++ b/client/src/assets/player/peertube-chunk-store.ts | |||
@@ -40,15 +40,15 @@ export class PeertubeChunkStore extends EventEmitter { | |||
40 | // If the store is full | 40 | // If the store is full |
41 | private memoryChunks: { [ id: number ]: Buffer | true } = {} | 41 | private memoryChunks: { [ id: number ]: Buffer | true } = {} |
42 | private databaseName: string | 42 | private databaseName: string |
43 | private putBulkTimeout | 43 | private putBulkTimeout: any |
44 | private cleanerInterval | 44 | private cleanerInterval: any |
45 | private db: ChunkDatabase | 45 | private db: ChunkDatabase |
46 | private expirationDB: ExpirationDatabase | 46 | private expirationDB: ExpirationDatabase |
47 | private readonly length: number | 47 | private readonly length: number |
48 | private readonly lastChunkLength: number | 48 | private readonly lastChunkLength: number |
49 | private readonly lastChunkIndex: number | 49 | private readonly lastChunkIndex: number |
50 | 50 | ||
51 | constructor (chunkLength: number, opts) { | 51 | constructor (chunkLength: number, opts: any) { |
52 | super() | 52 | super() |
53 | 53 | ||
54 | this.databaseName = 'webtorrent-chunks-' | 54 | this.databaseName = 'webtorrent-chunks-' |
@@ -113,13 +113,13 @@ export class PeertubeChunkStore extends EventEmitter { | |||
113 | }, PeertubeChunkStore.BUFFERING_PUT_MS) | 113 | }, PeertubeChunkStore.BUFFERING_PUT_MS) |
114 | } | 114 | } |
115 | 115 | ||
116 | get (index: number, opts, cb) { | 116 | get (index: number, opts: any, cb: any): any { |
117 | if (typeof opts === 'function') return this.get(index, null, opts) | 117 | if (typeof opts === 'function') return this.get(index, null, opts) |
118 | 118 | ||
119 | // IndexDB could be slow, use our memory index first | 119 | // IndexDB could be slow, use our memory index first |
120 | const memoryChunk = this.memoryChunks[index] | 120 | const memoryChunk = this.memoryChunks[index] |
121 | if (memoryChunk === undefined) { | 121 | if (memoryChunk === undefined) { |
122 | const err = new Error('Chunk not found') | 122 | const err = new Error('Chunk not found') as any |
123 | err['notFound'] = true | 123 | err['notFound'] = true |
124 | 124 | ||
125 | return process.nextTick(() => cb(err)) | 125 | return process.nextTick(() => cb(err)) |
@@ -146,11 +146,11 @@ export class PeertubeChunkStore extends EventEmitter { | |||
146 | }) | 146 | }) |
147 | } | 147 | } |
148 | 148 | ||
149 | close (db) { | 149 | close (db: any) { |
150 | return this.destroy(db) | 150 | return this.destroy(db) |
151 | } | 151 | } |
152 | 152 | ||
153 | async destroy (cb) { | 153 | async destroy (cb: any) { |
154 | try { | 154 | try { |
155 | if (this.pendingPut) { | 155 | if (this.pendingPut) { |
156 | clearTimeout(this.putBulkTimeout) | 156 | clearTimeout(this.putBulkTimeout) |
@@ -225,7 +225,7 @@ export class PeertubeChunkStore extends EventEmitter { | |||
225 | } | 225 | } |
226 | } | 226 | } |
227 | 227 | ||
228 | private nextTick (cb, err, val?) { | 228 | private nextTick (cb: any, err: Error, val?: any) { |
229 | process.nextTick(() => cb(err, val), undefined) | 229 | process.nextTick(() => cb(err, val), undefined) |
230 | } | 230 | } |
231 | } | 231 | } |
diff --git a/client/src/assets/player/peertube-link-button.ts b/client/src/assets/player/peertube-link-button.ts index 715207bc0..b03952b47 100644 --- a/client/src/assets/player/peertube-link-button.ts +++ b/client/src/assets/player/peertube-link-button.ts | |||
@@ -1,11 +1,10 @@ | |||
1 | import * as videojs from 'video.js' | ||
2 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 1 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
3 | import { buildVideoLink } from './utils' | 2 | import { buildVideoLink } from './utils' |
4 | 3 | ||
5 | const Button: VideoJSComponentInterface = videojsUntyped.getComponent('Button') | 4 | const Button: VideoJSComponentInterface = videojsUntyped.getComponent('Button') |
6 | class PeerTubeLinkButton extends Button { | 5 | class PeerTubeLinkButton extends Button { |
7 | 6 | ||
8 | constructor (player: videojs.Player, options) { | 7 | constructor (player: any, options: any) { |
9 | super(player, options) | 8 | super(player, options) |
10 | } | 9 | } |
11 | 10 | ||
diff --git a/client/src/assets/player/peertube-load-progress-bar.ts b/client/src/assets/player/peertube-load-progress-bar.ts index aedc641e4..ee8a6cd81 100644 --- a/client/src/assets/player/peertube-load-progress-bar.ts +++ b/client/src/assets/player/peertube-load-progress-bar.ts | |||
@@ -4,7 +4,7 @@ const Component: VideoJSComponentInterface = videojsUntyped.getComponent('Compon | |||
4 | 4 | ||
5 | class PeerTubeLoadProgressBar extends Component { | 5 | class PeerTubeLoadProgressBar extends Component { |
6 | 6 | ||
7 | constructor (player, options) { | 7 | constructor (player: any, options: any) { |
8 | super(player, options) | 8 | super(player, options) |
9 | this.partEls_ = [] | 9 | this.partEls_ = [] |
10 | this.on(player, 'progress', this.update) | 10 | this.on(player, 'progress', this.update) |
diff --git a/client/src/assets/player/peertube-player.ts b/client/src/assets/player/peertube-player.ts index 792662b6c..ef9e7fcc0 100644 --- a/client/src/assets/player/peertube-player.ts +++ b/client/src/assets/player/peertube-player.ts | |||
@@ -75,12 +75,12 @@ function getVideojsOptions (options: { | |||
75 | enableVolumeScroll: false, | 75 | enableVolumeScroll: false, |
76 | enableModifiersForNumbers: false, | 76 | enableModifiersForNumbers: false, |
77 | 77 | ||
78 | fullscreenKey: function (event) { | 78 | fullscreenKey: function (event: any) { |
79 | // fullscreen with the f key or Ctrl+Enter | 79 | // fullscreen with the f key or Ctrl+Enter |
80 | return event.key === 'f' || (event.ctrlKey && event.key === 'Enter') | 80 | return event.key === 'f' || (event.ctrlKey && event.key === 'Enter') |
81 | }, | 81 | }, |
82 | 82 | ||
83 | seekStep: function (event) { | 83 | seekStep: function (event: any) { |
84 | // mimic VLC seek behavior, and default to 5 (original value is 5). | 84 | // mimic VLC seek behavior, and default to 5 (original value is 5). |
85 | if (event.ctrlKey && event.altKey) { | 85 | if (event.ctrlKey && event.altKey) { |
86 | return 5 * 60 | 86 | return 5 * 60 |
@@ -95,26 +95,26 @@ function getVideojsOptions (options: { | |||
95 | 95 | ||
96 | customKeys: { | 96 | customKeys: { |
97 | increasePlaybackRateKey: { | 97 | increasePlaybackRateKey: { |
98 | key: function (event) { | 98 | key: function (event: any) { |
99 | return event.key === '>' | 99 | return event.key === '>' |
100 | }, | 100 | }, |
101 | handler: function (player) { | 101 | handler: function (player: any) { |
102 | player.playbackRate((player.playbackRate() + 0.1).toFixed(2)) | 102 | player.playbackRate((player.playbackRate() + 0.1).toFixed(2)) |
103 | } | 103 | } |
104 | }, | 104 | }, |
105 | decreasePlaybackRateKey: { | 105 | decreasePlaybackRateKey: { |
106 | key: function (event) { | 106 | key: function (event: any) { |
107 | return event.key === '<' | 107 | return event.key === '<' |
108 | }, | 108 | }, |
109 | handler: function (player) { | 109 | handler: function (player: any) { |
110 | player.playbackRate((player.playbackRate() - 0.1).toFixed(2)) | 110 | player.playbackRate((player.playbackRate() - 0.1).toFixed(2)) |
111 | } | 111 | } |
112 | }, | 112 | }, |
113 | frameByFrame: { | 113 | frameByFrame: { |
114 | key: function (event) { | 114 | key: function (event: any) { |
115 | return event.key === '.' | 115 | return event.key === '.' |
116 | }, | 116 | }, |
117 | handler: function (player, options, event) { | 117 | handler: function (player: any) { |
118 | player.pause() | 118 | player.pause() |
119 | // Calculate movement distance (assuming 30 fps) | 119 | // Calculate movement distance (assuming 30 fps) |
120 | const dist = 1 / 30 | 120 | const dist = 1 / 30 |
diff --git a/client/src/assets/player/peertube-videojs-plugin.ts b/client/src/assets/player/peertube-videojs-plugin.ts index 5cebab6d9..03def186e 100644 --- a/client/src/assets/player/peertube-videojs-plugin.ts +++ b/client/src/assets/player/peertube-videojs-plugin.ts | |||
@@ -1,11 +1,11 @@ | |||
1 | import * as videojs from 'video.js' | 1 | const videojs = require('video.js') |
2 | import * as WebTorrent from 'webtorrent' | 2 | import * as WebTorrent from 'webtorrent' |
3 | import { VideoFile } from '../../../../shared/models/videos/video.model' | 3 | import { VideoFile } from '../../../../shared/models/videos/video.model' |
4 | import { renderVideo } from './video-renderer' | 4 | import { renderVideo } from './video-renderer' |
5 | import './settings-menu-button' | 5 | import './settings-menu-button' |
6 | import { PeertubePluginOptions, UserWatching, VideoJSCaption, VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 6 | import { PeertubePluginOptions, UserWatching, VideoJSCaption, VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
7 | import { isMobile, timeToInt, videoFileMaxByResolution, videoFileMinByResolution } from './utils' | 7 | import { isMobile, timeToInt, videoFileMaxByResolution, videoFileMinByResolution } from './utils' |
8 | import * as CacheChunkStore from 'cache-chunk-store' | 8 | const CacheChunkStore = require('cache-chunk-store') |
9 | import { PeertubeChunkStore } from './peertube-chunk-store' | 9 | import { PeertubeChunkStore } from './peertube-chunk-store' |
10 | import { | 10 | import { |
11 | getAverageBandwidthInStore, | 11 | getAverageBandwidthInStore, |
@@ -61,11 +61,11 @@ class PeerTubePlugin extends Plugin { | |||
61 | 61 | ||
62 | private player: any | 62 | private player: any |
63 | private currentVideoFile: VideoFile | 63 | private currentVideoFile: VideoFile |
64 | private torrent: WebTorrent.Torrent | 64 | private torrent: any |
65 | private videoCaptions: VideoJSCaption[] | 65 | private videoCaptions: VideoJSCaption[] |
66 | 66 | ||
67 | private renderer | 67 | private renderer: any |
68 | private fakeRenderer | 68 | private fakeRenderer: any |
69 | private destoyingFakeRenderer = false | 69 | private destoyingFakeRenderer = false |
70 | 70 | ||
71 | private autoResolution = true | 71 | private autoResolution = true |
@@ -73,17 +73,17 @@ class PeerTubePlugin extends Plugin { | |||
73 | private isAutoResolutionObservation = false | 73 | private isAutoResolutionObservation = false |
74 | private playerRefusedP2P = false | 74 | private playerRefusedP2P = false |
75 | 75 | ||
76 | private videoViewInterval | 76 | private videoViewInterval: any |
77 | private torrentInfoInterval | 77 | private torrentInfoInterval: any |
78 | private autoQualityInterval | 78 | private autoQualityInterval: any |
79 | private userWatchingVideoInterval | 79 | private userWatchingVideoInterval: any |
80 | private addTorrentDelay | 80 | private addTorrentDelay: any |
81 | private qualityObservationTimer | 81 | private qualityObservationTimer: any |
82 | private runAutoQualitySchedulerTimer | 82 | private runAutoQualitySchedulerTimer: any |
83 | 83 | ||
84 | private downloadSpeeds: number[] = [] | 84 | private downloadSpeeds: number[] = [] |
85 | 85 | ||
86 | constructor (player: videojs.Player, options: PeertubePluginOptions) { | 86 | constructor (player: any, options: PeertubePluginOptions) { |
87 | super(player, options) | 87 | super(player, options) |
88 | 88 | ||
89 | // Disable auto play on iOS | 89 | // Disable auto play on iOS |
@@ -273,7 +273,7 @@ class PeerTubePlugin extends Plugin { | |||
273 | 273 | ||
274 | const oldTorrent = this.torrent | 274 | const oldTorrent = this.torrent |
275 | const torrentOptions = { | 275 | const torrentOptions = { |
276 | store: (chunkLength, storeOpts) => new CacheChunkStore(new PeertubeChunkStore(chunkLength, storeOpts), { | 276 | store: (chunkLength: any, storeOpts: any) => new CacheChunkStore(new PeertubeChunkStore(chunkLength, storeOpts), { |
277 | max: 100 | 277 | max: 100 |
278 | }) | 278 | }) |
279 | } | 279 | } |
@@ -304,7 +304,7 @@ class PeerTubePlugin extends Plugin { | |||
304 | 304 | ||
305 | if (err) return this.fallbackToHttp(options, done) | 305 | if (err) return this.fallbackToHttp(options, done) |
306 | 306 | ||
307 | return this.tryToPlay(err => { | 307 | return this.tryToPlay((err: Error) => { |
308 | if (err) return done(err) | 308 | if (err) return done(err) |
309 | 309 | ||
310 | if (options.seek) this.seek(options.seek) | 310 | if (options.seek) this.seek(options.seek) |
@@ -316,7 +316,7 @@ class PeerTubePlugin extends Plugin { | |||
316 | }, options.delay || 0) | 316 | }, options.delay || 0) |
317 | }) | 317 | }) |
318 | 318 | ||
319 | this.torrent.on('error', err => console.error(err)) | 319 | this.torrent.on('error', (err: any) => console.error(err)) |
320 | 320 | ||
321 | this.torrent.on('warning', (err: any) => { | 321 | this.torrent.on('warning', (err: any) => { |
322 | // We don't support HTTP tracker but we don't care -> we use the web socket tracker | 322 | // We don't support HTTP tracker but we don't care -> we use the web socket tracker |
@@ -350,7 +350,7 @@ class PeerTubePlugin extends Plugin { | |||
350 | const playPromise = this.player.play() | 350 | const playPromise = this.player.play() |
351 | if (playPromise !== undefined) { | 351 | if (playPromise !== undefined) { |
352 | return playPromise.then(done) | 352 | return playPromise.then(done) |
353 | .catch(err => { | 353 | .catch((err: Error) => { |
354 | if (err.message.indexOf('The play() request was interrupted by a call to pause()') !== -1) { | 354 | if (err.message.indexOf('The play() request was interrupted by a call to pause()') !== -1) { |
355 | return | 355 | return |
356 | } | 356 | } |
@@ -627,7 +627,7 @@ class PeerTubePlugin extends Plugin { | |||
627 | this.player.options_.inactivityTimeout = saveInactivityTimeout | 627 | this.player.options_.inactivityTimeout = saveInactivityTimeout |
628 | } | 628 | } |
629 | 629 | ||
630 | const settingsDialog = this.player.children_.find(c => c.name_ === 'SettingsDialog') | 630 | const settingsDialog = this.player.children_.find((c: any) => c.name_ === 'SettingsDialog') |
631 | 631 | ||
632 | this.player.controlBar.on('mouseenter', () => disableInactivity()) | 632 | this.player.controlBar.on('mouseenter', () => disableInactivity()) |
633 | settingsDialog.on('mouseenter', () => disableInactivity()) | 633 | settingsDialog.on('mouseenter', () => disableInactivity()) |
@@ -641,7 +641,7 @@ class PeerTubePlugin extends Plugin { | |||
641 | return this.videoFiles[Math.floor(this.videoFiles.length / 2)] | 641 | return this.videoFiles[Math.floor(this.videoFiles.length / 2)] |
642 | } | 642 | } |
643 | 643 | ||
644 | private stopTorrent (torrent: WebTorrent.Torrent) { | 644 | private stopTorrent (torrent: any) { |
645 | torrent.pause() | 645 | torrent.pause() |
646 | // Pause does not remove actual peers (in particular the webseed peer) | 646 | // Pause does not remove actual peers (in particular the webseed peer) |
647 | torrent.removePeer(torrent[ 'ws' ]) | 647 | torrent.removePeer(torrent[ 'ws' ]) |
@@ -703,7 +703,7 @@ class PeerTubePlugin extends Plugin { | |||
703 | const percent = time / this.player_.duration() | 703 | const percent = time / this.player_.duration() |
704 | return percent >= 1 ? 1 : percent | 704 | return percent >= 1 ? 1 : percent |
705 | } | 705 | } |
706 | SeekBar.prototype.handleMouseMove = function handleMouseMove (event) { | 706 | SeekBar.prototype.handleMouseMove = function handleMouseMove (event: any) { |
707 | let newTime = this.calculateDistance(event) * this.player_.duration() | 707 | let newTime = this.calculateDistance(event) * this.player_.duration() |
708 | if (newTime === this.player_.duration()) { | 708 | if (newTime === this.player_.duration()) { |
709 | newTime = newTime - 0.1 | 709 | newTime = newTime - 0.1 |
diff --git a/client/src/assets/player/peertube-videojs-typings.ts b/client/src/assets/player/peertube-videojs-typings.ts index b117007af..98a33077d 100644 --- a/client/src/assets/player/peertube-videojs-typings.ts +++ b/client/src/assets/player/peertube-videojs-typings.ts | |||
@@ -1,4 +1,4 @@ | |||
1 | import * as videojs from 'video.js' | 1 | const videojs = require('video.js') |
2 | import { VideoFile } from '../../../../shared/models/videos/video.model' | 2 | import { VideoFile } from '../../../../shared/models/videos/video.model' |
3 | import { PeerTubePlugin } from './peertube-videojs-plugin' | 3 | import { PeerTubePlugin } from './peertube-videojs-plugin' |
4 | 4 | ||
@@ -11,9 +11,9 @@ declare namespace videojs { | |||
11 | interface VideoJSComponentInterface { | 11 | interface VideoJSComponentInterface { |
12 | _player: videojs.Player | 12 | _player: videojs.Player |
13 | 13 | ||
14 | new (player: videojs.Player, options?: any) | 14 | new (player: videojs.Player, options?: any): any |
15 | 15 | ||
16 | registerComponent (name: string, obj: any) | 16 | registerComponent (name: string, obj: any): any |
17 | } | 17 | } |
18 | 18 | ||
19 | type VideoJSCaption = { | 19 | type VideoJSCaption = { |
diff --git a/client/src/assets/player/resolution-menu-button.ts b/client/src/assets/player/resolution-menu-button.ts index d53a24151..91818efc9 100644 --- a/client/src/assets/player/resolution-menu-button.ts +++ b/client/src/assets/player/resolution-menu-button.ts | |||
@@ -1,4 +1,3 @@ | |||
1 | import * as videojs from 'video.js' | ||
2 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 1 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
3 | import { ResolutionMenuItem } from './resolution-menu-item' | 2 | import { ResolutionMenuItem } from './resolution-menu-item' |
4 | 3 | ||
@@ -7,7 +6,7 @@ const MenuButton: VideoJSComponentInterface = videojsUntyped.getComponent('MenuB | |||
7 | class ResolutionMenuButton extends MenuButton { | 6 | class ResolutionMenuButton extends MenuButton { |
8 | label: HTMLElement | 7 | label: HTMLElement |
9 | 8 | ||
10 | constructor (player: videojs.Player, options) { | 9 | constructor (player: any, options: any) { |
11 | super(player, options) | 10 | super(player, options) |
12 | this.player = player | 11 | this.player = player |
13 | 12 | ||
diff --git a/client/src/assets/player/resolution-menu-item.ts b/client/src/assets/player/resolution-menu-item.ts index 0ab0f53b5..afe490abb 100644 --- a/client/src/assets/player/resolution-menu-item.ts +++ b/client/src/assets/player/resolution-menu-item.ts | |||
@@ -1,10 +1,9 @@ | |||
1 | import * as videojs from 'video.js' | ||
2 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 1 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
3 | 2 | ||
4 | const MenuItem: VideoJSComponentInterface = videojsUntyped.getComponent('MenuItem') | 3 | const MenuItem: VideoJSComponentInterface = videojsUntyped.getComponent('MenuItem') |
5 | class ResolutionMenuItem extends MenuItem { | 4 | class ResolutionMenuItem extends MenuItem { |
6 | 5 | ||
7 | constructor (player: videojs.Player, options) { | 6 | constructor (player: any, options: any) { |
8 | const currentResolutionId = player.peertube().getCurrentResolutionId() | 7 | const currentResolutionId = player.peertube().getCurrentResolutionId() |
9 | options.selectable = true | 8 | options.selectable = true |
10 | options.selected = options.id === currentResolutionId | 9 | options.selected = options.id === currentResolutionId |
@@ -18,7 +17,7 @@ class ResolutionMenuItem extends MenuItem { | |||
18 | player.peertube().on('autoResolutionUpdate', () => this.updateSelection()) | 17 | player.peertube().on('autoResolutionUpdate', () => this.updateSelection()) |
19 | } | 18 | } |
20 | 19 | ||
21 | handleClick (event) { | 20 | handleClick (event: any) { |
22 | if (this.id === -1 && this.player_.peertube().isAutoResolutionForbidden()) return | 21 | if (this.id === -1 && this.player_.peertube().isAutoResolutionForbidden()) return |
23 | 22 | ||
24 | super.handleClick(event) | 23 | super.handleClick(event) |
diff --git a/client/src/assets/player/settings-menu-button.ts b/client/src/assets/player/settings-menu-button.ts index b51c52506..f0ccb5862 100644 --- a/client/src/assets/player/settings-menu-button.ts +++ b/client/src/assets/player/settings-menu-button.ts | |||
@@ -1,7 +1,7 @@ | |||
1 | // Author: Yanko Shterev | 1 | // Author: Yanko Shterev |
2 | // Thanks https://github.com/yshterev/videojs-settings-menu | 2 | // Thanks https://github.com/yshterev/videojs-settings-menu |
3 | 3 | ||
4 | import * as videojs from 'video.js' | 4 | const videojs = require('video.js') |
5 | import { SettingsMenuItem } from './settings-menu-item' | 5 | import { SettingsMenuItem } from './settings-menu-item' |
6 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 6 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
7 | import { toTitleCase } from './utils' | 7 | import { toTitleCase } from './utils' |
@@ -11,7 +11,7 @@ const Menu: VideoJSComponentInterface = videojsUntyped.getComponent('Menu') | |||
11 | const Component: VideoJSComponentInterface = videojsUntyped.getComponent('Component') | 11 | const Component: VideoJSComponentInterface = videojsUntyped.getComponent('Component') |
12 | 12 | ||
13 | class SettingsButton extends Button { | 13 | class SettingsButton extends Button { |
14 | constructor (player: videojs.Player, options) { | 14 | constructor (player: any, options: any) { |
15 | super(player, options) | 15 | super(player, options) |
16 | 16 | ||
17 | this.playerComponent = player | 17 | this.playerComponent = player |
@@ -48,7 +48,7 @@ class SettingsButton extends Button { | |||
48 | } | 48 | } |
49 | } | 49 | } |
50 | 50 | ||
51 | onDisposeSettingsItem (event, name: string) { | 51 | onDisposeSettingsItem (name: string) { |
52 | if (name === undefined) { | 52 | if (name === undefined) { |
53 | let children = this.menu.children() | 53 | let children = this.menu.children() |
54 | 54 | ||
@@ -74,7 +74,7 @@ class SettingsButton extends Button { | |||
74 | } | 74 | } |
75 | } | 75 | } |
76 | 76 | ||
77 | onAddSettingsItem (event, data) { | 77 | onAddSettingsItem (data: any) { |
78 | const [ entry, options ] = data | 78 | const [ entry, options ] = data |
79 | 79 | ||
80 | this.addMenuItem(entry, options) | 80 | this.addMenuItem(entry, options) |
@@ -120,7 +120,7 @@ class SettingsButton extends Button { | |||
120 | this.resetChildren() | 120 | this.resetChildren() |
121 | } | 121 | } |
122 | 122 | ||
123 | getComponentSize (element) { | 123 | getComponentSize (element: any) { |
124 | let width: number = null | 124 | let width: number = null |
125 | let height: number = null | 125 | let height: number = null |
126 | 126 | ||
@@ -178,7 +178,7 @@ class SettingsButton extends Button { | |||
178 | this.panelChild.addChild(this.menu) | 178 | this.panelChild.addChild(this.menu) |
179 | } | 179 | } |
180 | 180 | ||
181 | addMenuItem (entry, options) { | 181 | addMenuItem (entry: any, options: any) { |
182 | const openSubMenu = function () { | 182 | const openSubMenu = function () { |
183 | if (videojsUntyped.dom.hasClass(this.el_, 'open')) { | 183 | if (videojsUntyped.dom.hasClass(this.el_, 'open')) { |
184 | videojsUntyped.dom.removeClass(this.el_, 'open') | 184 | videojsUntyped.dom.removeClass(this.el_, 'open') |
@@ -218,7 +218,7 @@ class SettingsButton extends Button { | |||
218 | } | 218 | } |
219 | 219 | ||
220 | class SettingsPanel extends Component { | 220 | class SettingsPanel extends Component { |
221 | constructor (player: videojs.Player, options) { | 221 | constructor (player: any, options: any) { |
222 | super(player, options) | 222 | super(player, options) |
223 | } | 223 | } |
224 | 224 | ||
@@ -232,7 +232,7 @@ class SettingsPanel extends Component { | |||
232 | } | 232 | } |
233 | 233 | ||
234 | class SettingsPanelChild extends Component { | 234 | class SettingsPanelChild extends Component { |
235 | constructor (player: videojs.Player, options) { | 235 | constructor (player: any, options: any) { |
236 | super(player, options) | 236 | super(player, options) |
237 | } | 237 | } |
238 | 238 | ||
@@ -246,7 +246,7 @@ class SettingsPanelChild extends Component { | |||
246 | } | 246 | } |
247 | 247 | ||
248 | class SettingsDialog extends Component { | 248 | class SettingsDialog extends Component { |
249 | constructor (player: videojs.Player, options) { | 249 | constructor (player: any, options: any) { |
250 | super(player, options) | 250 | super(player, options) |
251 | this.hide() | 251 | this.hide() |
252 | } | 252 | } |
diff --git a/client/src/assets/player/settings-menu-item.ts b/client/src/assets/player/settings-menu-item.ts index 665ce6fc2..2d752b62e 100644 --- a/client/src/assets/player/settings-menu-item.ts +++ b/client/src/assets/player/settings-menu-item.ts | |||
@@ -1,7 +1,6 @@ | |||
1 | // Author: Yanko Shterev | 1 | // Author: Yanko Shterev |
2 | // Thanks https://github.com/yshterev/videojs-settings-menu | 2 | // Thanks https://github.com/yshterev/videojs-settings-menu |
3 | 3 | ||
4 | import * as videojs from 'video.js' | ||
5 | import { toTitleCase } from './utils' | 4 | import { toTitleCase } from './utils' |
6 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' | 5 | import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' |
7 | 6 | ||
@@ -10,7 +9,7 @@ const component: VideoJSComponentInterface = videojsUntyped.getComponent('Compon | |||
10 | 9 | ||
11 | class SettingsMenuItem extends MenuItem { | 10 | class SettingsMenuItem extends MenuItem { |
12 | 11 | ||
13 | constructor (player: videojs.Player, options, entry: string, menuButton: VideoJSComponentInterface) { | 12 | constructor (player: any, options: any, entry: string, menuButton: VideoJSComponentInterface) { |
14 | super(player, options) | 13 | super(player, options) |
15 | 14 | ||
16 | this.settingsButton = menuButton | 15 | this.settingsButton = menuButton |
@@ -55,7 +54,7 @@ class SettingsMenuItem extends MenuItem { | |||
55 | this.transitionEndHandler = this.onTransitionEnd.bind(this) | 54 | this.transitionEndHandler = this.onTransitionEnd.bind(this) |
56 | } | 55 | } |
57 | 56 | ||
58 | onSubmenuClick (event) { | 57 | onSubmenuClick (event: any) { |
59 | let target = null | 58 | let target = null |
60 | 59 | ||
61 | if (event.type === 'tap') { | 60 | if (event.type === 'tap') { |
@@ -150,7 +149,7 @@ class SettingsMenuItem extends MenuItem { | |||
150 | * | 149 | * |
151 | * @method PrefixedEvent | 150 | * @method PrefixedEvent |
152 | */ | 151 | */ |
153 | PrefixedEvent (element, type, callback, action = 'addEvent') { | 152 | PrefixedEvent (element: any, type: any, callback: any, action = 'addEvent') { |
154 | let prefix = ['webkit', 'moz', 'MS', 'o', ''] | 153 | let prefix = ['webkit', 'moz', 'MS', 'o', ''] |
155 | 154 | ||
156 | for (let p = 0; p < prefix.length; p++) { | 155 | for (let p = 0; p < prefix.length; p++) { |
@@ -166,7 +165,7 @@ class SettingsMenuItem extends MenuItem { | |||
166 | } | 165 | } |
167 | } | 166 | } |
168 | 167 | ||
169 | onTransitionEnd (event) { | 168 | onTransitionEnd (event: any) { |
170 | if (event.propertyName !== 'margin-right') { | 169 | if (event.propertyName !== 'margin-right') { |
171 | return | 170 | return |
172 | } | 171 | } |
@@ -229,7 +228,7 @@ class SettingsMenuItem extends MenuItem { | |||
229 | ) | 228 | ) |
230 | } | 229 | } |
231 | 230 | ||
232 | update (event?: Event) { | 231 | update (event?: any) { |
233 | let target = null | 232 | let target = null |
234 | let subMenu = this.subMenu.name() | 233 | let subMenu = this.subMenu.name() |
235 | 234 | ||
diff --git a/client/src/assets/player/theater-button.ts b/client/src/assets/player/theater-button.ts index 5cf0b6425..b761f6030 100644 --- a/client/src/assets/player/theater-button.ts +++ b/client/src/assets/player/theater-button.ts | |||
@@ -6,7 +6,7 @@ class TheaterButton extends Button { | |||
6 | 6 | ||
7 | private static readonly THEATER_MODE_CLASS = 'vjs-theater-enabled' | 7 | private static readonly THEATER_MODE_CLASS = 'vjs-theater-enabled' |
8 | 8 | ||
9 | constructor (player, options) { | 9 | constructor (player: any, options: any) { |
10 | super(player, options) | 10 | super(player, options) |
11 | 11 | ||
12 | const enabled = getStoredTheater() | 12 | const enabled = getStoredTheater() |
diff --git a/client/src/assets/player/utils.ts b/client/src/assets/player/utils.ts index cf4f60f55..46081c0d2 100644 --- a/client/src/assets/player/utils.ts +++ b/client/src/assets/player/utils.ts | |||
@@ -12,7 +12,7 @@ const dictionaryBytes: Array<{max: number, type: string}> = [ | |||
12 | { max: 1073741824, type: 'MB' }, | 12 | { max: 1073741824, type: 'MB' }, |
13 | { max: 1.0995116e12, type: 'GB' } | 13 | { max: 1.0995116e12, type: 'GB' } |
14 | ] | 14 | ] |
15 | function bytes (value) { | 15 | function bytes (value: any) { |
16 | const format = dictionaryBytes.find(d => value < d.max) || dictionaryBytes[dictionaryBytes.length - 1] | 16 | const format = dictionaryBytes.find(d => value < d.max) || dictionaryBytes[dictionaryBytes.length - 1] |
17 | const calc = Math.floor(value / (format.max / 1024)).toString() | 17 | const calc = Math.floor(value / (format.max / 1024)).toString() |
18 | 18 | ||
diff --git a/client/src/assets/player/video-renderer.ts b/client/src/assets/player/video-renderer.ts index 2cb05a448..a3415937b 100644 --- a/client/src/assets/player/video-renderer.ts +++ b/client/src/assets/player/video-renderer.ts | |||
@@ -1,9 +1,9 @@ | |||
1 | // Thanks: https://github.com/feross/render-media | 1 | // Thanks: https://github.com/feross/render-media |
2 | // TODO: use render-media once https://github.com/feross/render-media/issues/32 is fixed | 2 | // TODO: use render-media once https://github.com/feross/render-media/issues/32 is fixed |
3 | 3 | ||
4 | import * as MediaElementWrapper from 'mediasource' | 4 | const MediaElementWrapper = require('mediasource') |
5 | import { extname } from 'path' | 5 | import { extname } from 'path' |
6 | import * as videostream from 'videostream' | 6 | const videostream = require('videostream') |
7 | 7 | ||
8 | const VIDEOSTREAM_EXTS = [ | 8 | const VIDEOSTREAM_EXTS = [ |
9 | '.m4a', | 9 | '.m4a', |
@@ -17,7 +17,7 @@ type RenderMediaOptions = { | |||
17 | } | 17 | } |
18 | 18 | ||
19 | function renderVideo ( | 19 | function renderVideo ( |
20 | file, | 20 | file: any, |
21 | elem: HTMLVideoElement, | 21 | elem: HTMLVideoElement, |
22 | opts: RenderMediaOptions, | 22 | opts: RenderMediaOptions, |
23 | callback: (err: Error, renderer: any) => void | 23 | callback: (err: Error, renderer: any) => void |
@@ -27,11 +27,11 @@ function renderVideo ( | |||
27 | return renderMedia(file, elem, opts, callback) | 27 | return renderMedia(file, elem, opts, callback) |
28 | } | 28 | } |
29 | 29 | ||
30 | function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, callback: (err: Error, renderer?: any) => void) { | 30 | function renderMedia (file: any, elem: HTMLVideoElement, opts: RenderMediaOptions, callback: (err: Error, renderer?: any) => void) { |
31 | const extension = extname(file.name).toLowerCase() | 31 | const extension = extname(file.name).toLowerCase() |
32 | let preparedElem = undefined | 32 | let preparedElem: any = undefined |
33 | let currentTime = 0 | 33 | let currentTime = 0 |
34 | let renderer | 34 | let renderer: any |
35 | 35 | ||
36 | try { | 36 | try { |
37 | if (VIDEOSTREAM_EXTS.indexOf(extension) >= 0) { | 37 | if (VIDEOSTREAM_EXTS.indexOf(extension) >= 0) { |
@@ -45,7 +45,7 @@ function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, ca | |||
45 | 45 | ||
46 | function useVideostream () { | 46 | function useVideostream () { |
47 | prepareElem() | 47 | prepareElem() |
48 | preparedElem.addEventListener('error', function onError (err) { | 48 | preparedElem.addEventListener('error', function onError (err: Error) { |
49 | preparedElem.removeEventListener('error', onError) | 49 | preparedElem.removeEventListener('error', onError) |
50 | 50 | ||
51 | return callback(err) | 51 | return callback(err) |
@@ -58,7 +58,7 @@ function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, ca | |||
58 | const codecs = getCodec(file.name, useVP9) | 58 | const codecs = getCodec(file.name, useVP9) |
59 | 59 | ||
60 | prepareElem() | 60 | prepareElem() |
61 | preparedElem.addEventListener('error', function onError (err) { | 61 | preparedElem.addEventListener('error', function onError (err: Error) { |
62 | preparedElem.removeEventListener('error', onError) | 62 | preparedElem.removeEventListener('error', onError) |
63 | 63 | ||
64 | // Try with vp9 before returning an error | 64 | // Try with vp9 before returning an error |
@@ -102,7 +102,7 @@ function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, ca | |||
102 | } | 102 | } |
103 | } | 103 | } |
104 | 104 | ||
105 | function validateFile (file) { | 105 | function validateFile (file: any) { |
106 | if (file == null) { | 106 | if (file == null) { |
107 | throw new Error('file cannot be null or undefined') | 107 | throw new Error('file cannot be null or undefined') |
108 | } | 108 | } |
diff --git a/client/src/assets/player/webtorrent-info-button.ts b/client/src/assets/player/webtorrent-info-button.ts index deef253ce..5b9d0a401 100644 --- a/client/src/assets/player/webtorrent-info-button.ts +++ b/client/src/assets/player/webtorrent-info-button.ts | |||
@@ -65,7 +65,7 @@ class WebtorrentInfoButton extends Button { | |||
65 | subDivHttp.appendChild(subDivHttpText) | 65 | subDivHttp.appendChild(subDivHttpText) |
66 | div.appendChild(subDivHttp) | 66 | div.appendChild(subDivHttp) |
67 | 67 | ||
68 | this.player_.peertube().on('torrentInfo', (event, data) => { | 68 | this.player_.peertube().on('torrentInfo', (data: any) => { |
69 | // We are in HTTP fallback | 69 | // We are in HTTP fallback |
70 | if (!data) { | 70 | if (!data) { |
71 | subDivHttp.className = 'vjs-peertube-displayed' | 71 | subDivHttp.className = 'vjs-peertube-displayed' |
diff --git a/client/src/main.ts b/client/src/main.ts index f456e89c5..dee962180 100644 --- a/client/src/main.ts +++ b/client/src/main.ts | |||
@@ -8,7 +8,7 @@ import { hmrBootstrap } from './hmr' | |||
8 | import { getDevLocale, isOnDevLocale } from '@app/shared/i18n/i18n-utils' | 8 | import { getDevLocale, isOnDevLocale } from '@app/shared/i18n/i18n-utils' |
9 | import { buildFileLocale } from '../../shared' | 9 | import { buildFileLocale } from '../../shared' |
10 | 10 | ||
11 | let providers = [] | 11 | let providers: any[] = [] |
12 | if (environment.production) { | 12 | if (environment.production) { |
13 | enableProdMode() | 13 | enableProdMode() |
14 | } | 14 | } |
diff --git a/client/src/polyfills.ts b/client/src/polyfills.ts index eec30760d..dfe45b591 100644 --- a/client/src/polyfills.ts +++ b/client/src/polyfills.ts | |||
@@ -18,24 +18,26 @@ | |||
18 | * BROWSER POLYFILLS | 18 | * BROWSER POLYFILLS |
19 | */ | 19 | */ |
20 | 20 | ||
21 | /** IE9, IE10 and IE11 requires all of the following polyfills. **/ | 21 | /** |
22 | * IE9, IE10 and IE11 requires all of the following polyfills. | ||
23 | */ | ||
22 | 24 | ||
23 | // For Google Bot | 25 | // For Google Bot |
24 | import 'core-js/es6/symbol'; | 26 | import 'core-js/es6/symbol' |
25 | import 'core-js/es6/object'; | 27 | import 'core-js/es6/object' |
26 | import 'core-js/es6/function'; | 28 | import 'core-js/es6/function' |
27 | import 'core-js/es6/parse-int'; | 29 | import 'core-js/es6/parse-int' |
28 | import 'core-js/es6/parse-float'; | 30 | import 'core-js/es6/parse-float' |
29 | import 'core-js/es6/number'; | 31 | import 'core-js/es6/number' |
30 | import 'core-js/es6/math'; | 32 | import 'core-js/es6/math' |
31 | import 'core-js/es6/string'; | 33 | import 'core-js/es6/string' |
32 | import 'core-js/es6/date'; | 34 | import 'core-js/es6/date' |
33 | import 'core-js/es6/array'; | 35 | import 'core-js/es6/array' |
34 | import 'core-js/es6/regexp'; | 36 | import 'core-js/es6/regexp' |
35 | import 'core-js/es6/map'; | 37 | import 'core-js/es6/map' |
36 | import 'core-js/es6/weak-map'; | 38 | import 'core-js/es6/weak-map' |
37 | import 'core-js/es6/set'; | 39 | import 'core-js/es6/set' |
38 | import 'core-js/es7/object'; | 40 | import 'core-js/es7/object' |
39 | 41 | ||
40 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ | 42 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ |
41 | // import 'classlist.js'; // Run `npm install --save classlist.js`. | 43 | // import 'classlist.js'; // Run `npm install --save classlist.js`. |
@@ -43,17 +45,18 @@ import 'core-js/es7/object'; | |||
43 | /** IE10 and IE11 requires the following for the Reflect API. */ | 45 | /** IE10 and IE11 requires the following for the Reflect API. */ |
44 | 46 | ||
45 | // For Google Bot | 47 | // For Google Bot |
46 | import 'core-js/es6/reflect'; | 48 | import 'core-js/es6/reflect' |
47 | 49 | ||
48 | /** Evergreen browsers require these. **/ | 50 | /** |
51 | * Evergreen browsers require these. | ||
52 | */ | ||
49 | // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. | 53 | // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. |
50 | import 'core-js/es7/reflect' | 54 | import 'core-js/es7/reflect' |
51 | 55 | ||
52 | |||
53 | /** | 56 | /** |
54 | * Required to support Web Animations `@angular/platform-browser/animations`. | 57 | * Required to support Web Animations `@angular/platform-browser/animations`. |
55 | * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation | 58 | * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation |
56 | **/ | 59 | */ |
57 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. | 60 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. |
58 | 61 | ||
59 | /** | 62 | /** |
@@ -70,19 +73,17 @@ import 'core-js/es7/reflect' | |||
70 | */ | 73 | */ |
71 | // (window as any).__Zone_enable_cross_context_check = true; | 74 | // (window as any).__Zone_enable_cross_context_check = true; |
72 | 75 | ||
73 | |||
74 | /*************************************************************************************************** | 76 | /*************************************************************************************************** |
75 | * Zone JS is required by default for Angular itself. | 77 | * Zone JS is required by default for Angular itself. |
76 | */ | 78 | */ |
77 | import 'zone.js/dist/zone' // Included with Angular CLI. | 79 | import 'zone.js/dist/zone' // Included with Angular CLI. |
78 | 80 | ||
79 | |||
80 | /*************************************************************************************************** | 81 | /*************************************************************************************************** |
81 | * APPLICATION IMPORTS | 82 | * APPLICATION IMPORTS |
82 | */ | 83 | */ |
83 | 84 | ||
84 | // global/process polyfills | 85 | // global/process polyfills |
85 | 86 | ||
86 | ;(window as any).global = window; | 87 | ;(window as any).global = window |
87 | ;(window as any).process = require('process/'); | 88 | ;(window as any).process = require('process/') |
88 | ;(window as any).Buffer = require('buffer/').Buffer; | 89 | ;(window as any).Buffer = require('buffer/').Buffer |
diff --git a/client/src/shims/noop.ts b/client/src/shims/noop.ts index 899b69bf3..086a60e32 100644 --- a/client/src/shims/noop.ts +++ b/client/src/shims/noop.ts | |||
@@ -1,3 +1,3 @@ | |||
1 | // Does nothing. Used to shim out node.js modules | 1 | // Does nothing. Used to shim out node.js modules |
2 | // which are no-ops in the browser. | 2 | // which are no-ops in the browser. |
3 | export const NOOP = 0 \ No newline at end of file | 3 | export const NOOP = 0 |
diff --git a/client/src/standalone/videos/embed.ts b/client/src/standalone/videos/embed.ts index ea3436c7c..e5a2d208a 100644 --- a/client/src/standalone/videos/embed.ts +++ b/client/src/standalone/videos/embed.ts | |||
@@ -17,7 +17,7 @@ import 'core-js/es6/set' | |||
17 | // For google bot that uses Chrome 41 and does not understand fetch | 17 | // For google bot that uses Chrome 41 and does not understand fetch |
18 | import 'whatwg-fetch' | 18 | import 'whatwg-fetch' |
19 | 19 | ||
20 | import * as vjs from 'video.js' | 20 | const vjs = require('video.js') |
21 | import * as Channel from 'jschannel' | 21 | import * as Channel from 'jschannel' |
22 | 22 | ||
23 | import { peertubeTranslate, ResultList, VideoDetails } from '../../../../shared' | 23 | import { peertubeTranslate, ResultList, VideoDetails } from '../../../../shared' |
@@ -304,7 +304,7 @@ class PeerTubeEmbed { | |||
304 | 304 | ||
305 | this.playerOptions = videojsOptions | 305 | this.playerOptions = videojsOptions |
306 | this.player = vjs(this.videoContainerId, videojsOptions, () => { | 306 | this.player = vjs(this.videoContainerId, videojsOptions, () => { |
307 | this.player.on('customError', (event, data) => this.handleError(data.err)) | 307 | this.player.on('customError', (data: any) => this.handleError(data.err)) |
308 | 308 | ||
309 | window[ 'videojsPlayer' ] = this.player | 309 | window[ 'videojsPlayer' ] = this.player |
310 | 310 | ||
diff --git a/client/src/standalone/videos/test-embed.ts b/client/src/standalone/videos/test-embed.ts index dba331e90..b750c2ee6 100644 --- a/client/src/standalone/videos/test-embed.ts +++ b/client/src/standalone/videos/test-embed.ts | |||
@@ -66,11 +66,11 @@ window.addEventListener('load', async () => { | |||
66 | updateRates() | 66 | updateRates() |
67 | }) | 67 | }) |
68 | 68 | ||
69 | let updateResolutions = resolutions => { | 69 | let updateResolutions = ((resolutions: any) => { |
70 | let resolutionListEl = document.querySelector('#resolution-list') | 70 | let resolutionListEl = document.querySelector('#resolution-list') |
71 | resolutionListEl.innerHTML = '' | 71 | resolutionListEl.innerHTML = '' |
72 | 72 | ||
73 | resolutions.forEach(resolution => { | 73 | resolutions.forEach((resolution: any) => { |
74 | if (resolution.active) { | 74 | if (resolution.active) { |
75 | let itemEl = document.createElement('strong') | 75 | let itemEl = document.createElement('strong') |
76 | itemEl.innerText = `${resolution.label} (active)` | 76 | itemEl.innerText = `${resolution.label} (active)` |
@@ -87,7 +87,7 @@ window.addEventListener('load', async () => { | |||
87 | resolutionListEl.appendChild(itemEl) | 87 | resolutionListEl.appendChild(itemEl) |
88 | } | 88 | } |
89 | }) | 89 | }) |
90 | } | 90 | }) |
91 | 91 | ||
92 | player.getResolutions().then( | 92 | player.getResolutions().then( |
93 | resolutions => updateResolutions(resolutions)) | 93 | resolutions => updateResolutions(resolutions)) |
diff --git a/client/src/typings.d.ts b/client/src/typings.d.ts index ef5c7bd62..9615434ac 100644 --- a/client/src/typings.d.ts +++ b/client/src/typings.d.ts | |||
@@ -2,4 +2,5 @@ | |||
2 | declare var module: NodeModule; | 2 | declare var module: NodeModule; |
3 | interface NodeModule { | 3 | interface NodeModule { |
4 | id: string; | 4 | id: string; |
5 | [key: string]: any | ||
5 | } | 6 | } |