| <!DOCTYPE HTML> |
| <html i18n-values="dir:textdirection;"> |
| <head> |
| <meta charset="utf-8"> |
| <title>Media Player</title> |
| <style type="text/css"> |
| |
| body { |
| overflow: hidden; |
| background: black; |
| } |
| |
| .error { |
| left: 0; |
| right: 0; |
| color: white; |
| bottom: 38px; |
| position: absolute; |
| } |
| |
| .glow { |
| left: 0; |
| right: 0; |
| bottom: 30px; |
| height: 8px; |
| opacity: .4; |
| position: absolute; |
| background: -webkit-linear-gradient(transparent, white); |
| } |
| |
| .audiotitle { |
| left: 0; |
| right: 0; |
| text-align: center; |
| position: absolute; |
| color: white; |
| top: 100px; |
| } |
| |
| .progress { |
| -webkit-appearance: sliderthumb-horizontal; |
| position: absolute; |
| background: transparent; |
| left: 93px; |
| right: 120px; |
| bottom: -2px; |
| height: 30px; |
| z-index: 99999; |
| border-left: 1px solid #424242; |
| } |
| |
| .playercontrolsbox { |
| bottom: 0; |
| left: 0; |
| height: 30px; |
| right: 0; |
| position: absolute; |
| } |
| |
| .videocontrols { |
| top: 0; |
| left: 0; |
| z-index: 999; |
| height: 100%; |
| opacity: .9; |
| right: 0; |
| position: absolute; |
| background: -webkit-linear-gradient(#323232, #070707); |
| } |
| |
| .sliderback { |
| bottom: 12px; |
| left: 93px; |
| right: 120px; |
| height: 5px; |
| position: absolute; |
| border-radius: 3px; |
| background: -webkit-linear-gradient(#ced9fa, #e8ecf9); |
| border: 1px solid #ffffff; |
| } |
| |
| .sliderplayed { |
| height: 100%; |
| width:0; |
| left: -1px; |
| top: -1px; |
| border-radius: 3px; |
| border: 1px solid #9ca5b7; |
| position: absolute; |
| background: -webkit-linear-gradient(#4a5d84, #232c3d); |
| } |
| |
| .sliderloaded { |
| height: 100%; |
| width:0; |
| left: -1px; |
| top: -1px; |
| border-radius: 3px; |
| position: absolute; |
| background: #6a799a; |
| border: 1px solid #ffffff; |
| } |
| |
| .audiocontrols { |
| top: 0; |
| left: 0; |
| z-index: 999; |
| height: 100%; |
| opacity: .9; |
| right: 0; |
| position: absolute; |
| background: -webkit-linear-gradient(#323232, #070707); |
| } |
| |
| .soundbutton { |
| position: absolute; |
| right: 30px; |
| bottom: 0; |
| border-left: 1px solid #424242; |
| border-right: 1px solid black; |
| } |
| |
| .soundiconhigh { |
| background: url('shared/images/mediaplayer_vol_high.png'); |
| } |
| |
| .soundiconmuted { |
| background: url('shared/images/mediaplayer_vol_mute.png'); |
| } |
| |
| .soundiconhigh, |
| .soundiconmuted { |
| background-repeat: no-repeat; |
| background-position: 6px 8px; |
| } |
| |
| .volume { |
| position: absolute; |
| bottom: 30px; |
| height: 80px; |
| width: 30px; |
| right: 30px; |
| z-index: 99999; |
| background: black; |
| background: -webkit-linear-gradient(#323232, #070707); |
| } |
| |
| .fullscreen { |
| position: absolute; |
| right: 60px; |
| bottom: 0; |
| border-left: 1px solid #424242; |
| border-right: 1px solid black; |
| } |
| |
| .fullscreenicon { |
| background: url('shared/images/mediaplayer_full_screen.png'); |
| background-repeat: no-repeat; |
| background-position: 6px 8px; |
| } |
| |
| .fullscreenexiticon { |
| background: url('shared/images/mediaplayer_full_screen_exit.png'); |
| background-repeat: no-repeat; |
| background-position: 6px 8px; |
| } |
| |
| .volumeslider { |
| -webkit-appearance: slider-vertical; |
| position: absolute; |
| left: 0; |
| right: 0; |
| bottom: 0; |
| top: 0; |
| } |
| |
| .playbutton { |
| position: absolute; |
| left: 30px; |
| bottom: 0; |
| border-left: 1px solid #424242; |
| border-right: 1px solid black; |
| } |
| |
| .playicon { |
| background: url('shared/images/mediaplayer_play.png'); |
| background-repeat: no-repeat; |
| background-position: 9px 8px; |
| } |
| |
| .pausebutton { |
| position: absolute; |
| left: 30px; |
| bottom: 0; |
| border-left: 1px solid #424242; |
| border-right: 1px solid black; |
| } |
| |
| .pauseicon { |
| background: url('shared/images/mediaplayer_pause.png'); |
| background-repeat: no-repeat; |
| background-position: 9px 8px; |
| } |
| |
| .prevbutton { |
| position: absolute; |
| left: 0; |
| bottom: 0; |
| border-right: 1px solid black; |
| } |
| |
| .previcon { |
| background: url('shared/images/mediaplayer_prev.png'); |
| background-repeat: no-repeat; |
| background-position: 6px 8px; |
| } |
| |
| .playbackvideoelement { |
| width: 100%; |
| height: 100%; |
| position: absolute; |
| left: 0; |
| top: 0; |
| } |
| |
| .duration { |
| right: 90px; |
| color: white; |
| position: absolute; |
| top: 8.5px; |
| font-size: .6em; |
| height: 30px; |
| } |
| |
| .playbackaudioelement { |
| width: 100%; |
| height: 100%; |
| position: absolute; |
| left: 0; |
| top: 0; |
| } |
| |
| .nextbutton { |
| position: absolute; |
| left: 60px; |
| bottom: 0; |
| border-left: 1px solid #424242; |
| border-right: 1px solid black; |
| } |
| |
| .nexticon { |
| background: url('shared/images/mediaplayer_next.png'); |
| background-repeat: no-repeat; |
| background-position: 6px 8px; |
| } |
| |
| .playlistbutton { |
| position: absolute; |
| right: 0; |
| bottom: 0; |
| border-left: 1px solid #424242; |
| border-right: 1px solid black; |
| } |
| |
| .playlisticon { |
| background: url('shared/images/mediaplayer_playlist.png'); |
| background-repeat: no-repeat; |
| background-position: 6px 8px; |
| } |
| |
| .controlbutton { |
| z-index: 9999; |
| cursor: pointer; |
| width: 28px; |
| height: 30px; |
| } |
| |
| .controlbutton:hover { |
| background: -webkit-linear-gradient(#6a7eac, #000); |
| } |
| |
| .icon { |
| width: 100%; |
| height: 100%; |
| z-index: 9999; |
| } |
| |
| </style> |
| <script src="shared/js/local_strings.js"></script> |
| <script src="shared/js/media_common.js"></script> |
| <script> |
| |
| function $(o) { |
| return document.getElementById(o); |
| } |
| |
| var videoPlaybackElement = null; |
| var audioPlaybackElement = null; |
| var currentPlaylist = null; |
| var currentItem = -1; |
| var savedVolumeValue = 0; |
| var hideVolumeTimerId = 0; |
| var localStrings; |
| var fullScreen = false; |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // Document Functions: |
| /** |
| * Window onload handler, sets up the page. |
| */ |
| function load() { |
| document.body.addEventListener('dragover', function(e) { |
| if (e.preventDefault) e.preventDefault(); |
| }); |
| document.body.addEventListener('drop', function(e) { |
| if (e.preventDefault) e.preventDefault(); |
| }); |
| document.body.addEventListener('keydown', onkeydown); |
| |
| localStrings = new LocalStrings(); |
| chrome.send('getCurrentPlaylist', []); |
| } |
| |
| function onMediaProgress() { |
| var element = getMediaElement(); |
| var current = element.currentTime; |
| var duration = element.duration; |
| var progress = $('progress'); |
| progress.value = (current*100)/duration; |
| var played = $('sliderplayed'); |
| played.style.width = '' + progress.value + '%'; |
| if (progress.value == 100) { |
| onMediaComplete(); |
| } |
| } |
| |
| function onLoadedProgress(e) { |
| var element = $('sliderloaded'); |
| if (e.lengthComputable) { |
| element.style.display = 'block'; |
| var percent = (e.loaded * 100) / e.total; |
| element.style.width = '' + percent + '%'; |
| } else { |
| element.style.display = 'none'; |
| } |
| } |
| |
| function onMediaError(e) { |
| console.log('Got new error'); |
| console.log(e); |
| chrome.send('playbackError', ['Error playing back', |
| currentPlaylist[currentItem].path]); |
| if (currentPlaylist.length == 1) { |
| $('error').textContent = localStrings.getString('errorstring'); |
| } else { |
| chrome.send("showPlaylist", []); |
| } |
| onMediaComplete(); |
| } |
| |
| function onMediaComplete() { |
| currentItem ++; |
| if (currentItem >= currentPlaylist.length) { |
| currentItem -= 1; |
| var element = getMediaElement(); |
| if (!getMediaElement().error) { |
| element.currentTime = 0; |
| element.pause(); |
| onMediaProgress(); |
| } |
| onMediaPause(); |
| return; |
| } |
| var mediaElement = getMediaElement(); |
| mediaElement.removeEventListener("progress", onLoadedProgress, true); |
| mediaElement.removeEventListener("timeupdate", onMediaProgress, true); |
| mediaElement.removeEventListener("durationchange", onMetadataAvail, true); |
| // MediaElement.removeEventListener("ended", onMediaComplete, true); |
| mediaElement.removeEventListener("play", onMediaPlay, true); |
| mediaElement.removeEventListener("pause", onMediaPause, true); |
| mediaElement.onerror = undefined; |
| chrome.send('currentOffsetChanged', ['' + currentItem]); |
| playMediaFile(currentPlaylist[currentItem].path); |
| } |
| |
| function onMediaPlay() { |
| var pausebutton = $('pausebutton'); |
| var playbutton = $('playbutton'); |
| pausebutton.style.display = 'block'; |
| playbutton.style.display = 'none'; |
| } |
| |
| function onMediaPause() { |
| var pausebutton = $('pausebutton'); |
| var playbutton = $('playbutton'); |
| playbutton.style.display = 'block'; |
| pausebutton.style.display = 'none'; |
| } |
| |
| function setupMediaEvents(element) { |
| element.addEventListener("progress", onLoadedProgress, true); |
| element.addEventListener("timeupdate", onMediaProgress, true); |
| element.addEventListener("durationchange", onMetadataAvail, true); |
| // element.addEventListener("ended", onMediaComplete, true); |
| element.onerror = onMediaError; |
| element.addEventListener("play", onMediaPlay, true); |
| element.addEventListener("pause", onMediaPause, true); |
| element.oncontextmenu = function() { |
| return false; |
| }; |
| } |
| |
| function getMediaElement() { |
| var mediaElement; |
| if (videoPlaybackElement) { |
| mediaElement = videoPlaybackElement; |
| } else { |
| mediaElement = audioPlaybackElement; |
| } |
| return mediaElement; |
| } |
| |
| function playPauseButtonClick() { |
| var mediaElement = getMediaElement(); |
| if (mediaElement.paused || mediaElement.ended) { |
| mediaElement.play(); |
| } else { |
| mediaElement.pause(); |
| } |
| } |
| |
| function prevButtonClick() { |
| var element = getMediaElement(); |
| if (element.currentTime > 6) { |
| element.currentTime = 0; |
| return; |
| } |
| currentItem --; |
| if (currentItem < 0) { |
| currentItem = -1; |
| return; |
| } |
| chrome.send('currentOffsetChanged', ['' + currentItem]); |
| playMediaFile(currentPlaylist[currentItem].path); |
| } |
| |
| function nextButtonClick() { |
| currentItem ++; |
| if (currentItem >= currentPlaylist.length) { |
| currentItem = -1; |
| return; |
| } |
| chrome.send('currentOffsetChanged', ['' + currentItem]); |
| playMediaFile(currentPlaylist[currentItem].path); |
| } |
| |
| function userChangedProgress() { |
| var val = $('progress').value; |
| var element = getMediaElement(); |
| if (element.seekable && element.duration) { |
| var current = (progress.value * element.duration)/100; |
| element.currentTime = current; |
| } |
| } |
| |
| function changeVolumeVisibility(visible) { |
| var volume = $('volume'); |
| volume.style.display = visible ? 'block' : 'none'; |
| } |
| |
| function showVolume() { |
| if (hideVolumeTimerId) { |
| clearTimeout(hideVolumeTimerId); |
| hideVolumeTimerId = 0; |
| } |
| |
| changeVolumeVisibility(true); |
| } |
| |
| function hideVolume() { |
| if (!hideVolumeTimerId) |
| hideVolumeTimerId = setTimeout('changeVolumeVisibility(false)', 500); |
| } |
| |
| function volumeChange() { |
| var volumeslider = $('volumeslider'); |
| var element = getMediaElement(); |
| element.volume = (volumeslider.value/100); |
| |
| var soundicon = $('soundicon'); |
| soundicon.className = soundicon.className.replace( |
| /soundicon.*/, |
| element.volume > 0 ? 'soundiconhigh' : 'soundiconmuted'); |
| } |
| |
| function muteVolume(mute) { |
| var volumeslider = $('volumeslider'); |
| var element = getMediaElement(); |
| if (mute) { |
| savedVolumeValue = volumeslider.value; |
| volumeslider.value = 0; |
| volumeChange(); |
| } else { |
| volumeslider.value = savedVolumeValue; |
| volumeChange(); |
| } |
| } |
| |
| function toggleVolumeMute() { |
| muteVolume($('volumeslider').value != 0); |
| } |
| |
| function getPathAndFilenameForPath(path) { |
| return path.match(/(.*)[\/\\]([^\/\\]+)\.\w+$/); |
| } |
| |
| |
| var hidingControlsAnimation = null; |
| |
| const INACTIVITY_TIMEOUT = 5000; |
| const INACTIVITY_CHECK_INTERVAL = 1000; |
| const ANIMATION_DURATION = 1500; |
| const ANIMATION_STEP = 50; |
| |
| function HidingControlsAnimation() { |
| this.offsetPercent = 0; |
| this.recentActivity = Date.now(); |
| |
| this.inactivityInterval = setInterval(this.checkInactivity.bind(this), |
| INACTIVITY_CHECK_INTERVAL); |
| |
| this.onActivityClosure = this.onActivity.bind(this); |
| document.body.addEventListener('mousemove', this.onActivityClosure); |
| document.body.addEventListener('mousedown', this.onActivityClosure); |
| document.body.addEventListener('keydown', this.onActivityClosure); |
| } |
| |
| HidingControlsAnimation.prototype = { |
| |
| cleanup: function () { |
| this.stopAnimation(); |
| clearInterval(this.inactivityInterval); |
| document.body.removeEventListener('mousemove', this.onActivityClosure); |
| document.body.removeEventListener('mousedown', this.onActivityClosure); |
| document.body.removeEventListener('keydown', this.onActivityClosure); |
| }, |
| |
| onActivity: function() { |
| this.recentActivity = Date.now(); |
| // If not fully visible, start sliding up (or reverse sliding down). |
| if (this.offsetPercent != 0) |
| this.startAnimation(-1); |
| }, |
| |
| checkInactivity: function() { |
| if ((Date.now() - this.recentActivity) > INACTIVITY_TIMEOUT) { |
| // If fully visible start sliding down. |
| if (this.offsetPercent == 0) |
| this.startAnimation(1); |
| } |
| }, |
| |
| startAnimation: function (direction) { |
| this.direction = direction; |
| this.startOffset = this.offsetPercent; |
| this.startTime = Date.now(); |
| if (!this.animationInterval) |
| this.animationInterval = setInterval(this.doAnimation.bind(this), |
| ANIMATION_STEP); |
| }, |
| |
| doAnimation: function () { |
| var phase = (Date.now() - this.startTime) / ANIMATION_DURATION; |
| |
| var newOffsetPercent = this.startOffset + this.direction * phase * 100; |
| |
| if (newOffsetPercent <= 0) { |
| this.offsetPercent = 0; |
| this.stopAnimation(); |
| } else if (newOffsetPercent >= 100){ |
| this.offsetPercent = 100; |
| this.stopAnimation(); |
| } else { |
| this.offsetPercent = Math.round(newOffsetPercent); |
| } |
| |
| $('playercontrols').style.top = this.offsetPercent + '%'; |
| }, |
| |
| stopAnimation: function () { |
| if (this.animationInterval) { |
| clearInterval(this.animationInterval); |
| this.animationInterval = null; |
| } |
| } |
| }; |
| |
| function setupPlaybackControls() { |
| var element = $('playercontrols'); |
| playercontrols.innerHTML = ''; // clear out other |
| var controlsclass = ''; |
| if (hidingControlsAnimation) { |
| hidingControlsAnimation.cleanup(); |
| hidingControlsAnimation = null; |
| } |
| if (videoPlaybackElement != null) { |
| controlsclass = 'video'; |
| element.className = 'videocontrols'; |
| hidingControlsAnimation = new HidingControlsAnimation(); |
| } else if (audioPlaybackElement != null) { |
| controlsclass = 'audio'; |
| element.className = 'audiocontrols'; |
| } |
| |
| var playbutton = document.createElement('div'); |
| playbutton.id = 'playbutton'; |
| playbutton.className = controlsclass + ' controlbutton playbutton'; |
| playbutton.onclick = playPauseButtonClick; |
| var playicon = document.createElement('div'); |
| playicon.className = 'icon playicon'; |
| playbutton.appendChild(playicon); |
| element.appendChild(playbutton); |
| |
| |
| var pausebutton = document.createElement('div'); |
| pausebutton.id = 'pausebutton'; |
| pausebutton.className = controlsclass + ' controlbutton pausebutton'; |
| pausebutton.onclick = playPauseButtonClick; |
| var pauseicon = document.createElement('div'); |
| pauseicon.className = 'icon pauseicon'; |
| pausebutton.appendChild(pauseicon); |
| element.appendChild(pausebutton); |
| |
| var nextbutton = document.createElement('div'); |
| nextbutton.id = 'nextbutton'; |
| nextbutton.className = controlsclass + ' controlbutton nextbutton'; |
| nextbutton.onclick = nextButtonClick; |
| var nexticon = document.createElement('div'); |
| nexticon.className = 'icon nexticon'; |
| nextbutton.appendChild(nexticon); |
| element.appendChild(nextbutton); |
| |
| var prevbutton = document.createElement('div'); |
| prevbutton.id = 'prevbutton'; |
| prevbutton.className = controlsclass + ' controlbutton prevbutton'; |
| prevbutton.onclick = prevButtonClick; |
| var previcon = document.createElement('div'); |
| previcon.className = 'icon previcon'; |
| prevbutton.appendChild(previcon); |
| element.appendChild(prevbutton); |
| |
| var playlistbutton = document.createElement('div'); |
| playlistbutton.id = 'playlistbutton'; |
| playlistbutton.className = ' controlbutton playlistbutton'; |
| playlistbutton.onclick = togglePlaylist; |
| var playlisticon = document.createElement('div'); |
| playlisticon.className = 'icon playlisticon'; |
| playlistbutton.appendChild(playlisticon); |
| element.appendChild(playlistbutton); |
| |
| var slider = document.createElement('input'); |
| slider.type = 'range'; |
| slider.id = 'progress'; |
| slider.className = controlsclass + ' progress'; |
| slider.onchange = userChangedProgress; |
| element.appendChild(slider); |
| |
| var sliderback = document.createElement('div'); |
| sliderback.className = 'sliderback'; |
| element.appendChild(sliderback); |
| |
| var loaded = document.createElement('div'); |
| loaded.id = 'sliderloaded'; |
| loaded.className = 'sliderloaded'; |
| sliderback.appendChild(loaded); |
| |
| var played = document.createElement('div'); |
| played.id = 'sliderplayed'; |
| played.className = 'sliderplayed'; |
| sliderback.appendChild(played); |
| |
| var soundbutton = document.createElement('div'); |
| soundbutton.id = 'soundbutton'; |
| soundbutton.className = controlsclass + ' controlbutton soundbutton'; |
| soundbutton.onclick = toggleVolumeMute; |
| soundbutton.onmouseover = showVolume; |
| soundbutton.onmouseout = hideVolume; |
| var soundicon = document.createElement('div'); |
| soundicon.id = 'soundicon'; |
| soundicon.className = 'icon soundiconhigh'; |
| soundbutton.appendChild(soundicon); |
| element.appendChild(soundbutton); |
| |
| var fullscreen = document.createElement('div'); |
| fullscreen.id = 'fullscreen'; |
| fullscreen.className = controlsclass + ' controlbutton fullscreen'; |
| fullscreen.onclick = toggleFullscreen; |
| var fullscreenicon = document.createElement('div'); |
| fullscreenicon.id = 'fullscreenicon'; |
| fullscreenicon.className = 'icon fullscreenicon'; |
| fullscreen.appendChild(fullscreenicon); |
| element.appendChild(fullscreen); |
| |
| var volume = document.createElement('div'); |
| volume.id = 'volume'; |
| volume.className = controlsclass + ' volume'; |
| volume.style.display = 'none'; |
| volume.onmouseover = showVolume; |
| volume.onmouseout = hideVolume; |
| var volumeslider = document.createElement('input'); |
| volumeslider.type = 'range'; |
| volumeslider.id = 'volumeslider'; |
| volumeslider.className = 'volumeslider'; |
| volumeslider.onchange = volumeChange; |
| volume.appendChild(volumeslider); |
| document.body.appendChild(volume); |
| volumeChange(); |
| |
| var duration = document.createElement('div'); |
| duration.id = 'duration'; |
| duration.className = 'duration'; |
| element.appendChild(duration); |
| } |
| |
| function playAudioFile(uri) { |
| if (videoPlaybackElement != null) { |
| videoPlaybackElement.onerror = undefined; |
| document.body.removeChild(videoPlaybackElement); |
| videoPlaybackElement = null; |
| } |
| if (audioPlaybackElement == null) { |
| audioPlaybackElement = document.createElement('audio'); |
| audioPlaybackElement.className = 'playbackaudioelement'; |
| audioPlaybackElement.autoplay = true; |
| audioPlaybackElement.controls = false; |
| setupMediaEvents(audioPlaybackElement); |
| audioPlaybackElement.src = uri; |
| setupPlaybackControls(); |
| document.body.appendChild(audioPlaybackElement); |
| var paths = getPathAndFilenameForPath(uri); |
| $('title').textContent = decodeURI(paths[2]); |
| } else { |
| setupMediaEvents(audioPlaybackElement); |
| audioPlaybackElement.src = uri; |
| audioPlaybackElement.load(); |
| audioPlaybackElement.play(); |
| var paths = getPathAndFilenameForPath(uri); |
| $('title').textContent = decodeURI(paths[2]); |
| } |
| } |
| |
| function onkeydown(event) { |
| const ESCAPE_KEY_CODE = 27; |
| const SPACE_KEY_CODE = 32; |
| switch (event.keyCode) { |
| case ESCAPE_KEY_CODE: |
| if (fullScreen) |
| toggleFullscreen(); |
| break; |
| |
| case SPACE_KEY_CODE: |
| playPauseButtonClick(); |
| break; |
| } |
| } |
| |
| function toggleFullscreen() { |
| fullScreen = !fullScreen; |
| var fullscreenicon = $('fullscreenicon'); |
| if (fullScreen) { |
| fullscreenicon.classList.remove('fullscreenicon'); |
| fullscreenicon.classList.add('fullscreenexiticon'); |
| } |
| else { |
| fullscreenicon.classList.remove('fullscreenexiticon'); |
| fullscreenicon.classList.add('fullscreenicon'); |
| } |
| chrome.send('toggleFullscreen', ['']); |
| } |
| |
| function onMetadataAvail() { |
| var element = getMediaElement(); |
| var duration = element.duration; |
| if (duration) { |
| var durString = '' + Math.floor((duration / 60)) + ':' + (Math.floor(duration) % 60); |
| var durDiv = $('duration'); |
| durDiv.textContent = durString; |
| } |
| } |
| |
| function playVideoFile(uri) { |
| if (audioPlaybackElement != null) { |
| document.body.removeChild(audioPlaybackElement); |
| audioPlaybackElement = null; |
| } |
| if (videoPlaybackElement == null) { |
| videoPlaybackElement = document.createElement('video'); |
| videoPlaybackElement.className = 'playbackvideoelement'; |
| videoPlaybackElement.autoplay = true; |
| videoPlaybackElement.controls = false; |
| setupMediaEvents(videoPlaybackElement); |
| videoPlaybackElement.src = uri; |
| videoPlaybackElement.load(); |
| var toggleButton = document.createElement('div'); |
| toggleButton.className = 'fullscreentoggle'; |
| toggleButton.id = 'fullscreentoggle'; |
| toggleButton.onclick = toggleFullscreen; |
| document.body.appendChild(toggleButton); |
| setupPlaybackControls(); |
| document.body.appendChild(videoPlaybackElement); |
| } else { |
| setupMediaEvents(videoPlaybackElement); |
| videoPlaybackElement.src = uri; |
| videoPlaybackElement.load(); |
| videoPlaybackElement.currentTime = 0; |
| videoPlaybackElement.play(); |
| } |
| } |
| |
| function stopAllPlayback() { |
| var element = getMediaElement(); |
| if (element != null) { |
| element.pause(); |
| } |
| } |
| |
| function playlistChanged(info, playlist) { |
| if (info.force) { |
| currentPlaylist = playlist; |
| stopAllPlayback(); |
| if (playlist.length >= 1) { |
| if (info.currentOffset) { |
| currentItem = info.currentOffset; |
| } else { |
| currentItem = 0; |
| } |
| var item = playlist[currentItem]; |
| chrome.send('currentOffsetChanged', ['' + currentItem]); |
| playMediaFile(item.path); |
| } |
| } else { |
| var media = getMediaElement(); |
| currentPlaylist = playlist; |
| // Only need to handle the case where we are not playing |
| // since if it is currently playing, it will just move |
| // to the next file when the current is complete. |
| if (media == null) { |
| for (var x = 0; x < playlist.length; x++) { |
| if (playlist[x].path == info.path) { |
| // found the newly added item. |
| currentItem = x; |
| chrome.send('currentOffsetChanged', ['' + currentItem]); |
| playMediaFile(playlist[x].path); |
| return; |
| } |
| } |
| if (playlist.length > 0) { |
| currentItem = 0; |
| chrome.send('currentOffsetChanged', ['' + currentItem]); |
| playMediaFile(playlist[0].path); |
| } |
| } |
| } |
| } |
| |
| function togglePlaylist() { |
| chrome.send("togglePlaylist", []); |
| } |
| |
| function playMediaFile(url) { |
| $('error').textContent = ''; |
| console.log('playfile '+url); |
| $('title').textContent = ''; |
| if (pathIsVideoFile(url) ) { |
| playVideoFile(url); |
| } else if(pathIsAudioFile(url)) { |
| playAudioFile(url); |
| } else { |
| alert('file unknown:' + url); |
| } |
| } |
| |
| </script> |
| <body onload='load();' onselectstart='return false'> |
| <div id='error' class='error'></div> |
| <div id='title' class='audiotitle'></div> |
| <div id='glow' class='glow'></div> |
| <div class='playercontrolsbox'> |
| <div id='playercontrols'> |
| </div> |
| </div> |
| </body> |
| </html> |