/*! @name videojs-max-quality-selector @version 1.0.0 @license MIT */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).videojsMaxQualitySelector=e(t.videojs)}(this,(function(t){"use strict";function e(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var i=e(t);const s=i.default.getComponent("MenuButton"),n=i.default.getComponent("MenuItem"),a=i.default.getComponent("Menu"),l=i.default.dom,o={parent:null};i.default.registerComponent("MaxQualityButton",class extends s{constructor(t,e){super(t,e),this.options=i.default.mergeOptions(o,e),this.parent=this.options.parent,this.items=[],this.addClass("vjs-max-quality-selector-button")}handleMenuItemClick(t){const e=parseInt(t.currentTarget.dataset.id,10);this.parent.changeLevel(e)}handleSubmenuKeyPress(t){if(void 0===t.currentTarget.dataset.id)return;const e=parseInt(t.currentTarget.dataset.id,10);this.parent.changeLevel(e)}createButton(t,e,i,s){const a=l.createEl("li",{className:e,innerHTML:i,tabIndex:-1},{"data-id":s}),o=new n(this.player_,{el:a});o.on("click",this.handleMenuItemClick.bind(this)),t.addItem(o)}createMenu(){const t=new a(this.player_,{menuButton:this}),e=[],i=[];if(this.items){this.parent.autoMode||this.parent.options.disableAuto||this.createButton(t,"vjs-menu-item",this.parent.options.autoLabel,-1);for(let s=0;s{this.player.addClass("vjs-max-quality-selector")}))}update(){const t=this,e=[];this.qualityLevels.forEach((function(i,s){i.isCurrent=!1,t.qlInternal.levels_[i.id].enabled&&e.push(i.id)})),this.autoMode=e.length===this.qualityLevels.length;const i=this.qualityLevels.find((function(e){return e.id===t.selectedIndex}));if(void 0===i)return void this.button.hide();this.autoMode&&this.options.disableAuto&&(this.autoMode=!1,this.changeLevel(i.id)),i.isCurrent=!0,this.options.filterDuplicates&&this.qualityLevels.forEach((function(t,e){t.uniqueId===i.uniqueId&&(t.isCurrent=!0)})),this.options.filterDuplicateHeights&&this.qualityLevels.forEach((function(t,e){t.height===i.height&&(t.isCurrent=!0)})),this.button.$(".vjs-icon-placeholder").innerHTML=this.getQualityDisplayString(i),this.button.show();let s=this.qualityLevels;s=this.options.sortEnabled?0===this.options.sort?this.qualityLevels.sort((function(t,e){return e.uniqueId-t.uniqueId})):this.qualityLevels.sort((function(t,e){return t.uniqueId-e.uniqueId})):this.qualityLevels.sort((function(t,e){return t.id-e.id})),this.button.items=s,this.button.update()}changeLevel(t){const e=this;if(te.options.maxHeight?t.enabled=!1:t.enabled=!0})),void this.update();const i=this.qualityLevels.find((e=>e.id===t));this.qlInternal.levels_.forEach((function(s,n){const a=e.qualityLevels.find((t=>t.id===n));void 0!==a&&(s.enabled=n===t||e.options.filterDuplicates&&a.uniqueId===i.uniqueId||e.options.filterDuplicateHeights&&a.height===i.height)})),this.autoMode&&this.update()}handleMediaChange(t){this.log.debug("Handling media change:",this.player.src(),this.player.currentType()),this.qualityLevels=[],this.update(),0!==this.options.defaultQuality&&(this.firstRun=!0)}handleChange(t){if(this.log.debug(`Handling quality change: ${t.selectedIndex}`),this.firstRun&&0!==this.options.defaultQuality){this.firstRun=!1;if(1===this.options.defaultQuality){const t=this.qualityLevels.reduce((function(t,e){return e.uniqueIdt.uniqueId?e:t}));this.selectedIndex=t.id,this.changeLevel(t.id),this.update()}}else this.selectedIndex=t.selectedIndex,this.update()}handleQualityLevel(t){const e=t.qualityLevel;if(void 0===e.width||void 0===e.height||void 0===e.bitrate)return;if(0!==this.options.minHeight&&e.heightthis.options.maxHeight)return void(e.enabled=!1);const i=e.width+e.height+e.bitrate,s={id:this.qlInternal.levels_.indexOf(e),uniqueId:i,width:e.width,height:e.height,dimension:e.width+"x"+e.height,dimensionEnglishName:this.getDimensionEnglishName(e.width,e.height),dimensionMarketingName:this.getDimensionMarketingName(e.width,e.height),bitrate:e.bitrate,bitrateName:this.getReadableBitrateString(e.bitrate),isCurrent:!1};this.qualityLevels.push(s)}getLevelNames(){const t=[];return this.qualityLevels.forEach((e=>{t.push(this.getQualityDisplayString(e))})),t}getLevelName(t,e){const i=this.options.labels;return void 0!==i[t]?i[t].toString():e}getDimensionEnglishName(t,e){switch(e){case 108:case 180:case 144:case 234:case 240:case 252:return"VLQ";case 360:return"LQ";case 480:case 486:case 540:return"SD";case 720:return"HD";case 1080:return"FHD";case 1440:return"QHD";case 2160:case 2304:return"UHD"}return"N/A"}getDimensionMarketingName(t,e){switch(e){case 2160:return"4k";case 2304:return"True 4k"}return e+"p"}getReadableBitrateString(t){let e=-1;do{t/=1024,e++}while(t>1024);return Math.max(t,.1).toFixed(1)+[" Kbps"," Mbps"," Gbps"][e]}getQualityDisplayString(t){if(!t)return"";let e="";return e=1===this.options.displayMode?t.dimensionMarketingName:2===this.options.displayMode?t.dimensionEnglishName:t.dimensionMarketingName+""+t.dimensionEnglishName+"",this.autoMode&&t.isCurrent&&(e=`${this.options.autoLabel}(${e})`),this.options.showBitrates&&(e+=" ("+t.bitrateName+")"),this.getLevelName(t.id,e)}}return r.defaultState={},r.VERSION="1.0.0",i.default.registerPlugin("maxQualitySelector",r),r}));