From 345ca6140f0f2f40fa3852e36a8d0811f646c06e Mon Sep 17 00:00:00 2001 From: Daniel Cassidy Date: Fri, 11 Jan 2019 08:38:33 +0000 Subject: [PATCH 01/13] Apply as many standard lint rules as possible. --- types/jwplayer/tslint.json | 65 -------------------------------------- 1 file changed, 65 deletions(-) diff --git a/types/jwplayer/tslint.json b/types/jwplayer/tslint.json index a41bf5d19a..3068964159 100644 --- a/types/jwplayer/tslint.json +++ b/types/jwplayer/tslint.json @@ -2,78 +2,13 @@ "extends": "dtslint/dt.json", "rules": { "adjacent-overload-signatures": false, - "array-type": false, - "arrow-return-shorthand": false, - "ban-types": false, "callable-types": false, - "comment-format": false, "dt-header": false, - "eofline": false, - "export-just-namespace": false, - "import-spacing": false, - "interface-name": false, - "interface-over-type-literal": false, - "jsdoc-format": false, - "max-line-length": false, - "member-access": false, - "new-parens": false, - "no-any-union": false, - "no-boolean-literal-compare": false, - "no-conditional-assignment": false, - "no-consecutive-blank-lines": false, - "no-construct": false, - "no-declare-current-package": false, - "no-duplicate-imports": false, - "no-duplicate-variable": false, "no-empty-interface": false, - "no-for-in-array": false, - "no-inferrable-types": false, - "no-internal-module": false, - "no-irregular-whitespace": false, - "no-mergeable-namespace": false, - "no-misused-new": false, - "no-namespace": false, - "no-object-literal-type-assertion": false, - "no-padding": false, - "no-redundant-jsdoc": false, - "no-redundant-jsdoc-2": false, - "no-redundant-undefined": false, - "no-reference-import": false, - "no-relative-import-in-test": false, - "no-self-import": false, - "no-single-declare-module": false, - "no-string-throw": false, - "no-unnecessary-callback-wrapper": false, - "no-unnecessary-class": false, - "no-unnecessary-generics": false, - "no-unnecessary-qualifier": false, - "no-unnecessary-type-assertion": false, - "no-useless-files": false, - "no-var-keyword": false, - "no-var-requires": false, - "no-void-expression": false, - "no-trailing-whitespace": false, - "object-literal-key-quotes": false, - "object-literal-shorthand": false, "one-line": false, - "one-variable-per-declaration": false, - "only-arrow-functions": false, - "prefer-conditional-expression": false, - "prefer-const": false, - "prefer-declare-function": false, - "prefer-for-of": false, - "prefer-method-signature": false, - "prefer-template": false, - "radix": false, "semicolon": false, - "space-before-function-paren": false, - "space-within-parens": false, - "strict-export-declare-modifiers": false, - "trim-file": false, - "triple-equals": false, "typedef-whitespace": false, "unified-signatures": false, - "void-return": false, "whitespace": false } } From 8cf6801f79f87061c6e04a50900b390501ede446 Mon Sep 17 00:00:00 2001 From: Daniel Cassidy Date: Fri, 11 Jan 2019 08:52:41 +0000 Subject: [PATCH 02/13] Fix violations of 'whitespace' lint rule. --- types/jwplayer/index.d.ts | 2 +- types/jwplayer/tslint.json | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/types/jwplayer/index.d.ts b/types/jwplayer/index.d.ts index 1d65bca261..0111370899 100644 --- a/types/jwplayer/index.d.ts +++ b/types/jwplayer/index.d.ts @@ -506,4 +506,4 @@ interface JWPlayerStatic { version: string; } -declare const jwplayer:JWPlayerStatic; +declare const jwplayer: JWPlayerStatic; diff --git a/types/jwplayer/tslint.json b/types/jwplayer/tslint.json index 3068964159..4f1be58fd5 100644 --- a/types/jwplayer/tslint.json +++ b/types/jwplayer/tslint.json @@ -8,7 +8,6 @@ "one-line": false, "semicolon": false, "typedef-whitespace": false, - "unified-signatures": false, - "whitespace": false + "unified-signatures": false } } From f87712a95ac883dac32c8af20550470e162330dc Mon Sep 17 00:00:00 2001 From: Daniel Cassidy Date: Fri, 11 Jan 2019 08:54:35 +0000 Subject: [PATCH 03/13] Fix violations of 'callable-types' lint rule. --- types/jwplayer/index.d.ts | 4 +--- types/jwplayer/tslint.json | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/types/jwplayer/index.d.ts b/types/jwplayer/index.d.ts index 0111370899..b7434c602a 100644 --- a/types/jwplayer/index.d.ts +++ b/types/jwplayer/index.d.ts @@ -231,9 +231,7 @@ interface FirstFrameParam extends CallbackParam { viewable: 0 | 1; } -interface EventCallback { - (param: T): void; -} +type EventCallback = (param: T) => void; interface Region { x: 0; // x and y will always be 0 according to https://developer.jwplayer.com/jw-player/docs/javascript-api-reference/#jwplayergetsaferegion diff --git a/types/jwplayer/tslint.json b/types/jwplayer/tslint.json index 4f1be58fd5..00e6c2de35 100644 --- a/types/jwplayer/tslint.json +++ b/types/jwplayer/tslint.json @@ -2,7 +2,6 @@ "extends": "dtslint/dt.json", "rules": { "adjacent-overload-signatures": false, - "callable-types": false, "dt-header": false, "no-empty-interface": false, "one-line": false, From 64f757c065a6db4a76905089f6f48c7cfd32309b Mon Sep 17 00:00:00 2001 From: Daniel Cassidy Date: Fri, 11 Jan 2019 09:02:14 +0000 Subject: [PATCH 04/13] Fix violations of 'no-empty-interface' lint rule. --- types/jwplayer/index.d.ts | 71 ++++++++++++++++++-------------------- types/jwplayer/tslint.json | 1 - 2 files changed, 34 insertions(+), 38 deletions(-) diff --git a/types/jwplayer/index.d.ts b/types/jwplayer/index.d.ts index b7434c602a..b8e18dcae6 100644 --- a/types/jwplayer/index.d.ts +++ b/types/jwplayer/index.d.ts @@ -52,33 +52,30 @@ interface Environment{ Features: Features; } -interface CallbackParam { -} - -interface AdProgressParam extends CallbackParam { +interface AdProgressParam { client: 'vast' | 'googima'; creativetype: string; tag: string; } -interface AdCompanionsParam extends CallbackParam { +interface AdCompanionsParam { companions: any[]; tag: string; } -interface AdErrorParam extends CallbackParam { +interface AdErrorParam { message: string; tag: string; } -interface AdRequestParam extends CallbackParam { +interface AdRequestParam { adposition: 'pre' | 'mid' | 'post'; client: 'vast' | 'googima'; offset: 'pre' | 'mid' | 'post'; tag: string; } -interface AdImpressionParam extends CallbackParam { +interface AdImpressionParam { adposition: 'pre' | 'mid' | 'post'; adsystem: string; adtitle: string; @@ -92,38 +89,38 @@ interface AdImpressionParam extends CallbackParam { wrapper: any[]; } -interface AdScheduleParam extends CallbackParam { +interface AdScheduleParam { tag: string; client: string; adbreaks: object[]; } -interface AdStartedParam extends CallbackParam { +interface AdStartedParam { creativetype: string; tag: string; } -interface AdPlayParam extends CallbackParam { +interface AdPlayParam { creativetype: string; newstate: string; oldstate: string; tag: string; } -interface BufferParam extends CallbackParam { +interface BufferParam { newstate: string; oldstate: string; reason: 'loading' | 'complete' | 'stalled' | 'error'; } -interface BufferChangeParam extends CallbackParam { +interface BufferChangeParam { duration: number; bufferPercent: number; position: number; metadata: any; } -interface AdTimeParam extends CallbackParam { +interface AdTimeParam { client: 'vast' | 'googima'; creativetype: string; duration: number; @@ -132,106 +129,106 @@ interface AdTimeParam extends CallbackParam { tag: string; } -interface AudioTracksParam extends CallbackParam { +interface AudioTracksParam { levels: any[]; } -interface CaptionsChangedParam extends CallbackParam { +interface CaptionsChangedParam { currentTrack: number; } -interface CaptionsListParam extends CallbackParam { +interface CaptionsListParam { tracks: any[]; } -interface AudioTrackChangedParam extends CallbackParam { +interface AudioTrackChangedParam { currentTrack: number; } -interface MetadataParam extends CallbackParam { +interface MetadataParam { metadata: any; } -interface ControlsParam extends CallbackParam { +interface ControlsParam { controls: boolean; } -interface ErrorParam extends CallbackParam { +interface ErrorParam { message: string; } -interface FullscreenParam extends CallbackParam { +interface FullscreenParam { fullscreen: boolean; } -interface IdleParam extends CallbackParam { +interface IdleParam { oldstate: 'buffering' | 'playing' | 'paused'; } -interface LevelsChangedParam extends CallbackParam { +interface LevelsChangedParam { currentQuality: number; } -interface MuteParam extends CallbackParam { +interface MuteParam { mute: boolean; } -interface VolumeParam extends CallbackParam { +interface VolumeParam { volume: boolean; } -interface PlayParam extends CallbackParam { +interface PlayParam { oldstate: 'buffering' | 'playing'; viewable: 0 | 1; } -interface PlaylistParam extends CallbackParam { +interface PlaylistParam { playlist: any[]; } -interface PlaylistItemParam extends CallbackParam { +interface PlaylistItemParam { index: number; item: any; } -interface ReadyParam extends CallbackParam { +interface ReadyParam { setupTime: number; viewable: 0 | 1; } -interface ResizeParam extends CallbackParam { +interface ResizeParam { width: number; height: number; } -interface VisualQualityParam extends CallbackParam { +interface VisualQualityParam { mode: string; label: string; reason: string; } -interface LevelsParam extends CallbackParam { +interface LevelsParam { width: number; levels: any[]; } -interface SeekParam extends CallbackParam { +interface SeekParam { position: number; offset: number; } -interface TimeParam extends CallbackParam { +interface TimeParam { duration: number; position: number; viewable: 0 | 1; } -interface FirstFrameParam extends CallbackParam { +interface FirstFrameParam { loadTime: number; viewable: 0 | 1; } -type EventCallback = (param: T) => void; +type EventCallback = (param: T) => void; interface Region { x: 0; // x and y will always be 0 according to https://developer.jwplayer.com/jw-player/docs/javascript-api-reference/#jwplayergetsaferegion diff --git a/types/jwplayer/tslint.json b/types/jwplayer/tslint.json index 00e6c2de35..bccfd75eed 100644 --- a/types/jwplayer/tslint.json +++ b/types/jwplayer/tslint.json @@ -3,7 +3,6 @@ "rules": { "adjacent-overload-signatures": false, "dt-header": false, - "no-empty-interface": false, "one-line": false, "semicolon": false, "typedef-whitespace": false, From f749e81816921e49919b651750c2752b962bf5ff Mon Sep 17 00:00:00 2001 From: Daniel Cassidy Date: Fri, 11 Jan 2019 09:04:50 +0000 Subject: [PATCH 05/13] Fix violations of 'oneline' lint rule. --- types/jwplayer/index.d.ts | 2 +- types/jwplayer/tslint.json | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/types/jwplayer/index.d.ts b/types/jwplayer/index.d.ts index b8e18dcae6..1cc2114825 100644 --- a/types/jwplayer/index.d.ts +++ b/types/jwplayer/index.d.ts @@ -46,7 +46,7 @@ interface Features { iframe: boolean; } -interface Environment{ +interface Environment { Browser: Browser; OS: OS; Features: Features; diff --git a/types/jwplayer/tslint.json b/types/jwplayer/tslint.json index bccfd75eed..8a40d958c2 100644 --- a/types/jwplayer/tslint.json +++ b/types/jwplayer/tslint.json @@ -3,7 +3,6 @@ "rules": { "adjacent-overload-signatures": false, "dt-header": false, - "one-line": false, "semicolon": false, "typedef-whitespace": false, "unified-signatures": false From d3e941bbff9afb53286e27c84bd6a6ce19d7d129 Mon Sep 17 00:00:00 2001 From: Daniel Cassidy Date: Fri, 11 Jan 2019 09:11:13 +0000 Subject: [PATCH 06/13] Fix violations of 'semicolon' lint rule. --- types/jwplayer/index.d.ts | 4 ++-- types/jwplayer/tslint.json | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/types/jwplayer/index.d.ts b/types/jwplayer/index.d.ts index 1cc2114825..84937e2922 100644 --- a/types/jwplayer/index.d.ts +++ b/types/jwplayer/index.d.ts @@ -14,7 +14,7 @@ interface Version { version: string; major: number; - minor: number + minor: number; } interface Browser { @@ -461,7 +461,7 @@ interface JWPlayer { on(event: 'seeked', callback: () => void): void; once(event: 'seeked', callback: () => void): void; off(event: 'seeked'): void; - trigger(event: 'seeked'): void + trigger(event: 'seeked'): void; on(event: 'setupError', callback: EventCallback): void; once(event: 'setupError', callback: EventCallback): void; off(event: 'setupError'): void; diff --git a/types/jwplayer/tslint.json b/types/jwplayer/tslint.json index 8a40d958c2..ba09b4db63 100644 --- a/types/jwplayer/tslint.json +++ b/types/jwplayer/tslint.json @@ -3,7 +3,6 @@ "rules": { "adjacent-overload-signatures": false, "dt-header": false, - "semicolon": false, "typedef-whitespace": false, "unified-signatures": false } From bfa382bd5ac635cc6191772d616ecb51875f7ca3 Mon Sep 17 00:00:00 2001 From: Daniel Cassidy Date: Fri, 11 Jan 2019 09:17:49 +0000 Subject: [PATCH 07/13] Enable 'typedef-whitespace' lint rule. --- types/jwplayer/tslint.json | 1 - 1 file changed, 1 deletion(-) diff --git a/types/jwplayer/tslint.json b/types/jwplayer/tslint.json index ba09b4db63..4f841ccd2a 100644 --- a/types/jwplayer/tslint.json +++ b/types/jwplayer/tslint.json @@ -3,7 +3,6 @@ "rules": { "adjacent-overload-signatures": false, "dt-header": false, - "typedef-whitespace": false, "unified-signatures": false } } From 27c9d9604bb263ba9c5010d0010b7344eb5b734a Mon Sep 17 00:00:00 2001 From: Daniel Cassidy Date: Fri, 11 Jan 2019 09:40:49 +0000 Subject: [PATCH 08/13] Fix violations of 'unified-signatures' & 'adjacent-overload-signatures'. --- types/jwplayer/index.d.ts | 238 ++++++++----------------------------- types/jwplayer/tslint.json | 4 +- 2 files changed, 53 insertions(+), 189 deletions(-) diff --git a/types/jwplayer/index.d.ts b/types/jwplayer/index.d.ts index 84937e2922..42b39988fd 100644 --- a/types/jwplayer/index.d.ts +++ b/types/jwplayer/index.d.ts @@ -262,6 +262,50 @@ interface QualityLevel { reason: 'auto' | 'api' | 'initial choice'; } +interface EventParams { + adClick: AdProgressParam; + adCompanions: AdCompanionsParam; + adComplete: AdProgressParam; + adSkipped: AdProgressParam; + adError: AdErrorParam; + adRequest: AdRequestParam; + adSchedule: AdScheduleParam; + adStarted: AdStartedParam; + adImpression: AdImpressionParam; + adPlay: AdPlayParam; + adPause: AdPlayParam; + adTime: AdTimeParam; + meta: MetadataParam; + audioTracks: AudioTracksParam; + audioTrackChanged: AudioTrackChangedParam; + firstFrame: FirstFrameParam; + buffer: BufferParam; + bufferChange: BufferChangeParam; + captionsChanged: CaptionsChangedParam; + captionsList: CaptionsListParam; + controls: ControlsParam; + error: ErrorParam; + fullscreen: FullscreenParam; + idle: IdleParam; + levelsChanged: LevelsChangedParam; + mute: MuteParam; + volume: VolumeParam; + pause: PlayParam; + play: PlayParam; + playlist: PlaylistParam; + playlistItem: PlaylistItemParam; + ready: ReadyParam; + resize: ResizeParam; + visualQuality: VisualQualityParam; + levels: LevelsParam; + seek: SeekParam; + setupError: ErrorParam; + time: TimeParam; +} + +type NoParamEvent = 'adBlock' | 'beforeComplete' | 'complete' | 'beforePlay' | 'displayClick' | 'playlistComplete' + | 'seeked' | 'remove'; + interface JWPlayer { addButton(icon: string, label: string, handler: () => void, id: string): void; getAudioTracks(): any[]; @@ -288,192 +332,14 @@ interface JWPlayer { getEnvironment(): Environment; getWidth(): number; getVisualQuality(): QualityLevel | undefined; - load(playlist: any[]): void; - load(playlist: string): void; - on(event: 'adClick', callback: EventCallback): void; - once(event: 'adClick', callback: EventCallback): void; - off(event: 'adClick'): void; - trigger(event: 'adClick', args: AdProgressParam): void; - on(event: 'adCompanions', callback: EventCallback): void; - once(event: 'adCompanions', callback: EventCallback): void; - off(event: 'adCompanions'): void; - trigger(event: 'adCompanions', args: AdCompanionsParam): void; - on(event: 'adComplete', callback: EventCallback): void; - once(event: 'adComplete', callback: EventCallback): void; - off(event: 'adComplete'): void; - trigger(event: 'adComplete', args: AdProgressParam): void; - on(event: 'adSkipped', callback: EventCallback): void; - once(event: 'adSkipped', callback: EventCallback): void; - off(event: 'adSkipped'): void; - trigger(event: 'adSkipped', args: AdProgressParam): void; - on(event: 'adError', callback: EventCallback): void; - once(event: 'adError', callback: EventCallback): void; - off(event: 'adError'): void; - trigger(event: 'adError', args: AdErrorParam): void; - on(event: 'adBlock', callback: () => void): void; - once(event: 'adBlock', callback: () => void): void; - off(event: 'adBlock'): void; - trigger(event: 'adBlock'): void; - on(event: 'adRequest', callback: EventCallback): void; - once(event: 'adRequest', callback: EventCallback): void; - off(event: 'adRequest'): void; - trigger(event: 'adRequest', args: AdRequestParam): void; - on(event: 'adSchedule', callback: EventCallback): void; - once(event: 'adSchedule', callback: EventCallback): void; - off(event: 'adSchedule'): void; - trigger(event: 'adSchedule', args: AdScheduleParam): void; - on(event: 'adStarted', callback: EventCallback): void; - once(event: 'adStarted', callback: EventCallback): void; - off(event: 'adStarted'): void; - trigger(event: 'adStarted', args: AdStartedParam): void; - on(event: 'adImpression', callback: EventCallback): void; - once(event: 'adImpression', callback: EventCallback): void; - off(event: 'adImpression'): void; - trigger(event: 'adImpression', args: AdImpressionParam): void; - on(event: 'adPlay', callback: EventCallback): void; - once(event: 'adPlay', callback: EventCallback): void; - off(event: 'adPlay'): void; - trigger(event: 'adPlay', args: AdPlayParam): void; - on(event: 'adPause', callback: EventCallback): void; - once(event: 'adPause', callback: EventCallback): void; - off(event: 'adPause'): void; - trigger(event: 'adPause', args: AdPlayParam): void; - on(event: 'adTime', callback: EventCallback): void; - once(event: 'adTime', callback: EventCallback): void; - off(event: 'adTime'): void; - trigger(event: 'adTime', args: AdTimeParam): void; - on(event: 'meta', callback: EventCallback): void; - once(event: 'meta', callback: EventCallback): void; - off(event: 'meta'): void; - trigger(event: 'meta', args: MetadataParam): void; - on(event: 'audioTracks', callback: EventCallback): void; - once(event: 'audioTracks', callback: EventCallback): void; - off(event: 'audioTracks'): void; - trigger(event: 'audioTracks', args: AudioTracksParam): void; - on(event: 'audioTrackChanged', callback: EventCallback): void; - once(event: 'audioTrackChanged', callback: EventCallback): void; - off(event: 'audioTrackChanged'): void; - trigger(event: 'audioTrackChanged', args: AudioTrackChangedParam): void; - on(event: 'beforeComplete', callback: () => void): void; - once(event: 'beforeComplete', callback: () => void): void; - off(event: 'beforeComplete'): void; - trigger(event: 'beforeComplete'): void; - on(event: 'complete', callback: () => void): void; - once(event: 'complete', callback: () => void): void; - off(event: 'complete'): void; - trigger(event: 'complete'): void; - on(event: 'firstFrame', callback: EventCallback): void; - once(event: 'firstFrame', callback: EventCallback): void; - off(event: 'firstFrame'): void; - trigger(event: 'firstFrame', args: FirstFrameParam): void; - on(event: 'beforePlay', callback: () => void): void; - once(event: 'beforePlay', callback: () => void): void; - off(event: 'beforePlay'): void; - trigger(event: 'beforePlay'): void; - on(event: 'buffer', callback: EventCallback): void; - once(event: 'buffer', callback: EventCallback): void; - off(event: 'buffer'): void; - trigger(event: 'buffer', args: BufferParam): void; - on(event: 'bufferChange', callback: EventCallback): void; - once(event: 'bufferChange', callback: EventCallback): void; - off(event: 'bufferChange'): void; - trigger(event: 'bufferChange', args: BufferChangeParam): void; - on(event: 'captionsChanged', callback: EventCallback): void; - once(event: 'captionsChanged', callback: EventCallback): void; - off(event: 'captionsChanged'): void; - trigger(event: 'captionsChanged', args: CaptionsChangedParam): void; - on(event: 'captionsList', callback: EventCallback): void; - once(event: 'captionsList', callback: EventCallback): void; - off(event: 'captionsList'): void; - trigger(event: 'captionsList', args: CaptionsListParam): void; - on(event: 'controls', callback: EventCallback): void; - once(event: 'controls', callback: EventCallback): void; - off(event: 'controls'): void; - trigger(event: 'controls', args: ControlsParam): void; - on(event: 'displayClick', callback: () => void): void; - once(event: 'displayClick', callback: () => void): void; - off(event: 'displayClick'): void; - trigger(event: 'displayClick'): void; - on(event: 'error', callback: EventCallback): void; - once(event: 'error', callback: EventCallback): void; - off(event: 'error'): void; - trigger(event: 'error', args: ErrorParam): void; - on(event: 'fullscreen', callback: EventCallback): void; - once(event: 'fullscreen', callback: EventCallback): void; - off(event: 'fullscreen'): void; - trigger(event: 'fullscreen', args: FullscreenParam): void; - on(event: 'idle', callback: EventCallback): void; - once(event: 'idle', callback: EventCallback): void; - off(event: 'idle'): void; - trigger(event: 'idle', args: IdleParam): void; - on(event: 'levelsChanged', callback: EventCallback): void; - once(event: 'levelsChanged', callback: EventCallback): void; - off(event: 'levelsChanged'): void; - trigger(event: 'levelsChanged', args: LevelsChangedParam): void; - on(event: 'mute', callback: EventCallback): void; - once(event: 'mute', callback: EventCallback): void; - off(event: 'mute'): void; - trigger(event: 'mute', args: MuteParam): void; - on(event: 'volume', callback: EventCallback): void; - once(event: 'volume', callback: EventCallback): void; - off(event: 'volume'): void; - trigger(event: 'volume', args: VolumeParam): void; - on(event: 'pause', callback: EventCallback): void; - once(event: 'pause', callback: EventCallback): void; - off(event: 'pause'): void; - trigger(event: 'pause', args: PlayParam): void; - on(event: 'play', callback: EventCallback): void; - once(event: 'play', callback: EventCallback): void; - off(event: 'play'): void; - trigger(event: 'play', args: PlayParam): void; - on(event: 'playlist', callback: EventCallback): void; - once(event: 'playlist', callback: EventCallback): void; - off(event: 'playlist'): void; - trigger(event: 'playlist', args: PlaylistParam): void; - on(event: 'playlistItem', callback: EventCallback): void; - once(event: 'playlistItem', callback: EventCallback): void; - off(event: 'playlistItem'): void; - trigger(event: 'playlistItem', args: PlaylistItemParam): void; - on(event: 'playlistComplete', callback: () => void): void; - once(event: 'playlistComplete', callback: () => void): void; - off(event: 'playlistComplete'): void; - trigger(event: 'playlistComplete'): void; - on(event: 'ready', callback: EventCallback): void; - once(event: 'ready', callback: EventCallback): void; - off(event: 'ready'): void; - trigger(event: 'ready'): void; - on(event: 'resize', callback: EventCallback): void; - once(event: 'resize', callback: EventCallback): void; - off(event: 'resize'): void; - trigger(event: 'resize', args: ResizeParam): void; - on(event: 'visualQuality', callback: EventCallback): void; - once(event: 'visualQuality', callback: EventCallback): void; - off(event: 'visualQuality'): void; - trigger(event: 'visualQuality', args: VisualQualityParam): void; - on(event: 'levels', callback: EventCallback): void; - once(event: 'levels', callback: EventCallback): void; - off(event: 'levels'): void; - trigger(event: 'levels', args: LevelsParam): void; - on(event: 'seek', callback: EventCallback): void; - once(event: 'seek', callback: EventCallback): void; - off(event: 'seek'): void; - trigger(event: 'seek', args: SeekParam): void; - on(event: 'seeked', callback: () => void): void; - once(event: 'seeked', callback: () => void): void; - off(event: 'seeked'): void; - trigger(event: 'seeked'): void; - on(event: 'setupError', callback: EventCallback): void; - once(event: 'setupError', callback: EventCallback): void; - off(event: 'setupError'): void; - trigger(event: 'setupError', args: ErrorParam): void; - on(event: 'remove', callback: () => void): void; - once(event: 'remove', callback: () => void): void; - off(event: 'remove'): void; - trigger(event: 'remove'): void; - on(event: 'time', callback: EventCallback): void; - once(event: 'time', callback: EventCallback): void; - off(event: 'time'): void; - trigger(event: 'time', args: TimeParam): void; + load(playlist: any[] | string): void; + on(event: TEvent, callback: EventCallback): void; + on(event: NoParamEvent, callback: () => void): void; + once(event: TEvent, callback: EventCallback): void; + once(event: NoParamEvent, callback: () => void): void; + off(event: keyof EventParams | NoParamEvent): void; + trigger(event: TEvent, args: EventParams[TEvent]): void; + trigger(event: NoParamEvent): void; pause(state?: boolean): void; play(state?: boolean): void; playAd(tag: string): void; diff --git a/types/jwplayer/tslint.json b/types/jwplayer/tslint.json index 4f841ccd2a..65c83fb1e3 100644 --- a/types/jwplayer/tslint.json +++ b/types/jwplayer/tslint.json @@ -1,8 +1,6 @@ { "extends": "dtslint/dt.json", "rules": { - "adjacent-overload-signatures": false, - "dt-header": false, - "unified-signatures": false + "dt-header": false } } From 5837145fd6cf1849fb6e1b91d50379cd6ae8136b Mon Sep 17 00:00:00 2001 From: Daniel Cassidy Date: Fri, 11 Jan 2019 09:45:44 +0000 Subject: [PATCH 09/13] Fix violations of 'dt-header' lint rule. --- types/jwplayer/index.d.ts | 6 +++--- types/jwplayer/tslint.json | 5 +---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/types/jwplayer/index.d.ts b/types/jwplayer/index.d.ts index 42b39988fd..824dee4669 100644 --- a/types/jwplayer/index.d.ts +++ b/types/jwplayer/index.d.ts @@ -1,11 +1,11 @@ -// Type definitions for JW Player V8.2 -// Project: https://github.com/jwplayer/jwplayer/ +// Type definitions for JW Player 8.2 +// Project: https://github.com/jwplayer/jwplayer // Definitions by: Martin Duparc // Tomer Kruvi // Philipp Gürtler // Daniel McGraw // Benjamin Dobson -// Be Birchall +// Be Birchall // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.2 diff --git a/types/jwplayer/tslint.json b/types/jwplayer/tslint.json index 65c83fb1e3..f93cf8562a 100644 --- a/types/jwplayer/tslint.json +++ b/types/jwplayer/tslint.json @@ -1,6 +1,3 @@ { - "extends": "dtslint/dt.json", - "rules": { - "dt-header": false - } + "extends": "dtslint/dt.json" } From 4bc648fb0a462a908501cbf10c3c2e43ad2857d1 Mon Sep 17 00:00:00 2001 From: Daniel Cassidy Date: Fri, 11 Jan 2019 09:46:08 +0000 Subject: [PATCH 10/13] Add self to authors. --- types/jwplayer/index.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/types/jwplayer/index.d.ts b/types/jwplayer/index.d.ts index 824dee4669..0ff7246202 100644 --- a/types/jwplayer/index.d.ts +++ b/types/jwplayer/index.d.ts @@ -6,6 +6,7 @@ // Daniel McGraw // Benjamin Dobson // Be Birchall +// Daniel Cassidy // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.2 From 1f5e81eed94bf596fbde404b092aae46f7491da2 Mon Sep 17 00:00:00 2001 From: Daniel Cassidy Date: Fri, 11 Jan 2019 10:05:33 +0000 Subject: [PATCH 11/13] Improve type definition for jwplayer() function. This function accepts a string element id, a numeric JW Player instance index, or a DOM element. It can also be omitted to select the first JW Player instance. --- types/jwplayer/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/jwplayer/index.d.ts b/types/jwplayer/index.d.ts index 0ff7246202..10f1ac269b 100644 --- a/types/jwplayer/index.d.ts +++ b/types/jwplayer/index.d.ts @@ -363,7 +363,7 @@ interface JWPlayer { } interface JWPlayerStatic { - (id: string): JWPlayer; + (query?: string | number | Element): JWPlayer; key: string; version: string; } From 0ed3ff1ab3ab9afe9ebb9b4eb73d6badab17e6f7 Mon Sep 17 00:00:00 2001 From: Daniel Cassidy Date: Fri, 11 Jan 2019 10:22:59 +0000 Subject: [PATCH 12/13] Fix inconsistent indentation: always use four spaces. --- types/jwplayer/index.d.ts | 184 +++++++++++++++++++------------------- 1 file changed, 92 insertions(+), 92 deletions(-) diff --git a/types/jwplayer/index.d.ts b/types/jwplayer/index.d.ts index 10f1ac269b..2a16cd4769 100644 --- a/types/jwplayer/index.d.ts +++ b/types/jwplayer/index.d.ts @@ -264,108 +264,108 @@ interface QualityLevel { } interface EventParams { - adClick: AdProgressParam; - adCompanions: AdCompanionsParam; - adComplete: AdProgressParam; - adSkipped: AdProgressParam; - adError: AdErrorParam; - adRequest: AdRequestParam; - adSchedule: AdScheduleParam; - adStarted: AdStartedParam; - adImpression: AdImpressionParam; - adPlay: AdPlayParam; - adPause: AdPlayParam; - adTime: AdTimeParam; - meta: MetadataParam; - audioTracks: AudioTracksParam; - audioTrackChanged: AudioTrackChangedParam; - firstFrame: FirstFrameParam; - buffer: BufferParam; - bufferChange: BufferChangeParam; - captionsChanged: CaptionsChangedParam; - captionsList: CaptionsListParam; - controls: ControlsParam; - error: ErrorParam; - fullscreen: FullscreenParam; - idle: IdleParam; - levelsChanged: LevelsChangedParam; - mute: MuteParam; - volume: VolumeParam; - pause: PlayParam; - play: PlayParam; - playlist: PlaylistParam; - playlistItem: PlaylistItemParam; - ready: ReadyParam; - resize: ResizeParam; - visualQuality: VisualQualityParam; - levels: LevelsParam; - seek: SeekParam; - setupError: ErrorParam; - time: TimeParam; + adClick: AdProgressParam; + adCompanions: AdCompanionsParam; + adComplete: AdProgressParam; + adSkipped: AdProgressParam; + adError: AdErrorParam; + adRequest: AdRequestParam; + adSchedule: AdScheduleParam; + adStarted: AdStartedParam; + adImpression: AdImpressionParam; + adPlay: AdPlayParam; + adPause: AdPlayParam; + adTime: AdTimeParam; + meta: MetadataParam; + audioTracks: AudioTracksParam; + audioTrackChanged: AudioTrackChangedParam; + firstFrame: FirstFrameParam; + buffer: BufferParam; + bufferChange: BufferChangeParam; + captionsChanged: CaptionsChangedParam; + captionsList: CaptionsListParam; + controls: ControlsParam; + error: ErrorParam; + fullscreen: FullscreenParam; + idle: IdleParam; + levelsChanged: LevelsChangedParam; + mute: MuteParam; + volume: VolumeParam; + pause: PlayParam; + play: PlayParam; + playlist: PlaylistParam; + playlistItem: PlaylistItemParam; + ready: ReadyParam; + resize: ResizeParam; + visualQuality: VisualQualityParam; + levels: LevelsParam; + seek: SeekParam; + setupError: ErrorParam; + time: TimeParam; } type NoParamEvent = 'adBlock' | 'beforeComplete' | 'complete' | 'beforePlay' | 'displayClick' | 'playlistComplete' - | 'seeked' | 'remove'; + | 'seeked' | 'remove'; interface JWPlayer { - addButton(icon: string, label: string, handler: () => void, id: string): void; - getAudioTracks(): any[]; - getBuffer(): number; - getCaptionsList(): any[]; - getControls(): boolean; - getCurrentAudioTrack(): number; - getCurrentCaptions(): number; - getCurrentQuality(): number; - getDuration(): number; - getHeight(): number; - getFullscreen(): boolean; - getMute(): boolean; - getPlaylist(): any[]; - getPlaylistIndex(): number; - getPlaylistItem(index?: number): any; - getPosition(): number; - getQualityLevels(): any[]; - getRenderingMode(): string; - getSafeRegion(): Region; - getState(): string; - getVolume(): number; - getContainer(): HTMLElement; - getEnvironment(): Environment; - getWidth(): number; + addButton(icon: string, label: string, handler: () => void, id: string): void; + getAudioTracks(): any[]; + getBuffer(): number; + getCaptionsList(): any[]; + getControls(): boolean; + getCurrentAudioTrack(): number; + getCurrentCaptions(): number; + getCurrentQuality(): number; + getDuration(): number; + getHeight(): number; + getFullscreen(): boolean; + getMute(): boolean; + getPlaylist(): any[]; + getPlaylistIndex(): number; + getPlaylistItem(index?: number): any; + getPosition(): number; + getQualityLevels(): any[]; + getRenderingMode(): string; + getSafeRegion(): Region; + getState(): string; + getVolume(): number; + getContainer(): HTMLElement; + getEnvironment(): Environment; + getWidth(): number; getVisualQuality(): QualityLevel | undefined; - load(playlist: any[] | string): void; - on(event: TEvent, callback: EventCallback): void; - on(event: NoParamEvent, callback: () => void): void; - once(event: TEvent, callback: EventCallback): void; - once(event: NoParamEvent, callback: () => void): void; - off(event: keyof EventParams | NoParamEvent): void; - trigger(event: TEvent, args: EventParams[TEvent]): void; - trigger(event: NoParamEvent): void; - pause(state?: boolean): void; - play(state?: boolean): void; - playAd(tag: string): void; - playlistItem(index: number): void; - registerPlugin(id: string, target: string, jsPlugin: () => void, swfURL?: string): void; - remove(): void; - removeButton(id: string): void; - resize(width: number, height: number): void; - seek(position: number): void; - setControls(controls: boolean): void; - setCurrentAudioTrack(index: number): void; - setCurrentCaptions(index: number): void; - setCurrentQuality(index: number): void; - setFullscreen(state: boolean): void; - setMute(state?: boolean): void; - setup(options: any): JWPlayer; - setVolume(volume: number): void; + load(playlist: any[] | string): void; + on(event: TEvent, callback: EventCallback): void; + on(event: NoParamEvent, callback: () => void): void; + once(event: TEvent, callback: EventCallback): void; + once(event: NoParamEvent, callback: () => void): void; + off(event: keyof EventParams | NoParamEvent): void; + trigger(event: TEvent, args: EventParams[TEvent]): void; + trigger(event: NoParamEvent): void; + pause(state?: boolean): void; + play(state?: boolean): void; + playAd(tag: string): void; + playlistItem(index: number): void; + registerPlugin(id: string, target: string, jsPlugin: () => void, swfURL?: string): void; + remove(): void; + removeButton(id: string): void; + resize(width: number, height: number): void; + seek(position: number): void; + setControls(controls: boolean): void; + setCurrentAudioTrack(index: number): void; + setCurrentCaptions(index: number): void; + setCurrentQuality(index: number): void; + setFullscreen(state: boolean): void; + setMute(state?: boolean): void; + setup(options: any): JWPlayer; + setVolume(volume: number): void; setCaptions(options: CaptionOptions): void; - stop(): void; + stop(): void; } interface JWPlayerStatic { - (query?: string | number | Element): JWPlayer; - key: string; - version: string; + (query?: string | number | Element): JWPlayer; + key: string; + version: string; } declare const jwplayer: JWPlayerStatic; From 1c3b62674fb16a118c1335d9df721ad5407b08f7 Mon Sep 17 00:00:00 2001 From: Daniel Cassidy Date: Fri, 11 Jan 2019 11:24:36 +0000 Subject: [PATCH 13/13] Move all types into the jwplayer namespace. To avoid polluting the global namespace with hundreds of types specific to JW Player. --- types/jwplayer/index.d.ts | 712 +++++++++++++++++++------------------- 1 file changed, 357 insertions(+), 355 deletions(-) diff --git a/types/jwplayer/index.d.ts b/types/jwplayer/index.d.ts index 2a16cd4769..05d9c50aa6 100644 --- a/types/jwplayer/index.d.ts +++ b/types/jwplayer/index.d.ts @@ -12,360 +12,362 @@ // JW Player is the leading HTML5 & Flash video player, optimized for mobile and the desktop. Easy enough for beginners, advanced enough for pros. -interface Version { - version: string; - major: number; - minor: number; +declare namespace jwplayer { + interface Version { + version: string; + major: number; + minor: number; + } + + interface Browser { + chrome: boolean; + edge: boolean; + facebook: boolean; + firefox: boolean; + ie: boolean; + msie: boolean; + safari: boolean; + version: Version; + } + + interface OS { + android: boolean; + androidNative: boolean; // Android native browser + iOS: boolean; + mobile: boolean; + mac: boolean; + iPad: boolean; + iPhone: boolean; + windows: boolean; + version: Version; + } + + interface Features { + flash: boolean; + flashVersion: number; + iframe: boolean; + } + + interface Environment { + Browser: Browser; + OS: OS; + Features: Features; + } + + interface AdProgressParam { + client: 'vast' | 'googima'; + creativetype: string; + tag: string; + } + + interface AdCompanionsParam { + companions: any[]; + tag: string; + } + + interface AdErrorParam { + message: string; + tag: string; + } + + interface AdRequestParam { + adposition: 'pre' | 'mid' | 'post'; + client: 'vast' | 'googima'; + offset: 'pre' | 'mid' | 'post'; + tag: string; + } + + interface AdImpressionParam { + adposition: 'pre' | 'mid' | 'post'; + adsystem: string; + adtitle: string; + clickThroughUrl: string; + client: 'vast' | 'googima'; + creativetype: string; + linear: string; + mediafile: any; + tag: string; + vastversion: number; + wrapper: any[]; + } + + interface AdScheduleParam { + tag: string; + client: string; + adbreaks: object[]; + } + + interface AdStartedParam { + creativetype: string; + tag: string; + } + + interface AdPlayParam { + creativetype: string; + newstate: string; + oldstate: string; + tag: string; + } + + interface BufferParam { + newstate: string; + oldstate: string; + reason: 'loading' | 'complete' | 'stalled' | 'error'; + } + + interface BufferChangeParam { + duration: number; + bufferPercent: number; + position: number; + metadata: any; + } + + interface AdTimeParam { + client: 'vast' | 'googima'; + creativetype: string; + duration: number; + position: number; + sequence: number; + tag: string; + } + + interface AudioTracksParam { + levels: any[]; + } + + interface CaptionsChangedParam { + currentTrack: number; + } + + interface CaptionsListParam { + tracks: any[]; + } + + interface AudioTrackChangedParam { + currentTrack: number; + } + + interface MetadataParam { + metadata: any; + } + + interface ControlsParam { + controls: boolean; + } + + interface ErrorParam { + message: string; + } + + interface FullscreenParam { + fullscreen: boolean; + } + + interface IdleParam { + oldstate: 'buffering' | 'playing' | 'paused'; + } + + interface LevelsChangedParam { + currentQuality: number; + } + + interface MuteParam { + mute: boolean; + } + + interface VolumeParam { + volume: boolean; + } + + interface PlayParam { + oldstate: 'buffering' | 'playing'; + viewable: 0 | 1; + } + + interface PlaylistParam { + playlist: any[]; + } + + interface PlaylistItemParam { + index: number; + item: any; + } + + interface ReadyParam { + setupTime: number; + viewable: 0 | 1; + } + + interface ResizeParam { + width: number; + height: number; + } + + interface VisualQualityParam { + mode: string; + label: string; + reason: string; + } + + interface LevelsParam { + width: number; + levels: any[]; + } + + interface SeekParam { + position: number; + offset: number; + } + + interface TimeParam { + duration: number; + position: number; + viewable: 0 | 1; + } + + interface FirstFrameParam { + loadTime: number; + viewable: 0 | 1; + } + + type EventCallback = (param: T) => void; + + interface Region { + x: 0; // x and y will always be 0 according to https://developer.jwplayer.com/jw-player/docs/javascript-api-reference/#jwplayergetsaferegion + y: 0; + width: number; + height: number; + } + + interface CaptionOptions { + color: string; + fontSize: number; + fontFamily: string; + fontOpacity: number; + backgroundColor: string; + backgroundOpacity: number; + edgeStyle: string; + windowColor: string; + windowOpacity: number; + } + + interface Level { + bitrate: number; + height: number; + width: number; + label: string; + } + + interface QualityLevel { + mode: 'auto' | 'manual'; + level: Level; + reason: 'auto' | 'api' | 'initial choice'; + } + + interface EventParams { + adClick: AdProgressParam; + adCompanions: AdCompanionsParam; + adComplete: AdProgressParam; + adSkipped: AdProgressParam; + adError: AdErrorParam; + adRequest: AdRequestParam; + adSchedule: AdScheduleParam; + adStarted: AdStartedParam; + adImpression: AdImpressionParam; + adPlay: AdPlayParam; + adPause: AdPlayParam; + adTime: AdTimeParam; + meta: MetadataParam; + audioTracks: AudioTracksParam; + audioTrackChanged: AudioTrackChangedParam; + firstFrame: FirstFrameParam; + buffer: BufferParam; + bufferChange: BufferChangeParam; + captionsChanged: CaptionsChangedParam; + captionsList: CaptionsListParam; + controls: ControlsParam; + error: ErrorParam; + fullscreen: FullscreenParam; + idle: IdleParam; + levelsChanged: LevelsChangedParam; + mute: MuteParam; + volume: VolumeParam; + pause: PlayParam; + play: PlayParam; + playlist: PlaylistParam; + playlistItem: PlaylistItemParam; + ready: ReadyParam; + resize: ResizeParam; + visualQuality: VisualQualityParam; + levels: LevelsParam; + seek: SeekParam; + setupError: ErrorParam; + time: TimeParam; + } + + type NoParamEvent = 'adBlock' | 'beforeComplete' | 'complete' | 'beforePlay' | 'displayClick' | 'playlistComplete' + | 'seeked' | 'remove'; + + interface JWPlayer { + addButton(icon: string, label: string, handler: () => void, id: string): void; + getAudioTracks(): any[]; + getBuffer(): number; + getCaptionsList(): any[]; + getControls(): boolean; + getCurrentAudioTrack(): number; + getCurrentCaptions(): number; + getCurrentQuality(): number; + getDuration(): number; + getHeight(): number; + getFullscreen(): boolean; + getMute(): boolean; + getPlaylist(): any[]; + getPlaylistIndex(): number; + getPlaylistItem(index?: number): any; + getPosition(): number; + getQualityLevels(): any[]; + getRenderingMode(): string; + getSafeRegion(): Region; + getState(): string; + getVolume(): number; + getContainer(): HTMLElement; + getEnvironment(): Environment; + getWidth(): number; + getVisualQuality(): QualityLevel | undefined; + load(playlist: any[] | string): void; + on(event: TEvent, callback: EventCallback): void; + on(event: NoParamEvent, callback: () => void): void; + once(event: TEvent, callback: EventCallback): void; + once(event: NoParamEvent, callback: () => void): void; + off(event: keyof EventParams | NoParamEvent): void; + trigger(event: TEvent, args: EventParams[TEvent]): void; + trigger(event: NoParamEvent): void; + pause(state?: boolean): void; + play(state?: boolean): void; + playAd(tag: string): void; + playlistItem(index: number): void; + registerPlugin(id: string, target: string, jsPlugin: () => void, swfURL?: string): void; + remove(): void; + removeButton(id: string): void; + resize(width: number, height: number): void; + seek(position: number): void; + setControls(controls: boolean): void; + setCurrentAudioTrack(index: number): void; + setCurrentCaptions(index: number): void; + setCurrentQuality(index: number): void; + setFullscreen(state: boolean): void; + setMute(state?: boolean): void; + setup(options: any): JWPlayer; + setVolume(volume: number): void; + setCaptions(options: CaptionOptions): void; + stop(): void; + } + + interface JWPlayerStatic { + (query?: string | number | Element): JWPlayer; + key: string; + version: string; + } } -interface Browser { - chrome: boolean; - edge: boolean; - facebook: boolean; - firefox: boolean; - ie: boolean; - msie: boolean; - safari: boolean; - version: Version; -} - -interface OS { - android: boolean; - androidNative: boolean; // Android native browser - iOS: boolean; - mobile: boolean; - mac: boolean; - iPad: boolean; - iPhone: boolean; - windows: boolean; - version: Version; -} - -interface Features { - flash: boolean; - flashVersion: number; - iframe: boolean; -} - -interface Environment { - Browser: Browser; - OS: OS; - Features: Features; -} - -interface AdProgressParam { - client: 'vast' | 'googima'; - creativetype: string; - tag: string; -} - -interface AdCompanionsParam { - companions: any[]; - tag: string; -} - -interface AdErrorParam { - message: string; - tag: string; -} - -interface AdRequestParam { - adposition: 'pre' | 'mid' | 'post'; - client: 'vast' | 'googima'; - offset: 'pre' | 'mid' | 'post'; - tag: string; -} - -interface AdImpressionParam { - adposition: 'pre' | 'mid' | 'post'; - adsystem: string; - adtitle: string; - clickThroughUrl: string; - client: 'vast' | 'googima'; - creativetype: string; - linear: string; - mediafile: any; - tag: string; - vastversion: number; - wrapper: any[]; -} - -interface AdScheduleParam { - tag: string; - client: string; - adbreaks: object[]; -} - -interface AdStartedParam { - creativetype: string; - tag: string; -} - -interface AdPlayParam { - creativetype: string; - newstate: string; - oldstate: string; - tag: string; -} - -interface BufferParam { - newstate: string; - oldstate: string; - reason: 'loading' | 'complete' | 'stalled' | 'error'; -} - -interface BufferChangeParam { - duration: number; - bufferPercent: number; - position: number; - metadata: any; -} - -interface AdTimeParam { - client: 'vast' | 'googima'; - creativetype: string; - duration: number; - position: number; - sequence: number; - tag: string; -} - -interface AudioTracksParam { - levels: any[]; -} - -interface CaptionsChangedParam { - currentTrack: number; -} - -interface CaptionsListParam { - tracks: any[]; -} - -interface AudioTrackChangedParam { - currentTrack: number; -} - -interface MetadataParam { - metadata: any; -} - -interface ControlsParam { - controls: boolean; -} - -interface ErrorParam { - message: string; -} - -interface FullscreenParam { - fullscreen: boolean; -} - -interface IdleParam { - oldstate: 'buffering' | 'playing' | 'paused'; -} - -interface LevelsChangedParam { - currentQuality: number; -} - -interface MuteParam { - mute: boolean; -} - -interface VolumeParam { - volume: boolean; -} - -interface PlayParam { - oldstate: 'buffering' | 'playing'; - viewable: 0 | 1; -} - -interface PlaylistParam { - playlist: any[]; -} - -interface PlaylistItemParam { - index: number; - item: any; -} - -interface ReadyParam { - setupTime: number; - viewable: 0 | 1; -} - -interface ResizeParam { - width: number; - height: number; -} - -interface VisualQualityParam { - mode: string; - label: string; - reason: string; -} - -interface LevelsParam { - width: number; - levels: any[]; -} - -interface SeekParam { - position: number; - offset: number; -} - -interface TimeParam { - duration: number; - position: number; - viewable: 0 | 1; -} - -interface FirstFrameParam { - loadTime: number; - viewable: 0 | 1; -} - -type EventCallback = (param: T) => void; - -interface Region { - x: 0; // x and y will always be 0 according to https://developer.jwplayer.com/jw-player/docs/javascript-api-reference/#jwplayergetsaferegion - y: 0; - width: number; - height: number; -} - -interface CaptionOptions { - color: string; - fontSize: number; - fontFamily: string; - fontOpacity: number; - backgroundColor: string; - backgroundOpacity: number; - edgeStyle: string; - windowColor: string; - windowOpacity: number; -} - -interface Level { - bitrate: number; - height: number; - width: number; - label: string; -} - -interface QualityLevel { - mode: 'auto' | 'manual'; - level: Level; - reason: 'auto' | 'api' | 'initial choice'; -} - -interface EventParams { - adClick: AdProgressParam; - adCompanions: AdCompanionsParam; - adComplete: AdProgressParam; - adSkipped: AdProgressParam; - adError: AdErrorParam; - adRequest: AdRequestParam; - adSchedule: AdScheduleParam; - adStarted: AdStartedParam; - adImpression: AdImpressionParam; - adPlay: AdPlayParam; - adPause: AdPlayParam; - adTime: AdTimeParam; - meta: MetadataParam; - audioTracks: AudioTracksParam; - audioTrackChanged: AudioTrackChangedParam; - firstFrame: FirstFrameParam; - buffer: BufferParam; - bufferChange: BufferChangeParam; - captionsChanged: CaptionsChangedParam; - captionsList: CaptionsListParam; - controls: ControlsParam; - error: ErrorParam; - fullscreen: FullscreenParam; - idle: IdleParam; - levelsChanged: LevelsChangedParam; - mute: MuteParam; - volume: VolumeParam; - pause: PlayParam; - play: PlayParam; - playlist: PlaylistParam; - playlistItem: PlaylistItemParam; - ready: ReadyParam; - resize: ResizeParam; - visualQuality: VisualQualityParam; - levels: LevelsParam; - seek: SeekParam; - setupError: ErrorParam; - time: TimeParam; -} - -type NoParamEvent = 'adBlock' | 'beforeComplete' | 'complete' | 'beforePlay' | 'displayClick' | 'playlistComplete' - | 'seeked' | 'remove'; - -interface JWPlayer { - addButton(icon: string, label: string, handler: () => void, id: string): void; - getAudioTracks(): any[]; - getBuffer(): number; - getCaptionsList(): any[]; - getControls(): boolean; - getCurrentAudioTrack(): number; - getCurrentCaptions(): number; - getCurrentQuality(): number; - getDuration(): number; - getHeight(): number; - getFullscreen(): boolean; - getMute(): boolean; - getPlaylist(): any[]; - getPlaylistIndex(): number; - getPlaylistItem(index?: number): any; - getPosition(): number; - getQualityLevels(): any[]; - getRenderingMode(): string; - getSafeRegion(): Region; - getState(): string; - getVolume(): number; - getContainer(): HTMLElement; - getEnvironment(): Environment; - getWidth(): number; - getVisualQuality(): QualityLevel | undefined; - load(playlist: any[] | string): void; - on(event: TEvent, callback: EventCallback): void; - on(event: NoParamEvent, callback: () => void): void; - once(event: TEvent, callback: EventCallback): void; - once(event: NoParamEvent, callback: () => void): void; - off(event: keyof EventParams | NoParamEvent): void; - trigger(event: TEvent, args: EventParams[TEvent]): void; - trigger(event: NoParamEvent): void; - pause(state?: boolean): void; - play(state?: boolean): void; - playAd(tag: string): void; - playlistItem(index: number): void; - registerPlugin(id: string, target: string, jsPlugin: () => void, swfURL?: string): void; - remove(): void; - removeButton(id: string): void; - resize(width: number, height: number): void; - seek(position: number): void; - setControls(controls: boolean): void; - setCurrentAudioTrack(index: number): void; - setCurrentCaptions(index: number): void; - setCurrentQuality(index: number): void; - setFullscreen(state: boolean): void; - setMute(state?: boolean): void; - setup(options: any): JWPlayer; - setVolume(volume: number): void; - setCaptions(options: CaptionOptions): void; - stop(): void; -} - -interface JWPlayerStatic { - (query?: string | number | Element): JWPlayer; - key: string; - version: string; -} - -declare const jwplayer: JWPlayerStatic; +declare const jwplayer: jwplayer.JWPlayerStatic;