{"version":3,"file":"adjai-ngx-library-src-lib-yplayer.mjs","sources":["../../../projects/ngx-library/src/lib/yplayer/yplayer.service.ts","../../../projects/ngx-library/src/lib/yplayer/yplayer.component.ts","../../../projects/ngx-library/src/lib/yplayer/yplayer.component.html","../../../projects/ngx-library/src/lib/yplayer/yplayer.module.ts","../../../projects/ngx-library/src/lib/yplayer/adjai-ngx-library-src-lib-yplayer.ts"],"sourcesContent":["import {Injectable, RendererFactory2} from '@angular/core';\r\nimport {interval, Subject, Subscription} from \"rxjs\";\r\n\r\nexport enum PlayerState {\r\n  UNSTARTED = -1,\r\n  ENDED = 0,\r\n  PLAYING = 1,\r\n  PAUSED = 2,\r\n  BUFFERING = 3,\r\n  CUED = 5,\r\n}\r\n\r\nexport interface VideoState {\r\n  id: string\r\n  position: number\r\n}\r\n\r\nexport interface YPlayerSaveInfo {\r\n  position: number\r\n  progress: number\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class YplayerService {\r\n  playEvent$: Subject<VideoState> = new Subject()\r\n  pauseEvent$: Subject<void> = new Subject<void>()\r\n  playPauseEvent$: Subject<void> = new Subject<void>()\r\n  stopEvent$: Subject<void> = new Subject<void>()\r\n  closePopup$: Subject<void> = new Subject<void>()\r\n  timeline$ = new Subject<number>()\r\n  isScriptInitialized = false\r\n  player: any\r\n  playingId = ''\r\n  isPlaying = false\r\n  private autoSavePositionInterval = 10000\r\n  private autoSavePositionSubscription: Subscription | undefined\r\n  stateChanged$ = new Subject<PlayerState>()\r\n  savePosition$ = new Subject<YPlayerSaveInfo>()\r\n\r\n  constructor(\r\n    private rendererFactory2: RendererFactory2,\r\n  ) {\r\n    this.stateChanged$.subscribe(state => {\r\n      this.isPlaying = state === PlayerState.PLAYING || state === PlayerState.BUFFERING\r\n      if (this.isPlaying && this.autoSavePositionSubscription === undefined) {\r\n        this.startAutoSavePosition()\r\n      }\r\n      if (state === PlayerState.PAUSED || state === PlayerState.ENDED) {\r\n        this.stopAutoSavePosition()\r\n        this.savePosition()\r\n      } else if (state === PlayerState.CUED) {\r\n        this.stopAutoSavePosition()\r\n      }\r\n    })\r\n\r\n    const renderer = this.rendererFactory2.createRenderer(null, null);\r\n    renderer.listen('window', 'beforeunload', (evt) => {\r\n      if (this.isPlaying) {\r\n        this.savePosition()\r\n      }\r\n    });\r\n  }\r\n\r\n  savePosition() {\r\n    const position = Math.floor(this.getPosition())\r\n    const progress = this.getProgress()\r\n    if (progress !== -1 && progress !== -1) {\r\n      this.savePosition$.next({\r\n        position,\r\n        progress,\r\n      })\r\n    }\r\n    /*const duration = this.getDuration()\r\n    const position = Math.floor(this.getPosition())\r\n    if (duration !== -1 && position !== -1) {\r\n      const progress = Math.round(100 * (duration ? (duration - position <= 1 ? 100 : (100 * position / duration)) : 0)) / 100\r\n      this.savePosition$.next({\r\n        position,\r\n        progress,\r\n      })\r\n    }*/\r\n  }\r\n\r\n  private startAutoSavePosition() {\r\n    if (this.autoSavePositionInterval > 0) {\r\n      this.autoSavePositionSubscription = interval(this.autoSavePositionInterval).subscribe(this.savePosition.bind(this))\r\n    }\r\n  }\r\n\r\n  private stopAutoSavePosition() {\r\n    if (this.autoSavePositionSubscription !== undefined) {\r\n      this.autoSavePositionSubscription?.unsubscribe()\r\n      this.autoSavePositionSubscription = undefined\r\n    }\r\n  }\r\n\r\n  setAutoSavePositionInterval(interval: number) {\r\n    this.autoSavePositionInterval = interval\r\n  }\r\n\r\n  stateChanged(event: any) {\r\n    this.stateChanged$.next(event.data)\r\n  }\r\n\r\n  play(state: VideoState | undefined = undefined) {\r\n    this.playingId = state ? state.id : ''\r\n    this.playEvent$.next(state)\r\n    this.startAutoSavePosition()\r\n  }\r\n\r\n  pause() {\r\n    this.pauseEvent$.next()\r\n  }\r\n\r\n  playPause() {\r\n    this.playPauseEvent$.next()\r\n  }\r\n\r\n  stop() {\r\n    this.savePosition()\r\n    this.stopEvent$.next()\r\n    this.playingId = ''\r\n  }\r\n\r\n  setPlayer(player: any) {\r\n    if (player === undefined) {\r\n      this.savePosition()\r\n      this.isPlaying = false\r\n      this.playingId = ''\r\n    }\r\n    this.player = player\r\n  }\r\n\r\n  getPosition(): number {\r\n    return this.player === undefined ? -1 : this.player.getCurrentTime()\r\n  }\r\n\r\n  getDuration(): number {\r\n    return this.player === undefined ? -1 : this.player.getDuration()\r\n  }\r\n\r\n  getProgress(): number {\r\n    const duration = this.getDuration()\r\n    const position = Math.floor(this.getPosition())\r\n    if (duration !== -1 && position !== -1) {\r\n      return Math.round(100 * (duration ? (duration - position <= 1 ? 100 : (100 * position / duration)) : 0)) / 100\r\n    } else {\r\n      return -1\r\n    }\r\n  }\r\n\r\n  getPlayer() {\r\n    return this.player\r\n  }\r\n\r\n}\r\n","import {\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport {PlayerState, VideoState, YPlayerSaveInfo, YplayerService} from \"./yplayer.service\";\r\nimport {interval, Observable, Subscription} from \"rxjs\";\r\nimport {distinctUntilChanged, map} from \"rxjs/operators\";\r\n\r\ndeclare global {\r\n  interface Window {\r\n    YT: any;\r\n    onYouTubeIframeAPIReady: (() => void) | undefined;\r\n  }\r\n}\r\n\r\ninterface PlayerSize {\r\n  width: number,\r\n  height: number,\r\n}\r\n\r\n@Component({\r\n  selector: 'mx-yplayer',\r\n  templateUrl: './yplayer.component.html',\r\n  styleUrls: ['./yplayer.component.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class YplayerComponent implements OnInit, OnDestroy {\r\n  @ViewChild('playerElementRef', {static: false}) playerElementRef!: ElementRef\r\n  @Output('onStateChange') onStateChange: EventEmitter<PlayerState> = new EventEmitter<PlayerState>()\r\n  @Output('onBeforeDestroyPlayer') onBeforeDestroyPlayer: EventEmitter<void> = new EventEmitter<void>()\r\n  @Input('playerSize') playerSize: PlayerSize = {width: 640, height: 360}\r\n  @Input('responsive') responsive = true\r\n  @Input('autoSavePositionInterval') autoSavePositionInterval: number | undefined\r\n  @Input('isPopup') isPopup = false\r\n  @Output('onSavePosition') onSavePosition: EventEmitter<YPlayerSaveInfo> = new EventEmitter<YPlayerSaveInfo>()\r\n  private registeredSubscriptions = new Subscription()\r\n  isPlayerReady = false\r\n  isLoading = false\r\n  private player: any\r\n  private videoState: VideoState | undefined = undefined\r\n  private playerState: PlayerState = -1\r\n  private timelineInterval: Subscription | undefined\r\n  private isPlayerInitialized = false\r\n  isPopupActive = false\r\n\r\n  constructor(\r\n    private yplayerService: YplayerService,\r\n  ) {\r\n    if (this.autoSavePositionInterval !== undefined) {\r\n      this.yplayerService.setAutoSavePositionInterval(this.autoSavePositionInterval)\r\n    }\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.registeredSubscriptions.add(this.yplayerService.playEvent$.subscribe(state => {\r\n      this.play(state)\r\n    }))\r\n\r\n    this.registeredSubscriptions.add(this.yplayerService.pauseEvent$.subscribe(() => {\r\n      this.pause()\r\n    }))\r\n\r\n    this.registeredSubscriptions.add(this.yplayerService.playPauseEvent$.subscribe(() => {\r\n      this.playPause()\r\n    }))\r\n\r\n    this.registeredSubscriptions.add(this.yplayerService.stopEvent$.subscribe(() => {\r\n      this.stop()\r\n    }))\r\n\r\n    this.registeredSubscriptions.add(this.yplayerService.stateChanged$.subscribe(this.onPlayerStateChange.bind(this)))\r\n    this.registeredSubscriptions.add(this.yplayerService.savePosition$.subscribe(saveInfo => {\r\n      this.onSavePosition.emit(saveInfo)\r\n    }))\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.yplayerService.setPlayer(undefined)\r\n    this.onBeforeDestroyPlayer.emit()\r\n    this.registeredSubscriptions.unsubscribe()\r\n  }\r\n\r\n  stop() {\r\n    if (this.isPlayerReady) {\r\n      this.player.stopVideo()\r\n    }\r\n  }\r\n\r\n  playPause() {\r\n    if (this.isPlayerReady) {\r\n      const playerState: PlayerState = this.player.getPlayerState()\r\n      if (playerState === PlayerState.PAUSED) {\r\n        this.player.playVideo()\r\n      } else if (playerState === PlayerState.ENDED) {\r\n        this.player.stopVideo()\r\n        this.player.playVideo()\r\n      } else {\r\n        this.player.pauseVideo()\r\n      }\r\n    }\r\n  }\r\n\r\n  play(state: VideoState) {\r\n    this.isPopupActive = true\r\n    if (state !== undefined) {\r\n      this.videoState = state\r\n    }\r\n    if (!this.yplayerService.isScriptInitialized) {\r\n      this.yplayerService.isScriptInitialized = true\r\n      const tag = document.createElement('script');\r\n      tag.src = 'https://www.youtube.com/iframe_api';\r\n      document.body.appendChild(tag);\r\n      window.onYouTubeIframeAPIReady = this.apiReady.bind(this)\r\n    } else if (this.isPlayerInitialized) {\r\n      if (this.isPlayerReady) {\r\n        if (state === undefined) {\r\n          this.player.playVideo()\r\n        } else {\r\n          this.player.loadVideoById(state.id, state.position)\r\n        }\r\n      }\r\n    } else {\r\n      this.apiReady()\r\n    }\r\n  }\r\n\r\n  pause(): void {\r\n    if (this.isPlayerReady) {\r\n      this.player.pauseVideo();\r\n    }\r\n  }\r\n\r\n  apiReady() {\r\n    this.player = new window['YT'].Player(this.playerElementRef.nativeElement, {\r\n      height: this.playerSize.height,\r\n      width: this.playerSize.width,\r\n      /*videoId: this.id,*/\r\n      events: {\r\n        'onReady': this.playerReady.bind(this),\r\n        /*'onStateChange': this.onPlayerStateChange.bind(this)*/\r\n        'onStateChange': this.yplayerService.stateChanged.bind(this.yplayerService),\r\n      },\r\n      playerVars: {\r\n        controls: 1,\r\n        fs: 1,\r\n        iv_load_policy: 3,\r\n        modestbranding: 1,\r\n        rel: 0,\r\n        showinfo: 0,\r\n      },\r\n    });\r\n    this.yplayerService.setPlayer(this.player)\r\n    this.isPlayerInitialized = true\r\n  }\r\n\r\n  playerReady(): void {\r\n    this.isPlayerReady = true\r\n    this.player.loadVideoById(this.videoState?.id, this.videoState?.position)\r\n  }\r\n\r\n  onPlayerStateChange(state: PlayerState) {\r\n    if (this.playerState === PlayerState.PLAYING && state !== PlayerState.PLAYING) {\r\n      this.onFinishPlaying()\r\n    } else if (this.playerState !== PlayerState.PLAYING && state === PlayerState.PLAYING) {\r\n      this.onStartPlaying()\r\n    }\r\n    if (state === 0) {\r\n      this.yplayerService.timeline$.next(-1)\r\n    }\r\n    this.playerState = state\r\n    this.isLoading = this.playerState === PlayerState.UNSTARTED || this.playerState === PlayerState.CUED\r\n    this.onStateChange.emit(state)\r\n  }\r\n\r\n  onStartPlaying() {\r\n    this.timelineInterval = interval(500).pipe(\r\n      map(() => Math.floor(this.player.getCurrentTime())),\r\n      distinctUntilChanged(),\r\n    ).subscribe(time => {\r\n      this.yplayerService.timeline$.next(time)\r\n    })\r\n    this.registeredSubscriptions.add(this.timelineInterval)\r\n  }\r\n\r\n  onFinishPlaying() {\r\n    if (this.timelineInterval) {\r\n      this.registeredSubscriptions.remove(this.timelineInterval);\r\n      this.timelineInterval.unsubscribe()\r\n    }\r\n  }\r\n\r\n  closePopup() {\r\n    this.yplayerService.stop()\r\n    this.yplayerService.closePopup$.next()\r\n    this.isPopupActive = false\r\n  }\r\n}\r\n","<div *ngIf=\"!isPopup\" class=\"yplayer-wrapper\" [class.responsive]=\"responsive\">\r\n  <div #playerElementRef></div>\r\n</div>\r\n<div class=\"popup\" *ngIf=\"isPopup\" [class.active]=\"isPopupActive\">\r\n  <div class=\"close\" (click)=\"closePopup()\">\r\n    <div class=\"icon\"></div>\r\n  </div>\r\n  <div class=\"win\">\r\n    <div class=\"yplayer-wrapper\" [class.responsive]=\"responsive\">\r\n      <div #playerElementRef></div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { YplayerComponent } from './yplayer.component';\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    YplayerComponent\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ],\r\n  exports: [\r\n    YplayerComponent\r\n  ],\r\n})\r\nexport class YplayerModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.YplayerService"],"mappings":"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"}