import{EVENT_OPTIONS}from"../utils/constants";import{hasClass,removeElement}from"../utils/general";class Settings{constructor(e,t,s){return this.submenu={},this.events={global:{},media:{}},this.originalOutput="",this.player=e,this.labels=e.getOptions().labels,this.position=t,this.layer=s,this}create(){this.button=document.createElement("button"),this.button.className=`op-controls__settings op-control__${this.position}`,this.button.tabIndex=0,this.button.title=this.labels.settings,this.button.setAttribute("aria-controls",this.player.id),this.button.setAttribute("aria-pressed","false"),this.button.setAttribute("aria-label",this.labels.settings),this.button.innerHTML=`${this.labels.settings}`,this.menu=document.createElement("div"),this.menu.className="op-settings",this.menu.setAttribute("aria-hidden","true"),this.menu.innerHTML='
',this.clickEvent=(()=>{this.button.setAttribute("aria-pressed","true");const e=this.player.getContainer().querySelectorAll(".op-settings");for(let t=0,s=e.length;t{let e;e&&"undefined"!=typeof window&&window.cancelAnimationFrame(e),"undefined"!=typeof window&&(e=window.requestAnimationFrame(()=>{this.menu.innerHTML=this.originalOutput,this.menu.setAttribute("aria-hidden","true")}))}),this.removeEvent=(e=>{const{id:t,type:s}=e.detail;this.removeItem(t,s)}),this.events.media.controlshidden=this.hideEvent.bind(this),this.events.media.settingremoved=this.removeEvent.bind(this),this.events.media.play=this.hideEvent.bind(this),this.events.media.pause=this.hideEvent.bind(this),this.events.global.click=(e=>{e.target.closest(`#${this.player.id}`)&&hasClass(e.target,"op-speed__option")&&(this.player.getMedia().playbackRate=parseFloat(e.target.getAttribute("data-value").replace("speed-","")))}),this.events.global.resize=this.hideEvent.bind(this),this.button.addEventListener("click",this.clickEvent.bind(this),EVENT_OPTIONS),Object.keys(this.events).forEach(e=>{this.player.getElement().addEventListener(e,this.events.media[e],EVENT_OPTIONS)}),document.addEventListener("click",this.events.global.click,EVENT_OPTIONS),"undefined"!=typeof window&&window.addEventListener("resize",this.events.global.resize,EVENT_OPTIONS),this.player.getControls().getLayer(this.layer).appendChild(this.button),this.player.getContainer().appendChild(this.menu)}destroy(){this.button.removeEventListener("click",this.clickEvent.bind(this)),Object.keys(this.events).forEach(e=>{this.player.getElement().removeEventListener(e,this.events.media[e])}),document.removeEventListener("click",this.events.global.click),"undefined"!=typeof window&&window.removeEventListener("resize",this.events.global.resize),void 0!==this.events.global["settings.submenu"]&&(document.removeEventListener("click",this.events.global["settings.submenu"]),this.player.getElement().removeEventListener("controlshidden",this.hideEvent)),removeElement(this.menu),removeElement(this.button)}addSettings(){return{className:"op-speed__option",default:this.player&&this.player.getMedia()?this.player.getMedia().defaultPlaybackRate.toString():"1",key:"speed",name:this.labels.speed,subitems:[{key:"0.25",label:"0.25"},{key:"0.5",label:"0.5"},{key:"0.75",label:"0.75"},{key:"1",label:this.labels.speedNormal},{key:"1.25",label:"1.25"},{key:"1.5",label:"1.5"},{key:"2",label:"2"}]}}addItem(e,t,s,i,n){const l=document.createElement("div");l.className="op-settings__menu-item",l.tabIndex=0,l.setAttribute("role","menuitemradio"),l.innerHTML=``;const a=i?i.find(e=>e.key===s):null;a&&(l.innerHTML+=``);const o=this.menu.querySelector(".op-settings__menu");if(o&&o.appendChild(l),this.originalOutput=this.menu.innerHTML,i){const l=`\n \n `;this.submenu[t]=l}this.events.global["settings.submenu"]=(e=>{const i=e.target;if(i.closest(`#${this.player.id}`)){if(hasClass(i,"op-settings__back"))this.menu.classList.add("op-settings--sliding"),setTimeout(()=>{this.menu.innerHTML=this.originalOutput,this.menu.classList.remove("op-settings--sliding")},100);else if(hasClass(i,"op-settings__menu-content")){const e=i.parentElement?i.parentElement.querySelector(".op-settings__menu-label"):null,t=e?e.getAttribute("data-value"):null,s=t?t.split("-"):[];if(s.length>0){s.pop();const e=s.join("-").replace(/^\-|\-$/,"");void 0!==typeof this.submenu[e]&&(this.menu.classList.add("op-settings--sliding"),setTimeout(()=>{this.menu.innerHTML=this.submenu[e],this.menu.classList.remove("op-settings--sliding")},100))}}else if(hasClass(i,"op-settings__submenu-label")){const e=i.getAttribute("data-value"),n=e?e.replace(`${t}-`,""):"",l=i.innerText,a=this.menu.querySelector(`#menu-item-${t} .op-settings__submenu-item[aria-checked=true]`);a&&(a.setAttribute("aria-checked","false"),i.parentElement&&i.parentElement.setAttribute("aria-checked","true"),this.submenu[t]=this.menu.innerHTML,this.menu.classList.add("op-settings--sliding"),setTimeout(()=>{this.menu.innerHTML=this.originalOutput;const i=this.menu.querySelector(`.op-settings__menu-label[data-value="${t}-${s}"]`);i&&(i.setAttribute("data-value",`${e}`),i.nextElementSibling&&(i.nextElementSibling.innerHTML=l)),s=n,this.originalOutput=this.menu.innerHTML,this.menu.classList.remove("op-settings--sliding")},100))}}else this.hideEvent()}),document.addEventListener("click",this.events.global["settings.submenu"],EVENT_OPTIONS),this.player.getElement().addEventListener("controlshidden",this.hideEvent,EVENT_OPTIONS)}removeItem(e,t,s=2){const i=this.player.getElement().querySelector(`.op-settings__submenu-label[data-value=${t}-${e}]`);if(i&&removeElement(i),this.player.getElement().querySelectorAll(`.op-settings__submenu-label[data-value^=${t}]`).length