{"version":3,"file":"ion-video-player.mjs","sources":["../../../projects/ion-video-player/src/lib/pipes/seconds-to-hours.pipe.ts","../../../projects/ion-video-player/src/lib/ion-video-player.component.ts","../../../projects/ion-video-player/src/lib/ion-video-player.html","../../../projects/ion-video-player/src/lib/ion-video-player.module.ts","../../../projects/ion-video-player/src/public-api.ts","../../../projects/ion-video-player/src/ion-video-player.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'secondsToHours'\n})\nexport class SecondsToHoursPipe implements PipeTransform {\n\n    transform(value: number): string {\n        return new Date(value * 1000).toISOString().substring(11, 19);\n    }\n\n}","import { Component, OnChanges, ViewChild, ElementRef, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n  selector: 'ion-video-player',\n  templateUrl: 'ion-video-player.html',\n  styleUrls: ['ion-video-player.scss']\n})\nexport class IonVideoPlayerComponent implements OnChanges {\n  // Get a handle to the player\n  @ViewChild('playerContainer') playerContainer!: ElementRef;\n  @ViewChild('player') videoPlayer!: ElementRef;\n  @ViewChild('progressBar') progressBar!: ElementRef;\n  @ViewChild('volumeBar') volumeBar!: ElementRef;\n\n  isPlaying: boolean = false;\n  volume: number = 100;\n\n  //Input options\n  @Input() options!: {\n    src: string;\n    type: string;\n    poster: string;\n    autoplay: boolean;\n    muted: boolean;\n    controls: boolean\n  };\n\n  //Output Events\n  @Output() play = new EventEmitter<any>();\n  @Output() pause = new EventEmitter<any>();\n  @Output() ended = new EventEmitter<any>();\n  @Output() volumechange = new EventEmitter<any>();\n  @Output() playing = new EventEmitter<any>();\n  @Output() error = new EventEmitter<any>();\n\n  ngOnChanges() {\n  }\n\n  setVolume() {\n    if (this.volumeBar.nativeElement.value == '100') {\n      this.volume = 1;\n    } else {\n      this.volume = parseFloat('0.' + (this.volumeBar.nativeElement.value));\n    }\n    this.videoPlayer.nativeElement.volume = this.volume;\n  }\n\n  playPauseVideo() {\n    if (this.videoPlayer.nativeElement.paused || this.videoPlayer.nativeElement.ended) {\n      // Change the button to a pause button\n      this.videoPlayer.nativeElement.play();\n      this.isPlaying = true;\n    }\n    else {\n      // Change the button to a play button\n      this.videoPlayer.nativeElement.pause();\n      this.isPlaying = false;\n    }\n  }\n\n  // Stop the current media from playing, and return it to the start position\n  stopVideo() {\n    this.videoPlayer.nativeElement.pause();\n    this.isPlaying = false;\n    if (this.videoPlayer.nativeElement.currentTime) this.videoPlayer.nativeElement.currentTime = 0;\n  }\n\n  // Toggles the media player's mute and unmute status\n  muteVolume() {\n    if (this.videoPlayer.nativeElement.muted) {\n      this.videoPlayer.nativeElement.muted = false;\n      this.volume = this.videoPlayer.nativeElement.volume;\n    }\n    else {\n      this.videoPlayer.nativeElement.muted = true;\n      this.volume = 0;\n    }\n  }\n\n  // Replays the media currently loaded in the player\n  replayVideo() {\n    this.resetPlayer();\n    this.videoPlayer.nativeElement.play();\n  }\n\n  // Update the progress bar\n  updateProgressBar() {\n    // Work out how much of the media has played via the duration and currentTime parameters\n    var percentage = Math.floor((100 / this.videoPlayer.nativeElement.duration) * this.videoPlayer.nativeElement.currentTime);\n    // Update the progress bar's value\n    if (this.options.controls) {\n      this.progressBar.nativeElement.value = percentage;\n    }\n  }\n\n  seek(e: any) {\n    var percent = e.offsetX / this.progressBar.nativeElement.offsetWidth;\n    this.videoPlayer.nativeElement.currentTime = percent * this.videoPlayer.nativeElement.duration;\n    e.target.value = Math.floor(percent / 100);\n    e.target.innerHTML = this.progressBar.nativeElement.value + '% played';\n  }\n\n  //replay Video from start\n  resetPlayer() {\n    this.progressBar.nativeElement.value = 0;\n    // Move the media back to the start\n    this.videoPlayer.nativeElement.currentTime = 0;\n  }\n\n  //Open Player in Full screen mode\n  toggleFullScreen() {\n    if (document.fullscreenElement) {\n      document.exitFullscreen();\n    } else {\n      if (this.playerContainer.nativeElement.requestFullscreen) {\n        this.playerContainer.nativeElement.requestFullscreen();\n      } else if (this.playerContainer.nativeElement.webkitRequestFullscreen) { /* Safari */\n        this.playerContainer.nativeElement.webkitRequestFullscreen();\n      } else if (this.playerContainer.nativeElement.msRequestFullscreen) { /* IE11 */\n        this.playerContainer.nativeElement.msRequestFullscreen();\n      }\n    }\n  }\n\n  async openPip() {\n    try {\n      if (!document.pictureInPictureElement) {\n        this.videoPlayer.nativeElement.requestPictureInPicture()\n      } else {\n        document.exitPictureInPicture();\n      }\n    } catch (reason) {\n      console.error(reason);\n    }\n  }\n\n  // Fires when the audio/video has been started or is no longer paused\n  onPlay() {\n    console.log('onPlay')\n    this.play.emit();\n  }\n\n  // Fires when the audio/video has been paused\n  onPause() {\n    console.log('onPause')\n    this.pause.emit();\n  }\n\n  // Fires when the current playlist is ended\n  onEnded() {\n    console.log('onEnded')\n    this.ended.emit();\n  }\n\n  // Fires when the volume has been changed\n  onVolumechange() {\n    console.log('onVolumechange')\n    this.volumechange.emit();\n  }\n\n  onPlaying() {\n    console.log('onPlaying')\n    this.playing.emit();\n  }\n\n  onError() {\n    console.log('onError')\n    this.error.emit();\n  }\n\n  onProgress() {\n    // this.videoPlayer.nativeElement.addEventListener('progress', () => {\n    //   const duration = this.videoPlayer.nativeElement.duration;\n    //   console.log(duration)\n    //   if (duration > 0) {\n    //     for (let i = 0; i < this.videoPlayer.nativeElement.buffered.length; i++) {\n    //       if (\n    //         this.videoPlayer.nativeElement.buffered.start(this.videoPlayer.nativeElement.buffered.length - 1 - i) <\n    //         this.videoPlayer.nativeElement.currentTime\n    //       ) {\n    //         console.log(\n    //           (this.videoPlayer.nativeElement.buffered.end(this.videoPlayer.nativeElement.buffered.length - 1 - i) * 100) / duration\n    //         );\n    //         break;\n    //       }\n    //     }\n    //   }\n    // });\n  }\n\n}\n","<div id=\"player\" #playerContainer class=\"ion-video-player\">\n    <video id=\"video-element\" #player\n        (timeupdate)=\"updateProgressBar()\"\n        [poster]=\"options.poster\"\n        [autoplay]=\"options.autoplay\"\n        [muted]=\"options.muted\"\n        (play)=\"onPlay()\"\n        (pause)=\"onPause()\"\n        (ended)=\"onEnded()\"\n        (volumechange)=\"onVolumechange()\"\n        (playing)=\"onPlaying()\"\n        (error)=\"onError()\"\n        (progress)=\"onProgress()\">\n        <source [src]=\"options.src\" [type]=\"options.type\">\n    </video>\n\n    <div id=\"controls\" *ngIf=\"options.controls\">\n\n        <progress id=\"progress-bar\" (click)=\"seek($event)\" min=\"0\" max=\"100\" value='1' #progressBar></progress>\n\n        <div class=\"controls-btns\">\n            <div class=\"start-stop\">\n                <ion-button fill=\"clear\" size=\"small\" slot=\"icon-only\" class='play' (click)=\"playPauseVideo()\">\n                    <ion-icon [name]=\"isPlaying ? 'pause' : 'play'\"></ion-icon>\n                </ion-button>\n                <span *ngIf=\"player.duration\">\n                    {{player.currentTime | secondsToHours}} / {{player.duration | secondsToHours }}\n                </span>\n            </div>\n\n            <div class=\"volume-box\">\n                <input type=\"range\" class=\"volumeRange\"\n                    (change)=\"setVolume()\" \n                    min=\"0\"\n                    max=\"100\"\n                    step=\"1\"\n                    [value]=\"volumeBar.value\"\n                    #volumeBar\n                    [ngStyle]=\"{\n                        'background-size': volumeBar.value + '% 100%'\n                    }\"\n                />\n\n                <ion-button fill=\"clear\" size=\"small\" slot=\"icon-only\" class=\"mute\" title=\"mute\" (click)=\"muteVolume()\">\n                    <ion-icon [name]=\"\n                        volume == 0 ? 'volume-mute'\n                        :\n                        (volume > 0 && volume < 0.50) ? 'volume-low'\n                        :\n                        (volume > 0.50 && volume < 0.80) ? 'volume-medium'\n                        : 'volume-high'\">\n                    </ion-icon>\n                </ion-button>\n\n                <ion-button fill=\"clear\" size=\"small\" slot=\"icon-only\" (click)=\"toggleFullScreen()\">\n                    <ion-icon name=\"expand\"></ion-icon>\n                </ion-button>\n\n                <ion-button fill=\"clear\" size=\"small\" slot=\"icon-only\" (click)=\"openPip()\">\n                    <ion-icon name=\"open\"></ion-icon>\n                </ion-button>\n                <!-- <ion-button size=\"small\" slot=\"icon-only\"  id=\"btnStop\" class=\"\" title=\"stop\" accesskey=\"X\" (click)=\"stopVideo()\">\n                    <ion-icon name=\"stop\"></ion-icon>\n                </ion-button>\n                <ion-button size=\"small\" slot=\"icon-only\"  id=\"btnReplay\" class=\"replay\" title=\"replay\" accesskey=\"R\" (click)=\"replayVideo()\">\n                    <ion-icon name=\"reload\"></ion-icon>\n                </ion-button> -->\n            </div>\n        </div>\n    </div>\n</div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonicModule } from '@ionic/angular';\n\nimport { IonVideoPlayerComponent } from './ion-video-player.component';\nimport { SecondsToHoursPipe } from './pipes/seconds-to-hours.pipe';\n\n@NgModule({\n  declarations: [\n    IonVideoPlayerComponent,\n    SecondsToHoursPipe\n  ],\n  imports: [\n    CommonModule,\n    IonicModule\n  ],\n  exports: [\n    IonVideoPlayerComponent,\n    SecondsToHoursPipe\n  ]\n})\nexport class IonVideoPlayerModule { }\n","/*\n * Public API Surface of ion-video-player\n */\n\nexport * from './lib/ion-video-player.component';\nexport * from './lib/ion-video-player.module';\nexport * from './lib/pipes/seconds-to-hours.pipe';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.SecondsToHoursPipe"],"mappings":"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"}