Comparing version 1.0.10 to 1.0.11
@@ -54,6 +54,6 @@ 'use strict'; | ||
// in an array (for easy access). | ||
let audioElements = findAudio(); | ||
var audioElements = findAudio(); | ||
// Get our data from those elements. | ||
let data = getRawData(audioElements); | ||
var data = getRawData(audioElements); | ||
@@ -64,20 +64,20 @@ // Replace those elements with our own custom markup. | ||
// Now we've placed our elements in the DOM, we can select them. | ||
let wrappers = document.getElementsByClassName('customAudioPlayer'); | ||
let playPauseButtons = document.getElementsByClassName('playerTrigger'); | ||
let muteButtons = document.getElementsByClassName('songMuteButton'); | ||
let playPauseButtonsText = document.getElementsByClassName('buttonText'); | ||
let playTimer = document.getElementsByClassName('songPlayTimer'); | ||
let songLengthBox = document.getElementsByClassName('songDuration'); | ||
let titleDisplay = document.getElementsByClassName('titleDisplay'); | ||
let artistDisplay = document.getElementsByClassName('artistDisplay'); | ||
let progressBar = document.getElementsByClassName('songProgressSlider'); | ||
let playhead = document.getElementsByClassName('pseudoProgressPlayhead'); | ||
let indicator = document.getElementsByClassName('pseudoProgressIndicator'); | ||
let volumeControl = document.getElementsByClassName('songVolumeSlider'); | ||
let volumeDisplay = document.getElementsByClassName('songVolumeValue'); | ||
let volumeIndicator = document.getElementsByClassName('pseudoVolumeIndicator'); | ||
let volumePlayhead = document.getElementsByClassName('pseudoVolumePlayhead'); | ||
var wrappers = document.getElementsByClassName('customAudioPlayer'); | ||
var playPauseButtons = document.getElementsByClassName('playerTrigger'); | ||
var muteButtons = document.getElementsByClassName('songMuteButton'); | ||
var playPauseButtonsText = document.getElementsByClassName('buttonText'); | ||
var playTimer = document.getElementsByClassName('songPlayTimer'); | ||
var songLengthBox = document.getElementsByClassName('songDuration'); | ||
var titleDisplay = document.getElementsByClassName('titleDisplay'); | ||
var artistDisplay = document.getElementsByClassName('artistDisplay'); | ||
var progressBar = document.getElementsByClassName('songProgressSlider'); | ||
var playhead = document.getElementsByClassName('pseudoProgressPlayhead'); | ||
var indicator = document.getElementsByClassName('pseudoProgressIndicator'); | ||
var volumeControl = document.getElementsByClassName('songVolumeSlider'); | ||
var volumeDisplay = document.getElementsByClassName('songVolumeValue'); | ||
var volumeIndicator = document.getElementsByClassName('pseudoVolumeIndicator'); | ||
var volumePlayhead = document.getElementsByClassName('pseudoVolumePlayhead'); | ||
// Initialize the audio. | ||
let myAudio = initAudio(data); | ||
var myAudio = initAudio(data); | ||
@@ -88,3 +88,3 @@ console.log('myAudio', myAudio); | ||
// being played (defaulting to the first track in the DOM) | ||
let currentSongIndex = 0; | ||
var currentSongIndex = 0; | ||
@@ -104,7 +104,7 @@ /** | ||
// Get all the <audio> occurrences in the page. | ||
let audioElements = document.getElementsByTagName('audio'); | ||
var audioElements = document.getElementsByTagName('audio'); | ||
// Save our audioElements as an array (so | ||
// we can manipulate the DOM but still | ||
// access our items). | ||
let items = [].slice.call(audioElements); | ||
var items = [].slice.call(audioElements); | ||
return items; | ||
@@ -117,6 +117,8 @@ } | ||
function getRawData(_data) { | ||
let output = _data.map(item => ({ | ||
preload: options.preload ? options.preload : item.preload, | ||
url: item.src | ||
})); | ||
var output = _data.map(function (item) { | ||
return { | ||
preload: options.preload ? options.preload : item.preload, | ||
url: item.src | ||
}; | ||
}); | ||
return output; | ||
@@ -127,8 +129,8 @@ } | ||
function buildMarkup(_data) { | ||
for (let i = 0; i < _data.length; i++) { | ||
for (var i = 0; i < _data.length; i++) { | ||
// Create a container for our new player | ||
let newPlayer = document.createElement('div'); | ||
var newPlayer = document.createElement('div'); | ||
newPlayer.className = 'customAudioPlayer loading player_' + i; | ||
// If the element has a valid class, add that to the player's wrapper | ||
let className = audioElements[i].className; | ||
var className = audioElements[i].className; | ||
if (className !== '') { | ||
@@ -142,3 +144,3 @@ _addClass(newPlayer, className); | ||
// Create a loading indicator | ||
let loading = document.createElement('div'); | ||
var loading = document.createElement('div'); | ||
loading.className = 'loader'; | ||
@@ -150,5 +152,5 @@ newPlayer.appendChild(loading); | ||
// Create a play/pause button | ||
let button = document.createElement('button'); | ||
var button = document.createElement('button'); | ||
button.className = 'playerTrigger'; | ||
let buttonText = document.createElement('span'); | ||
var buttonText = document.createElement('span'); | ||
buttonText.className = 'buttonText'; | ||
@@ -159,7 +161,7 @@ buttonText.innerHTML = 'play'; | ||
// Create a wrapper for our player's metadata | ||
let meta = document.createElement('div'); | ||
var meta = document.createElement('div'); | ||
meta.className = 'metaWrapper'; | ||
// Create elements to display file metadata | ||
let meta_title = document.createElement('span'); | ||
var meta_title = document.createElement('span'); | ||
meta_title.className = 'titleDisplay'; | ||
@@ -169,10 +171,10 @@ meta_title.innerHTML = 'File ' + (i + 1); | ||
let meta_artist = document.createElement('span'); | ||
var meta_artist = document.createElement('span'); | ||
meta_artist.className = 'artistDisplay'; | ||
meta.appendChild(meta_artist); | ||
let timings = document.createElement('div'); | ||
var timings = document.createElement('div'); | ||
timings.className = 'timingsWrapper'; | ||
let meta_timer = document.createElement('span'); | ||
var meta_timer = document.createElement('span'); | ||
meta_timer.className = 'songPlayTimer'; | ||
@@ -183,14 +185,14 @@ meta_timer.innerHTML = '0:00'; | ||
// Progress Indicator | ||
let meta_progress_wrapper = document.createElement('div'); | ||
var meta_progress_wrapper = document.createElement('div'); | ||
meta_progress_wrapper.className = 'songProgressSliderWrapper'; | ||
let meta_pseudo_progress_background = document.createElement('div'); | ||
var meta_pseudo_progress_background = document.createElement('div'); | ||
meta_pseudo_progress_background.className = 'pseudoProgressBackground'; | ||
meta_progress_wrapper.appendChild(meta_pseudo_progress_background); | ||
let meta_pseudo_progress_indicator = document.createElement('div'); | ||
var meta_pseudo_progress_indicator = document.createElement('div'); | ||
meta_pseudo_progress_indicator.className = 'pseudoProgressIndicator'; | ||
meta_progress_wrapper.appendChild(meta_pseudo_progress_indicator); | ||
let meta_pseudo_progress_playhead = document.createElement('div'); | ||
var meta_pseudo_progress_playhead = document.createElement('div'); | ||
meta_pseudo_progress_playhead.className = 'pseudoProgressPlayhead'; | ||
meta_progress_wrapper.appendChild(meta_pseudo_progress_playhead); | ||
let meta_progress = document.createElement('input'); | ||
var meta_progress = document.createElement('input'); | ||
meta_progress.type = 'range'; | ||
@@ -205,3 +207,3 @@ meta_progress.min = 0; | ||
let meta_duration = document.createElement('span'); | ||
var meta_duration = document.createElement('span'); | ||
meta_duration.className = 'songDuration'; | ||
@@ -212,15 +214,15 @@ meta_duration.innerHTML = '-:--'; | ||
// Volume Indicator | ||
let meta_volume = document.createElement('div'); | ||
var meta_volume = document.createElement('div'); | ||
meta_volume.className = 'songVolume'; | ||
let meta_mute = document.createElement('button'); | ||
var meta_mute = document.createElement('button'); | ||
meta_mute.className = 'songMuteButton'; | ||
meta_mute.innerHTML = 'Mute'; | ||
meta_volume.appendChild(meta_mute); | ||
let meta_volume_label_wrapper = document.createElement('div'); | ||
var meta_volume_label_wrapper = document.createElement('div'); | ||
meta_volume_label_wrapper.className = 'songVolumeLabelWrapper'; | ||
let meta_volume_label = document.createElement('span'); | ||
var meta_volume_label = document.createElement('span'); | ||
meta_volume_label.className = 'songVolumeLabel'; | ||
meta_volume_label.innerHTML = 'Volume'; | ||
meta_volume_label_wrapper.appendChild(meta_volume_label); | ||
let meta_volume_value = document.createElement('span'); | ||
var meta_volume_value = document.createElement('span'); | ||
meta_volume_value.className = 'songVolumeValue'; | ||
@@ -230,14 +232,14 @@ meta_volume_value.innerHTML = '10'; | ||
meta_volume.appendChild(meta_volume_label_wrapper); | ||
let meta_volume_wrapper = document.createElement('div'); | ||
var meta_volume_wrapper = document.createElement('div'); | ||
meta_volume_wrapper.className = 'songVolumeSliderWrapper'; | ||
let meta_pseudo_volume_background = document.createElement('div'); | ||
var meta_pseudo_volume_background = document.createElement('div'); | ||
meta_pseudo_volume_background.className = 'pseudoVolumeBackground'; | ||
meta_volume_wrapper.appendChild(meta_pseudo_volume_background); | ||
let meta_pseudo_volume_indicator = document.createElement('div'); | ||
var meta_pseudo_volume_indicator = document.createElement('div'); | ||
meta_pseudo_volume_indicator.className = 'pseudoVolumeIndicator'; | ||
meta_volume_wrapper.appendChild(meta_pseudo_volume_indicator); | ||
let meta_pseudo_volume_playhead = document.createElement('div'); | ||
var meta_pseudo_volume_playhead = document.createElement('div'); | ||
meta_pseudo_volume_playhead.className = 'pseudoVolumePlayhead'; | ||
meta_volume_wrapper.appendChild(meta_pseudo_volume_playhead); | ||
let meta_volume_control = document.createElement('input'); | ||
var meta_volume_control = document.createElement('input'); | ||
meta_volume_control.type = 'range'; | ||
@@ -271,4 +273,4 @@ meta_volume_control.min = 0; | ||
function initAudio(_data) { | ||
let _myAudio = _data.map((item, key) => { | ||
let node = new Audio(); | ||
var _myAudio = _data.map(function (item, key) { | ||
var node = new Audio(); | ||
@@ -327,7 +329,6 @@ // Apply the preload attr. if needed | ||
// Fire this event when we can play the audio | ||
// all the way through (ie. it is fully loaded) | ||
function _canplaythrough() { | ||
let index = this.getAttribute('data-song-index'); | ||
var index = this.getAttribute('data-song-index'); | ||
_setLengthDisplay(index); | ||
@@ -342,8 +343,8 @@ _removeClass(wrappers[index], 'loading'); | ||
// Get the filename and type | ||
let url = myAudio[i].src; | ||
let fileType = _getFileType(url); | ||
let fileName = _getFileName(url); | ||
var url = myAudio[i].src; | ||
var fileType = _getFileType(url); | ||
var fileName = _getFileName(url); | ||
// If there is a valid title, display that title... | ||
let title = audioElements[i].title; | ||
var title = audioElements[i].title; | ||
if (title !== '') { | ||
@@ -357,3 +358,3 @@ titleDisplay[i].innerHTML = title; | ||
// If there is a valid 'artist', display the artist name. | ||
let artist = audioElements[i].getAttribute('data-artist'); | ||
var artist = audioElements[i].getAttribute('data-artist'); | ||
if (artist !== '') { | ||
@@ -382,3 +383,3 @@ artistDisplay[i].innerHTML = artist; | ||
function pauseAll() { | ||
for (let i = 0; i < data.length; i++) { | ||
for (var i = 0; i < data.length; i++) { | ||
myAudio[i].pause(); | ||
@@ -391,3 +392,3 @@ } | ||
currentSongIndex = index; | ||
for (let i = 0; i < data.length; i++) { | ||
for (var i = 0; i < data.length; i++) { | ||
if (i != index) { | ||
@@ -402,6 +403,6 @@ myAudio[i].pause(); | ||
function sliderScrub() { | ||
let value = this.value; | ||
let index = this.parentNode.parentNode.parentNode.getAttribute('data-song-index'); | ||
let duration = myAudio[index].duration; | ||
let targetTime = duration * (value / 100); | ||
var value = this.value; | ||
var index = this.parentNode.parentNode.parentNode.getAttribute('data-song-index'); | ||
var duration = myAudio[index].duration; | ||
var targetTime = duration * (value / 100); | ||
targetTime = targetTime.toFixed(2); | ||
@@ -414,4 +415,4 @@ myAudio[index].currentTime = targetTime; | ||
function volume() { | ||
let value = this.value; | ||
let index = this.parentNode.parentNode.parentNode.getAttribute('data-song-index'); | ||
var value = this.value; | ||
var index = this.parentNode.parentNode.parentNode.getAttribute('data-song-index'); | ||
mute(index, false); | ||
@@ -422,4 +423,4 @@ setVolume(index, value); | ||
function setVolume(index, value) { | ||
let valueMapped = value * 10; | ||
let volumePercent = value * 100; | ||
var valueMapped = value * 10; | ||
var volumePercent = value * 100; | ||
myAudio[index].volume = value; | ||
@@ -434,3 +435,3 @@ volumeDisplay[index].innerHTML = valueMapped; | ||
function mute(index, state) { | ||
let oldVolume; | ||
var oldVolume = void 0; | ||
if (state) { | ||
@@ -459,6 +460,6 @@ oldVolume = myAudio[index].volume; | ||
function playPause(index, state) { | ||
let buttonText = playPauseButtonsText[index]; | ||
let target = playPauseButtons[index]; | ||
var buttonText = playPauseButtonsText[index]; | ||
var target = playPauseButtons[index]; | ||
if (state) { | ||
for (let i = 0; i < playPauseButtons.length; i++) { | ||
for (var i = 0; i < playPauseButtons.length; i++) { | ||
_removeClass(playPauseButtons[i], 'songPlaying'); | ||
@@ -482,6 +483,6 @@ _addClass(playPauseButtons[i], 'songPaused'); | ||
function _playPauseAudio() { | ||
let targetSong = this.parentNode.getAttribute('data-song-index'); | ||
var targetSong = this.parentNode.getAttribute('data-song-index'); | ||
if (typeof targetSong != 'undefined') { | ||
let playSong = _hasClass(this, 'songPlaying') ? false : true; | ||
playPause(targetSong, playSong); | ||
var _playSong = _hasClass(this, 'songPlaying') ? false : true; | ||
playPause(targetSong, _playSong); | ||
} else { | ||
@@ -494,4 +495,4 @@ console.log('too soon to play!'); | ||
function _muteUnmuteAudio() { | ||
let targetSong = this.parentNode.parentNode.getAttribute('data-song-index'); | ||
let buttonText = playPauseButtonsText[targetSong]; | ||
var targetSong = this.parentNode.parentNode.getAttribute('data-song-index'); | ||
var buttonText = playPauseButtonsText[targetSong]; | ||
if (_hasClass(this, 'songMuted')) { | ||
@@ -512,3 +513,3 @@ mute(targetSong, false); | ||
function _triggerUpdateProgress() { | ||
let index = this.getAttribute('data-song-index'); | ||
var index = this.getAttribute('data-song-index'); | ||
_updateProgress(index); | ||
@@ -519,5 +520,5 @@ } | ||
function _updateProgress(index) { | ||
let progress = myAudio[index].currentTime; | ||
let duration = myAudio[index].duration; | ||
let progressParsed = _parseTime(progress); | ||
var progress = myAudio[index].currentTime; | ||
var duration = myAudio[index].duration; | ||
var progressParsed = _parseTime(progress); | ||
playTimer[index].innerHTML = progressParsed; | ||
@@ -527,3 +528,3 @@ if (progress >= duration) { | ||
} | ||
let progressPercent = (progress / duration * 100).toFixed(2); | ||
var progressPercent = (progress / duration * 100).toFixed(2); | ||
progressBar[index].value = progressPercent; | ||
@@ -536,5 +537,5 @@ indicator[index].style.width = progressPercent + '%'; | ||
function _setLengthDisplay(index) { | ||
let songLength = myAudio[index].duration; | ||
let duration = _parseTime(songLength); | ||
let songClass = '.song' + index; | ||
var songLength = myAudio[index].duration; | ||
var duration = _parseTime(songLength); | ||
var songClass = '.song' + index; | ||
songLengthBox[index].innerHTML = duration; | ||
@@ -558,3 +559,3 @@ } | ||
// console.log( e.type ); | ||
let index = this.getAttribute('data-song-index'); | ||
var index = this.getAttribute('data-song-index'); | ||
// console.log( myAudio[index].error ); | ||
@@ -565,4 +566,4 @@ // console.log(e); | ||
function _error(e) { | ||
let index = this.getAttribute('data-song-index'); | ||
let error = myAudio[index].error; | ||
var index = this.getAttribute('data-song-index'); | ||
var error = myAudio[index].error; | ||
// console.log( 'error: ' ); | ||
@@ -574,3 +575,3 @@ // console.log(e); | ||
// console.log( 'stalled!' ); | ||
let index = this.getAttribute('data-song-index'); | ||
var index = this.getAttribute('data-song-index'); | ||
// console.log( 'Target: ' + index ); | ||
@@ -585,4 +586,4 @@ // console.log( 'Play?: ' + false ); | ||
function _progress(e) { | ||
let index = this.getAttribute('data-song-index'); | ||
let readyState = myAudio[index].readyState; | ||
var index = this.getAttribute('data-song-index'); | ||
var readyState = myAudio[index].readyState; | ||
} | ||
@@ -602,17 +603,17 @@ | ||
function _parseTime(seconds) { | ||
let hours = Math.floor(seconds / 3600); | ||
var hours = Math.floor(seconds / 3600); | ||
let mins = Math.floor(seconds % 3600 / 60).toFixed(0).toString(); | ||
var mins = Math.floor(seconds % 3600 / 60).toFixed(0).toString(); | ||
let secs = Math.floor(seconds % 3600 % 60).toFixed(0).toString(); | ||
var secs = Math.floor(seconds % 3600 % 60).toFixed(0).toString(); | ||
// Left-pad seconds string if needed | ||
secs = secs > 10 ? secs : `0${secs}`; | ||
secs = secs > 10 ? secs : '0' + secs; | ||
let parsedTime = `${mins}:${secs}`; | ||
var parsedTime = mins + ':' + secs; | ||
if (hours > 0) { | ||
// Left-pad minutes string if needed | ||
mins = mins > 10 ? mins : `0${mins}`; | ||
parsedTime = `${hours}:${mins}:${secs}`; | ||
mins = mins > 10 ? mins : '0' + mins; | ||
parsedTime = hours + ':' + mins + ':' + secs; | ||
} | ||
@@ -625,3 +626,3 @@ | ||
function _hasClass(el, className) { | ||
let result; | ||
var result = void 0; | ||
if (el.classList) { | ||
@@ -660,4 +661,4 @@ result = el.classList.contains(className); | ||
function _getFileName(string) { | ||
let fullFileName = string.replace(/^.*[\\\/]/, ''); | ||
let withNoExtension = fullFileName.split('.')[0]; | ||
var fullFileName = string.replace(/^.*[\\\/]/, ''); | ||
var withNoExtension = fullFileName.split('.')[0]; | ||
return withNoExtension; | ||
@@ -664,0 +665,0 @@ } |
@@ -32,4 +32,5 @@ /** | ||
options = typeof options !== 'undefined' ? options : {}; | ||
// options.prefix = options.prefix || ''; | ||
options.theme = options.theme || 'defaultPlayerTheme'; | ||
// Setting a value for `preload` here will override the audio element's value. | ||
options.preload = options.preload || false; | ||
@@ -49,6 +50,6 @@ /** | ||
// in an array (for easy access). | ||
var audioElements = findAudio(); | ||
let audioElements = findAudio(); | ||
// Get our data from those elements. | ||
var data = getRawData(audioElements); | ||
let data = getRawData(audioElements); | ||
@@ -59,24 +60,26 @@ // Replace those elements with our own custom markup. | ||
// Now we've placed our elements in the DOM, we can select them. | ||
var wrappers = document.getElementsByClassName('customAudioPlayer'); | ||
var playPauseButtons = document.getElementsByClassName('playerTrigger'); | ||
var muteButtons = document.getElementsByClassName('songMuteButton'); | ||
var playPauseButtonsText = document.getElementsByClassName('buttonText'); | ||
var playTimer = document.getElementsByClassName('songPlayTimer'); | ||
var songLengthBox = document.getElementsByClassName('songDuration'); | ||
var titleDisplay = document.getElementsByClassName('titleDisplay'); | ||
var artistDisplay = document.getElementsByClassName('artistDisplay'); | ||
var progressBar = document.getElementsByClassName('songProgressSlider'); | ||
var playhead = document.getElementsByClassName('pseudoProgressPlayhead'); | ||
var indicator = document.getElementsByClassName('pseudoProgressIndicator'); | ||
var volumeControl = document.getElementsByClassName('songVolumeSlider'); | ||
var volumeDisplay = document.getElementsByClassName('songVolumeValue'); | ||
var volumeIndicator = document.getElementsByClassName('pseudoVolumeIndicator'); | ||
var volumePlayhead = document.getElementsByClassName('pseudoVolumePlayhead'); | ||
let wrappers = document.getElementsByClassName('customAudioPlayer'); | ||
let playPauseButtons = document.getElementsByClassName('playerTrigger'); | ||
let muteButtons = document.getElementsByClassName('songMuteButton'); | ||
let playPauseButtonsText = document.getElementsByClassName('buttonText'); | ||
let playTimer = document.getElementsByClassName('songPlayTimer'); | ||
let songLengthBox = document.getElementsByClassName('songDuration'); | ||
let titleDisplay = document.getElementsByClassName('titleDisplay'); | ||
let artistDisplay = document.getElementsByClassName('artistDisplay'); | ||
let progressBar = document.getElementsByClassName('songProgressSlider'); | ||
let playhead = document.getElementsByClassName('pseudoProgressPlayhead'); | ||
let indicator = document.getElementsByClassName('pseudoProgressIndicator'); | ||
let volumeControl = document.getElementsByClassName('songVolumeSlider'); | ||
let volumeDisplay = document.getElementsByClassName('songVolumeValue'); | ||
let volumeIndicator = document.getElementsByClassName('pseudoVolumeIndicator'); | ||
let volumePlayhead = document.getElementsByClassName('pseudoVolumePlayhead'); | ||
// Initialize the audio. | ||
var myAudio = initAudio(data); | ||
let myAudio = initAudio(data); | ||
console.log('myAudio', myAudio); | ||
// Create a var to store the index of the file currently | ||
// being played (defaulting to the first track in the DOM) | ||
var currentSongIndex = 0; | ||
let currentSongIndex = 0; | ||
@@ -96,7 +99,7 @@ /** | ||
// Get all the <audio> occurrences in the page. | ||
var audioElements = document.getElementsByTagName('audio'); | ||
let audioElements = document.getElementsByTagName('audio'); | ||
// Save our audioElements as an array (so | ||
// we can manipulate the DOM but still | ||
// access our items). | ||
var items = [].slice.call(audioElements); | ||
let items = [].slice.call(audioElements); | ||
return items; | ||
@@ -108,12 +111,7 @@ } | ||
// found by findAudio()] | ||
function getRawData(data) { | ||
var output = []; | ||
for (var i = 0; i < data.length; i++) { | ||
var item = {}; | ||
// Get the file's URL | ||
item.url = data[i].src; | ||
// Check for a audio tag's `preload` attribute | ||
item.preload = options.preload ? options.preload : data[i].preload; | ||
output.push(item); | ||
} | ||
function getRawData(_data) { | ||
let output = _data.map(item => ({ | ||
preload: options.preload ? options.preload : item.preload, | ||
url: item.src | ||
})); | ||
return output; | ||
@@ -123,9 +121,9 @@ } | ||
// Create our own markup in place of the native <audio> elements. | ||
function buildMarkup(data) { | ||
for (var i = 0; i < data.length; i++) { | ||
function buildMarkup(_data) { | ||
for (let i = 0; i < _data.length; i++) { | ||
// Create a container for our new player | ||
var newPlayer = document.createElement('div'); | ||
let newPlayer = document.createElement('div'); | ||
newPlayer.className = 'customAudioPlayer loading player_' + i; | ||
// If the element has a valid class, add that to the player's wrapper | ||
var className = audioElements[i].className; | ||
let className = audioElements[i].className; | ||
if (className !== '') { | ||
@@ -139,3 +137,3 @@ _addClass(newPlayer, className); | ||
// Create a loading indicator | ||
var loading = document.createElement('div'); | ||
let loading = document.createElement('div'); | ||
loading.className = 'loader'; | ||
@@ -147,5 +145,5 @@ newPlayer.appendChild(loading); | ||
// Create a play/pause button | ||
var button = document.createElement('button'); | ||
let button = document.createElement('button'); | ||
button.className = 'playerTrigger'; | ||
var buttonText = document.createElement('span'); | ||
let buttonText = document.createElement('span'); | ||
buttonText.className = 'buttonText'; | ||
@@ -156,7 +154,7 @@ buttonText.innerHTML = 'play'; | ||
// Create a wrapper for our player's metadata | ||
var meta = document.createElement('div'); | ||
let meta = document.createElement('div'); | ||
meta.className = 'metaWrapper'; | ||
// Create elements to display file metadata | ||
var meta_title = document.createElement('span'); | ||
let meta_title = document.createElement('span'); | ||
meta_title.className = 'titleDisplay'; | ||
@@ -166,10 +164,10 @@ meta_title.innerHTML = 'File ' + (i + 1); | ||
var meta_artist = document.createElement('span'); | ||
let meta_artist = document.createElement('span'); | ||
meta_artist.className = 'artistDisplay'; | ||
meta.appendChild(meta_artist); | ||
var timings = document.createElement('div'); | ||
let timings = document.createElement('div'); | ||
timings.className = 'timingsWrapper'; | ||
var meta_timer = document.createElement('span'); | ||
let meta_timer = document.createElement('span'); | ||
meta_timer.className = 'songPlayTimer'; | ||
@@ -180,14 +178,14 @@ meta_timer.innerHTML = '0:00'; | ||
// Progress Indicator | ||
var meta_progress_wrapper = document.createElement('div'); | ||
let meta_progress_wrapper = document.createElement('div'); | ||
meta_progress_wrapper.className = 'songProgressSliderWrapper'; | ||
var meta_pseudo_progress_background = document.createElement('div'); | ||
let meta_pseudo_progress_background = document.createElement('div'); | ||
meta_pseudo_progress_background.className = 'pseudoProgressBackground'; | ||
meta_progress_wrapper.appendChild(meta_pseudo_progress_background); | ||
var meta_pseudo_progress_indicator = document.createElement('div'); | ||
let meta_pseudo_progress_indicator = document.createElement('div'); | ||
meta_pseudo_progress_indicator.className = 'pseudoProgressIndicator'; | ||
meta_progress_wrapper.appendChild(meta_pseudo_progress_indicator); | ||
var meta_pseudo_progress_playhead = document.createElement('div'); | ||
let meta_pseudo_progress_playhead = document.createElement('div'); | ||
meta_pseudo_progress_playhead.className = 'pseudoProgressPlayhead'; | ||
meta_progress_wrapper.appendChild(meta_pseudo_progress_playhead); | ||
var meta_progress = document.createElement('input'); | ||
let meta_progress = document.createElement('input'); | ||
meta_progress.type = 'range'; | ||
@@ -202,3 +200,3 @@ meta_progress.min = 0; | ||
var meta_duration = document.createElement('span'); | ||
let meta_duration = document.createElement('span'); | ||
meta_duration.className = 'songDuration'; | ||
@@ -209,15 +207,15 @@ meta_duration.innerHTML = '-:--'; | ||
// Volume Indicator | ||
var meta_volume = document.createElement('div'); | ||
let meta_volume = document.createElement('div'); | ||
meta_volume.className = 'songVolume'; | ||
var meta_mute = document.createElement('button'); | ||
let meta_mute = document.createElement('button'); | ||
meta_mute.className = 'songMuteButton'; | ||
meta_mute.innerHTML = 'Mute'; | ||
meta_volume.appendChild(meta_mute); | ||
var meta_volume_label_wrapper = document.createElement('div'); | ||
let meta_volume_label_wrapper = document.createElement('div'); | ||
meta_volume_label_wrapper.className = 'songVolumeLabelWrapper'; | ||
var meta_volume_label = document.createElement('span'); | ||
let meta_volume_label = document.createElement('span'); | ||
meta_volume_label.className = 'songVolumeLabel'; | ||
meta_volume_label.innerHTML = 'Volume'; | ||
meta_volume_label_wrapper.appendChild(meta_volume_label); | ||
var meta_volume_value = document.createElement('span'); | ||
let meta_volume_value = document.createElement('span'); | ||
meta_volume_value.className = 'songVolumeValue'; | ||
@@ -227,14 +225,14 @@ meta_volume_value.innerHTML = '10'; | ||
meta_volume.appendChild(meta_volume_label_wrapper); | ||
var meta_volume_wrapper = document.createElement('div'); | ||
let meta_volume_wrapper = document.createElement('div'); | ||
meta_volume_wrapper.className = 'songVolumeSliderWrapper'; | ||
var meta_pseudo_volume_background = document.createElement('div'); | ||
let meta_pseudo_volume_background = document.createElement('div'); | ||
meta_pseudo_volume_background.className = 'pseudoVolumeBackground'; | ||
meta_volume_wrapper.appendChild(meta_pseudo_volume_background); | ||
var meta_pseudo_volume_indicator = document.createElement('div'); | ||
let meta_pseudo_volume_indicator = document.createElement('div'); | ||
meta_pseudo_volume_indicator.className = 'pseudoVolumeIndicator'; | ||
meta_volume_wrapper.appendChild(meta_pseudo_volume_indicator); | ||
var meta_pseudo_volume_playhead = document.createElement('div'); | ||
let meta_pseudo_volume_playhead = document.createElement('div'); | ||
meta_pseudo_volume_playhead.className = 'pseudoVolumePlayhead'; | ||
meta_volume_wrapper.appendChild(meta_pseudo_volume_playhead); | ||
var meta_volume_control = document.createElement('input'); | ||
let meta_volume_control = document.createElement('input'); | ||
meta_volume_control.type = 'range'; | ||
@@ -262,3 +260,3 @@ meta_volume_control.min = 0; | ||
// Replace the original audio element with our new creation. | ||
data[i].parentNode.replaceChild(newPlayer, data[i]); | ||
_data[i].parentNode.replaceChild(newPlayer, _data[i]); | ||
} | ||
@@ -268,44 +266,42 @@ } | ||
// Initialize the audio for each file, and setup the event listeners. | ||
function initAudio(data) { | ||
var myAudio = []; | ||
function initAudio(_data) { | ||
let _myAudio = _data.map((item, key) => { | ||
let node = new Audio(); | ||
for (var i = 0; i < data.length; i++) { | ||
// Init. the audio | ||
myAudio[i] = new Audio(); | ||
// Apply the preload attr. if needed | ||
if (data[i].preload) { | ||
myAudio[i].preload = data[i].preload; | ||
if (item.preload) { | ||
node.preload = item.preload; | ||
} | ||
// Add the audio source (by URL) to the audio node | ||
myAudio[i].src = data[i].url; | ||
node.src = item.url; | ||
// Check if file exists before setting time, to prevent IE11 error | ||
if (!isNaN(myAudio[i].duration)) { | ||
myAudio[i].currentTime = 0; | ||
if (!isNaN(node.duration)) { | ||
node.currentTime = 0; | ||
} | ||
// Assign an index to each audio node: | ||
// this links the audio elements to the | ||
// relevant markup | ||
node.setAttribute('data-song-index', key); | ||
// Setup event listeners | ||
playPauseButtons[i].addEventListener('click', _playPauseAudio, false); | ||
progressBar[i].addEventListener('input', sliderScrub, false); | ||
volumeControl[i].addEventListener('input', volume, false); | ||
myAudio[i].addEventListener('timeupdate', _triggerUpdateProgress, false); | ||
myAudio[i].addEventListener('loadstart', _loadStart, false); | ||
myAudio[i].addEventListener('canplaythrough', _canplaythrough, false); | ||
muteButtons[i].addEventListener('click', _muteUnmuteAudio, false); | ||
node.addEventListener('timeupdate', _triggerUpdateProgress, false); | ||
node.addEventListener('loadstart', _loadStart, false); | ||
node.addEventListener('canplaythrough', _canplaythrough, false); | ||
node.addEventListener('error', _errors, false); | ||
node.addEventListener('stalled', _stalled, false); | ||
node.addEventListener('waiting', _errors, false); | ||
node.addEventListener('progress', _progress, false); | ||
myAudio[i].addEventListener('error', _errors, false); | ||
myAudio[i].addEventListener('stalled', _stalled, false); | ||
myAudio[i].addEventListener('waiting', _errors, false); | ||
playPauseButtons[key].addEventListener('click', _playPauseAudio, false); | ||
progressBar[key].addEventListener('input', sliderScrub, false); | ||
volumeControl[key].addEventListener('input', volume, false); | ||
muteButtons[key].addEventListener('click', _muteUnmuteAudio, false); | ||
myAudio[i].addEventListener('progress', _progress, false); | ||
return node; | ||
}); | ||
// Assign an index to each audio node: | ||
// this links the audio elements to the | ||
// relevant markup | ||
myAudio[i].setAttribute('data-song-index', i); | ||
} | ||
return myAudio; | ||
return _myAudio; | ||
} | ||
@@ -324,5 +320,4 @@ | ||
// Fire this event when loading starts [TEST] | ||
function _loadStart() { | ||
// console.log( 'Load start' ); | ||
} | ||
function _loadStart() {} | ||
// console.log( 'Load start' ); | ||
@@ -332,3 +327,3 @@ // Fire this event when we can play the audio | ||
function _canplaythrough() { | ||
var index = this.getAttribute('data-song-index'); | ||
let index = this.getAttribute('data-song-index'); | ||
_setLengthDisplay(index); | ||
@@ -343,8 +338,8 @@ _removeClass(wrappers[index], 'loading'); | ||
// Get the filename and type | ||
var url = myAudio[i].src; | ||
var fileType = _getFileType(url); | ||
var fileName = _getFileName(url); | ||
let url = myAudio[i].src; | ||
let fileType = _getFileType(url); | ||
let fileName = _getFileName(url); | ||
// If there is a valid title, display that title... | ||
var title = audioElements[i].title; | ||
let title = audioElements[i].title; | ||
if (title !== '') { | ||
@@ -358,3 +353,3 @@ titleDisplay[i].innerHTML = title; | ||
// If there is a valid 'artist', display the artist name. | ||
var artist = audioElements[i].getAttribute('data-artist'); | ||
let artist = audioElements[i].getAttribute('data-artist'); | ||
if (artist !== '') { | ||
@@ -383,3 +378,3 @@ artistDisplay[i].innerHTML = artist; | ||
function pauseAll() { | ||
for (var i = 0; i < data.length; i++) { | ||
for (let i = 0; i < data.length; i++) { | ||
myAudio[i].pause(); | ||
@@ -392,3 +387,3 @@ } | ||
currentSongIndex = index; | ||
for (var i = 0; i < data.length; i++) { | ||
for (let i = 0; i < data.length; i++) { | ||
if (i != index) { | ||
@@ -403,6 +398,6 @@ myAudio[i].pause(); | ||
function sliderScrub() { | ||
var value = this.value; | ||
var index = this.parentNode.parentNode.parentNode.getAttribute('data-song-index'); | ||
var duration = myAudio[index].duration; | ||
var targetTime = duration * (value / 100); | ||
let value = this.value; | ||
let index = this.parentNode.parentNode.parentNode.getAttribute('data-song-index'); | ||
let duration = myAudio[index].duration; | ||
let targetTime = duration * (value / 100); | ||
targetTime = targetTime.toFixed(2); | ||
@@ -415,4 +410,4 @@ myAudio[index].currentTime = targetTime; | ||
function volume() { | ||
var value = this.value; | ||
var index = this.parentNode.parentNode.parentNode.getAttribute('data-song-index'); | ||
let value = this.value; | ||
let index = this.parentNode.parentNode.parentNode.getAttribute('data-song-index'); | ||
mute(index, false); | ||
@@ -423,4 +418,4 @@ setVolume(index, value); | ||
function setVolume(index, value) { | ||
var valueMapped = value * 10; | ||
var volumePercent = value * 100; | ||
let valueMapped = value * 10; | ||
let volumePercent = value * 100; | ||
myAudio[index].volume = value; | ||
@@ -435,3 +430,3 @@ volumeDisplay[index].innerHTML = valueMapped; | ||
function mute(index, state) { | ||
var oldVolume; | ||
let oldVolume; | ||
if (state) { | ||
@@ -460,6 +455,6 @@ oldVolume = myAudio[index].volume; | ||
function playPause(index, state) { | ||
var buttonText = playPauseButtonsText[index]; | ||
var target = playPauseButtons[index]; | ||
let buttonText = playPauseButtonsText[index]; | ||
let target = playPauseButtons[index]; | ||
if (state) { | ||
for (var i = 0; i < playPauseButtons.length; i++) { | ||
for (let i = 0; i < playPauseButtons.length; i++) { | ||
_removeClass(playPauseButtons[i], 'songPlaying'); | ||
@@ -483,5 +478,5 @@ _addClass(playPauseButtons[i], 'songPaused'); | ||
function _playPauseAudio() { | ||
var targetSong = this.parentNode.getAttribute('data-song-index'); | ||
let targetSong = this.parentNode.getAttribute('data-song-index'); | ||
if (typeof targetSong != 'undefined') { | ||
var playSong = _hasClass(this, 'songPlaying') ? false : true; | ||
let playSong = _hasClass(this, 'songPlaying') ? false : true; | ||
playPause(targetSong, playSong); | ||
@@ -495,4 +490,4 @@ } else { | ||
function _muteUnmuteAudio() { | ||
var targetSong = this.parentNode.parentNode.getAttribute('data-song-index'); | ||
var buttonText = playPauseButtonsText[targetSong]; | ||
let targetSong = this.parentNode.parentNode.getAttribute('data-song-index'); | ||
let buttonText = playPauseButtonsText[targetSong]; | ||
if (_hasClass(this, 'songMuted')) { | ||
@@ -513,3 +508,3 @@ mute(targetSong, false); | ||
function _triggerUpdateProgress() { | ||
var index = this.getAttribute('data-song-index'); | ||
let index = this.getAttribute('data-song-index'); | ||
_updateProgress(index); | ||
@@ -520,5 +515,5 @@ } | ||
function _updateProgress(index) { | ||
var progress = myAudio[index].currentTime; | ||
var duration = myAudio[index].duration; | ||
var progressParsed = _secondsToMMSS(progress); | ||
let progress = myAudio[index].currentTime; | ||
let duration = myAudio[index].duration; | ||
let progressParsed = _parseTime(progress); | ||
playTimer[index].innerHTML = progressParsed; | ||
@@ -528,3 +523,3 @@ if (progress >= duration) { | ||
} | ||
var progressPercent = (progress / duration * 100).toFixed(2); | ||
let progressPercent = (progress / duration * 100).toFixed(2); | ||
progressBar[index].value = progressPercent; | ||
@@ -537,5 +532,5 @@ indicator[index].style.width = progressPercent + '%'; | ||
function _setLengthDisplay(index) { | ||
var songLength = myAudio[index].duration; | ||
var duration = _secondsToMMSS(songLength); | ||
var songClass = '.song' + index; | ||
let songLength = myAudio[index].duration; | ||
let duration = _parseTime(songLength); | ||
let songClass = '.song' + index; | ||
songLengthBox[index].innerHTML = duration; | ||
@@ -559,3 +554,3 @@ } | ||
// console.log( e.type ); | ||
var index = this.getAttribute('data-song-index'); | ||
let index = this.getAttribute('data-song-index'); | ||
// console.log( myAudio[index].error ); | ||
@@ -566,4 +561,4 @@ // console.log(e); | ||
function _error(e) { | ||
var index = this.getAttribute('data-song-index'); | ||
var error = myAudio[index].error; | ||
let index = this.getAttribute('data-song-index'); | ||
let error = myAudio[index].error; | ||
// console.log( 'error: ' ); | ||
@@ -575,3 +570,3 @@ // console.log(e); | ||
// console.log( 'stalled!' ); | ||
var index = this.getAttribute('data-song-index'); | ||
let index = this.getAttribute('data-song-index'); | ||
// console.log( 'Target: ' + index ); | ||
@@ -586,4 +581,4 @@ // console.log( 'Play?: ' + false ); | ||
function _progress(e) { | ||
var index = this.getAttribute('data-song-index'); | ||
var readyState = myAudio[index].readyState; | ||
let index = this.getAttribute('data-song-index'); | ||
let readyState = myAudio[index].readyState; | ||
} | ||
@@ -602,14 +597,25 @@ | ||
// Convert seconds into minutes-and-seconds (MMSS) format | ||
function _secondsToMMSS(seconds) { | ||
var mins = Math.floor((seconds % 3600) / 60); | ||
mins = mins.toFixed(0); | ||
mins = mins.toString(); | ||
var secs = Math.floor((seconds % 3600) % 60); | ||
secs = secs.toFixed(0); | ||
secs = secs.toString(); | ||
if (secs < 10) { | ||
secs = '0' + secs; | ||
function _parseTime(seconds) { | ||
let hours = Math.floor(seconds / 3600); | ||
let mins = Math.floor((seconds % 3600) / 60) | ||
.toFixed(0) | ||
.toString(); | ||
let secs = Math.floor((seconds % 3600) % 60) | ||
.toFixed(0) | ||
.toString(); | ||
// Left-pad seconds string if needed | ||
secs = secs > 10 ? secs : `0${secs}`; | ||
let parsedTime = `${mins}:${secs}`; | ||
if (hours > 0) { | ||
// Left-pad minutes string if needed | ||
mins = mins > 10 ? mins : `0${mins}`; | ||
parsedTime = `${hours}:${mins}:${secs}`; | ||
} | ||
var mmss = mins + ':' + secs; | ||
return mmss; | ||
return parsedTime; | ||
} | ||
@@ -619,3 +625,3 @@ | ||
function _hasClass(el, className) { | ||
var result; | ||
let result; | ||
if (el.classList) { | ||
@@ -657,4 +663,4 @@ result = el.classList.contains(className); | ||
function _getFileName(string) { | ||
var fullFileName = string.replace(/^.*[\\\/]/, ''); | ||
var withNoExtension = fullFileName.split('.')[0]; | ||
let fullFileName = string.replace(/^.*[\\\/]/, ''); | ||
let withNoExtension = fullFileName.split('.')[0]; | ||
return withNoExtension; | ||
@@ -661,0 +667,0 @@ } |
{ | ||
"name": "picobel", | ||
"version": "1.0.10", | ||
"version": "1.0.11", | ||
"description": "Convert html audio tags into styleable markup.", | ||
@@ -12,3 +12,4 @@ "main": "./cjs/picobel.js", | ||
"sass": "node-sass --output-style expanded -o css scss", | ||
"autoprefix": "postcss css/*.css --use autoprefixer -d css" | ||
"autoprefix": "postcss css/*.css --use autoprefixer -d css", | ||
"legacy": "uglifyjs picobel.legacy.js -o picobel.legacy.min.js" | ||
}, | ||
@@ -30,3 +31,4 @@ "repository": { | ||
"node-sass": "^4.9.0", | ||
"postcss-cli": "^5.0.0" | ||
"postcss-cli": "^5.0.0", | ||
"uglify-js": "^3.3.28" | ||
}, | ||
@@ -39,3 +41,6 @@ "babel": { | ||
"targets": { | ||
"node": "current" | ||
"browsers": [ | ||
"last 2 versions", | ||
"safari >= 7" | ||
] | ||
} | ||
@@ -42,0 +47,0 @@ } |
@@ -32,4 +32,5 @@ /** | ||
options = typeof options !== 'undefined' ? options : {}; | ||
// options.prefix = options.prefix || ''; | ||
options.theme = options.theme || 'defaultPlayerTheme'; | ||
// Setting a value for `preload` here will override the audio element's value. | ||
options.preload = options.preload || false; | ||
@@ -77,2 +78,4 @@ /** | ||
console.log('myAudio', myAudio); | ||
// Create a var to store the index of the file currently | ||
@@ -106,12 +109,9 @@ // being played (defaulting to the first track in the DOM) | ||
// found by findAudio()] | ||
function getRawData(data) { | ||
output = []; | ||
for (var i = 0; i < data.length; i++) { | ||
item = {}; | ||
// Get the file's URL | ||
item.url = data[i].src; | ||
// Check for a audio tag's `preload` attribute | ||
item.preload = options.preload ? options.preload : data[i].preload; | ||
output.push(item); | ||
} | ||
function getRawData(_data) { | ||
var output = _data.map(function(item) { | ||
return { | ||
preload: options.preload ? options.preload : item.preload, | ||
url: item.src | ||
}; | ||
}); | ||
return output; | ||
@@ -121,4 +121,4 @@ } | ||
// Create our own markup in place of the native <audio> elements. | ||
function buildMarkup(data) { | ||
for (var i = 0; i < data.length; i++) { | ||
function buildMarkup(_data) { | ||
for (var i = 0; i < _data.length; i++) { | ||
// Create a container for our new player | ||
@@ -252,3 +252,3 @@ var newPlayer = document.createElement('div'); | ||
// Replace the original audio element with our new creation. | ||
data[i].parentNode.replaceChild(newPlayer, data[i]); | ||
_data[i].parentNode.replaceChild(newPlayer, _data[i]); | ||
} | ||
@@ -258,44 +258,42 @@ } | ||
// Initialize the audio for each file, and setup the event listeners. | ||
function initAudio(data) { | ||
var myAudio = []; | ||
function initAudio(_data) { | ||
var _myAudio = _data.map(function(item, key) { | ||
var node = new Audio(); | ||
for (var i = 0; i < data.length; i++) { | ||
// Init. the audio | ||
myAudio[i] = new Audio(); | ||
// Apply the preload attr. if needed | ||
if (data[i].preload) { | ||
myAudio[i].preload = data[i].preload; | ||
if (item.preload) { | ||
node.preload = item.preload; | ||
} | ||
// Add the audio source (by URL) to the audio node | ||
myAudio[i].src = data[i].url; | ||
node.src = item.url; | ||
// Check if file exists before setting time, to prevent IE11 error | ||
if (!isNaN(myAudio[i].duration)) { | ||
myAudio[i].currentTime = 0; | ||
if (!isNaN(node.duration)) { | ||
node.currentTime = 0; | ||
} | ||
// Assign an index to each audio node: | ||
// this links the audio elements to the | ||
// relevant markup | ||
node.setAttribute('data-song-index', key); | ||
// Setup event listeners | ||
playPauseButtons[i].addEventListener('click', _playPauseAudio, false); | ||
progressBar[i].addEventListener('input', sliderScrub, false); | ||
volumeControl[i].addEventListener('input', volume, false); | ||
myAudio[i].addEventListener('timeupdate', _triggerUpdateProgress, false); | ||
myAudio[i].addEventListener('loadstart', _loadStart, false); | ||
myAudio[i].addEventListener('canplaythrough', _canplaythrough, false); | ||
muteButtons[i].addEventListener('click', _muteUnmuteAudio, false); | ||
node.addEventListener('timeupdate', _triggerUpdateProgress, false); | ||
node.addEventListener('loadstart', _loadStart, false); | ||
node.addEventListener('canplaythrough', _canplaythrough, false); | ||
node.addEventListener('error', _errors, false); | ||
node.addEventListener('stalled', _stalled, false); | ||
node.addEventListener('waiting', _errors, false); | ||
node.addEventListener('progress', _progress, false); | ||
myAudio[i].addEventListener('error', _errors, false); | ||
myAudio[i].addEventListener('stalled', _stalled, false); | ||
myAudio[i].addEventListener('waiting', _errors, false); | ||
playPauseButtons[key].addEventListener('click', _playPauseAudio, false); | ||
progressBar[key].addEventListener('input', sliderScrub, false); | ||
volumeControl[key].addEventListener('input', volume, false); | ||
muteButtons[key].addEventListener('click', _muteUnmuteAudio, false); | ||
myAudio[i].addEventListener('progress', _progress, false); | ||
return node; | ||
}); | ||
// Assign an index to each audio node: | ||
// this links the audio elements to the | ||
// relevant markup | ||
myAudio[i].setAttribute('data-song-index', i); | ||
} | ||
return myAudio; | ||
return _myAudio; | ||
} | ||
@@ -314,5 +312,4 @@ | ||
// Fire this event when loading starts [TEST] | ||
function _loadStart() { | ||
// console.log( 'Load start' ); | ||
} | ||
function _loadStart() {} | ||
// console.log( 'Load start' ); | ||
@@ -417,3 +414,3 @@ // Fire this event when we can play the audio | ||
function mute(index, state) { | ||
var oldVolume; | ||
var oldVolume = void 0; | ||
if (state) { | ||
@@ -445,3 +442,3 @@ oldVolume = myAudio[index].volume; | ||
if (state) { | ||
for (i = 0; i < playPauseButtons.length; i++) { | ||
for (var i = 0; i < playPauseButtons.length; i++) { | ||
_removeClass(playPauseButtons[i], 'songPlaying'); | ||
@@ -467,4 +464,4 @@ _addClass(playPauseButtons[i], 'songPaused'); | ||
if (typeof targetSong != 'undefined') { | ||
var playSong = _hasClass(this, 'songPlaying') ? false : true; | ||
playPause(targetSong, playSong); | ||
var _playSong = _hasClass(this, 'songPlaying') ? false : true; | ||
playPause(targetSong, _playSong); | ||
} else { | ||
@@ -502,3 +499,3 @@ console.log('too soon to play!'); | ||
var duration = myAudio[index].duration; | ||
progressParsed = _secondsToMMSS(progress); | ||
var progressParsed = _parseTime(progress); | ||
playTimer[index].innerHTML = progressParsed; | ||
@@ -517,3 +514,3 @@ if (progress >= duration) { | ||
var songLength = myAudio[index].duration; | ||
var duration = _secondsToMMSS(songLength); | ||
var duration = _parseTime(songLength); | ||
var songClass = '.song' + index; | ||
@@ -577,14 +574,25 @@ songLengthBox[index].innerHTML = duration; | ||
// Convert seconds into minutes-and-seconds (MMSS) format | ||
function _secondsToMMSS(seconds) { | ||
var mins = Math.floor((seconds % 3600) / 60); | ||
mins = mins.toFixed(0); | ||
mins = mins.toString(); | ||
var secs = Math.floor((seconds % 3600) % 60); | ||
secs = secs.toFixed(0); | ||
secs = secs.toString(); | ||
if (secs < 10) { | ||
secs = '0' + secs; | ||
function _parseTime(seconds) { | ||
var hours = Math.floor(seconds / 3600); | ||
var mins = Math.floor((seconds % 3600) / 60) | ||
.toFixed(0) | ||
.toString(); | ||
var secs = Math.floor((seconds % 3600) % 60) | ||
.toFixed(0) | ||
.toString(); | ||
// Left-pad seconds string if needed | ||
secs = secs > 10 ? secs : '0' + secs; | ||
var parsedTime = mins + ':' + secs; | ||
if (hours > 0) { | ||
// Left-pad minutes string if needed | ||
mins = mins > 10 ? mins : '0' + mins; | ||
parsedTime = hours + ':' + mins + ':' + secs; | ||
} | ||
var mmss = mins + ':' + secs; | ||
return mmss; | ||
return parsedTime; | ||
} | ||
@@ -594,3 +602,3 @@ | ||
function _hasClass(el, className) { | ||
var result; | ||
var result = void 0; | ||
if (el.classList) { | ||
@@ -597,0 +605,0 @@ result = el.classList.contains(className); |
@@ -1,251 +0,1 @@ | ||
function Picobel(e) { | ||
(e = void 0 !== e ? e : {}).theme = e.theme || 'defaultPlayerTheme'; | ||
var t, | ||
a = ((t = document.getElementsByTagName('audio')), [].slice.call(t)), | ||
n = (function(t) { | ||
output = []; | ||
for (var a = 0; a < t.length; a++) | ||
(item = {}), | ||
(item.url = t[a].src), | ||
(item.preload = e.preload ? e.preload : t[a].preload), | ||
output.push(item); | ||
return output; | ||
})(a); | ||
!(function(t) { | ||
for (var n = 0; n < t.length; n++) { | ||
var s = document.createElement('div'); | ||
s.className = 'customAudioPlayer loading player_' + n; | ||
var r = a[n].className; | ||
'' !== r && R(s, r), R(s, e.theme), s.setAttribute('data-song-index', n); | ||
var d = document.createElement('div'); | ||
(d.className = 'loader'), s.appendChild(d); | ||
var l = document.createElement('button'); | ||
l.className = 'playerTrigger'; | ||
var o = document.createElement('span'); | ||
(o.className = 'buttonText'), (o.innerHTML = 'play'), l.appendChild(o); | ||
var i = document.createElement('div'); | ||
i.className = 'metaWrapper'; | ||
var u = document.createElement('span'); | ||
(u.className = 'titleDisplay'), (u.innerHTML = 'File ' + (n + 1)), i.appendChild(u); | ||
var m = document.createElement('span'); | ||
(m.className = 'artistDisplay'), i.appendChild(m); | ||
var c = document.createElement('div'); | ||
c.className = 'timingsWrapper'; | ||
var p = document.createElement('span'); | ||
(p.className = 'songPlayTimer'), (p.innerHTML = '0:00'), c.appendChild(p); | ||
var g = document.createElement('div'); | ||
g.className = 'songProgressSliderWrapper'; | ||
var v = document.createElement('div'); | ||
(v.className = 'pseudoProgressBackground'), g.appendChild(v); | ||
var h = document.createElement('div'); | ||
(h.className = 'pseudoProgressIndicator'), g.appendChild(h); | ||
var N = document.createElement('div'); | ||
(N.className = 'pseudoProgressPlayhead'), g.appendChild(N); | ||
var E = document.createElement('input'); | ||
(E.type = 'range'), | ||
(E.min = 0), | ||
(E.max = 100), | ||
(E.value = 0), | ||
(E.className = 'songProgressSlider'), | ||
g.appendChild(E), | ||
c.appendChild(g); | ||
var y = document.createElement('span'); | ||
(y.className = 'songDuration'), (y.innerHTML = '-:--'), c.appendChild(y); | ||
var C = document.createElement('div'); | ||
C.className = 'songVolume'; | ||
var f = document.createElement('button'); | ||
(f.className = 'songMuteButton'), (f.innerHTML = 'Mute'), C.appendChild(f); | ||
var L = document.createElement('div'); | ||
L.className = 'songVolumeLabelWrapper'; | ||
var P = document.createElement('span'); | ||
(P.className = 'songVolumeLabel'), (P.innerHTML = 'Volume'), L.appendChild(P); | ||
var T = document.createElement('span'); | ||
(T.className = 'songVolumeValue'), | ||
(T.innerHTML = '10'), | ||
L.appendChild(T), | ||
C.appendChild(L); | ||
var b = document.createElement('div'); | ||
b.className = 'songVolumeSliderWrapper'; | ||
var M = document.createElement('div'); | ||
(M.className = 'pseudoVolumeBackground'), b.appendChild(M); | ||
var x = document.createElement('div'); | ||
(x.className = 'pseudoVolumeIndicator'), b.appendChild(x); | ||
var B = document.createElement('div'); | ||
(B.className = 'pseudoVolumePlayhead'), b.appendChild(B); | ||
var A = document.createElement('input'); | ||
(A.type = 'range'), | ||
(A.min = 0), | ||
(A.max = 1), | ||
(A.value = 1), | ||
(A.step = 0.1), | ||
(A.className = 'songVolumeSlider'), | ||
b.appendChild(A), | ||
C.appendChild(b), | ||
s.appendChild(l), | ||
s.appendChild(i), | ||
s.appendChild(c), | ||
s.appendChild(C), | ||
t[n].parentNode.replaceChild(s, t[n]); | ||
} | ||
})(a); | ||
var s = document.getElementsByClassName('customAudioPlayer'), | ||
r = document.getElementsByClassName('playerTrigger'), | ||
d = document.getElementsByClassName('songMuteButton'), | ||
l = document.getElementsByClassName('buttonText'), | ||
o = document.getElementsByClassName('songPlayTimer'), | ||
u = document.getElementsByClassName('songDuration'), | ||
m = document.getElementsByClassName('titleDisplay'), | ||
c = document.getElementsByClassName('artistDisplay'), | ||
p = document.getElementsByClassName('songProgressSlider'), | ||
g = document.getElementsByClassName('pseudoProgressPlayhead'), | ||
v = document.getElementsByClassName('pseudoProgressIndicator'), | ||
h = document.getElementsByClassName('songVolumeSlider'), | ||
N = document.getElementsByClassName('songVolumeValue'), | ||
E = document.getElementsByClassName('pseudoVolumeIndicator'), | ||
y = document.getElementsByClassName('pseudoVolumePlayhead'), | ||
C = (function(e) { | ||
for (var t = [], a = 0; a < e.length; a++) | ||
(t[a] = new Audio()), | ||
e[a].preload && (t[a].preload = e[a].preload), | ||
(t[a].src = e[a].url), | ||
isNaN(t[a].duration) || (t[a].currentTime = 0), | ||
r[a].addEventListener('click', H, !1), | ||
p[a].addEventListener('input', b, !1), | ||
h[a].addEventListener('input', M, !1), | ||
t[a].addEventListener('timeupdate', S, !1), | ||
t[a].addEventListener('loadstart', f, !1), | ||
t[a].addEventListener('canplaythrough', L, !1), | ||
d[a].addEventListener('click', V, !1), | ||
t[a].addEventListener('error', D, !1), | ||
t[a].addEventListener('stalled', F, !1), | ||
t[a].addEventListener('waiting', D, !1), | ||
t[a].addEventListener('progress', I, !1), | ||
t[a].setAttribute('data-song-index', a); | ||
return t; | ||
})(n); | ||
function f() {} | ||
function L() { | ||
var e, | ||
t, | ||
n = this.getAttribute('data-song-index'); | ||
(t = W(C[(e = n)].duration)), | ||
(u[e].innerHTML = t), | ||
U(s[n], 'loading'), | ||
(function(e) { | ||
var t = C[e].src, | ||
n = ((l = t), l.substr(2 + (~-l.lastIndexOf('.') >>> 0))), | ||
s = ((d = t), d.replace(/^.*[\\\/]/, '').split('.')[0]), | ||
r = a[e].title; | ||
var d; | ||
var l; | ||
m[e].innerHTML = '' !== r ? r : s + '.' + n; | ||
var o = a[e].getAttribute('data-artist'); | ||
'' !== o && (c[e].innerHTML = o); | ||
})(n); | ||
} | ||
function P() { | ||
for (var e = 0; e < n.length; e++) C[e].pause(); | ||
} | ||
function T(e) { | ||
e; | ||
for (var t = 0; t < n.length; t++) t != e && C[t].pause(); | ||
C[e].play(); | ||
} | ||
function b() { | ||
var e = this.value, | ||
t = this.parentNode.parentNode.parentNode.getAttribute('data-song-index'), | ||
a = C[t].duration * (e / 100); | ||
(a = a.toFixed(2)), (C[t].currentTime = a), w(t); | ||
} | ||
function M() { | ||
var e = this.value, | ||
t = this.parentNode.parentNode.parentNode.getAttribute('data-song-index'); | ||
B(t, !1), x(t, e); | ||
} | ||
function x(e, t) { | ||
var a = 10 * t, | ||
n = 100 * t; | ||
(C[e].volume = t), | ||
(N[e].innerHTML = a), | ||
(h[e].value = t), | ||
(E[e].style.width = n + '%'), | ||
(y[e].style.left = n + '%'); | ||
} | ||
function B(e, t) { | ||
var a; | ||
t | ||
? ((a = C[e].volume), | ||
d[e].setAttribute('data-saved-volume', a), | ||
x(e, 0), | ||
R(d[e], 'songMuted'), | ||
U(d[e], 'songUnmuted'), | ||
(d[e].innerHTML = 'unmute')) | ||
: (x(e, void 0 !== (a = d[e].getAttribute('data-saved-volume')) && a > 0 ? a : 1), | ||
U(d[e], 'songMuted'), | ||
R(d[e], 'songUnmuted'), | ||
(d[e].innerHTML = 'mute')); | ||
} | ||
function A(e, t) { | ||
var a = l[e], | ||
n = r[e]; | ||
if (t) { | ||
for (i = 0; i < r.length; i++) | ||
U(r[i], 'songPlaying'), R(r[i], 'songPaused'), (l[i].innerHTML = 'play'); | ||
T(e), R(n, 'songPlaying'), U(n, 'songPaused'), (a.innerHTML = 'pause'); | ||
} else P(), U(n, 'songPlaying'), R(n, 'songPaused'), (a.innerHTML = 'play'); | ||
} | ||
function H() { | ||
var e = this.parentNode.getAttribute('data-song-index'); | ||
void 0 !== e ? A(e, !k(this, 'songPlaying')) : console.log('too soon to play!'); | ||
} | ||
function V() { | ||
var e = this.parentNode.parentNode.getAttribute('data-song-index'); | ||
l[e]; | ||
k(this, 'songMuted') ? B(e, !1) : B(e, !0); | ||
} | ||
function S() { | ||
w(this.getAttribute('data-song-index')); | ||
} | ||
function w(e) { | ||
var t = C[e].currentTime, | ||
a = C[e].duration; | ||
(progressParsed = W(t)), | ||
(o[e].innerHTML = progressParsed), | ||
t >= a && U(r[e], 'songPlaying'); | ||
var n = (t / a * 100).toFixed(2); | ||
(p[e].value = n), (v[e].style.width = n + '%'), (g[e].style.left = n + '%'); | ||
} | ||
function D(e) { | ||
this.getAttribute('data-song-index'); | ||
} | ||
function F(e) { | ||
A(this.getAttribute('data-song-index'), !1); | ||
} | ||
function I(e) { | ||
var t = this.getAttribute('data-song-index'); | ||
C[t].readyState; | ||
} | ||
function W(e) { | ||
var t = Math.floor((e % 3600) / 60); | ||
t = (t = t.toFixed(0)).toString(); | ||
var a = Math.floor((e % 3600) % 60); | ||
return (a = (a = a.toFixed(0)).toString()) < 10 && (a = '0' + a), t + ':' + a; | ||
} | ||
function k(e, t) { | ||
return e.classList | ||
? e.classList.contains(t) | ||
: new RegExp('(^| )' + t + '( |$)', 'gi').test(e.className); | ||
} | ||
function R(e, t) { | ||
e.classList ? e.classList.add(t) : (e.className += ' ' + t); | ||
} | ||
function U(e, t) { | ||
e.classList | ||
? e.classList.remove(t) | ||
: (e.className = e.className.replace( | ||
new RegExp('(^|\\b)' + t.split(' ').join('|') + '(\\b|$)', 'gi'), | ||
' ' | ||
)); | ||
} | ||
return { sliderScrub: b, playSong: T, pauseAll: P }; | ||
} | ||
function Picobel(options){options=typeof options!=="undefined"?options:{};options.theme=options.theme||"defaultPlayerTheme";options.preload=options.preload||false;var audioElements=findAudio();var data=getRawData(audioElements);buildMarkup(audioElements);var wrappers=document.getElementsByClassName("customAudioPlayer");var playPauseButtons=document.getElementsByClassName("playerTrigger");var muteButtons=document.getElementsByClassName("songMuteButton");var playPauseButtonsText=document.getElementsByClassName("buttonText");var playTimer=document.getElementsByClassName("songPlayTimer");var songLengthBox=document.getElementsByClassName("songDuration");var titleDisplay=document.getElementsByClassName("titleDisplay");var artistDisplay=document.getElementsByClassName("artistDisplay");var progressBar=document.getElementsByClassName("songProgressSlider");var playhead=document.getElementsByClassName("pseudoProgressPlayhead");var indicator=document.getElementsByClassName("pseudoProgressIndicator");var volumeControl=document.getElementsByClassName("songVolumeSlider");var volumeDisplay=document.getElementsByClassName("songVolumeValue");var volumeIndicator=document.getElementsByClassName("pseudoVolumeIndicator");var volumePlayhead=document.getElementsByClassName("pseudoVolumePlayhead");var myAudio=initAudio(data);console.log("myAudio",myAudio);var currentSongIndex=0;function findAudio(){var audioElements=document.getElementsByTagName("audio");var items=[].slice.call(audioElements);return items}function getRawData(_data){var output=_data.map(function(item){return{preload:options.preload?options.preload:item.preload,url:item.src}});return output}function buildMarkup(_data){for(var i=0;i<_data.length;i++){var newPlayer=document.createElement("div");newPlayer.className="customAudioPlayer loading player_"+i;var className=audioElements[i].className;if(className!==""){_addClass(newPlayer,className)}_addClass(newPlayer,options.theme);newPlayer.setAttribute("data-song-index",i);var loading=document.createElement("div");loading.className="loader";newPlayer.appendChild(loading);var button=document.createElement("button");button.className="playerTrigger";var buttonText=document.createElement("span");buttonText.className="buttonText";buttonText.innerHTML="play";button.appendChild(buttonText);var meta=document.createElement("div");meta.className="metaWrapper";var meta_title=document.createElement("span");meta_title.className="titleDisplay";meta_title.innerHTML="File "+(i+1);meta.appendChild(meta_title);var meta_artist=document.createElement("span");meta_artist.className="artistDisplay";meta.appendChild(meta_artist);var timings=document.createElement("div");timings.className="timingsWrapper";var meta_timer=document.createElement("span");meta_timer.className="songPlayTimer";meta_timer.innerHTML="0:00";timings.appendChild(meta_timer);var meta_progress_wrapper=document.createElement("div");meta_progress_wrapper.className="songProgressSliderWrapper";var meta_pseudo_progress_background=document.createElement("div");meta_pseudo_progress_background.className="pseudoProgressBackground";meta_progress_wrapper.appendChild(meta_pseudo_progress_background);var meta_pseudo_progress_indicator=document.createElement("div");meta_pseudo_progress_indicator.className="pseudoProgressIndicator";meta_progress_wrapper.appendChild(meta_pseudo_progress_indicator);var meta_pseudo_progress_playhead=document.createElement("div");meta_pseudo_progress_playhead.className="pseudoProgressPlayhead";meta_progress_wrapper.appendChild(meta_pseudo_progress_playhead);var meta_progress=document.createElement("input");meta_progress.type="range";meta_progress.min=0;meta_progress.max=100;meta_progress.value=0;meta_progress.className="songProgressSlider";meta_progress_wrapper.appendChild(meta_progress);timings.appendChild(meta_progress_wrapper);var meta_duration=document.createElement("span");meta_duration.className="songDuration";meta_duration.innerHTML="-:--";timings.appendChild(meta_duration);var meta_volume=document.createElement("div");meta_volume.className="songVolume";var meta_mute=document.createElement("button");meta_mute.className="songMuteButton";meta_mute.innerHTML="Mute";meta_volume.appendChild(meta_mute);var meta_volume_label_wrapper=document.createElement("div");meta_volume_label_wrapper.className="songVolumeLabelWrapper";var meta_volume_label=document.createElement("span");meta_volume_label.className="songVolumeLabel";meta_volume_label.innerHTML="Volume";meta_volume_label_wrapper.appendChild(meta_volume_label);var meta_volume_value=document.createElement("span");meta_volume_value.className="songVolumeValue";meta_volume_value.innerHTML="10";meta_volume_label_wrapper.appendChild(meta_volume_value);meta_volume.appendChild(meta_volume_label_wrapper);var meta_volume_wrapper=document.createElement("div");meta_volume_wrapper.className="songVolumeSliderWrapper";var meta_pseudo_volume_background=document.createElement("div");meta_pseudo_volume_background.className="pseudoVolumeBackground";meta_volume_wrapper.appendChild(meta_pseudo_volume_background);var meta_pseudo_volume_indicator=document.createElement("div");meta_pseudo_volume_indicator.className="pseudoVolumeIndicator";meta_volume_wrapper.appendChild(meta_pseudo_volume_indicator);var meta_pseudo_volume_playhead=document.createElement("div");meta_pseudo_volume_playhead.className="pseudoVolumePlayhead";meta_volume_wrapper.appendChild(meta_pseudo_volume_playhead);var meta_volume_control=document.createElement("input");meta_volume_control.type="range";meta_volume_control.min=0;meta_volume_control.max=1;meta_volume_control.value=1;meta_volume_control.step=.1;meta_volume_control.className="songVolumeSlider";meta_volume_wrapper.appendChild(meta_volume_control);meta_volume.appendChild(meta_volume_wrapper);newPlayer.appendChild(button);newPlayer.appendChild(meta);newPlayer.appendChild(timings);newPlayer.appendChild(meta_volume);_data[i].parentNode.replaceChild(newPlayer,_data[i])}}function initAudio(_data){var _myAudio=_data.map(function(item,key){var node=new Audio;if(item.preload){node.preload=item.preload}node.src=item.url;if(!isNaN(node.duration)){node.currentTime=0}node.setAttribute("data-song-index",key);node.addEventListener("timeupdate",_triggerUpdateProgress,false);node.addEventListener("loadstart",_loadStart,false);node.addEventListener("canplaythrough",_canplaythrough,false);node.addEventListener("error",_errors,false);node.addEventListener("stalled",_stalled,false);node.addEventListener("waiting",_errors,false);node.addEventListener("progress",_progress,false);playPauseButtons[key].addEventListener("click",_playPauseAudio,false);progressBar[key].addEventListener("input",sliderScrub,false);volumeControl[key].addEventListener("input",volume,false);muteButtons[key].addEventListener("click",_muteUnmuteAudio,false);return node});return _myAudio}function _loadStart(){}function _canplaythrough(){var index=this.getAttribute("data-song-index");_setLengthDisplay(index);_removeClass(wrappers[index],"loading");_getMeta(index)}function _getMeta(i){var url=myAudio[i].src;var fileType=_getFileType(url);var fileName=_getFileName(url);var title=audioElements[i].title;if(title!==""){titleDisplay[i].innerHTML=title}else{titleDisplay[i].innerHTML=fileName+"."+fileType}var artist=audioElements[i].getAttribute("data-artist");if(artist!==""){artistDisplay[i].innerHTML=artist}}function pauseAll(){for(var i=0;i<data.length;i++){myAudio[i].pause()}}function playSong(index){currentSongIndex=index;for(var i=0;i<data.length;i++){if(i!=index){myAudio[i].pause()}}myAudio[index].play()}function sliderScrub(){var value=this.value;var index=this.parentNode.parentNode.parentNode.getAttribute("data-song-index");var duration=myAudio[index].duration;var targetTime=duration*(value/100);targetTime=targetTime.toFixed(2);myAudio[index].currentTime=targetTime;_updateProgress(index)}function volume(){var value=this.value;var index=this.parentNode.parentNode.parentNode.getAttribute("data-song-index");mute(index,false);setVolume(index,value)}function setVolume(index,value){var valueMapped=value*10;var volumePercent=value*100;myAudio[index].volume=value;volumeDisplay[index].innerHTML=valueMapped;volumeControl[index].value=value;volumeIndicator[index].style.width=volumePercent+"%";volumePlayhead[index].style.left=volumePercent+"%"}function mute(index,state){var oldVolume=void 0;if(state){oldVolume=myAudio[index].volume;muteButtons[index].setAttribute("data-saved-volume",oldVolume);setVolume(index,0);_addClass(muteButtons[index],"songMuted");_removeClass(muteButtons[index],"songUnmuted");muteButtons[index].innerHTML="unmute"}else{oldVolume=muteButtons[index].getAttribute("data-saved-volume");if(typeof oldVolume!="undefined"&&oldVolume>0){setVolume(index,oldVolume)}else{setVolume(index,1)}_removeClass(muteButtons[index],"songMuted");_addClass(muteButtons[index],"songUnmuted");muteButtons[index].innerHTML="mute"}}function playPause(index,state){var buttonText=playPauseButtonsText[index];var target=playPauseButtons[index];if(state){for(var i=0;i<playPauseButtons.length;i++){_removeClass(playPauseButtons[i],"songPlaying");_addClass(playPauseButtons[i],"songPaused");playPauseButtonsText[i].innerHTML="play"}playSong(index);_addClass(target,"songPlaying");_removeClass(target,"songPaused");buttonText.innerHTML="pause"}else{pauseAll();_removeClass(target,"songPlaying");_addClass(target,"songPaused");buttonText.innerHTML="play"}}function _playPauseAudio(){var targetSong=this.parentNode.getAttribute("data-song-index");if(typeof targetSong!="undefined"){var _playSong=_hasClass(this,"songPlaying")?false:true;playPause(targetSong,_playSong)}else{console.log("too soon to play!")}}function _muteUnmuteAudio(){var targetSong=this.parentNode.parentNode.getAttribute("data-song-index");var buttonText=playPauseButtonsText[targetSong];if(_hasClass(this,"songMuted")){mute(targetSong,false)}else{mute(targetSong,true)}}function _triggerUpdateProgress(){var index=this.getAttribute("data-song-index");_updateProgress(index)}function _updateProgress(index){var progress=myAudio[index].currentTime;var duration=myAudio[index].duration;var progressParsed=_parseTime(progress);playTimer[index].innerHTML=progressParsed;if(progress>=duration){_removeClass(playPauseButtons[index],"songPlaying")}var progressPercent=(progress/duration*100).toFixed(2);progressBar[index].value=progressPercent;indicator[index].style.width=progressPercent+"%";playhead[index].style.left=progressPercent+"%"}function _setLengthDisplay(index){var songLength=myAudio[index].duration;var duration=_parseTime(songLength);var songClass=".song"+index;songLengthBox[index].innerHTML=duration}function _errors(e){var index=this.getAttribute("data-song-index")}function _error(e){var index=this.getAttribute("data-song-index");var error=myAudio[index].error}function _stalled(e){var index=this.getAttribute("data-song-index");playPause(index,false)}function _waiting(){}function _progress(e){var index=this.getAttribute("data-song-index");var readyState=myAudio[index].readyState}function _parseTime(seconds){var hours=Math.floor(seconds/3600);var mins=Math.floor(seconds%3600/60).toFixed(0).toString();var secs=Math.floor(seconds%3600%60).toFixed(0).toString();secs=secs>10?secs:"0"+secs;var parsedTime=mins+":"+secs;if(hours>0){mins=mins>10?mins:"0"+mins;parsedTime=hours+":"+mins+":"+secs}return parsedTime}function _hasClass(el,className){var result=void 0;if(el.classList){result=el.classList.contains(className)}else{result=new RegExp("(^| )"+className+"( |$)","gi").test(el.className)}return result}function _addClass(el,className){if(el.classList){el.classList.add(className)}else{el.className+=" "+className}}function _removeClass(el,className){if(el.classList){el.classList.remove(className)}else{el.className=el.className.replace(new RegExp("(^|\\b)"+className.split(" ").join("|")+"(\\b|$)","gi")," ")}}function _getFileType(string){return string.substr((~-string.lastIndexOf(".")>>>0)+2)}function _getFileName(string){var fullFileName=string.replace(/^.*[\\\/]/,"");var withNoExtension=fullFileName.split(".")[0];return withNoExtension}return{sliderScrub:sliderScrub,playSong:playSong,pauseAll:pauseAll}} |
999225
6
6617