var cgGcfmAudioLoaded = false; var cgGcfmLoadAttempts = 0; var cgGcfmPlayAttemptInterval = null; var cgGcfmPositionTrackerInterval = null; var cgGcfmTimeWritten = false; var cgGcfmXDown = null; var cgGcfmYDown = null; var cgGcfmPlayerUrl = 'https://player.godcaster.fm'; var cgGcfmAssetsUrl = 'https://assets.godcaster.fm'; /* Set sources */ if (document.currentScript.src.indexOf('lightfeed.org') !== -1) { cgGcfmPlayerUrl = 'https://player.lightfeed.org'; cgGcfmAssetsUrl = 'https://assets.lightfeed.org'; } /* Set up listeners */ document.addEventListener('click', gcfmHandlePlayerClick); document.addEventListener('input', gcfmHandleSliderClick); document.addEventListener('error', gcfmHandlePlayerError, true); document.addEventListener('touchstart', gcfmHandleTouchStart, false); document.addEventListener('touchmove', gcfmHandleTouchMove, false); function gcfmLoadPlayer() { let lgPlayerContainer = document.getElementById('gcfm-player-container'); lgPlayerContainer.setAttribute('style', 'width:100%;height:100%;'); lgScriptTw = document.createElement('script'); lgScriptTw.setAttribute('src', cgGcfmAssetsUrl + '/tailwind.js'); lgPlayer = document.createElement('div'); lgPlayer.setAttribute('id', 'gcfm-player'); lgScriptTw.onload = function () { lgPlayerContainer.appendChild(lgPlayer); gcfmPlayerInit(); } lgPlayerContainer.appendChild(lgScriptTw); } function gcfmPlayerInit() { url = new URL(cgGcfmPlayerUrl + '/publicplayer/init'); url.searchParams.append('pid', gcfmGetPlayerId()); url.searchParams.append('did', gcfmGetPlayerDid()); url.searchParams.append('eid', gcfmGetEpisodeIdFromUrl()); url.searchParams.append('page', gcfmGetPageNumberFromUrl()); url.searchParams.append('fid', gcfmGetFeedIdFromUrl()); url.searchParams.append('shared', gcfmEpisodeWasShared(false)); url.searchParams.append('style', gcfmGetPlayerStyleFromUrl()); fetch(url.href) .then(response => { // When the page is loaded convert it to text return response.text() }) .then(html => { lgPlayer = document.getElementById('gcfm-player'); lgPlayer.outerHTML = html; gcfmPlayerEnvironmentInit(); gcfmPlayerBodyInit(); }) .catch(error => { console.error('Failed to load the player: ', error) }) } function gcfmPlayerEnvironmentInit() { lgPlayer = document.getElementById('gcfm-player'); controlsPosition = lgPlayer.getAttribute('data-controlsposition'); if (controlsPosition == 2) { document.getElementById('gcfm-player-container').style.marginBottom = '60px'; } } function gcfmPlayerBodyInit() { gcfmPlayerBodyChange( gcfmGetFeedIdFromUrl(), gcfmGetPageNumberFromUrl(), gcfmGetPlayerStyle(), gcfmEpisodeWasShared(), gcfmGetEpisodeIdFromUrl(), ); } function gcfmPlayerBodyChange(feedId, page, style, shared, episodeId) { if (page == 0) page = 1; var url = new URL(cgGcfmPlayerUrl + '/publicplayer/body'); url.searchParams.append('pid', gcfmGetPlayerId()); url.searchParams.append('did', gcfmGetPlayerDid()); url.searchParams.append('page', page); if (feedId) { url.searchParams.append('fid', feedId); } if (episodeId) { url.searchParams.append('eid', episodeId); } url.searchParams.append('shared', shared); url.searchParams.append('style', style); fetch(url.href) .then(response => { // When the page is loaded convert it to text return response.text() }) .then(html => { lgPlayerBody = document.getElementById('gcfm-body'); lgPlayerBody.outerHTML = html; gcfmSetPlayerStyle(style); gcfmSetPaginationStates(page); }) .catch(error => { console.error('Failed to load player content: ', error) }) } function gcfmGetPageNumberFromUrl() { let url = new URL(window.location.href); let page = url.searchParams.get('gcfm-page'); return page || 0; } function gcfmGetPlayerStyleFromUrl() { let url = new URL(window.location.href); let style = url.searchParams.get('gcfm-style'); return style || 0; } function gcfmGetPlayerStyle() { let elStyle = document.getElementById('gcfm-body-style-toggle'); if (elStyle) { return elStyle.getAttribute('data-style'); } else { return 0; } } function gcfmGetPlatform() { var lgPlayer = document.getElementById('gcfm-player'); var lgPlatform = lgPlayer.getAttribute('data-platform').trim().toLowerCase(); if (lgPlatform.indexOf('ios') < 0 && lgPlatform.indexOf('android') < 0) { lgPlatform = 'web'; } return lgPlatform; } function gcfmSetPlayerStyle(style) { document.getElementById('gcfm-body-style-toggle').setAttribute('data-style', style); let styleIcons = document.getElementsByClassName('gcfm-body-style-toggle-icon') for (var i = 0; i < styleIcons.length; i++) { if (styleIcons[i].id == 'gcfm-body-style-toggle-icon-' + style) { styleIcons[i].style.display = ''; } else { styleIcons[i].style.display = 'none'; } } } function gcfmGetFeedIdFromUrl() { let url = new URL(window.location.href); let feedId = url.searchParams.get('gcfm-fid'); return feedId || 0; } function gcfmGetEpisodeIdFromUrl() { let url = new URL(window.location.href); let episodeId = url.searchParams.get('gcfm-eid'); return episodeId || 0; } function gcfmGetStartTime() { let url = new URL(window.location.href); let ts = url.searchParams.get('gcfm-ts'); return ts || 0; } function gcfmEpisodeWasShared(strip) { let url = new URL(window.location.href); let wasShared = url.searchParams.get('gcfm-shared'); if (strip) { gcfmStripSharingFromUrl(url); } return wasShared || "false"; } function gcfmStripSharingFromUrl(url) { let newUrl = new URL(url); newUrl.searchParams.delete('gcfm-shared'); newUrl.searchParams.delete('gcfm-eid'); newUrl.searchParams.delete('gcfm-ts'); window.history.replaceState(null, '', newUrl); } function gcfmGetNextPage() { let elPrevPage = document.getElementById('gcfm-paginator-prev'); let elNextPage = document.getElementById('gcfm-paginator-next'); if (elNextPage === null || elPrevPage === null) { return 0; } if (elPrevPage.getAttribute('data-page') == elNextPage.getAttribute('data-lastpage')) { return elNextPage.getAttribute('data-lastpage'); } return parseInt(elPrevPage.getAttribute('data-page')) + 1; } function gcfmGetPrevPage() { let elPrevPage = document.getElementById('gcfm-paginator-prev'); if (elPrevPage === null || parseInt(elPrevPage.getAttribute('data-page')) <= 1) { return 1; } return parseInt(elPrevPage.getAttribute('data-page')) - 1; } function gcfmSetPaginationStates(pageRequested) { let elPrevPage = document.getElementById('gcfm-paginator-prev'); let elNextPage = document.getElementById('gcfm-paginator-next'); style = gcfmGetPlayerStyle(); if (style == 1 || style == '1') { gcfmShowPageNavigation(false); } else { gcfmShowPageNavigation(true); } if (elNextPage === null || elPrevPage === null) { return 0; } elPrevPage.setAttribute('data-page', pageRequested); if (pageRequested == 1) { elPrevPage.style.display = 'none'; } else { elPrevPage.style.display = ''; } if (pageRequested == parseInt(elNextPage.getAttribute('data-lastpage'))) { elNextPage.style.display = 'none'; } else { elNextPage.style.display = ''; } return 0; } function gcfmShowPageNavigation(visible) { if (visible) { document.getElementById('gcfm-player-page-nav').style.display = ''; } else { document.getElementById('gcfm-player-page-nav').style.display = 'none'; } } function gcfmGetPlayerId() { let elPlayer = document.getElementById('gcfm-player-container'); return elPlayer.getAttribute('data-playerid'); } function gcfmGetPlayerDid() { let elPlayer = document.getElementById('gcfm-player-container'); return elPlayer.getAttribute('data-did'); } function gcfmHandleSliderClick(event) { var element = event.target; if (element.id === 'gcfm-audio-control-slider') { let lgAudioPlayer = document.getElementById('gcfm-player-audio'); lgAudioPlayer.currentTime = element.value; } } function gcfmHandlePlayerError(event) { var element = event.target; if (element.id === 'gcfm-player-audio-source' && element.src !== '') { let s = ""; let lgAudioPlayer = document.getElementById('gcfm-player-audio'); let lgAudioPlayerSource = document.getElementById('gcfm-player-audio-source'); if (lgAudioPlayer.readyState === 0 && lgAudioPlayer.networkState === 3) { gcfmDisplayErrorMessage("This media file can't be loaded because of a network issue or a publisher-side server issue."); clearInterval(cgGcfmPlayAttemptInterval); lgAudioPlayerSource.setAttribute('src', ''); gcfmHideAllEpisodeLoadingIcons(); } } } function gcfmHandlePlayerClick(event) { var element = event.target; /* Player body style toggle */ if (element.id === 'gcfm-body-style-toggle') { var style = document.getElementById('gcfm-body-style-toggle') .getAttribute('data-style'); if (style == 0 || style == 1) { gcfmPlayerBodyChange(false, 0, (1 - style), 0); } } /* Feed tile was clicked */ if (element.classList.contains('gcfm-program-link')) { let feedId = element.getAttribute('data-feedid'); let pageNumber = element.getAttribute('data-page'); gcfmPlayerBodyChange(feedId, pageNumber, 0, false); } /* Body back button was clicked */ if ( element.id === 'gcfm-back-button' || element.id === 'gcfm-back-button-div' || element.id === 'gcfm-back-button-span' || element.id === 'gcfm-back-button-icon' ) { let pageNumber = document.getElementById('gcfm-back-button').getAttribute('data-page'); gcfmPlayerBodyChange(false, pageNumber, 0, false); } if (element.id === 'gcfm-paginator-prev') { gcfmPlayerBodyChange(false, gcfmGetPrevPage(), 0, false); } if (element.id === 'gcfm-paginator-next') { gcfmPlayerBodyChange(false, gcfmGetNextPage(), 0, false); } if (element.classList.contains('gcfm-paginator-button')) { let pageNumber = element.getAttribute('data-page'); gcfmPlayerBodyChange(false, pageNumber, 0, false); } /* Episode play button in the feed view */ if (element.classList.contains('gcfm-button-episode-play')) { let playTriggerNode = element; let lgAudioPlayer = document.getElementById('gcfm-player-audio'); let lgAudioPlayerSource = document.getElementById('gcfm-player-audio-source'); urlToLoad = gcfmBuildEnclosureUrlWithULID(playTriggerNode.getAttribute('data-enclosureurl')); if (lgAudioPlayerSource.getAttribute('src') == urlToLoad) { document.getElementById('gcfm-audio-control-playpause').click(); return false; } lgAudioPlayerSource.setAttribute('src', urlToLoad); lgAudioPlayerSource.setAttribute('type', playTriggerNode.getAttribute('data-enclosuretype')); document.getElementById('gcfm-audio-control-episode-title').innerHTML = playTriggerNode.getAttribute('data-title'); document.getElementById('gcfm-audio-control-image').setAttribute('src', playTriggerNode.getAttribute('data-imageurl')); gcfmHideAllEpisodePauseIcons(); gcfmSetEpisodeLoadingIcon(playTriggerNode); lgAudioPlayer.load(); fetch(gcfmGetActionUrl() + '?' + 'action=play' + '&did=' + gcfmGetPlayerDid() + '&pid=' + gcfmGetPlayerId() + '&fid=' + playTriggerNode.getAttribute('data-feedtitle') + '&eid=' + playTriggerNode.getAttribute('data-title') + '&ts=' + Math.floor(lgAudioPlayer.currentTime) ); lgAudioPlayer.setAttribute('episode', playTriggerNode.id); cgGcfmLoadAttempts = 0; /* Wait for the media to load before playing and changing state */ cgGcfmPlayAttemptInterval = setInterval(function () { let lgAudioPlayer = document.getElementById('gcfm-player-audio'); let lgAudioPlayerSource = document.getElementById('gcfm-player-audio-source'); let playTriggerNode = document.getElementById(lgAudioPlayer.getAttribute('episode')); if (lgAudioPlayer.readyState >= 3) { let timeStartAt = playTriggerNode.getAttribute('data-startat'); let timeLastStored = localStorage.getItem(lgAudioPlayerSource.getAttribute('src')); if (timeStartAt > 0) { lgAudioPlayer.currentTime = timeStartAt; } else if (timeLastStored > 0) { lgAudioPlayer.currentTime = timeLastStored; } lgAudioPlayer.play(); document.getElementById('gcfm-audio-control-slider').removeAttribute('disabled'); document.getElementById('gcfm-audio-bar').classList.remove('hidden'); clearInterval(cgGcfmPlayAttemptInterval); document.getElementById('gcfm-audio-control-play-icon').classList.add('hidden'); document.getElementById('gcfm-audio-control-pause-icon').classList.remove('hidden'); document.getElementById('gcfm-audio-control-loading-icon').classList.add('hidden'); /* TODO: This will need to change later for the tailwind build pipeline */ document.getElementById('gcfm-audio-bar-wrapper').classList.remove('opacity-25'); lgAudioPlayer.addEventListener('timeupdate', gcfmUpdateTrackTime); } else if (cgGcfmLoadAttempts >= 100) { alert("Could not load the selected media to play."); clearInterval(cgGcfmPlayAttemptInterval); lgAudioPlayerSource.setAttribute('src', ''); gcfmHideAllEpisodeLoadingIcons(); } else { cgGcfmLoadAttempts = cgGcfmLoadAttempts + 1; } }, 300); } /* Audio control bar play pause toggle button */ if (element.id === 'gcfm-audio-control-playpause') { let lgAudioPlayer = document.getElementById('gcfm-player-audio'); let playTriggerNode = document.getElementById(lgAudioPlayer.getAttribute('episode')); if (lgAudioPlayer.paused) { if (lgAudioPlayer.readyState === 4) { lgAudioPlayer.play(); fetch(gcfmGetActionUrl() + '?' + 'action=resume' + '&did=' + gcfmGetPlayerDid() + '&pid=' + gcfmGetPlayerId() + '&fid=' + playTriggerNode.getAttribute('data-feedtitle') + '&eid=' + playTriggerNode.getAttribute('data-title') + '&ts=' + Math.floor(lgAudioPlayer.currentTime) ); let elEpisode = document.getElementById(lgAudioPlayer.getAttribute('episode')); if (elEpisode) { elEpisode.getElementsByClassName('play-icon')[0].classList.add('hidden'); elEpisode.getElementsByClassName('pause-icon')[0].classList.remove('hidden'); elEpisode.getElementsByClassName('loading-icon')[0].classList.add('hidden'); } document.getElementById('gcfm-audio-control-play-icon').classList.add('hidden'); document.getElementById('gcfm-audio-control-pause-icon').classList.remove('hidden'); document.getElementById('gcfm-audio-control-loading-icon').classList.add('hidden'); } } else { lgAudioPlayer.pause(); gcfmHideAllEpisodePauseIcons(); document.getElementById('gcfm-audio-control-pause-icon').classList.add('hidden'); document.getElementById('gcfm-audio-control-play-icon').classList.remove('hidden'); document.getElementById('gcfm-audio-control-loading-icon').classList.add('hidden'); } } /* Audio control bar jump ahead button */ if (element.id === 'gcfm-audio-control-forward') { let lgAudioPlayer = document.getElementById('gcfm-player-audio'); if (lgAudioPlayer.readyState >= 4) { lgAudioPlayer.currentTime = lgAudioPlayer.currentTime + 30; } } /* Audio control bar jump backward button */ if (element.id === 'gcfm-audio-control-back') { let lgAudioPlayer = document.getElementById('gcfm-player-audio'); if (lgAudioPlayer.readyState >= 4) { lgAudioPlayer.currentTime = lgAudioPlayer.currentTime - 10; } } /* Share button in the share modal */ if (element.id === 'gcfm-share-modal-submit') { let modal = document.getElementById('gcfm-share-modal'); let shareTriggerNode = document.getElementById(modal.getAttribute('data-share-trigger-node-id')); let userMessage = document.getElementById('gcfm-share-modal-message').value.trim(); let userName = document.getElementById('gcfm-share-modal-name').value.trim(); let shareEpisodeTitle = shareTriggerNode.getAttribute('data-episodetitle'); var shareDestinationUrl = new URL(window.location.href); shareDestinationUrl.searchParams.append('gcfm-did', gcfmGetPlayerDid()); shareDestinationUrl.searchParams.append('gcfm-pid', shareTriggerNode.getAttribute('data-playerid')); shareDestinationUrl.searchParams.append('gcfm-fid', shareTriggerNode.getAttribute('data-feedid')); shareDestinationUrl.searchParams.append('gcfm-eid', shareTriggerNode.getAttribute('data-episodeid')); shareDestinationUrl.searchParams.append('gcfm-shared', 'true'); if (document.getElementById('gcfm-share-modal-timestamp').checked) { let startAt = Math.floor(document.getElementById('gcfm-player-audio').currentTime); shareDestinationUrl.searchParams.append('gcfm-ts', startAt); document.getElementById('gcfm-share-modal-timeshow').value = gcfmFormatSecondsAsTime(Math.floor(startAt)); } let shareTrackUrlString = document.getElementById('gcfm-share-modal').getAttribute('data-shareurl'); var shareTrackUrl = new URL(shareTrackUrlString); shareTrackUrl.searchParams.append('dest_url', shareDestinationUrl.href); shareTrackUrl.searchParams.append('did', gcfmGetPlayerDid()); shareTrackUrl.searchParams.append('pid', shareTriggerNode.getAttribute('data-playerid')); shareTrackUrl.searchParams.append('fid', shareTriggerNode.getAttribute('data-feedid')); shareTrackUrl.searchParams.append('title', shareEpisodeTitle); if (userMessage.trim()) { shareTrackUrl.searchParams.append('message', userMessage); } if (userName.trim()) { shareTrackUrl.searchParams.append('name', userName); } if (document.getElementById('gcfm-share-modal-timestamp').checked) { let startAt = Math.floor(document.getElementById('gcfm-player-audio').currentTime); shareTrackUrl.searchParams.append('ts', startAt); } document.getElementById('gcfm-share-modal-to-link').setAttribute( 'href', shareTrackUrl.href ); document.getElementById('gcfm-share-modal-to-facebook').setAttribute( 'href', 'https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(shareTrackUrl.href) ); document.getElementById('gcfm-share-modal-to-x').setAttribute( 'href', 'https://twitter.com/intent/tweet?url=' + encodeURIComponent(shareTrackUrl.href) + '&text=' + encodeURIComponent(userMessage) + '&hashtags=godcaster' ); var emailSubject = userName + ' shared "' + shareEpisodeTitle + '"'; if (!userName.trim()) { emailSubject = 'Sharing "' + shareEpisodeTitle + '" with you...'; } var emailBody = userName + ' wrote: "' + userMessage + '"'; if (!userMessage.trim() && !userName.trim()) { emailBody = 'Someone shared "' + shareEpisodeTitle + '" with you...'; } else if (!userMessage.trim()) { emailBody = userName + ' shared "' + shareEpisodeTitle + '" with you...'; } else if (!userName.trim()) { emailBody = 'The sharer wrote: "' + userMessage + '"'; } document.getElementById('gcfm-share-modal-to-email').setAttribute( 'href', 'mailto:?subject=' + encodeURIComponent(emailSubject) + '&body=' + encodeURIComponent(emailBody) + '%0D%0A%0D%0A' + encodeURIComponent(shareTrackUrl.href) ); document.getElementById('gcfm-share-modal-destinations').classList.remove('hidden'); navigator.share( { url: shareTrackUrl.href, text: userMessage, } ) } /* Share button in the feed view */ if (element.classList.contains('gcfm-button-episode-share')) { let shareTriggerNode = element; let shareTimestamp = document.getElementById('gcfm-share-modal-timestamp'); var modal = document.getElementById('gcfm-share-modal'); modal.setAttribute('data-share-trigger-node-id', shareTriggerNode.id); shareTimestamp.disabled = true; if (document.getElementById('gcfm-player-audio').currentTime > 0) { shareTimestamp.disabled = false; } modal.classList.remove('hidden'); return false; } if (element.id === 'gcfm-share-modal-close') { document.getElementById('gcfm-share-modal-to-link').removeAttribute('href'); document.getElementById('gcfm-share-modal-destinations').classList.add('hidden'); document.getElementById('gcfm-share-modal-message').value = ''; document.getElementById('gcfm-share-modal-timestamp').checked = false; document.getElementById('gcfm-share-modal-timeshow').value = ''; } /* Follow button in the player */ if (element.id === 'gcfm-follow-player-feed') { fetch(gcfmGetActionUrl() + '?' + 'action=follow' + '&did=' + gcfmGetPlayerDid() + '&pid=' + gcfmGetPlayerId() ); var lgModal = document.getElementById('gcfm-follow-modal'); var lgPlatform = gcfmGetPlatform(); let links = lgModal.getElementsByClassName('gcfm-follow-target'); for (let i = 0; i < links.length; i++) { if (links[i].classList.contains(lgPlatform)) { links[i].classList.remove('hidden'); } } lgModal.classList.remove('hidden'); return false; } if (element.id === 'gcfm-follow-modal-close') { document.getElementById('gcfm-follow-modal').classList.add('hidden'); } } function gcfmGetActionUrl() { return document.getElementById('gcfm-player-app').getAttribute('data-actionurl'); } function gcfmUpdateTrackTime(event) { let currTimeDiv = document.getElementById('gcfm-audio-control-current'); let durationDiv = document.getElementById('gcfm-audio-control-duration'); let currTime = Math.floor(event.target.currentTime); let duration = Math.floor(event.target.duration); gcfmSetProgressBarPosition(currTime, duration); currTimeDiv.innerHTML = gcfmFormatSecondsAsTime(currTime); /* Write the current time to localStorage every 5 seconds */ if (currTime > 0 && currTime % 5 == 0) { if (!cgGcfmTimeWritten) { let lgAudioPlayer = document.getElementById('gcfm-player-audio'); let lgAudioPlayerSource = document.getElementById('gcfm-player-audio-source'); localStorage.setItem( lgAudioPlayerSource.getAttribute('src'), lgAudioPlayer.currentTime ); cgGcfmTimeWritten = true; } } else if (cgGcfmTimeWritten) { cgGcfmTimeWritten = false; } if (currTime >= duration) { gcfmHideAllEpisodePauseIcons(); document.getElementById('gcfm-audio-control-pause-icon').classList.add('hidden'); document.getElementById('gcfm-audio-control-play-icon').classList.remove('hidden'); document.getElementById('gcfm-audio-control-loading-icon').classList.add('hidden'); } gcfmUpdateEpisodeTiles(event); if (isNaN(duration)) { durationDiv.innerHTML = '00:00'; } else { durationDiv.innerHTML = gcfmFormatSecondsAsTime(duration); } } function gcfmFormatSecondsAsTime(secs) { var hr = Math.floor(secs / 3600); var min = Math.floor((secs - (hr * 3600)) / 60); var sec = Math.floor(secs - (hr * 3600) - (min * 60)); if (min < 10) { min = "0" + min; } if (sec < 10) { sec = "0" + sec; } if (isNaN(min)) { min = "00"; } if (isNaN(sec)) { sec = "00"; } return min + ':' + sec; } function gcfmHideAllEpisodePauseIcons() { let pauseIcons = document.getElementsByClassName('pause-icon'); for (i = 0; i < pauseIcons.length; i++) { pauseIcons[i].classList.add('hidden'); pauseIcons[i].parentNode.getElementsByClassName('play-icon')[0].classList.remove('hidden'); pauseIcons[i].parentNode.getElementsByClassName('loading-icon')[0].classList.add('hidden'); } } function gcfmHideAllEpisodeLoadingIcons() { let loadingIcons = document.getElementsByClassName('loading-icon'); for (i = 0; i < loadingIcons.length; i++) { loadingIcons[i].classList.add('hidden'); loadingIcons[i].parentNode.getElementsByClassName('play-icon')[0].classList.remove('hidden'); loadingIcons[i].parentNode.getElementsByClassName('pause-icon')[0].classList.add('hidden'); } } function gcfmSetEpisodePlayingIcon(elEpisode) { elEpisode.getElementsByClassName('play-icon')[0].classList.add('hidden'); elEpisode.getElementsByClassName('pause-icon')[0].classList.remove('hidden'); elEpisode.getElementsByClassName('loading-icon')[0].classList.add('hidden'); } function gcfmSetEpisodeLoadingIcon(elEpisode) { elEpisode.getElementsByClassName('play-icon')[0].classList.add('hidden'); elEpisode.getElementsByClassName('pause-icon')[0].classList.add('hidden'); elEpisode.getElementsByClassName('loading-icon')[0].classList.remove('hidden'); document.getElementById('gcfm-audio-control-play-icon').classList.add('hidden'); document.getElementById('gcfm-audio-control-pause-icon').classList.add('hidden'); document.getElementById('gcfm-audio-control-loading-icon').classList.remove('hidden'); } function gcfmSetEpisodePausedIcon(elEpisode) { elEpisode.getElementsByClassName('play-icon')[0].classList.add('hidden'); elEpisode.getElementsByClassName('pause-icon')[0].classList.remove('hidden'); elEpisode.getElementsByClassName('loading-icon')[0].classList.add('hidden'); } function gcfmUpdateEpisodeTiles(event) { let elEpisode = document.getElementById(event.target.getAttribute('episode')); if (elEpisode && !event.target.paused) { elEpisode.getElementsByClassName('play-icon')[0].classList.add('hidden'); elEpisode.getElementsByClassName('pause-icon')[0].classList.remove('hidden'); elEpisode.getElementsByClassName('loading-icon')[0].classList.add('hidden'); } } function gcfmGetTouches(evt) { return evt.touches; } function gcfmHandleTouchStart(evt) { const firstTouch = gcfmGetTouches(evt)[0]; cgGcfmXDown = firstTouch.clientX; cgGcfmYDown = firstTouch.clientY; } function gcfmHandleTouchMove(evt) { if (!cgGcfmXDown || !cgGcfmYDown) { return; } var xUp = evt.touches[0].clientX; var yUp = evt.touches[0].clientY; var xDiff = cgGcfmXDown - xUp; var yDiff = cgGcfmYDown - yUp; if (Math.abs(xDiff) > Math.abs(yDiff)) {/*most significant*/ if (xDiff > 0) { /* right swipe */ /* page forward through the program listing */ let bb = document.getElementById('gcfm-back-button'); let np = document.getElementById('gcfm-paginator-next'); if (!bb && gcfmIsTouchInBounds(evt.target) && np) { np.click(); } } else { /* left swipe */ /* return from feed page to program listing */ let bb = document.getElementById('gcfm-back-button'); if (bb && gcfmIsTouchInBounds(evt.target)) { bb.click(); } else { /* page back through the program listing */ let pp = document.getElementById('gcfm-paginator-prev'); if (pp && gcfmIsTouchInBounds(evt.target)) { pp.click(); } } } } else { if (yDiff > 0) { /* down swipe */ } else { /* up swipe */ } } /* reset values */ cgGcfmXDown = null; cgGcfmYDown = null; } function gcfmSetProgressBarPosition(position, duration) { let progressBar = document.getElementById('gcfm-audio-control-slider'); if (duration > 0) { progressBar.max = duration; } progressBar.value = position; } function gcfmIsTouchInBounds(targetEl) { return ( ( targetEl.className.includes('gcfm-program') || targetEl.parentNode.className.includes('gcfm-program') || targetEl.className.includes('gcfm-episode') || targetEl.parentNode.className.includes('gcfm-episode') || targetEl.className.includes('gcfm-body') || targetEl.parentNode.className.includes('gcfm-body') ) && gcfmGetPlayerStyle() == 0 ) } function gcfmBuildEnclosureUrlWithULID(enclosureUrl) { /* This function is currently inactive */ let pciStatsGuid = localStorage.getItem(enclosureUrl) if (pciStatsGuid === null) { pciStatsGuid = self.crypto.randomUUID(); localStorage.setItem(enclosureUrl, pciStatsGuid) } let url = new URL(enclosureUrl); url.searchParams.append('_ulid', pciStatsGuid); url.searchParams.append('_from', 'lightfeed'); return enclosureUrl; } function gcfmDisplayErrorMessage(message) { alert(message); } /* Load the player */ if (document.readyState === 'loading') { document.addEventListener("DOMContentLoaded", gcfmLoadPlayer()); } else { gcfmLoadPlayer(); }