harness/app-assets/templates/assets/js/bootstraps/audio.js (148 lines of code) (raw):

define([ 'mobileSlider' ], function ( MobileRangeSlider ) { 'use strict'; var initialised, audioCurrent, down, slider1; function getColor() { var isAdv = document.body.classList.contains('is_advertising'), isAudio = !document.body.classList.contains('tone--podcast') && document.body.classList.contains('article--audio'); return isAdv ? 'rgba(105, 209, 202, 0.15)' : (isAudio ? 'rgba(255, 187, 0, 0.05)' : 'rgba(167, 216, 242, 0.10)'); } function secondsTimeSpanToHMS(s) { var m = Math.floor(s / 60); s -= m * 60; return (m < 10 ? '0' + m : m) + ':' + (s < 10 ? '0' + s : s); } function superAudioSlider(current, duration, platform) { var audioPlayerSliderKnob, cutoutContainer = document.getElementsByClassName('cutout__container')[0]; if (platform === 'iOS') { if (down === 1) { return; } } else if ((!cutoutContainer || !cutoutContainer.dataset.background) && !document.body.classList.contains('media')) { window.audioBackground(duration); window.addEventListener('resize', GU.util.debounce(function () { window.audioBackground(duration); }, 100)); } audioPlayerSliderKnob = document.getElementsByClassName('audio-player__slider__knob')[0]; if (audioPlayerSliderKnob) { audioPlayerSliderKnob.removeAttribute('style'); } slider1 = new MobileRangeSlider('audio-player__slider', { value: current, min: 0, max: duration, change: changeSlider.bind(null, duration) }); } function changeSlider(duration, percentage) { var audioPlayerSliderPlayed = document.getElementsByClassName('audio-player__slider__played')[0], audioPlayerSliderRemaining = document.getElementsByClassName('audio-player__slider__remaining')[0]; audioCurrent = percentage; if (audioPlayerSliderPlayed) { audioPlayerSliderPlayed.value = secondsTimeSpanToHMS(percentage); } if (audioPlayerSliderRemaining) { audioPlayerSliderRemaining.value = '-' + secondsTimeSpanToHMS(duration - percentage); } } function updateSlider(current, platform) { if (platform === 'iOS') { if (down === 1) { return; } } slider1.setValue(current); } function audioSlider() { document.addEventListener('touchstart', function () { down = 1; }, false); document.addEventListener('touchend', function () { down = 0; }, false); /* Caution: Hot Mess */ MobileRangeSlider.prototype.end = function () { this.removeEvents('move'); this.removeEvents('end'); GU.util.signalDevice('setPlayerTime/' + audioCurrent); }; } function audioPlay() { var button = document.getElementsByClassName('audio-player__button')[0]; if (button) { button.classList.add('pause'); } } function audioStop() { var button = document.getElementsByClassName('audio-player__button')[0]; if (button) { button.classList.remove('pause'); } } function audioLoad() { var button = document.getElementsByClassName('audio-player__button')[0], loadingButton = document.getElementsByClassName('audio-player__button--loading')[0]; button.style.display = 'none'; loadingButton.style.display = 'block'; } function audioFinishLoad() { var button = document.getElementsByClassName('audio-player__button')[0], loadingButton = document.getElementsByClassName('audio-player__button--loading')[0]; button.style.display = 'block'; loadingButton.style.display = 'none'; } function audioBackground(duration) { var cutoutBackground = document.getElementsByClassName('cutout__background')[0], cutoutContainer = document.getElementsByClassName('cutout__container')[0]; if (cutoutBackground) { cutoutBackground.parentNode.removeChild(cutoutBackground); } if (cutoutContainer) { styleCutoutContainer(duration, cutoutContainer); } } function styleCutoutContainer(duration, cutoutContainer) { var articleHeader = document.getElementsByClassName('article__header')[0], numOfCircles = Math.min(10, Math.floor((duration / 60) / 2)) + 2, h = GU.util.getElementOffset(cutoutContainer).height, w = GU.util.getElementOffset(cutoutContainer).width, size = (h * w) / 8000, canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'); canvas.width = w; canvas.height = h; canvas.className = 'cutout__background'; // Draw Circles for (var i = 0; i < numOfCircles; i++) { var x = Math.floor(Math.random() * (w - 0) + 1); ctx.beginPath(); ctx.arc(x, h / 2, size, 0, Math.PI * 2, true); ctx.closePath(); ctx.fillStyle = getColor(); ctx.fill(); size = size * 1.2; } articleHeader.appendChild(canvas); cutoutContainer.dataset.background = 'true'; } function setupGlobals() { // Global function to handle audio, called by native code window.superAudioSlider = superAudioSlider; window.updateSlider = updateSlider; window.audioPlay = audioPlay; window.audioStop = audioStop; window.audioLoad = audioLoad; window.audioFinishLoad = audioFinishLoad; window.audioBackground = audioBackground; window.applyNativeFunctionCall('audioBackground'); window.applyNativeFunctionCall('superAudioSlider'); window.applyNativeFunctionCall('audioPlay'); window.applyNativeFunctionCall('audioStop'); } function ready() { if (!initialised) { initialised = true; audioSlider(); setupGlobals(); } } return { init: ready }; });