{"version":3,"file":"hercilio-ngx-youtube-player.mjs","sources":["../../../projects/ngx-youtube-player/src/lib/ngx-youtube-player.service.ts","../../../projects/ngx-youtube-player/src/lib/ngx-youtube-player.component.ts","../../../projects/ngx-youtube-player/src/lib/ngx-youtube-player.module.ts","../../../projects/ngx-youtube-player/src/public_api.ts","../../../projects/ngx-youtube-player/src/hercilio-ngx-youtube-player.ts"],"sourcesContent":["import { Injectable, NgZone } from \"@angular/core\";\nimport { ReplaySubject } from \"rxjs\";\nimport { IPlayerApiScriptOptions, IPlayerOutputs, IPlayerSize } from \"./models\";\n\nexport function win() {\n  return window;\n}\n\nexport function YouTubeRef(): any {\n  return win()[\"YT\"] as any;\n}\n\nexport function YouTubePlayerRef() {\n  return YouTubeRef().Player as any;\n}\n\nexport const defaultSizes = {\n  height: 270,\n  width: 367,\n};\n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class YoutubePlayerService {\n  api: ReplaySubject<YT.Player>;\n\n  static ytApiLoaded = false;\n\n  constructor(private zone: NgZone) {\n    this.api = new ReplaySubject(1);\n    this.createApi();\n  }\n\n  loadPlayerApi(options: IPlayerApiScriptOptions) {\n    const doc = win().document;\n    if (!YoutubePlayerService[\"ytApiLoaded\"]) {\n      YoutubePlayerService.ytApiLoaded = true;\n      const playerApiScript = doc.createElement(\"script\");\n      playerApiScript.type = \"text/javascript\";\n      playerApiScript.src = `${options.protocol}://www.youtube.com/iframe_api`;\n      doc.body.appendChild(playerApiScript);\n    }\n  }\n\n  setupPlayer(\n    elementId: string,\n    outputs: IPlayerOutputs,\n    sizes: IPlayerSize,\n    videoId = \"\",\n    playerVars: YT.PlayerVars\n  ) {\n    const createPlayer = () => {\n      if (YouTubePlayerRef) {\n        this.createPlayer(elementId, outputs, sizes, videoId, playerVars);\n      }\n    };\n    this.api.subscribe(createPlayer);\n  }\n\n  play(player: YT.Player) {\n    player.playVideo();\n  }\n\n  pause(player: YT.Player) {\n    player.pauseVideo();\n  }\n\n  playVideo(media: any, player: YT.Player) {\n    const id = media.id.videoId ? media.id.videoId : media.id;\n    player.loadVideoById(id);\n    this.play(player);\n  }\n\n  isPlaying(player: YT.Player) {\n    // because YT is not loaded yet 1 is used - YT.PlayerState.PLAYING\n    const isPlayerReady: any = player && player.getPlayerState;\n    const playerState = isPlayerReady ? player.getPlayerState() : {};\n    const isPlayerPlaying = isPlayerReady\n      ? playerState !== YouTubeRef().PlayerState.ENDED &&\n        playerState !== YouTubeRef().PlayerState.PAUSED\n      : false;\n    return isPlayerPlaying;\n  }\n\n  createPlayer(\n    elementId: string,\n    outputs: IPlayerOutputs,\n    sizes: IPlayerSize,\n    videoId = \"\",\n    playerVars: YT.PlayerVars = {}\n  ) {\n    const playerSize = {\n      height: sizes.height || defaultSizes.height,\n      width: sizes.width || defaultSizes.width,\n    };\n    const ytPlayer = YouTubePlayerRef();\n    return new ytPlayer(elementId, {\n      ...playerSize,\n      events: {\n        onReady: (ev: YT.PlayerEvent) => {\n          this.zone.run(() => outputs.ready && outputs.ready.next(ev.target));\n        },\n        onStateChange: (ev: YT.PlayerEvent) => {\n          this.zone.run(() => outputs.change && outputs.change.next(ev));\n        },\n      },\n      playerVars,\n      videoId,\n    });\n  }\n\n  toggleFullScreen(\n    player: YT.Player,\n    isFullScreen: boolean | null | undefined\n  ) {\n    let { height, width } = defaultSizes;\n\n    if (!isFullScreen) {\n      height = window.innerHeight;\n      width = window.innerWidth;\n    }\n    player.setSize(width, height);\n  }\n\n  // adpoted from uid\n  generateUniqueId(): string {\n    const len = 7;\n    return Math.random().toString(35).substr(2, len);\n  }\n\n  private createApi() {\n    const onYouTubeIframeAPIReady = () => {\n      if (win()) {\n        win()[\"onYouTubeIframeAPIReadyCalled\"] = true;\n        this.api.next();\n      }\n    };\n    win()[\"onYouTubeIframeAPIReady\"] = onYouTubeIframeAPIReady;\n    /**\n     * If onYouTubeIframeAPIReady is called in other place, then just trigger next\n     * This is to prevent player not initializing issue when another player got initialized in other place\n     */\n    if (win()[\"onYouTubeIframeAPIReadyCalled\"]) {\n      this.api.next();\n    }\n  }\n}\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  Renderer2,\n  SimpleChanges\n} from '@angular/core';\nimport {\n  YoutubePlayerService,\n  defaultSizes\n} from './ngx-youtube-player.service';\n\n@Component({\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  selector: 'youtube-player',\n  template: `\n    <div id=\"yt-player-ngx-component\"></div>\n  `\n})\nexport class YoutubePlayerComponent implements AfterContentInit {\n  @Input() videoId = '';\n  @Input() height = defaultSizes.height;\n  @Input() width = defaultSizes.width;\n  /**\n   * @description sets the protocol by the navigator object\n   * if there is no window, it sets a default http protocol\n   * unless the protocol is set from outside\n   */\n  @Input() protocol: string = this.getProtocol();\n  @Input() playerVars: YT.PlayerVars = {};\n\n  // player created and initialized - sends instance of the player\n  @Output() ready = new EventEmitter<YT.Player>();\n  // state change: send the YT event with its state\n  @Output() change = new EventEmitter<YT.PlayerEvent>();\n\n  constructor(\n    public playerService: YoutubePlayerService,\n    private elementRef: ElementRef,\n    private renderer: Renderer2\n  ) {}\n\n  ngAfterContentInit() {\n    const htmlId = this.playerService.generateUniqueId();\n    const playerSize = { height: this.height, width: this.width };\n    const container = this.renderer.selectRootElement(\n      '#yt-player-ngx-component'\n    );\n    this.renderer.setAttribute(container, 'id', htmlId);\n    this.playerService.loadPlayerApi({\n      protocol: this.protocol\n    });\n    this.playerService.setupPlayer(\n      htmlId,\n      {\n        change: this.change,\n        ready: this.ready\n      },\n      playerSize,\n      this.videoId,\n      this.playerVars\n    );\n  }\n\n  getProtocol() {\n    const hasWindow = window && window.location;\n    const protocol = hasWindow\n      ? window.location.protocol.replace(':', '')\n      : 'http';\n    return protocol;\n  }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { YoutubePlayerComponent } from './ngx-youtube-player.component';\nimport { YoutubePlayerService } from './ngx-youtube-player.service';\n\n@NgModule({\n  declarations: [YoutubePlayerComponent],\n  imports: [],\n  providers: [YoutubePlayerService],\n  exports: [YoutubePlayerComponent]\n})\nexport class NgxYoutubePlayerModule {\n  static forRoot(): ModuleWithProviders<NgxYoutubePlayerModule> {\n    return {\n      ngModule: NgxYoutubePlayerModule,\n      providers: [YoutubePlayerService]\n    };\n  }\n}\n","/*\n * Public API Surface of ngx-youtube-player\n */\n\nexport * from './lib/ngx-youtube-player.service';\nexport * from './lib/ngx-youtube-player.component';\nexport * from './lib/ngx-youtube-player.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.YoutubePlayerService"],"mappings":"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"}