{"version":3,"sources":["../src/js/mediaelement-playlist-plugin.js"],"names":["$","extend","mejs","MepDefaults","loopText","shuffleText","nextText","prevText","playlistText","fullscreenText","MediaElementPlayer","prototype","buildloop","player","controls","layers","media","t","this","loop","options","id","appendTo","click","loopplaylist","trigger","removeClass","addClass","loopToggle","find","loopToggleClick","buildshuffle","shuffle","shuffleToggle","shuffleToggleClick","buildprevtrack","prevTrack","playPrevTrack","prevTrackClick","buildnexttrack","nextTrack","playNextTrack","nextTrackClick","buildplaylist","playlistToggle","togglePlaylistDisplay","playlistToggleClick","buildaudiofullscreen","isVideo","fullscreenBtn","noIOSFullscreen","MediaFeatures","hasTrueNativeFullScreen","hasSemiNativeFullScreen","webkitEnterFullscreen","pluginType","usePluginFullScreen","isFirefox","isFullScreen","exitFullScreen","enterFullScreen","fullscreenClass","isFullscreen","container","hasClass","document","body","resetSize","normalHeight","height","normalWidth","width","css","children","containerSizeTimeout","setTimeout","setControlsSize","buildplaylistfeature","playlist","data","hide","sourceIsPlayable","getTrackName","trackUrl","trackUrlParts","split","length","decodeURIComponent","tracks","foundMatchingType","each","parent","canPlayType","type","console","error","toString","trim","src","track","source","title","name","poster","push","$thisLi","append","background-image","videoSliderTracks","changePoster","$prevVid","$nextVid","videoSliderIndex","transform","moveMe","fadeOut","fadeIn","sliderWidth","Math","ceil","paused","play","pause","playTrack","addEventListener","show","nxt","current","filter","notplayed","not","siblings","atEnd","random","floor","eq","next","autoRewind","first","continuous","prev","played","last","posterUrl","setPoster","setSrc","load","playTrackURL","url","showHide","oldSetPlayerSize","setPlayerSize","oldIsVideo"],"mappings":"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","file":"mediaelement-playlist-plugin.min.js","sourcesContent":["/* globals mejs, MediaElementPlayer */\n'use strict';\n\n/**\n * @file MediaElement Playlist Feature (plugin).\n * @author James McKay \n * @author Original author: Rocco Georgi \n * Twitter handle: geeroc\n * @author Original author: Andrew Berezovsky \n * Twitter handle: duozersk\n * @author Original author: Junaid Qadir Baloch \n * Twitter handle: jeykeu\n * Dual licensed under the MIT or GPL Version 2 licenses.\n */\n\n(function ($) {\n\t$.extend(mejs.MepDefaults, {\n\t\tloopText: 'Repeat On/Off',\n\t\tshuffleText: 'Shuffle On/Off',\n\t\tnextText: 'Next Track',\n\t\tprevText: 'Previous Track',\n\t\tplaylistText: 'Show/Hide Playlist',\n\t\tfullscreenText: 'Show/Hide Fullscreen'\n\t});\n\n\t$.extend(MediaElementPlayer.prototype, {\n\t\t// LOOP TOGGLE\n\t\tbuildloop: function (player, controls, layers, media) {\n\t\t\tvar t = this;\n\n\t\t\t// options.loop is interacts with this and mediaelement.js to\n\t\t\t// provide auto-play next functionality.\n\t\t\t// Using loopplaylist instead for 'going back to first track'.\n\t\t\t// Too lazy to change all other references to loop. TODO.\n\t\t\tvar loop = $('
' +\n\t\t\t\t'' +\n\t\t\t\t'
')\n\t\t\t\t// append it to the toolbar\n\t\t\t\t.appendTo(controls)\n\t\t\t\t// add a click toggle event\n\t\t\t\t.click(function () {\n\t\t\t\t\tplayer.options.loopplaylist = !player.options.loopplaylist;\n\t\t\t\t\t$(media).trigger('mep-looptoggle', [player.options.loopplaylist]);\n\t\t\t\t\tif (player.options.loopplaylist) {\n\t\t\t\t\t\tloop.removeClass('mejs-loop-off').addClass('mejs-loop-on');\n\t\t\t\t\t\t//media.setAttribute('loop', 'loop');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tloop.removeClass('mejs-loop-on').addClass('mejs-loop-off');\n\t\t\t\t\t\t//media.removeAttribute('loop');\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tt.loopToggle = t.controls.find('.mejs-loop-button');\n\t\t},\n\t\tloopToggleClick: function () {\n\t\t\tvar t = this;\n\t\t\tt.loopToggle.trigger('click');\n\t\t},\n\t\t// SHUFFLE TOGGLE\n\t\tbuildshuffle: function (player, controls, layers, media) {\n\t\t\tvar t = this;\n\n\t\t\tvar shuffle = $('
' +\n\t\t\t\t'' +\n\t\t\t\t'
')\n\t\t\t\t// append it to the toolbar\n\t\t\t\t.appendTo(controls)\n\t\t\t\t// add a click toggle event\n\t\t\t\t.click(function () {\n\t\t\t\t\tplayer.options.shuffle = !player.options.shuffle;\n\t\t\t\t\t$(media).trigger('mep-shuffletoggle', [player.options.shuffle]);\n\t\t\t\t\tif (player.options.shuffle) {\n\t\t\t\t\t\tshuffle.removeClass('mejs-shuffle-off').addClass('mejs-shuffle-on');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshuffle.removeClass('mejs-shuffle-on').addClass('mejs-shuffle-off');\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\tt.shuffleToggle = t.controls.find('.mejs-shuffle-button');\n\t\t},\n\t\tshuffleToggleClick: function () {\n\t\t\tvar t = this;\n\t\t\tt.shuffleToggle.trigger('click');\n\t\t},\n\t\t// PREVIOUS TRACK BUTTON\n\t\tbuildprevtrack: function (player, controls, layers, media) {\n\t\t\tvar t = this;\n\n\t\t\tvar prevTrack = $('
' +\n\t\t\t\t'' +\n\t\t\t\t'
');\n\n\t\t\tprevTrack.appendTo(controls)\n\t\t\t\t.click(function () {\n\t\t\t\t\t$(media).trigger('mep-playprevtrack');\n\t\t\t\t\tplayer.playPrevTrack();\n\t\t\t\t});\n\n\t\t\tt.prevTrack = t.controls.find('.mejs-prevtrack-button');\n\t\t},\n\t\tprevTrackClick: function () {\n\t\t\tvar t = this;\n\t\t\tt.prevTrack.trigger('click');\n\t\t},\n\n\t\t// NEXT TRACK BUTTON\n\t\tbuildnexttrack: function (player, controls, layers, media) {\n\t\t\tvar t = this;\n\n\t\t\tvar nextTrack = $('
' +\n\t\t\t\t'' +\n\t\t\t\t'
');\n\n\t\t\tnextTrack.appendTo(controls)\n\t\t\t\t.click(function () {\n\t\t\t\t\t$(media).trigger('mep-playnexttrack');\n\t\t\t\t\tplayer.playNextTrack();\n\t\t\t\t});\n\n\t\t\tt.nextTrack = t.controls.find('.mejs-nexttrack-button');\n\t\t},\n\t\tnextTrackClick: function () {\n\t\t\tvar t = this;\n\t\t\tt.nextTrack.trigger('click');\n\t\t},\n\n\t\t// PLAYLIST TOGGLE\n\t\tbuildplaylist: function (player, controls, layers, media) {\n\t\t\tvar t = this;\n\n\t\t\t// build playlist button\n\t\t\tvar playlistToggle = $('
' +\n\t\t\t\t'' +\n\t\t\t\t'
');\n\n\t\t\tplaylistToggle.appendTo(controls)\n\t\t\t\t.click(function () {\n\t\t\t\t\t// toggle playlist display\n\t\t\t\t\tt.togglePlaylistDisplay(player, layers, media);\n\t\t\t\t});\n\n\t\t\tt.playlistToggle = t.controls.find('.mejs-playlist-button');\n\t\t},\n\t\tplaylistToggleClick: function () {\n\t\t\tvar t = this;\n\t\t\tt.playlistToggle.trigger('click');\n\t\t},\n\t\t//videoFullscreen: MediaElementPlayer.prototype.buildfullscreen,\n\t\tbuildaudiofullscreen: function(player, controls, layers, media) {\n\t\t\tif(player.isVideo) {\n\t\t\t\t// Fullscreen for video is already handled and is more complex.\n\t\t\t\t//this.videoFullscreen();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar t = this;\n\n\t\t\tt.fullscreenBtn =\n\t\t\t\t$('
' +\n\t\t\t\t\t'' +\n\t\t\t\t\t'
');\n\t\t\tt.fullscreenBtn.appendTo(controls);\n\n\t\t\t// You can't take arbitary elements and make them full-screen on iOS using the fullscreen API.\n\t\t\t// Check for this case\n\t\t\tvar noIOSFullscreen = !mejs.MediaFeatures.hasTrueNativeFullScreen && mejs.MediaFeatures.hasSemiNativeFullScreen\n\t\t\t\t\t&& !t.media.webkitEnterFullscreen;\n\n\t\t\tif (t.media.pluginType === 'native' && !noIOSFullscreen || (!t.options.usePluginFullScreen && !mejs.MediaFeatures.isFirefox)) {\n\n\t\t\t\tt.fullscreenBtn.click(function() {\n\t\t\t\t\tvar isFullScreen = (mejs.MediaFeatures.hasTrueNativeFullScreen && mejs.MediaFeatures.isFullScreen()) || player.isFullScreen;\n\n\t\t\t\t\tif (isFullScreen) {\n\t\t\t\t\t\tplayer.exitFullScreen();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tplayer.enterFullScreen();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvar fullscreenClass = \"manual-fullscreen\";\n\t\t\t\tt.fullscreenBtn.click(function() {\n\t\t\t\t\tvar isFullscreen = player.container.hasClass(fullscreenClass);\n\t\t\t\t\tif (isFullscreen) {\n\t\t\t\t\t\t$(document.body).removeClass(fullscreenClass);\n\t\t\t\t\t\tplayer.container.removeClass(fullscreenClass);\n\t\t\t\t\t\tplayer.resetSize();\n\t\t\t\t\t\tt.isFullScreen = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.normalHeight = t.container.height();\n\t\t\t\t\t\tt.normalWidth = t.container.width();\n\t\t\t\t\t\t$(document.body).addClass(fullscreenClass);\n\t\t\t\t\t\tplayer.container.addClass(fullscreenClass);\n\t\t\t\t\t\tt.container.css({width: '100%', height: '100%'});\n\t\t\t\t\t\tplayer.layers.children().css(\"width\", \"100%\").css(\"height\", \"100%\");\n\t\t\t\t\t\tt.containerSizeTimeout = setTimeout(function() {\n\t\t\t\t\t\t\tt.container.css({width: '100%', height: '100%'});\n\t\t\t\t\t\t\tplayer.layers.children().css(\"width\", \"100%\").css(\"height\", \"100%\");\n\t\t\t\t\t\t\tt.setControlsSize();\n\t\t\t\t\t\t}, 500);\n\t\t\t\t\t\tplayer.setControlsSize();\n\t\t\t\t\t\tt.isFullScreen = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t// PLAYLIST WINDOW\n\t\tbuildplaylistfeature: function (player, controls, layers, media) {\n\n\t\t\t// add playlist view to layers\n\t\t\tvar t = this,\n\t\t\t\tplaylist = $('
' +\n\t\t\t\t'
    ' +\n\t\t\t\t'
    ')\n\t\t\t\t.appendTo(layers);\n\n\t\t\t// activate playlist display when data-showplaylist is set\n\t\t\tif (!!$(media).data('showplaylist')) {\n\t\t\t\tplayer.options.playlist = true;\n\t\t\t\t// hide play overlay button\n\t\t\t\t$('#' + player.id).find('.mejs-overlay-play').hide();\n\t\t\t}\n\n\t\t\tif(!player.options.playlist) {\n\t\t\t\tplaylist.hide();\n\t\t\t}\n\n\t\t\tvar getTrackName = function (trackUrl) {\n\t\t\t\tvar trackUrlParts = trackUrl.split('/');\n\t\t\t\tif (trackUrlParts.length > 0) {\n\t\t\t\t\treturn decodeURIComponent(trackUrlParts[trackUrlParts.length - 1]);\n\t\t\t\t} else {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// calculate tracks and build playlist\n\t\t\tvar tracks = [],\n\t\t\t\tsourceIsPlayable,\n\t\t\t\tfoundMatchingType = '';\n\t\t\t//$(media).children('source').each(function (index, element) { // doesn't work in Opera 12.12\n\n\t\t\t$('#' + player.id).find('.mejs-mediaelement source').each(function () {\n\n\t\t\t\t// Determine location of canPlayType. There is probably a better way to do this.\n\t\t\t\tif($(this).parent()[0] && $(this).parent()[0].canPlayType) {\n\t\t\t\t\tsourceIsPlayable = $(this).parent()[0].canPlayType(this.type)\n\t\t\t\t}\n\t\t\t\telse if($(this).parent()[0] && $(this).parent()[0].player\n\t\t\t\t\t&& $(this).parent()[0].player.media && $(this).parent()[0].player.media.canPlayType) {\n\t\t\t\t\tsourceIsPlayable = $(this).parent()[0].player.media.canPlayType(this.type);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.error(\"Cannot determine if we can play this media (no canPlayType()) on\" + $(this).toString());\n\t\t\t\t}\n\n\t\t\t\tif (!foundMatchingType && (sourceIsPlayable === 'maybe' || sourceIsPlayable === 'probably')) {\n\t\t\t\t\tfoundMatchingType = this.type;\n\t\t\t\t}\n\t\t\t\tif (!!foundMatchingType && this.type === foundMatchingType) {\n\t\t\t\t\tif ($.trim(this.src) !== '') {\n\t\t\t\t\t\tvar track = {};\n\t\t\t\t\t\ttrack.source = $.trim(this.src);\n\t\t\t\t\t\tif ($.trim(this.title) !== '') {\n\t\t\t\t\t\t\ttrack.name = $.trim(this.title);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttrack.name = getTrackName(track.source);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// add poster image URL from data-poster attribute\n\t\t\t\t\t\ttrack.poster = $(this).data('poster');\n\t\t\t\t\t\ttracks.push(track);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfor (var track in tracks) {\n\t\t\t\tvar $thisLi = $('
  • ' + tracks[track].name + '
  • ');\n\t\t\t\tlayers.find('.mejs-playlist > ul').append($thisLi);\n\n\t\t\t\t/* slider */\n\t\t\t\tif ($(player.media).hasClass('mep-slider')) {\n\t\t\t\t\t$thisLi.css({\n\t\t\t\t\t\t'background-image': 'url(\"' + $thisLi.data('poster') + '\")'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t/* slider */\n\t\t\tplayer.videoSliderTracks = tracks.length;\n\n\t\t\t// set the first track as current\n\t\t\tlayers.find('li:first').addClass('current played');\n\t\t\t// set initial poster image - only for audio playlists\n\t\t\tif (!player.isVideo) {\n\t\t\t\tplayer.changePoster(layers.find('li:first').data('poster'));\n\t\t\t}\n\t\t\t/* slider */\n\t\t\tvar $prevVid = $(''),\n\t\t\t\t$nextVid = $('');\n\n\t\t\tplayer.videoSliderIndex = 0;\n\n\t\t\tlayers.find('.mejs-playlist').append($prevVid);\n\t\t\tlayers.find('.mejs-playlist').append($nextVid);\n\n\t\t\t// transform individual track display\n\t\t\t$('#' + player.id + '.mejs-container.mep-slider').find('.mejs-playlist ul li').css({'transform': 'translate3d(0, -20px, 0) scale3d(0.75, 0.75, 1)'});\n\n\t\t\t$prevVid.click(function () {\n\t\t\t\tvar moveMe = true;\n\n\t\t\t\tplayer.videoSliderIndex -= 1;\n\t\t\t\tif (player.videoSliderIndex < 0) {\n\t\t\t\t\tplayer.videoSliderIndex = 0;\n\t\t\t\t\tmoveMe = false;\n\t\t\t\t}\n\n\t\t\t\tif (player.videoSliderIndex === player.videoSliderTracks - 1) {\n\t\t\t\t\t$nextVid.fadeOut();\n\t\t\t\t} else {\n\t\t\t\t\t$nextVid.fadeIn();\n\t\t\t\t}\n\t\t\t\tif (player.videoSliderIndex === 0) {\n\t\t\t\t\t$prevVid.fadeOut();\n\t\t\t\t} else {\n\t\t\t\t\t$prevVid.fadeIn();\n\t\t\t\t}\n\n\t\t\t\tif (moveMe === true) {\n\t\t\t\t\tplayer.sliderWidth = $('#' + player.id).width();\n\t\t\t\t\t//console.log('mep-prev clicked, moving to pos: ', Math.ceil(player.sliderWidth * player.videoSliderIndex));\n\t\t\t\t\t$('#' + player.id + '.mejs-container.mep-slider').find('.mejs-playlist ul li').css({'transform': 'translate3d(-' + Math.ceil(player.sliderWidth * player.videoSliderIndex) + 'px, -20px, 0) scale3d(0.75, 0.75, 1)'});\n\t\t\t\t}\n\t\t\t}).hide(); // initially hide prevVid button\n\n\t\t\t$nextVid.click(function () {\n\t\t\t\tvar moveMe = true;\n\n\t\t\t\tplayer.videoSliderIndex += 1;\n\t\t\t\tif (player.videoSliderIndex > player.videoSliderTracks - 1) {\n\t\t\t\t\tplayer.videoSliderIndex = player.videoSliderTracks - 1;\n\t\t\t\t\tmoveMe = false;\n\t\t\t\t}\n\n\t\t\t\tif (player.videoSliderIndex === player.videoSliderTracks - 1) {\n\t\t\t\t\t$nextVid.fadeOut();\n\t\t\t\t} else {\n\t\t\t\t\t$nextVid.fadeIn();\n\t\t\t\t}\n\t\t\t\tif (player.videoSliderIndex === 0) {\n\t\t\t\t\t$prevVid.fadeOut();\n\t\t\t\t} else {\n\t\t\t\t\t$prevVid.fadeIn();\n\t\t\t\t}\n\n\t\t\t\tif (moveMe === true) {\n\t\t\t\t\tplayer.sliderWidth = $('#' + player.id).width();\n\t\t\t\t\t//console.log('mep-next clicked, moving to pos: ', Math.ceil(player.sliderWidth * player.videoSliderIndex));\n\t\t\t\t\t$('#' + player.id + '.mejs-container.mep-slider').find('.mejs-playlist ul li').css({'transform': 'translate3d(-' + Math.ceil(player.sliderWidth * player.videoSliderIndex) + 'px, -20px, 0) scale3d(0.75, 0.75, 1)'});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// play track from playlist when clicking it\n\t\t\tlayers.find('.mejs-playlist > ul li').click(function () {\n\t\t\t\t// pause current track or play other one\n\t\t\t\tif (!$(this).hasClass('current')) {\n\t\t\t\t\t// clicked other track - play it\n\t\t\t\t\t$(this).addClass('played');\n\t\t\t\t\tplayer.playTrack($(this));\n\t\t\t\t} else {\n\t\t\t\t\t// clicked current track - play if paused and vice versa\n\t\t\t\t\tif (!player.media.paused) {\n\t\t\t\t\t\t// pause if playing\n\t\t\t\t\t\tplayer.pause();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// play if paused\n\t\t\t\t\t\tplayer.play();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// when current track ends - play the next one\n\t\t\tmedia.addEventListener('ended', function () {\n\t\t\t\tplayer.playNextTrack();\n\t\t\t}, false);\n\n\t\t\t// set play and paused class to container\n\t\t\tmedia.addEventListener('playing',function () {\n\t\t\t\tplayer.container.removeClass('mep-paused').addClass('mep-playing');\n\n\t\t\t\t// hide playlist for videos\n\t\t\t\tif (player.isVideo) {\n\t\t\t\t\tt.togglePlaylistDisplay(player, layers, media, 'hide');\n\t\t\t\t}\n\n\t\t\t}, false);\n\n\t\t\t/* mediaelement.js hides poster on \"play\" for all player types - not so great for audio */\n\t\t\tmedia.addEventListener('play', function () {\n\t\t\t\tif (!player.isVideo) {\n\t\t\t\t\tlayers.find('.mejs-poster').show();\n\t\t\t\t}\n\t\t\t}, false);\n\n\t\t\tmedia.addEventListener('pause',function () {\n\t\t\t\tplayer.container.removeClass('mep-playing').addClass('mep-paused');\n\t\t\t}, false);\n\n\t\t},\n\t\tplayNextTrack: function () {\n\t\t\tvar t = this, \n\t\t\t nxt;\n\t\t\tvar tracks = t.layers.find('.mejs-playlist > ul > li');\n\t\t\tvar current = tracks.filter('.current');\n\t\t\tvar notplayed = tracks.not('.played');\n\t\t\tif (notplayed.length < 1) {\n\t\t\t\tcurrent.removeClass('played').siblings().removeClass('played');\n\t\t\t\tnotplayed = tracks.not('.current');\n\t\t\t}\n\t\t\tvar atEnd = false;\n\t\t\tif (t.options.shuffle) {\n\t\t\t\tvar random = Math.floor(Math.random() * notplayed.length);\n\t\t\t\tnxt = notplayed.eq(random);\n\t\t\t} else {\n\t\t\t\tnxt = current.next();\n\t\t\t\tif (nxt.length < 1 && (t.options.loopplaylist || t.options.autoRewind)) {\n\t\t\t\t\tnxt = current.siblings().first();\n\t\t\t\t\tatEnd = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tt.options.loop = false;\n\t\t\tif (nxt.length == 1) {\n\t\t\t\tnxt.addClass('played');\n\t\t\t\tt.playTrack(nxt);\n\t\t\t\tt.options.loop = t.options.loopplaylist || (t.options.continuous && !atEnd);\n\t\t\t}\n\t\t},\n\t\tplayPrevTrack: function () {\n\t\t\tvar t = this,\n\t\t\t prev;\n\t\t\tvar tracks = t.layers.find('.mejs-playlist > ul > li');\n\t\t\tvar current = tracks.filter('.current');\n\t\t\tvar played = tracks.filter('.played').not('.current');\n\t\t\tif (played.length < 1) {\n\t\t\t\tcurrent.removeClass('played');\n\t\t\t\tplayed = tracks.not('.current');\n\t\t\t}\n\t\t\tif (t.options.shuffle) {\n\t\t\t\tvar random = Math.floor(Math.random()*played.length);\n\t\t\t\tprev = played.eq(random);\n\t\t\t} else {\n\t\t\t\tprev = current.prev();\n\t\t\t\tif (prev.length < 1 && t.options.loopplaylist) {\n\t\t\t\t\tprev = current.siblings().last();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (prev.length == 1) {\n\t\t\t\tcurrent.removeClass('played');\n\t\t\t\tt.playTrack(prev);\n\t\t\t}\n\t\t},\n\t\tchangePoster: function (posterUrl) {\n\t\t\tvar t = this;\n\t\t\tt.layers.find('.mejs-playlist').css('background-image', 'url(\"' + posterUrl + '\")');\n\t\t\t// also set actual poster\n\t\t\tt.setPoster(posterUrl);\n\t\t\t// make sure poster is visible (not the case if no poster attribute was set)\n\t\t\tt.layers.find('.mejs-poster').show();\n\t\t},\n\t\tplayTrack: function (track) {\n\t\t\tvar t = this;\n\t\t\tt.pause();\n\t\t\tt.setSrc(track.data('url'));\n\t\t\tt.load();\n\t\t\tt.changePoster(track.data('poster'));\n\t\t\tt.play();\n\t\t\ttrack.addClass('current').siblings().removeClass('current');\n\t\t},\n\t\tplayTrackURL: function (url) {\n\t\t\tvar t = this;\n\t\t\tvar tracks = t.layers.find('.mejs-playlist > ul > li');\n\t\t\tvar track = tracks.filter('[data-url=\"' + url + '\"]');\n\t\t\tt.playTrack(track);\n\t\t},\n\t\ttogglePlaylistDisplay: function (player, layers, media, showHide) {\n\t\t\tvar t = this;\n\n\t\t\tif (!!showHide) {\n\t\t\t\tplayer.options.playlist = showHide === 'show' ? true : false;\n\t\t\t} else {\n\t\t\t\tplayer.options.playlist = !player.options.playlist;\n\t\t\t}\n\t\t\t\n\t\t\t$(media).trigger('mep-playlisttoggle', [player.options.playlist]);\n\n\t\t\t// toggle playlist display\n\t\t\tif (player.options.playlist) {\n\t\t\t\tlayers.children('.mejs-playlist').fadeIn();\n\t\t\t\tt.playlistToggle.removeClass('mejs-show-playlist').addClass('mejs-hide-playlist');\n\t\t\t} else {\n\t\t\t\tlayers.children('.mejs-playlist').fadeOut();\n\t\t\t\tt.playlistToggle.removeClass('mejs-hide-playlist').addClass('mejs-show-playlist');\n\t\t\t}\n\t\t},\n\t\toldSetPlayerSize: MediaElementPlayer.prototype.setPlayerSize,\n\t\tsetPlayerSize: function(width, height) {\n\t\t\t// Ensure we are seen as a video while sizing.\n\t\t\t// If audio, 100% sizing doesn't work.\n\t\t\tvar oldIsVideo = this.isVideo;\n\t\t\tthis.isVideo = true;\n\t\t\tthis.oldSetPlayerSize(width, height);\n\t\t\tthis.isVideo = oldIsVideo;\n\t\t}\n\t});\n\n})(mejs.$);\n"]}