{"version":3,"file":"nextalys-youtube-player.mjs","sources":["../../src/lib/youtube-player/nxs-youtube-player.component.ts","../../src/lib/youtube-player/nxs-youtube-player.component.html","../../src/lib/youtube-player/nxs-youtube-player.module.ts","../../src/nextalys-youtube-player.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-namespace */\n/* eslint-disable max-len */\n/* eslint-disable no-underscore-dangle */\nimport { ViewEncapsulation, Component, Output, EventEmitter, Input, NgZone, Optional, Inject, PLATFORM_ID, ChangeDetectionStrategy, ViewChild, ElementRef, InjectionToken, ChangeDetectorRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { EventsCollector } from 'nextalys-js-helpers/dist/events';\nimport { BrowserLazyLoadingHelpers } from 'nextalys-js-helpers';\nimport { isPlatformBrowser } from '@angular/common';\n\n\nexport type YTVideoQuality = 'small' | 'medium' | 'large' | 'hd720' | 'hd1080' | 'highres' | 'default';\ninterface YoutubePlayerVars {\n    autoplay?: number;\n    controls?: number;\n    disablekb?: number;\n    fs?: number;\n    loop?: number;\n    rel?: number;\n    modestbranding?: number;\n    showinfo?: number;\n    playlist?: string;\n    color?: string;\n    playsinline?: number;\n    enablejsapi?: number;\n    origin?: string;\n    mute?: number;\n}\ndeclare namespace YT {\n    enum PlayerState {\n        PLAYING = 1,\n    }\n    class Player {\n        constructor(containerId: string,\n            options: {\n                playerVars?: YoutubePlayerVars,\n                height: string,\n                width: string,\n                videoId: string,\n                events?: {\n                    onReady: (evt: { target: YT.Player }) => void,\n                    onStateChange: (event: { target: any; data: number; }) => void,\n                }\n            });\n        seekTo(seconds: number, allowSeekAhead: boolean): void;\n        getVideoLoadedFraction(): number;\n        getDuration(): number;\n        getCurrentTime(): number;\n        playVideo(): void;\n        pauseVideo(): void;\n        mute();\n        unMute();\n        isMuted(): boolean;\n        getPlayerState(): number;\n        destroy();\n        setLoop(arg: boolean);\n        loadPlaylist(playlist: string | string[],\n            index: number,\n            startSeconds?: number,\n            suggestedQuality?: string);\n\n        setPlaybackQuality(quality: YTVideoQuality);\n\n    }\n}\nexport interface NxsYoutubePlayerOptions {\n    width?: string;\n    height?: string;\n    videoId?: string;\n    videos?: string[];\n    videosRandomOrder?: boolean;\n    playerVars?: YoutubePlayerVars;\n    playPauseEmitter?: Subject<boolean>;\n    swicthPlayPauseEmitter?: Subject<void>;\n    overlay?: boolean;\n    loadApi?: boolean;\n    mute?: boolean;\n    waitUntilVideoStartToShowPlayerDelay?: number;\n    quality?: YTVideoQuality;\n    delay?: number;\n}\nexport enum NxsYoutubePlayerState {\n    NotStarted = -1,\n    Stopped = 0,\n    Playing = 1,\n    Pause = 2,\n    Buffering = 3,\n    Queue = 5,\n}\ndeclare const global: any;\n\nconst YoutubeApiUrl = 'https://www.youtube.com/iframe_api';\n\nexport interface NxsYoutubePlayerModuleOptions {\n    debugMode?: boolean;\n}\nexport const NxsYoutubePlayerModuleOptionsInjectionToken: InjectionToken<NxsYoutubePlayerModuleOptions> = new InjectionToken<NxsYoutubePlayerModuleOptions>('NxsYoutubePlayerModuleOptions');\n\n@Component({\n    selector: 'nxs-youtube-player',\n    templateUrl: './nxs-youtube-player.component.html',\n    styles: [`\n    nxs-youtube-player\n    {\n        display:block;\n        width:100%;\n        height:100%;\n    }\n    .nxs-youtube-video-container{\n        overflow:hidden;\n        position:relative;\n      }\n      .nxs-youtube-video-container.nxs-youtube-video-hidden-controls iframe{\n        position: absolute;\n        top: -60px;\n        left: 0;\n        width: 100%;\n        height: calc(100% + 120px);\n      }\n    `],\n    //styleUrls: ['./nxs-youtube-player.component.scss']\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n\n})\nexport class NxsYoutubePlayerComponent {\n    public static YoutubeApiLoaded = false;\n    public static YoutubeApiLoadedEvent = new Subject<void>();\n    public static YoutubePlayersCount = 0;\n    private eventsCollector = new EventsCollector();\n    public options: NxsYoutubePlayerOptions;\n    private player: YT.Player;\n    private firstPlayRetries = 0;\n\n    @Input()\n    public hideYoutubeControls = true;\n\n    ytPlayerReady = false;\n    @Output()\n    onStateChangeEvent = new EventEmitter<NxsYoutubePlayerState>();\n\n    @Output()\n    onPlayerReady = new EventEmitter<YT.Player>();\n\n    @Input('options')\n    public set setOptions(val: NxsYoutubePlayerOptions) {\n        this.options = val;\n    }\n    // public set youtubeComponent(val: YoutubePlayerComponent) {\n    //     if (!val)\n    //         return;\n    //     if (NxsYoutubePlayerComponent.YoutubeApiLoaded && window && window['YT'] && window['YT']['Player'])\n    //         val.playerService.api.next((window as any)['YT']);\n    // }\n\n    public containerId: string;\n    private _isBrowser: boolean;\n\n    @Input()\n    useLiteYoutube = false;\n    @ViewChild('youtubeVideoWrapper')\n    youtubeVideoWrapper: ElementRef<HTMLDivElement>;\n    @ViewChild('loadingPlayerWrapper')\n    loadingPlayerWrapper: ElementRef<HTMLDivElement>;\n    private timeoutId: any;\n\n    constructor(\n        private ngZone: NgZone,\n        private cd: ChangeDetectorRef,\n        @Optional() @Inject(PLATFORM_ID) platformId?: any,\n        @Optional() @Inject(NxsYoutubePlayerModuleOptionsInjectionToken) private moduleOptions?: NxsYoutubePlayerModuleOptions,\n\n    ) {\n        this._isBrowser = false;\n        if (platformId != null) {\n            this._isBrowser = isPlatformBrowser(platformId);\n        }\n        // this._isBrowser =\n        //     platformId ? isPlatformBrowser(platformId) : typeof window === 'object' && !!window;\n        if (!this._isBrowser) {\n            this.log('not on browser - prevent construct yt player');\n            return;\n        }\n        NxsYoutubePlayerComponent.YoutubePlayersCount++;\n\n    }\n    ngOnInit() {\n        if (!this._isBrowser) {\n            this.log('not on browser - prevent ngOnInit yt player');\n            return;\n        }\n        if (this.useLiteYoutube) {\n\n        }\n        else {\n            const sub = NxsYoutubePlayerComponent.YoutubeApiLoadedEvent.subscribe(() => {\n                this.log('YoutubeApiLoadedEvent');\n                NxsYoutubePlayerComponent.YoutubeApiLoaded = true;\n                this.createYoutubeVideoPlayer();\n            });\n            this.eventsCollector.collect(sub);\n            this.containerId = 'nxs-youtube-player-' + NxsYoutubePlayerComponent.YoutubePlayersCount;\n            if (typeof global !== 'undefined') {\n                global.onYouTubeIframeAPIReady = () => {\n                    NxsYoutubePlayerComponent.YoutubeApiLoadedEvent.next();\n                };\n                if (!global['NxsYoutubePlayers'])\n                    global['NxsYoutubePlayers'] = [];\n            }\n            NxsYoutubePlayerComponent.YoutubeApiLoaded = (typeof (YT) !== 'undefined') && (typeof (YT.Player) !== 'undefined');\n        }\n    }\n    log(...args: any[]) {\n        if (!this.moduleOptions?.debugMode)\n            return;\n        console.log('[Nxs Youtube Player]', ...args);\n    }\n    private runInZone<T extends (...args: any[]) => void>(callback: T, ...args: any[]) {\n        if (!this.ngZone) {\n            callback(args);\n        }\n        return this.ngZone.run(() => callback(args));\n    }\n    ngAfterViewInit(): void {\n        if (!this._isBrowser) {\n            return;\n        }\n        if (this.timeoutId) {\n            clearTimeout(this.timeoutId);\n        }\n        if (this.options.delay) {\n            this.timeoutId = setTimeout(() => {\n                this.init();\n            }, this.options.delay);\n        }\n        else {\n            this.init();\n        }\n    }\n    private async init() {\n        if (!this._isBrowser) {\n            this.log('not on browser - prevent init yt player');\n            return;\n        }\n        if (this.useLiteYoutube) {\n\n        }\n        else {\n            if (!this.options)\n                this.options = { videoId: undefined };\n            if (typeof this.options.loadApi === 'undefined')\n                this.options.loadApi = true;\n            if (!this.options.width || !this.options.height) {\n                this.options.width = '640';\n                this.options.height = '360';\n            }\n            if (this.options.playPauseEmitter) {\n                const sub = this.options.playPauseEmitter.subscribe((val: boolean) => {\n                    this.playPauseVideo(val);\n                });\n                this.eventsCollector.collect(sub);\n            }\n            if (this.options.swicthPlayPauseEmitter) {\n                const sub = this.options.swicthPlayPauseEmitter.subscribe(() => {\n                    this.switchPlayPauseVideo();\n                });\n                this.eventsCollector.collect(sub);\n            }\n\n            if (!this.options.playerVars) {\n                this.options.playerVars = {};\n            }\n\n            if (this.options.videos && Array.isArray(this.options.videos)) {\n                let videosArray: string[] = [];\n                let index: number;\n                this.options.playerVars.playlist = '';\n                if (this.options.videosRandomOrder)\n                    index = Math.floor(Math.random() * this.options.videos.length);\n                else\n                    index = 0;\n                this.options.videoId = this.options.videos[index];\n                for (let i = index + 1; i < this.options.videos.length; i++) {\n                    videosArray.push(this.options.videos[i]);\n                }\n                for (let i = 0; i < index; i++) {\n                    videosArray.push(this.options.videos[i]);\n                }\n\n                this.options.playerVars.playlist = videosArray.join(',');\n            }\n            this.log(\"init function end - options :\", this.options);\n            if (this.options.loadApi) {\n                this.log(\"loading youtube script....\");\n                await BrowserLazyLoadingHelpers.loadScript(YoutubeApiUrl);\n                this.log(\"end loading youtube script.\");\n            }\n            this.createYoutubeVideoPlayer();\n        }\n\n    }\n    private showVideoWrapper() {\n        if (this.youtubeVideoWrapper?.nativeElement)\n            this.youtubeVideoWrapper.nativeElement.style.display = 'block';\n        if (this.loadingPlayerWrapper?.nativeElement) {\n            this.loadingPlayerWrapper.nativeElement.style.display = 'none';\n        }\n    }\n    setPlaybackQuality(quality: YTVideoQuality) {\n        this.player?.setPlaybackQuality(quality);\n    }\n    private createYoutubeVideoPlayer() {\n        this.log(\"createYoutubeVideoPlayer begins\");\n        if (this.player) {\n            this.log(\"createYoutubeVideoPlayer : player already created\");\n            return;\n        }\n        if (!NxsYoutubePlayerComponent.YoutubeApiLoaded) {\n            this.log(\"createYoutubeVideoPlayer : youtube api not loaded\");\n            return;\n        }\n        if (!this.options) {\n            this.log(\"createYoutubeVideoPlayer : options not provided\");\n            return;\n        }\n        if (!this.options.waitUntilVideoStartToShowPlayerDelay) {\n            this.showVideoWrapper();\n        }\n        if (this.options.mute)\n            this.options.playerVars.mute = 1;\n        this.player = this.ngZone.runOutsideAngular(() => new YT.Player(this.containerId, {\n            height: this.options.height,\n            width: this.options.width,\n            videoId: this.options.videoId,\n            playerVars: this.options.playerVars,\n            events: {\n                onReady: (evt) => {\n                    this.initPlayer(evt);\n                },\n                onStateChange: (ev: { target: any; data: number; }) => {\n                    if (ev && ev.data === 1 && !!this.options.waitUntilVideoStartToShowPlayerDelay) {\n                        setTimeout(() => {\n                            this.showVideoWrapper();\n                        }, this.options.waitUntilVideoStartToShowPlayerDelay);\n                    }\n                    if (ev?.data === YT.PlayerState.PLAYING && !!this.options?.quality) {\n                        ev?.target?.setPlaybackQuality(this.options.quality);\n                    }\n                    this.onStateChange(ev);\n                },\n            },\n        }));\n        if (typeof global !== 'undefined') {\n            if (typeof global['NxsYoutubePlayers'] === 'undefined')\n                global['NxsYoutubePlayers'] = [];\n            global['NxsYoutubePlayers'].push(this.player);\n        }\n\n    }\n\n    ngOnDestroy(): void {\n        this.eventsCollector.unsubscribeAll();\n        if (this.timeoutId) {\n            clearTimeout(this.timeoutId);\n        }\n        if (!this._isBrowser)\n            return;\n        if (!global['NxsYoutubePlayers'])\n            global['NxsYoutubePlayers'] = [];\n\n        const index = (global['NxsYoutubePlayers'] as YT.Player[]).findIndex(x => x === this.player);\n        if (index !== -1) {\n            (global['NxsYoutubePlayers'] as YT.Player[]).splice(index, 1);\n        }\n        if (this.player) {\n            this.player.destroy();\n        }\n\n    }\n    onStateChange(event: { target: any; data: NxsYoutubePlayerState; }) {\n        this.runInZone(() => {\n            this.log(\"onStateChange\", event.data);\n            this.onStateChangeEvent.emit(event.data);\n        });\n    }\n\n    initPlayer(evt: { target: YT.Player }) {\n        this.log(\"initPlayer begins\");\n        if (evt && evt.target && evt.target.mute && this.options.mute) {\n            //init mute\n            evt.target.mute();\n        }\n        if (!NxsYoutubePlayerComponent.YoutubeApiLoaded || !this.player || !this.options || !this.options.videoId\n            || !this.player.getPlayerState)\n            return;\n        this.log(\"youtube player received with js api\");\n        if (this.options.playerVars.loop && this.options.playerVars.loop === 1)\n            this.player.setLoop(true);\n        if (this.options.playerVars.autoplay && this.options.playerVars.autoplay === 1) {\n            // this.firstPlayVideoRetry();\n            this.playVideoIfNeeded(true);\n        }\n        this.runInZone(() => {\n            this.onPlayerReady.next(this.player);\n            // this.ytPlayerReady = true;\n            // this.cd?.markForCheck();\n            // console.log(\"Log ~ file: nxs-youtube-player.component.ts:393 ~ NxsYoutubePlayerComponent ~ this.runInZone ~  this.ytPlayerReady:\", this.ytPlayerReady);\n        });\n\n    }\n    isMuted() {\n        return this.player?.isMuted();\n    }\n    muteOrUnMute(mute: boolean) {\n        try {\n            if (mute && !this.player.isMuted())\n                this.player.mute();\n            else if (this.player.isMuted() && !mute)\n                this.player.unMute();\n        }\n        catch (err) {\n\n        }\n    }\n    switchMuteState() {\n        try {\n            if (!this.player.isMuted())\n                this.player.mute();\n            else\n                this.player.unMute();\n        }\n        catch (err) {\n\n        }\n    }\n    firstPlayVideoRetry() {\n        if (this.firstPlayRetries >= 25)\n            return;\n        console.log('firstPlayVideoRetry');\n        this.player.playVideo();\n        setTimeout(() => {\n            this.firstPlayVideoRetry();\n            this.firstPlayRetries++;\n        }, 100);\n    }\n\n\n    playVideoIfNeeded(retryUntilPlay: boolean) {\n        if (!this.player)\n            return;\n        try {\n            const state = this.player?.getPlayerState();\n            if (typeof state !== 'undefined' && state !== 1) {\n                this.player?.playVideo();\n                if (retryUntilPlay) {\n                    setTimeout(() => {\n                        this.playVideoIfNeeded(true);\n                    }, 100);\n                }\n            }\n            else\n                this.muteOrUnMute(this.options.mute);\n        }\n        catch (err) {\n\n        }\n\n    }\n\n    pauseVideo() {\n        if (!this.player?.pauseVideo)\n            return;\n        this.player?.pauseVideo();\n    }\n    playVideo() {\n        if (!this.player?.playVideo)\n            return;\n        this.player?.playVideo();\n    }\n    switchPlayPauseVideo() {\n        if (!this.player?.getPlayerState)\n            return;\n        const state = this.player.getPlayerState();\n        if (state === -1 || state === 0 || state === 2 || state === 5)\n            this.player.playVideo();\n        else\n            this.player.pauseVideo();\n    }\n\n    playPauseVideo(play: boolean) {\n        if (!this.player || !this.player.playVideo)\n            return;\n        if (play)\n            this.player.playVideo();\n        else\n            this.player.pauseVideo();\n\n    }\n    isPlaying() {\n        return this.getPlayerState() === 1;\n    }\n    isOnPause() {\n        return this.getPlayerState() === 2;\n    }\n    isStopped() {\n        return this.getPlayerState() === 0;\n    }\n    getCurrentTime() {\n        if (!this.player?.getCurrentTime)\n            return 0;\n        return this.player?.getCurrentTime();\n    }\n\n    getDuration() {\n        if (!this.player?.getDuration)\n            return 0;\n        return this.player?.getDuration();\n    }\n    getVideoLoadedFraction() {\n        if (!this.player?.getVideoLoadedFraction)\n            return 0;\n        return this.player?.getVideoLoadedFraction();\n    }\n    /**\n    * Cette fonction permet d'avancer à un moment spécifié d'une vidéo. Si elle est appelée alors que le lecteur est en pause, celui-ci reste en pause. Si elle est appelée alors que le lecteur est dans un autre état (playing, video cued, etc.), la lecture de la vidéo démarre.\n     * @param seconds Le paramètre seconds identifie le moment de la vidéo auquel le lecteur doit avancer.\n\nSi le lecteur n'a pas encore téléchargé la partie de la vidéo que l'utilisateur souhaite atteindre, le lecteur avance jusqu'à l'image clé la plus proche avant le moment défini. Dans le cas contraire, le lecteur avance jusqu'à l'image clé la plus proche avant ou après le moment défini, comme le veut la méthode seek() de l'objet NetStream du lecteur Flash. (Pour en savoir plus, consultez la documentation d'Adobe.)\n     * @param allowSeekAhead Le paramètre allowSeekAhead détermine si le lecteur envoie une nouvelle requête au serveur lorsque le paramètre seconds définit un moment ne figurant pas dans les données vidéo déjà mises en mémoire tampon.\n\nNous vous recommandons de définir ce paramètre sur false lorsque l'utilisateur fait glisser avec la souris le curseur de la barre de progression d'une vidéo, puis de le définir sur true lorsque l'utilisateur relâche le bouton de la souris. Cette méthode permet aux utilisateurs de faire défiler une vidéo sans demander de nouveaux flux vidéo en accédant aux parties précédentes non mises en mémoire tampon de la vidéo. Lorsque l'utilisateur relâche le bouton de la souris, le lecteur avance la le\n     */\n    seekTo(seconds: number, allowSeekAhead: boolean) {\n        if (!this.player?.seekTo)\n            return;\n        this.player?.seekTo(seconds, allowSeekAhead);\n    }\n\n\n\n    /**\n     * -1 : non démarré\n        0 : arrêté\n        1 : en lecture\n        2 : en pause\n        3 : en mémoire tampon\n        5 : en file d'attente\n     */\n    getPlayerState(): -1 | 0 | 1 | 2 | 3 | 5 {\n        if (!this.player?.getPlayerState)\n            return -1;\n        return this.player?.getPlayerState() as any;\n    }\n\n    unMute() {\n        if (!this.player?.unMute)\n            return;\n        this.player?.unMute();\n    }\n    mute() {\n        if (!this.player?.mute)\n            return;\n        this.player?.mute();\n    }\n}\n\n\n\n","<div *ngIf=\"!useLiteYoutube && options && containerId\" #youtubeVideoWrapper style=\"display: none;\"\n    [ngClass]=\"{'nxs-youtube-video-container':true,'nxs-youtube-video-hidden-controls':hideYoutubeControls}\"\n    [style.width]=\"options.width\" [style.height]=\"options.height\">\n    <div [id]=\"containerId\"></div>\n    <div style=\"position: absolute;top:0;right:0;left:0;bottom:0\" [style.display]=\"options.overlay ? '':'none'\"></div>\n</div>\n\n\n<div #loadingPlayerWrapper>\n    <ng-content>\n\n    </ng-content>\n</div>\n\n\n<!-- <div *ngIf=\"useLiteYoutube && options\"\n    [ngClass]=\"{'nxs-youtube-video-container':true,'nxs-youtube-video-hidden-controls':hideYoutubeControls}\"\n    [style.width]=\"options.width\" [style.height]=\"options.height\">\n    <lite-youtube [attr.videoid]=\"options.videoId\"\n        params=\"controls=0&modestbranding=2&rel=0&enablejsapi=1&autoplay=1\"></lite-youtube>\n    <lite-youtube videoid=\"9uAJFo9fn7s\"\n        params=\"controls=0&start=10&end=30&modestbranding=2&rel=0&enablejsapi=1&autoplay=1\"></lite-youtube>\n\n    <div style=\"position: absolute;top:0;right:0;left:0;bottom:0\" [style.display]=\"options.overlay ? '':'none'\"></div>\n</div> -->","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NxsYoutubePlayerComponent, NxsYoutubePlayerModuleOptions, NxsYoutubePlayerModuleOptionsInjectionToken } from './nxs-youtube-player.component';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule,\n    ],\n    declarations: [\n        NxsYoutubePlayerComponent\n    ],\n    providers: [],\n    exports: [NxsYoutubePlayerComponent],\n})\nexport class NxsYoutubePlayerModule {\n    constructor() {\n    }\n\n    public static forRoot(opts?: NxsYoutubePlayerModuleOptions): ModuleWithProviders<NxsYoutubePlayerModule> {\n        return {\n            ngModule: NxsYoutubePlayerModule,\n            providers: [\n                { provide: NxsYoutubePlayerModuleOptionsInjectionToken, useValue: opts },\n            ],\n        };\n    }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}