1"use strict";(self.webpackChunkstorefront=self.webpackChunkstorefront||[]).push([[5628],{5628:(M,P,u)=>{u.d(P,{z:()=>_});var S=u(9379),d=u(467),N=u(177),E=u(3953);function T(a,e={}){var t;return a.startsWith("//")&&(a=window.location.protocol+a),e.useFetch?fetch(a,{method:null!==(t=e.method)&&void 0!==t?t:"GET"}).then(s=>{if(s.status>399){if(e.returnRedirect)return{redirectUrl:s.url};throw new Error("Failed to load json ".concat(a," : ").concat(s.statusText))}return s.redirected&&e.returnRedirect?{response:s.json(),redirectUrl:s.url}:{response:s.json()}}):new Promise((s,i)=>{const n=new XMLHttpRequest;n.addEventListener("load",()=>{n.status>399&&i(new Error("Failed to load json ".concat(a," : ").concat(n.statusText)));try{s(JSON.parse(n.responseText))}catch(r){i()}}),n.addEventListener("error",()=>{i()}),n.open(e&&e.method||"GET",a),n.send()})}var L=u(1413),R=u(4412),O=u(6010),I=u(7900),A=u(7879),b=u(7370);let o=(()=>{var a;class e{}return(a=e).SPEECH_IDENTIFIER="TTS_SPEECH",a.SPEECH_RATE_IDENTIFIER="TTS_SPEECH_RATE",a.PLAYER_OPEN_IDENTIFIER="TTS_PLAYER_OPEN",a.AUDIO_PLAYING_IDENTIFIER="TTS_AUDIO_PLAYING",e})();class B{constructor(e){this.foundTagName="span",this.foundTagClass="word",this.skipClasses=[],this.skipTags=[],this.root=null,this.currentDepth=-1,this.currentNode=null,this.lastSuccessfulNode=null,this.lastSuccessfulDepth=-1,this.currentWord="";for(let t in e)this[t]=e[t];this.skipClassesRegex=new RegExp("("+this.skipClasses.map(t=>"".concat(t,"(?=(\\s|$))")).join("|")+")","i"),this.skipTagsRegex=new RegExp("("+this.skipTags.map(t=>"".concat(t,"(?=(\\s|$))")).join("|")+")","i")}reset(){this.root=null,this.currentDepth=-1,this.currentNode=null,this.lastSuccessfulNode=null,this.lastSuccessfulDepth=-1}next(e){return this.currentWord=e,null==this.lastSuccessfulNode?(this.currentNode=this.root.childNodes[0],this.currentDepth=1):(this.currentNode=this.lastSuccessfulNode,this.currentDepth=this.lastSuccessfulDepth),this.searchNodes()}searchNodes(){let e=null;for(;this.currentNode&&this.currentDepth>0&&null==e;){switch(this.currentNode.nodeType){case 1:if(!this.skipTagsRegex.test(this.currentNode.tagName)&&!this.skipClassesRegex.test(this.currentNode.className.toLowerCase())&&this.currentNode.childNodes.length>0&&!this.currentNode.classList.contains(this.foundTagClass)){this.currentNode=this.currentNode.childNodes[0],this.currentDepth++;continue}break;case 3:case 4:if(e=this.findTextInNode(),null!=e)return this.lastSuccessfulNode=e,this.lastSuccessfulDepth=this.currentDepth,this.currentNode=null,this.currentDepth=-1,e}if(this.currentNode.nextSibling)this.currentNode=this.currentNode.nextSibling;else for(;this.currentDepth>0;)if(this.currentNode=this.currentNode.parentNode,this.currentDepth--,this.currentNode.nextSibling){this.currentNode=this.currentNode.nextSibling;break}}return null}findTextInNode(){let t=this.currentNode&&this.currentNode.parentNode.tagName===this.foundTagName.toUpperCase()&&this.currentNode.parentNode.classList.contains(this.foundTagClass)?-1:this.currentNode.data.indexOf(this.currentWord);if(t>-1){let s=1===this.currentNode.nodeType?this.currentNode.firstChild:this.currentNode,i=t>0?s.splitText(t):s;i.splitText(this.currentWord.length);let n=document.createElement(this.foundTagName);n.setAttribute("class",this.foundTagClass);const r=i.parentNode;return n.innerText=i.data,r.replaceChild(n,i),n}return null}}class F{constructor(e,t,s,i,n,r,l){this.currentWordClassName="current",this.markersData=[],this.isScrolling=!1,this.previousMarker=null,this.wordFinder=new B({root:s,skipClasses:i,skipTags:n}),this.audio=e,this.markerSrc=t,this.ttsService=r,this.ttsPlayer=l}reset(e,t,s){this.wordFinder.root=s,this.audio=e,this.markerSrc=t}align(){return new Promise((e,t)=>{e(this.loadMarkers())})}selectWord(e){if(null!=this.markersData){let t=this.audio.currentTime;this.markersData.forEach((s,i)=>{let n=i<Object.keys(this.markersData).length-1?this.markersData[i+1]:null;if(t>=s.time&&(null==n||t<=n.time)&&!this.compareMarkers(s,this.previousMarker))for(let r of s.node){this.deselectWord(),this.previousMarker=s,r.classList.add(this.currentWordClassName);let l={top:80,bottom:185,left:0,right:0},c=this.isOutOfViewport(r,l);const p=this.ttsPlayer.contentElement.scrollTop,g=this.ttsPlayer.contentElement.clientHeight,h=this.ttsPlayer.contentElement.scrollHeight;if(this.isScrolling=this.isScrolling&&Math.floor(this.lastScrollTo)!=Math.floor(p)&&Math.floor(p)+g+1<h&&p+g<h,e&&c&&!this.isScrolling){let f=this.ttsPlayer.contentElement,v=r.getBoundingClientRect().top+f.scrollTop+f.offsetTop;const w=v-(v>l.top?l.top:0);f.scrollTo({top:w,behavior:"smooth"}),this.isScrolling=!0,this.lastScrollTo=w}}})}}deselectWord(){Array.from(document.getElementsByClassName(this.currentWordClassName)).forEac
1h(e=>e.classList.remove(this.currentWordClassName))}loadMarkers(){var e=this;return(0,d.A)(function*(){try{e.markersData=(yield T(e.markerSrc)).markers,e.assignMarkers()}catch(t){console.error("Could not load markers: "+t)}})()}assignMarkers(){this.markersData.forEach(e=>{if(e.node=[],e.markerValues)for(let t of e.markerValues)this.createNode(this.encodeString(t),e);else this.createNode(this.encodeString(e.value),e)}),this.wordFinder.reset()}isOutOfViewport(e,t={top:0,bottom:0,left:0,right:0}){const s=e.getBoundingClientRect(),r=s.bottom>(window.innerHeight||document.documentElement.clientHeight)-t.bottom,l=s.right>(window.innerWidth||document.documentElement.clientWidth)-t.right;return s.top<t.top||s.left<t.left||r||l}createNode(e,t){let s=this.wordFinder.next(e);null!=s&&t.node.push(s)}encodeString(e){return(new DOMParser).parseFromString(e,"text/html").body.textContent}compareMarkers(e,t){return!(!e||!t)&&e.end==t.end&&e.start==t.start&&e.time==t.time}}class m{static getFormattedTime(e){return new Date(e).toLocaleTimeString([],{minute:"2-digit",second:"2-digit"})}static convertSecondsToMilli(e){return 1e3*e}static setSettingsContainerPosition(e,t){const s=e.getBoundingClientRect(),i=t.getBoundingClientRect(),n=window.getComputedStyle(t,"::before"),l=Math.round(s.top)-i.height/2+s.height/2;let c=s.left;const p=n?window.innerWidth-c-parseInt(n.right,10):window.innerWidth-c;t.style.top=l+"px",t.style.right=p+"px"}}class D{constructor(e,t,s,i,n){var r,l;if(this.ttsConfig=e,this.post=t,this.ttsService=s,this.purpleService=i,this.previousState=n,this.articleIndex=0,this.contentElement=null,this.markerContentElement=null,this.audio={src:"",duration:0,currentTime:0,bufferedTime:0,speech:"",speechMarkerSrc:"",speechRate:this.ttsService.ttsConfig.ttsSpeechRateOptionNormal},this.audioAligner=null,this.selectWordInterval=null,this.state={isOpen:new R.t((null===(r=this.previousState)||void 0===r?void 0:r.isOpen.value)||!1),isFirst:!0,isCurrent:!1,isPlaying:!1,isOffline:!1,progressListener:null,stateListener:null,connectionStateListener:null,forceOpen:!1},this.uiElements={playerElement:null,progressContainer:null,currentTimeElement:null,durationElement:null,progressElement:null,bufferingElement:null,settingsButton:null,settingsContainer:null,speechRateContainer:null,speechRateOptionVerySlow:null,speechRateOptionSlow:null,speechRateOptionNormal:null,speechRateOptionFast:null,speechRateOptionVeryFast:null,speechContainer:null,controlsContainer:null,loadingElement:null,playButton:null,seekBackButton:null,seekForwardButton:null,navigateBackButton:null,navigateForwardButton:null,openPlayerButton:null},this.ttsPlayerStateSubject=new R.t(null),this.ttsPlayerState$=this.ttsPlayerStateSubject.asObservable(),this.isUiRendered=!1,this.isDeleted=!1,this.contentElement=null===(l=document.querySelectorAll(e.ttsContentSelector)[0])||void 0===l?void 0:l.firstElementChild,this.markerContentElement=document.querySelectorAll(e.ttsMarkerContentSelector)[0],!this.contentElement||!this.markerContentElement)throw{message:"Failed to init TTS.\n Found contentElement (".concat(e.ttsContentSelector,"): ").concat(!!this.contentElement,"\n Found markerContentElement (").concat(e.ttsMarkerContentSelector,"): ").concat(!!this.markerContentElement,"\n ")}}init(){var e=this;return(0,d.A)(function*(){let t;e.state.isFirst=!0;try{t=yield e.purpleService.getState(o.SPEECH_IDENTIFIER),(!t||""===t)&&(t=e.getDefaultSpeech(),e.purpleService.setState(o.SPEECH_IDENTIFIER,t))}catch(s){t=e.getDefaultSpeech(),e.purpleService.setState(o.SPEECH_IDENTIFIER,t),console.warn("Could not get speech: "+s)}if(!e.isDeleted){try{let s=parseFloat(yield e.purpleService.getState(o.SPEECH_RATE_IDENTIFIER));s||(s=e.ttsConfig.ttsSpeechRateOptionNormal),yield e.setSpeechRate(s)}catch(s){yield e.setSpeechRate(e.ttsConfig.ttsSpeechRateOptionNormal),console.warn("Can not get state of speech rate: "+s)}e.isDeleted||(e.setAudioParameters(t),e.audioAligner=new F(e.audio,e.audio.speechMarkerSrc,e.markerContentElement,e.ttsConfig.ttsSkipContentClasses,e.ttsConfig.ttsSkipContentTags,e.ttsService,e),yield e.audioAligner.align(),!e.isDeleted&&e.afterAudioAlignment())}})()}reset(){var e,t;this.selectWordInterval&&clearInterval(this.selectWordInterval),this.audioAligner.deselectWord(),this.contentElement.scrollTop=0,this.state.isFirst=!0,null===(e=this.uiElements.loadingElement)||void 0===e||e.classList.remove("show"),null===(t=this.uiElements.playButton)||void 0===t||t.classList.remove("pause"),this.isUiRendered&&this.setAudioProgress(0,0)}delete(){this.stop(),window.purple.media.removeProgressListener(this.state.progressListener),window.purple.media.removeStatusListener(this.state.stateListener),window.purple.app.removeConnectionStateListener(this.state.connectionStateListener),this.isDeleted=!0}
1openPlayer(e=!1){this.purpleService.setState(o.PLAYER_OPEN_IDENTIFIER,"1"),(!this.state.isOpen.value||!this.uiElements.playerElement.classList.contains("open"))&&(this.uiElements.playerElement.classList.add("open"),this.state.isOpen.next(!0)),e&&this.play()}closePlayer(e=!1){this.purpleService.setState(o.PLAYER_OPEN_IDENTIFIER,"0"),this.uiElements.playerElement&&this.uiElements.playerElement.classList.remove("open"),this.state.isOpen.next(!1),this.audioAligner.deselectWord(),e&&this.pause()}play(){this.purpleService.setState(o.AUDIO_PLAYING_IDENTIFIER,"1"),this.state.isFirst?window.purple.media.startAudio({displayName:this.post.name,url:this.audio.src}):window.purple.media.resumeAudio()}pause(){this.purpleService.setState(o.AUDIO_PLAYING_IDENTIFIER,"0"),window.purple.media.pauseAudio()}stop(){this.purpleService.setState(o.AUDIO_PLAYING_IDENTIFIER,"0"),window.purple.media.stopAudio()}seekTo(e){window.purple.media.seekTo({time:Math.round(e)})}changeSpeech(e,t=!1){this.purpleService.setState(o.SPEECH_IDENTIFIER,e),this.setAudioParameters(e),this.reloadContentMarker(),this.setSelectedSpeech(),this.reset()}changeSpeechRate(e,t=!1){var s=this;return(0,d.A)(function*(){yield s.setSpeechRate(e),s.setSpeechRateUi(e),s.setAudioProgress(s.audio.currentTime,s.audio.bufferedTime)})()}reloadContentMarker(){var e=this;return(0,d.A)(function*(){let t=Array.from(e.markerContentElement.getElementsByClassName("word"));for(let s of t)s.replaceWith(s.innerHTML);e.audioAligner.reset(e.audio,e.audio.speechMarkerSrc,e.markerContentElement),yield e.audioAligner.align(),e.afterAudioAlignment()})()}setAudioParameters(e){let t=this.getSpeechObject()[e];t||(e=this.getDefaultSpeech(),t=this.getSpeechObject()[e],this.purpleService.setState(o.SPEECH_IDENTIFIER,e)),this.audio.speech=e,this.audio.src=this.createSpeechPropertiesUrl(t.url),this.audio.speechMarkerSrc=this.createSpeechPropertiesUrl(t.speechMarkerUrl),this.audio.duration=t.length}afterAudioAlignment(){this.uiElements.playerElement||this.initUi()}initUi(){this.state.progressListener=i=>{const n=i.detail?i.detail:i;this.isCurrent()&&n.duration>0&&(n.currentTime>=n.duration?(this.setAudioProgress(0),this.closePlayer()):this.setAudioProgress(n.currentTime,n.bufferedTime,n.duration))},this.purpleService.purpleRef.media.addProgressListener(this.state.progressListener),this.state.stateListener=i=>{const n=i.detail?i.detail:i;if(this.state.isCurrent=n.url===this.audio.src,this.isCurrent())switch(n.playbackState){case"READY":this.selectWordInterval&&clearInterval(this.selectWordInterval),this.state.isPlaying=!1,this.uiElements.loadingElement.classList.remove("show"),this.uiElements.playButton.classList.remove("pause");break;case"LOADING":this.selectWordInterval&&clearInterval(this.selectWordInterval),this.uiElements.loadingElement.classList.add("show");break;case"PLAYING":{if(this.state.isFirst){let l=this.uiElements.progressElement.value*this.audio.duration;l>0&&this.seekTo(l),this.state.isFirst=!1}this.state.isPlaying=!0,this.uiElements.loadingElement.classList.remove("show"),this.uiElements.playButton.classList.add("pause");const r=200/this.audio.speechRate;this.selectWordInterval&&clearInterval(this.selectWordInterval),this.selectWordInterval=setInterval(()=>{this.audio.currentTime+=r,this.audioAligner.selectWord(!0)},r);break}case"ERROR":this.reset();break;default:this.state.isFirst?this.uiElements.loadingElement.classList.remove("show"):this.reset()}else this.state.isFirst||this.reset()},this.purpleService.purpleRef.media.addStatusListener(this.state.stateListener),this.state.connectionStateListener=i=>{"OFFLINE"===i.state?this.state.isOffline=!0:(this.state.isOffline=!1,this.uiElements.loadingElement.classList.remove("show"))},window.purple.app.addConnectionStateListener(this.state.connectionStateListener);const e=document.getElementById("tts-player");var t,s;this.createPlayerElement(),e&&(e.remove(),null!==(t=this.previousState)&&void 0!==t&&t.isOpen.value&&this.openPlayer(null===(s=this.previousState)||void 0===s?void 0:s.isPlaying)),this.isUiRendered=!0}createTopBarElements(){let e=document.getElementsByTagName("storefront-app-bar")[0];this.uiElements.openPlayerButton=document.createElement("span"),this.uiElements.openPlayerButton.id="tts-player-open",this.uiElements.openPlayerButton.classList.add("icon"),(this.ttsService.disabledForPreview()||this.ttsService.disabledForAd())&&this.uiElements.openPlayerButton.classList.add("disabled"),this.uiElements.openPlayerButton.href="javascript:;",this.uiElements.openPlayerButton.addEventListener("click",()=>this.toggleOpenPlayer()),e.insertBefore(this.uiElements.openPlayerButton,e.childNodes[0])}createPlayerElement(){this.uiElements.playerElement=document.createElement("div"),this.uiElements.playerElement.id="tts-player",this.uiElements.playerElement.addEventListener("click",t=>{t.target!==this.uiElements.progressElement&&t.preventDefault()}),this.uiElements.playerElement.addEventListener("touchmove",t=>{t.target!==this.uiElements.progressElement&&t.preventDefault()}),this.createPlayerProgressElements(),this.createPlayerControlElements(),this.createSettingsElements();const e=document.getElementsByClassName("bottom-sticky-elements")[0];e&&e.insertBefore(this.uiElements.playerElement,e.firstElementChild)}createPlayerControlElements(){this.uiElements.controlsContainer=document.createElement("div"),this.uiElements.controlsContainer.id="tts-player-control
1s",this.uiElements.playButton=document.createElement("div"),this.uiElements.playButton.id="tts-player-button-play",this.uiElements.playButton.className="tts-button",this.uiElements.playButton.addEventListener("click",()=>this.togglePlay()),this.uiElements.seekBackButton=document.createElement("div"),this.uiElements.seekBackButton.id="tts-player-button-seek-back",this.uiElements.seekBackButton.classList.add("tts-player-button-seek","tts-button"),this.uiElements.seekBackButton.innerHTML=this.ttsService.ttsConfig.ttsSeekInterval,this.uiElements.seekBackButton.addEventListener("click",()=>{let t=Math.max(0,this.audio.currentTime-m.convertSecondsToMilli(this.ttsService.ttsConfig.ttsSeekInterval)*this.audio.speechRate);t!==this.audio.currentTime&&(this.seekTo(t),this.setAudioProgress(t,this.audio.bufferedTime),this.audioAligner.selectWord(!0),0===t&&(this.contentElement.scrollTop=0))}),this.uiElements.seekForwardButton=document.createElement("div"),this.uiElements.seekForwardButton.id="tts-player-button-seek-forward",this.uiElements.seekForwardButton.classList.add("tts-player-button-seek","tts-button"),this.uiElements.seekForwardButton.innerHTML=this.ttsService.ttsConfig.ttsSeekInterval,this.uiElements.seekForwardButton.addEventListener("click",t=>{let s=Math.min(this.audio.duration,this.audio.currentTime+m.convertSecondsToMilli(this.ttsService.ttsConfig.ttsSeekInterval)*this.audio.speechRate);s!==this.audio.currentTime&&(this.seekTo(s),this.setAudioProgress(s,this.audio.bufferedTime),this.audioAligner.selectWord(!0))}),this.uiElements.controlsContainer.classList.add("no-navigation"),this.uiElements.loadingElement=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.uiElements.loadingElement.id="tts-player-loading",this.uiElements.loadingElement.setAttribute("viewBox","0 0 66 66");let e=document.createElementNS("http://www.w3.org/2000/svg","circle");e.setAttribute("cx","33"),e.setAttribute("cy","33"),e.setAttribute("r","30"),this.uiElements.loadingElement.appendChild(e),this.uiElements.controlsContainer.appendChild(this.uiElements.seekBackButton),this.uiElements.controlsContainer.appendChild(this.uiElements.playButton),this.uiElements.controlsContainer.appendChild(this.uiElements.seekForwardButton),this.uiElements.controlsContainer.appendChild(this.uiElements.loadingElement),this.uiElements.playerElement.appendChild(this.uiElements.controlsContainer)}createSettingsElements(){const e=document.createElement("div");e.id="tts-player-button-settings",e.className="tts-button",this.uiElements.settingsButton=document.createElement("span"),this.uiElements.settingsButton.addEventListener("click",i=>{i.preventDefault(),this.uiElements.settingsContainer.classList.contains("open")?this.closeSettings():this.openSettings()}),e.appendChild(this.uiElements.settingsButton),this.uiElements.settingsContainer=document.createElement("div"),this.uiElements.settingsContainer.id="tts-player-settings",this.uiElements.settingsContainer.classList.add("container-popup"),window.addEventListener("click",i=>{i.target!==this.uiElements.settingsContainer&&i.target!==this.uiElements.speechContainer&&i.target!==this.uiElements.speechRateContainer&&i.target!==this.uiElements.settingsButton&&this.uiElements.settingsContainer.classList.contains("open")&&this.closeSettings()}),window.addEventListener("resize",()=>{this.uiElements.settingsContainer.classList.contains("open")&&this.closeSettings()}),this.uiElements.progressContainer.appendChild(e),this.uiElements.playerElement.appendChild(this.uiElements.settingsContainer);let t=this.getSpeechObject();if(Object.keys(t).length>1){let i=document.createElement("h3");i.innerHTML=this.ttsService.ttsMessages.TTS_SPEECH_TITLE||"",this.uiElements.settingsContainer.appendChild(i),this.uiElements.speechContainer=document.createElement("div"),this.uiElements.speechContainer.id="tts-speech";for(let[n,r]of Object.entries(t)){let l=r.gender,c=document.createElement("span");c.className="speech-icon";let p=document.createElement("span");p.className="speech-name",p.innerHTML=n;let g=document.createElement("input");g.className="speech-btn",g.setAttribute("type","radio");let h=document.createElement("div");h.id=n,h.classList.add(l+"-speech-container","speech-container"),h.appendChild(c),h.appendChild(p),h.appendChild(g),h.addEventListener("click",f=>{if(f.preventDefault(),h.id!==this.audio.speech){let v=this.state.isPlaying;this.stop(),this.changeSpeech(h.id,!0),v&&this.play()}},!0),this.uiElements.speechContainer.appendChild(h)}this.setSelectedSpeech(),this.uiElements.settingsContainer.appendChild(this.uiElements.speechContainer)}let s=document.createElement("h3");s.innerHTML=this.ttsService.ttsMessages.TTS_SPEECH_RATE_TITLE||"",this.uiElements.settingsContainer.appendChild(s),this.uiElements.speechRateContainer=document.createElement("div"),this.uiElements.speechRateContainer.id="tts-speech-rate",this.uiElements.speechRateOptionVerySlow=document.createElement("div"),this.uiElements.speechRateOptionVerySlow.className="speech-rate-option",this.uiElements.speechRateOptionVerySlow.innerHTML=this.getSpeechRateValue(this.ttsService.ttsConfig.ttsSpeechRateOptionVerySlow),this.uiElements.speechRateOptionVerySlow.addEventListener("click",i=>{i.preventDefault(),this.changeSpeechRate(this.ttsService.ttsConfig.ttsSpeechRateOptionVerySlow,!0)}),this.uiElements.speechRateOptionSlow=document.createElement("div"),this.uiElements.speechRateOptionSlow.className="speech-rate-option",this.uiElements.speechRateOptionSlow.innerHTML=this.getSpeechRateValue(this.ttsService.ttsConfig.ttsSpeechRateOptionSlow),this.uiElements.speechRateOptionSlow.addEventListener("click",i=>{i.preventDefault(),this.changeSpeechRate(this.ttsService.ttsConfig.ttsSpeechRateOptionSlow,!0)}),this.uiElements.speechRateOptionNormal=document.createElement("div"),this.uiElements.speechRateOptionNormal.className="speech-rate-option",this.uiElements.speechRateOptionNormal.innerHTML=this.getSpeechRateValue(this.ttsService.ttsConfig.ttsSpeechRateOptionNormal),this.uiElements.speechRateOptionNormal.addEventListener("click",i=>{i.preventDefault(),this.changeSpeechRate(this.ttsService.ttsConfig.ttsSpeechRateOptionNormal,!0)}),this.uiElements.speechRateOptionFast=document.createElement("div"),this.uiElements.speechRateOptionFast.className="speech-rate-option",this.uiElements.speechRateOptionFast.innerHTML=this.getSpeechRateValue(this.ttsService.ttsConfig.ttsSpeechRateOptionFast),this.uiElements.speechRateOptionFast.addEventListener("click",i=>{i.preventDefault(),this.changeSpeechRate(this.ttsService.ttsConfig.ttsSpeechRateOptionFast,!0)}),this.uiElements.speechRateOptionVeryFast=document.createElement("div"),this.uiElements.speechRateOptionVeryFast.className="speech-rate-option",this.uiElements.speechRateOptionVeryFast.innerHTML=this.getSpeechRateValue(this.ttsService.ttsConfig.ttsSpeechRateOptionVeryFast),this.uiElements.speechRateOptionVeryFast.addEventListener("click",i=>{i.preventDefault(),this.changeSpeechRate(this.ttsService.ttsConfig.ttsSpeechRateOptionVeryFast,!0)}),this.setSpeechRateUi(this.audio.speechRate),this.uiElements.speechRateContainer.appendChild(this.uiElements.speechRateOptionVerySlow),this.uiElements.speechRateContainer.appendChild(this.uiElements.speechRateOptionSlow),this.uiElements.speechRateContainer.appendChild(this.uiElements.speechRateOptionNormal),this.uiElements.speechRateContainer.appendChild(this.uiElements.speechRateOptionFast),this.uiElements.speechRateContainer.appendChild(this.uiElements.speechRateOptionVeryFast),this.uiElements.settingsContainer.appendChild(this.uiElements.speechRateContainer)}togglePlay(){this.state.isPlaying?this.pause():this.play()}toggleOpenPlayer(){this.state.isOpen.value?this.closePlayer(!0):this.openPlayer(!0)}updateProgressBarWithBuffering(e,t){const s=100*t,i=100*e;this.uiElements.progressElement.value=e,this.uiElements.progressElement.style.background="-webkit-gradient(linear, left top, right top, color-stop("+i+"%, var(--progressColor)), color-stop("+i+"%, var(--bufferingColor)), color-stop("+s+"%, var(--bufferingColor)), color-stop("+s+"%, var(--progressBgColor)))"}setAudioProgress(e,t,s){this.setCurrentTime(e),this.setDuration(s=s||this.audio.duration),this.setBufferedTime(t=t||this.audio.bufferedTime);let i=e/s;this.updateProgressBarWithBuffering(i,t>=e?t/s:i)}onProgressChange(e){let t=e.target.value*this.audio.duration;("input"===e.type||"touchend"===e.type)&&this.seekTo(t),this.setAudioProgress(t,this.audio.bufferedTime),this.audioAligner.selectWord(!0)}onProgressTouchEvent(e){e.preventDefault(),e.target.value=((e.pageX||e.touches&&e.touches[0]&&e.touches[0].pageX||e.changedTouches&&e.changedTouches[0]&&e.changedTouches[0].pageX)-e.target.offsetLeft)/e.target.offsetWidth,this.onProgressChange(e)}setCurrentTime(e){this.audio.currentTime=e,this.uiElements.currentTimeElement&&(this.uiElements.currentTimeElement.innerHTML=m.getFormattedTime(e/this.audio.speechRate))}setDuration(e){this.audio.duration=e,this.uiElements.durationElement&&(this.uiElements.durationElement.innerHTML=m.getFormattedTime(e/this.audio.speechRate))}setBufferedTime(e){this.audio.bufferedTime=e}setSpeechRate(e){var t=this;return(0,d.A)(function*(){try{var s;(null===(s=window.purple.media.version)||void 0===s?void 0:s.major)>=2?yield window.purple.media.setPlaybackRate({playbackRate:e}):window.purple.media.setPlaybackRate(e),t.audio.speechRate=e,t.purpleService.setState(o.SPEECH_RATE_IDENTIFIER,e.toString())}catch(i){console.warn("TTS playback rate could not be set: "+i)}})()}setSpeechRateUi(e){Array.from(document.getElementsByClassName("speech-rate-option")).forEac
1h(t=>t.classList.remove("selected")),e===this.ttsService.ttsConfig.ttsSpeechRateOptionVerySlow?this.uiElements.speechRateOptionVerySlow.classList.toggle("selected"):e===this.ttsService.ttsConfig.ttsSpeechRateOptionSlow?this.uiElements.speechRateOptionSlow.classList.toggle("selected"):e===this.ttsService.ttsConfig.ttsSpeechRateOptionFast?this.uiElements.speechRateOptionFast.classList.toggle("selected"):e===this.ttsService.ttsConfig.ttsSpeechRateOptionVeryFast?this.uiElements.speechRateOptionVeryFast.classList.toggle("selected"):this.uiElements.speechRateOptionNormal.classList.toggle("selected"),this.uiElements.speechRateContainer.classList.remove("open")}getSpeechRateValue(e){let t;switch(e){case this.ttsService.ttsConfig.ttsSpeechRateOptionNormal:t="0";break;case this.ttsService.ttsConfig.ttsSpeechRateOptionSlow:t="-1";break;case this.ttsService.ttsConfig.ttsSpeechRateOptionVerySlow:t="-2";break;case this.ttsService.ttsConfig.ttsSpeechRateOptionFast:t="+1";break;case this.ttsService.ttsConfig.ttsSpeechRateOptionVeryFast:t="+2";break;default:t=""}return t}getFirstSpeechKey(){let e=this.getSpeechObject();return Object.keys(e)[0]}getSpeechObject(){return this.ttsService.ttsContentConfig}getDefaultSpeech(){return Object.keys(this.getSpeechObject()).includes(this.ttsService.ttsConfig.ttsDefaultSpeech)?this.tt
1sService.ttsConfig.ttsDefaultSpeech:this.getFirstSpeechKey()}openSettings(){this.uiElements.settingsContainer.classList.add("open"),m.setSettingsContainerPosition(this.uiElements.settingsButton,this.uiElements.settingsContainer)}closeSettings(){this.uiElements.settingsContainer.classList.remove("open")}setSelectedSpeech(){Array.from(this.uiElements.speechContainer.getElementsByClassName("speech-container")).forEach(e=>{let t=e.getElementsByTagName("input")[0];t.classList.remove("selected"),e.id===this.audio.speech&&t.classList.add("selected")})}getTrackingBaseKey(){return"TTS"}isCurrent(){return this.state.isCurrent}createPlayerProgressElements(){this.uiElements.progressContainer=document.createElement("div"),this.uiElements.progressContainer.id="tts-player-progress",this.uiElements.currentTimeElement=document.createElement("span"),this.uiElements.currentTimeElement.className="tts-player-time",this.uiElements.currentTimeElement.innerHTML=m.getFormattedTime(0),this.uiElements.durationElement=document.createElement("span"),this.uiElements.durationElement.className="tts-player-time",this.uiElements.durationElement.innerHTML=m.getFormattedTime(this.audio.duration/this.audio.speechRate),this.uiElements.progressElement=document.createElement("input"),this.uiElements.progressElement.type="range",this.uiElements.progressElement.min=0,this.uiElements.progressElement.max=1,this.uiElements.progressElement.value=0,this.uiElements.progressElement.step=1e-5,this.uiElements.progressElement.addEventListener("input",e=>this.onProgressChange(e)),this.uiElements.progressElement.addEventListener("touchmove",e=>this.onProgressTouchEvent(e)),this.uiElements.progressElement.addEventListener("touchend",e=>this.onProgressTouchEvent(e)),this.uiElements.progressElement.addEventListener("click",e=>this.onProgressTouchEvent(e)),this.uiElements.progressContainer.appendChild(this.uiElements.currentTimeElement),this.uiElements.progressContainer.appendChild(this.uiElements.progressElement),this.uiElements.progressContainer.appendChild(this.uiElements.durationElement),this.uiElements.playerElement.appendChild(this.uiElements.progressContainer)}createSpeechPropertiesUrl(e){const t=new URL(this.ttsService.getTtsResourceBaseUrl()),s=new URL(e).pathname.split("/"),i=s.indexOf("tts"),n=-1!==i?s.slice(i+1).join("/"):"";return t.pathname=("/"==t.pathname?"":t.pathname)+"/"+n,t.href}}const C={ttsContentSelector:"#sprylab_purple_content",ttsMarkerContentSelector:"#sprylab_purple_content .purple-inner-container",ttsSkipContentClasses:["no-tts"],ttsSkipContentTags:["svg","polygon","path"],ttsDefaultSpeech:"",ttsSeekInterval:10,ttsSpeechRateOptionVerySlow:.7,ttsSpeechRateOptionSlow:.85,ttsSpeechRateOptionNormal:1,ttsSpeechRateOptionFast:1.15,ttsSpeechRateOptionVeryFast:1.3,ttsNextArticleLoadingTime:1e4,ttsDisableForPreview:!1,ttsDisableForAd:!0},k={TTS_SPEECH_TITLE:"Speaker",TTS_SPEECH_RATE_TITLE:"Speed rate",TTS_NO_INTERNET_CONNECTION_TITLE:"No internet connection!",TTS_NO_INTERNET_CONNECTION_TEXT:"To activate read mode, you need to have internet connection.",TTS_NO_INTERNET_CONNECTION_RETRY_BUTTON:"Retry",TTS_NEXT_ARTICLE_TITLE:"Next article",TTS_NEXT_ARTICLE_TEXT:'"%s"',TTS_NEXT_ARTICLE_SKIP_BUTTON:"Skip",TTS_LAST_ARTICLE_TITLE:"End of issue",TTS_LAST_ARTICLE_TEXT:"You have heard the last article of this issue.",TTS_LAST_ARTICLE_CLOSE_BUTTON:"Close",TTS_CANCEL_BUTTON:"Cancel"};let _=(()=>{var a;class e{constructor(){this.platformId=(0,E.WQX)(E.Agw),this.translateService=(0,E.WQX)(I.c),this.purpleService=(0,E.WQX)(O.Wj),this.appData=(0,E.WQX)(A.fj),this.initTts$=new L.B,this.ttsPlayerCancel$=new R.t(!1),(0,N.UE)(this.platformId)&&(this.loadTTSConfig(),this.loadTTSMessages())}initTTSforPost(s){(0,N.UE)(this.platformId)&&this.init(s)}init(s){var i=this;return(0,d.A)(function*(){var n;i.ttsPlayerCancel$.next(!1),s.resources||(s=yield i.purpleService.getCatalogContent(s.id,!0,{includeResources:!0}));const r=null===(n=s.resources)||void 0===n?void 0:n.find(l=>!!l.properties.ttsResource);if(r)if(yield i.loadTTSContentConfig(r.url),i.purpleService.purpleRef&&i.purpleService.purpleRef.media&&i.ttsContentConfig&&i.ttsConfig&&i.ttsMessages){let l;if(i.ttsPlayer&&(i.ttsPlayer.delete(),l=i.ttsPlayer.state,delete i.ttsPlayer),!0===i.ttsPlayerCancel$.getValue())return console.debug("TTS init canceled"),void i.initTts$.next(!1);try{i.ttsPlayer=new D(i.ttsConfig,s,i,i.purpleService,l),i.ttsPlayer.init(),i.initTts$.next(!0)}catch(c){i.initTts$.next(!1),console.error("TTS init error:",c)}}else i.initTts$.next(!1),console.error("Could not init TTS player");else i.initTts$.next(!1)})()}
1disabledForPreview(){return this.ttsConfig.ttsDisableForPreview}disabledForAd(){return this.ttsConfig.ttsDisableForAd}loadTTSContentConfig(s){var i=this;return(0,d.A)(function*(){try{let n=yield T(s,{useFetch:!0,returnRedirect:!0});if(n.redirectUrl){const r=new URL(n.redirectUrl);n.response||(r.search="",n=yield T(r.href,{useFetch:!0}));let l=r.pathname.split("/");const c=l.indexOf("tts");l=-1!==c?l.slice(0,c+1):[],r.pathname=l.join("/"),i.ttsResourceBaseUrl=r.href,i.ttsContentConfig=yield n.response}else i.ttsContentConfig=yield n.response}catch(n){console.error("Could not load tts content config: "+n)}})()}loadTTSConfig(){var s=this;return(0,d.A)(function*(){try{const i=(0,b.Al)("storefront/assets/tts_config.json",s.appData),n=yield T(i);s.ttsConfig=(0,S.A)((0,S.A)({},C),n),n.ttsSkipContentClasses&&(s.ttsConfig.ttsSkipContentClasses=[...C.ttsSkipContentClasses,...n.ttsSkipContentClasses]),n.ttsSkipContentTags&&(s.ttsConfig.ttsSkipContentTags=[...C.ttsSkipContentTags,...n.ttsSkipContentTags])}catch(i){s.ttsConfig=C,console.warn("Could not load custom tts config: "+i)}})()}loadTTSMessages(){var s=this;return(0,d.A)(function*(){try{const i=s.translateService.messages;s.ttsMessages=(0,S.A)((0,S.A)({},k),i)}catch(i){s.ttsMessages=k,console.warn("Could not load custom tts messages: "+i)}})()}delete(){var s,i,n,r;this.ttsPlayerCancel$.next(!0),null===(s=this.ttsPlayer)||void 0===s||s.reset(),null===(i=this.ttsPlayer)||void 0===i||i.delete(),null!==(n=this.ttsPlayer)&&void 0!==n&&null!==(n=n.state)&&void 0!==n&&n.forceOpen||null===(r=this.ttsPlayer)||void 0===r||r.closePlayer()}updateForceOpen(){var s;null!==(s=this.ttsPlayer)&&void 0!==s&&s.state.isOpen.value&&(this.ttsPlayer.state.forceOpen=!0)}getTtsResourceBaseUrl(){return this.ttsResourceBaseUrl}}return(a=e).\u0275fac=function(s){return new(s||a)},a.\u0275prov=E.jDH({token:a,factory:a.\u0275fac,providedIn:"root"}),e})()}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.