{"version":3,"file":"cty-mobile-ui-audio.mjs","sources":["../../../packages/components/audio/audio.ts","../../../packages/components/audio/audio.html","../../../packages/components/audio/module.ts","../../../packages/components/audio/cty-mobile-ui-audio.ts"],"sourcesContent":["import {\r\n  Component,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  OnInit,\r\n  ViewChild,\r\n  AfterViewInit,\r\n  ElementRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PrgTouchStatus } from './types';\r\nimport { CTYUtil } from 'cty-mobile-ui/utils';\r\nimport { CtyIcon } from 'cty-mobile-ui/icon';\r\nimport { IonButton, IonItem, IonLabel, IonList, IonRange } from '@ionic/angular/standalone';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CTYControllerService, CTYInspectService } from 'cty-mobile-ui/services';\r\nimport { checkmarkCircle, radioButtonOffOutline } from 'ionicons/icons';\r\nimport { addIcons } from 'ionicons';\r\nimport { CtyActionSheet } from 'cty-mobile-ui/action-sheet';\r\n@Component({\r\n  selector: 'cty-audio',\r\n  standalone: true,\r\n  imports: [CommonModule, FormsModule, IonButton, CtyIcon, IonRange ,IonLabel, IonList, IonItem, CtyActionSheet],\r\n  templateUrl: './audio.html',\r\n  styleUrl: './audio.scss',\r\n})\r\nexport class CtyAudio implements OnInit, AfterViewInit {\r\n  @Input() url: string = '';\r\n  @Input('toggle-play') togglePlay: boolean = true;\r\n  @Input() autoplay: boolean = true;\r\n  @Input() allowForward: boolean = true;\r\n  @Input() allowBackward: boolean = true;\r\n  @Input() currentTime: number = 0;\r\n  @Input() rates: number[] = [0.7, 1, 1.25, 1.5];\r\n  @Input() rate: number = 1;\r\n  @Input('need-rate') needRate: boolean = true;\r\n  @Input('direct-rate') directRate: boolean = false;\r\n  @Input() unAllowForwardMsg: string = '首次学习不允许快进哦~';\r\n  @Input() unAllowRateMsg: string = '首次学习不允许设置播放倍速';\r\n  @Input() trafficMsg: string = '当前是非WIFI网络, 可能消耗流量, 点击继续~';\r\n\r\n  rateSrc: string = CTYUtil.resUrlPrefix + 'assets/cty_res/img/audio_rate_1.png';\r\n  isWifi: boolean = this.ctyInspectService.IsWifi(); // 网络有没有wifi;\r\n  playingAudio: boolean = false;\r\n  currentTimeLabel: string = '00:00';\r\n  totalTimeLabel: string = '00:00';\r\n  audioEl: HTMLAudioElement | any = null;\r\n  isPlaying: boolean = false;\r\n  isWarning: boolean = false;\r\n  warningMsgTimer = 0;\r\n  maxPlayProgress: number = 0;\r\n  prgTouchStatus: PrgTouchStatus = {\r\n    isTouching: false,\r\n    right: 0,\r\n    height: 0,\r\n    top: 0,\r\n    bottom: 0,\r\n    currentX: 0,\r\n    left: 0,\r\n    width: 0,\r\n  };\r\n  isFirstPlay: boolean = true;\r\n  currentRate: number = 1;\r\n  showSetRate: boolean = false;\r\n  _lastCheck: number = 0;\r\n  playProgress: number = 0;\r\n\r\n  @ViewChild('audioRef') audioRefEl!: ElementRef;\r\n  @Output() ctyEnd = new EventEmitter<CtyAudio>(true);\r\n  @Output() ctyTimeupdate = new EventEmitter<CtyAudio>(true);\r\n  @Output() ctyProgress = new EventEmitter<Number>();\r\n  @Output() ctyCanplay = new EventEmitter<CtyAudio>(true);\r\n  @Output() ctyPlay = new EventEmitter<CtyAudio>(true);\r\n  @Output() ctyPause = new EventEmitter<CtyAudio>(true);\r\n  @Output() ctyError = new EventEmitter<CtyAudio>(true);\r\n\r\n  constructor(\r\n    public ctyControllerService: CTYControllerService,\r\n    public ctyInspectService: CTYInspectService\r\n  ) {\r\n    addIcons({checkmarkCircle, radioButtonOffOutline})\r\n  }\r\n\r\n  ngOnInit() {\r\n    if (!this.isWifi) {\r\n      this.ctyControllerService.Toast(this.trafficMsg);\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.audioEl = this.audioRefEl.nativeElement as HTMLAudioElement;\r\n    this.audioEl.currentTime = this.currentTime || 0;\r\n  }\r\n  _doPrgTouchstart(e: TouchEvent) {\r\n    // 限制向前拖动  多指操作时\r\n    if (\r\n      (!this.allowForward && !this.allowBackward) ||\r\n      (e.touches && e.touches.length > 1)\r\n    ) {\r\n      return true;\r\n    }\r\n    const evEle = e.currentTarget as HTMLElement;\r\n    const currect = evEle.getBoundingClientRect();\r\n    this.prgTouchStatus.left = currect.left; //slider 启始位置\r\n    this.prgTouchStatus.width = currect.right - this.prgTouchStatus.left; //slide 宽度\r\n    this.prgTouchStatus.right = currect.right;\r\n    this.prgTouchStatus.isTouching = true;\r\n    this.prgTouchStatus.currentX = e.targetTouches[0].pageX;\r\n    this.maxPlayProgress = Math.max(this.playProgress, this.maxPlayProgress);\r\n    this._changeProgressByTouch();\r\n    return true;\r\n  }\r\n\r\n  _doPrgTouchmove(e: TouchEvent) {\r\n    if (e.touches && e.touches.length > 1) {\r\n      return true;\r\n    }\r\n\r\n    let now = Date.now();\r\n    if (this._lastCheck + 50 > now) {\r\n      return true;\r\n    }\r\n    this._lastCheck = now;\r\n\r\n    let curX = e.targetTouches[0].pageX;\r\n    this.prgTouchStatus.currentX = curX;\r\n    this._changeProgressByTouch();\r\n    return true;\r\n  }\r\n\r\n  _doPrgTouchend(e: TouchEvent) {\r\n    if (this.prgTouchStatus.isTouching) {\r\n      this._changeProgressByTouch();\r\n    }\r\n    this.prgTouchStatus.isTouching = false;\r\n    return true;\r\n  }\r\n\r\n  _changeProgressByTouch() {\r\n    const prg = Math.round(\r\n      ((this.prgTouchStatus.currentX - this.prgTouchStatus.left) /\r\n        this.prgTouchStatus.width) *\r\n        100\r\n    );\r\n    //禁止拖放到曾经的最大播放记录\r\n    if (!this.allowForward && prg > this.maxPlayProgress) {\r\n      if(this.isWarning){\r\n        return;\r\n      }\r\n      !this.isWarning && this.ctyControllerService.Toast(this.unAllowForwardMsg);\r\n      this.isWarning = true;\r\n      this._clearWarningMsg();\r\n      return;\r\n    }\r\n    if (this.prgTouchStatus.isTouching) {\r\n      this.playProgress = prg;\r\n      //不允许拖到最后一秒\r\n      if (this.playProgress >= 100) {\r\n        this.playProgress = 100 - 2;\r\n      }\r\n      this.audioEl.currentTime =\r\n        (this.playProgress / 100.0) * this.audioEl.duration;\r\n      this.setPlayedTime();\r\n    }\r\n  }\r\n\r\n  // 设置播放时间\r\n  setPlayedTime() {\r\n    let currTime = this.audioEl.currentTime;\r\n    const duration = this.audioEl.duration;\r\n    currTime = Math.floor(currTime);\r\n    this.playProgress =\r\n      duration > 0 ? Math.round((currTime / duration) * 100) : 0;\r\n    this.ctyProgress.emit(this.playProgress);\r\n    this.currentTimeLabel = this._getTimeLabel(currTime);\r\n    this.totalTimeLabel = this._getTimeLabel(duration);\r\n  }\r\n\r\n  _getTimeLabel(time: number): string {\r\n    if (isNaN(time)) return '';\r\n    time = Math.floor(time);\r\n    let minutePart, secondPart;\r\n    if (time >= 60) {\r\n      let m = Math.floor(time / 60); //大于60s取出分钟数\r\n      let s = time % 60; //取出秒\r\n      m >= 10 ? (minutePart = m) : (minutePart = '0' + m);\r\n      s >= 10 ? (secondPart = s) : (secondPart = '0' + s);\r\n    } else {\r\n      minutePart = '00';\r\n      time >= 10 ? (secondPart = time) : (secondPart = '0' + time);\r\n    }\r\n    return minutePart + ':' + secondPart;\r\n  }\r\n\r\n  switchAudio() {\r\n    this.isPlaying ? this.pause() : this.play();\r\n  }\r\n\r\n  play() {\r\n    if (this.audioEl?.paused) {\r\n      this.audioEl.play();\r\n    }\r\n    this.isPlaying = true;\r\n  }\r\n\r\n  pause() {\r\n    if (!this.audioEl?.paused) {\r\n      this.audioEl?.pause();\r\n    }\r\n    this.isPlaying = false;\r\n  }\r\n  _audioTimeupdate() {\r\n    if (!this.audioEl) return;\r\n    let currentTime = this.audioEl.currentTime; /*当前已播放的时间,单位秒*/\r\n    let d =\r\n      currentTime / this.audioEl.duration; /*当前播放时常占总时常的百分比*/\r\n    this.playProgress = Math.floor(d * 100);\r\n    this.setPlayedTime();\r\n    this.ctyTimeupdate.emit();\r\n  }\r\n\r\n  _audioCanplay() {\r\n    this.setPlayedTime();\r\n    this.ctyCanplay.emit();\r\n    if (this.autoplay && this.isWifi) {\r\n      this.isPlaying = true;\r\n    }\r\n  }\r\n  _audioPlay() {\r\n    if (this.isFirstPlay && !this.isWifi) {\r\n      this.isFirstPlay = false;\r\n    }\r\n    this.ctyPlay.emit();\r\n  }\r\n  _audioPause() {\r\n    this.ctyPause.emit();\r\n  }\r\n  _audioEnded() {\r\n    this.pause();\r\n    this.ctyEnd.emit();\r\n  }\r\n  _audioError() {\r\n    this.ctyError.emit();\r\n  }\r\n  _toSetRate(e: Event) {\r\n    e.stopPropagation();\r\n    if (!this.allowForward) {\r\n      if(this.isWarning){\r\n        return;\r\n      }\r\n      !this.isWarning && this.ctyControllerService.Toast(this.unAllowRateMsg);\r\n      this.isWarning = true;\r\n      this._clearWarningMsg();\r\n      return;\r\n    }\r\n    if (this.directRate) {\r\n      let index = this.rates.findIndex((p) => p == this.rate);\r\n      if (index >= 0) {\r\n        this.setPlayRate(\r\n          this.rates[index == this.rates.length - 1 ? 0 : index + 1]\r\n        );\r\n      }\r\n      return;\r\n    }\r\n    this.showSetRate = true;\r\n  }\r\n  setPlayRate(rate: number) {\r\n    let rateSrc = '';\r\n    switch (rate) {\r\n      case 0.7:\r\n        rateSrc = 'audio_rate_4';\r\n        break;\r\n      case 1:\r\n        rateSrc = 'audio_rate_1';\r\n        break;\r\n      case 1.25:\r\n        rateSrc = 'audio_rate_2';\r\n        break;\r\n      case 1.5:\r\n        rateSrc = 'audio_rate_3';\r\n        break;\r\n    }\r\n    this.rateSrc =\r\n      CTYUtil.resUrlPrefix + 'assets/cty_res/img/' + rateSrc + '.png';\r\n    this.rate = rate;\r\n    this.audioEl.playbackRate = this.rate;\r\n    this.showSetRate = false;\r\n  }\r\n  _clearWarningMsg() {\r\n      this.warningMsgTimer = window.setTimeout(() => {\r\n        this.isWarning = false;\r\n      }, 2500);\r\n  }\r\n  getAudioElement(): Promise<HTMLAudioElement> {\r\n    return Promise.resolve().then(() => {\r\n      return this.audioEl;\r\n    });\r\n  }\r\n}\r\n","<div class=\"cty-audio flex-align-center\">\r\n    <ng-content select=\"[name=start]\"></ng-content>\r\n    <!-- 播放/暂停 -->\r\n    <ion-button\r\n        *ngIf=\"togglePlay\"\r\n        class=\"cty-audio__toggle-play\"\r\n        (click)=\"switchAudio()\"\r\n    >\r\n        <cty-icon [name]=\"!isPlaying?'cty-play':'cty-pause'\"></cty-icon>\r\n    </ion-button>\r\n    <ng-content select=\"[name=range]\"></ng-content>\r\n    <!-- 进度条 -->\r\n    <div class=\"cty-audio__range flex-column-between\">\r\n        <div\r\n            class=\"cty-audio__range-touch\"\r\n            (touchstart)=\"_doPrgTouchstart($event)\"\r\n            (touchmove)=\"_doPrgTouchmove($event)\"\r\n            (touchend)=\"_doPrgTouchend($event)\"\r\n        ></div>\r\n        <ion-range\r\n            class=\"cty-audio__range-progress\"\r\n            [(ngModel)]=\"playProgress\"\r\n        ></ion-range>\r\n        <div class=\"cty-audio__range-label flex-center-between\">\r\n            <ion-label>{{currentTimeLabel}}</ion-label>\r\n            <ion-label>{{totalTimeLabel}}</ion-label>\r\n        </div>\r\n    </div>\r\n    <div class=\"flex-center cty-audio__rate\">\r\n        <div\r\n            class=\"flex-column-between\"\r\n            *ngIf=\"needRate\"\r\n            (click)=\"_toSetRate($event)\"\r\n        >\r\n            <img [src]=\"rateSrc\" />\r\n            <span>倍速</span>\r\n        </div>\r\n        <ng-content select=\"[name=ends]\"></ng-content>\r\n    </div>\r\n    <!-- audio -->\r\n    <audio\r\n        #audioRef\r\n        preload=\"metadata\"\r\n        [src]=\"url\"\r\n        [autoplay]=\"autoplay&&isWifi\"\r\n        (timeupdate)=\"_audioTimeupdate()\"\r\n        (canplay)=\"_audioCanplay()\"\r\n        (ended)=\"_audioEnded()\"\r\n        (play)=\"_audioPlay()\"\r\n        (pause)=\"_audioPause()\"\r\n        (error)=\"_audioError()\"\r\n    ></audio>\r\n</div>\r\n<!-- 设置倍速 -->\r\n<cty-action-sheet\r\n    *ngIf=\"showSetRate\"\r\n    cancelText=\"取消\"\r\n    (ctyDismiss)=\"showSetRate = false\"\r\n>\r\n    <ion-list name=\"options\" class=\"cty-action-sheet__rates\">\r\n        <ion-item\r\n            *ngFor=\"let item of rates\"\r\n            [ngClass]=\"{'active':rate==item}\"\r\n            (click)=\"setPlayRate(item)\"\r\n        >\r\n            <ion-label>{{item}}X</ion-label>\r\n            <cty-icon\r\n                [name]=\"rate==item?'checkmark-circle':'radio-button-off-outline'\"\r\n                slot=\"end\"\r\n            ></cty-icon>\r\n        </ion-item>\r\n    </ion-list>\r\n</cty-action-sheet>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CtyAudio } from './audio';\r\n@NgModule({\r\n  imports: [CommonModule, CtyAudio],\r\n  exports: [CtyAudio],\r\n})\r\nexport class CtyAudioModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}