"use strict"; (function($) { $.extend(mejs.MepDefaults, { loopText: "Repeat On/Off", shuffleText: "Shuffle On/Off", nextText: "Next Track", prevText: "Previous Track", playlistText: "Show/Hide Playlist", fullscreenText: "Show/Hide Fullscreen" }); $.extend(MediaElementPlayer.prototype, { buildloop: function(player, controls, layers, media) { var t = this; var loop = $('
' + '' + "
").appendTo(controls).click(function() { player.options.loopplaylist = !player.options.loopplaylist; $(media).trigger("mep-looptoggle", [ player.options.loopplaylist ]); if (player.options.loopplaylist) { loop.removeClass("mejs__loop-off").addClass("mejs__loop-on"); } else { loop.removeClass("mejs__loop-on").addClass("mejs__loop-off"); } }); t.loopToggle = $(t.controls).find(".mejs__loop-button"); }, loopToggleClick: function() { var t = this; t.loopToggle.trigger("click"); }, buildshuffle: function(player, controls, layers, media) { var t = this; var shuffle = $('
' + '' + "
").appendTo(controls).click(function() { player.options.shuffle = !player.options.shuffle; $(media).trigger("mep-shuffletoggle", [ player.options.shuffle ]); if (player.options.shuffle) { shuffle.removeClass("mejs__shuffle-off").addClass("mejs__shuffle-on"); } else { shuffle.removeClass("mejs__shuffle-on").addClass("mejs__shuffle-off"); } }); t.shuffleToggle = $(t.controls).find(".mejs__shuffle-button"); }, shuffleToggleClick: function() { var t = this; t.shuffleToggle.trigger("click"); }, buildprevtrack: function(player, controls, layers, media) { var t = this; var prevTrack = $('
' + '' + "
"); prevTrack.appendTo(controls).click(function() { $(media).trigger("mep-playprevtrack"); player.playPrevTrack(); }); t.prevTrack = $(t.controls).find(".mejs__prevtrack-button"); }, prevTrackClick: function() { var t = this; t.prevTrack.trigger("click"); }, buildnexttrack: function(player, controls, layers, media) { var t = this; var nextTrack = $('
' + '' + "
"); nextTrack.appendTo(controls).click(function() { $(media).trigger("mep-playnexttrack"); player.playNextTrack(); }); t.nextTrack = $(t.controls).find(".mejs__nexttrack-button"); }, nextTrackClick: function() { var t = this; t.nextTrack.trigger("click"); }, buildplaylist: function(player, controls, layers, media) { var t = this; var playlistToggle = $('
' + '' + "
"); playlistToggle.appendTo(controls).click(function() { t.togglePlaylistDisplay(player, layers, media); }); t.playlistToggle = $(t.controls).find(".mejs__playlist-button"); }, playlistToggleClick: function() { var t = this; t.playlistToggle.trigger("click"); }, buildaudiofullscreen: function(player, controls, layers, media) { if (player.isVideo) { //console.log('test'); } else { var t = this; t.fullscreenBtn = $('
' + '' + "
"); t.fullscreenBtn.appendTo(controls); var noIOSFullscreen = !mejs.MediaFeatures.hasTrueNativeFullScreen && mejs.MediaFeatures.hasSemiNativeFullScreen && !t.media.webkitEnterFullscreen; if (t.media.pluginType === "native" && !noIOSFullscreen || !t.options.usePluginFullScreen && !mejs.MediaFeatures.isFirefox) { t.fullscreenBtn.click(function() { var isFullScreen = mejs.MediaFeatures.hasTrueNativeFullScreen && mejs.MediaFeatures.isFullScreen() || player.isFullScreen; if (isFullScreen) { player.exitFullScreen(); } else { player.enterFullScreen(); } }); } else { var fullscreenClass = "manual-fullscreen"; t.fullscreenBtn.click(function() { var isFullscreen = player.container.hasClass(fullscreenClass); if (isFullscreen) { $(document.body).removeClass(fullscreenClass); $(player.container).removeClass(fullscreenClass); player.resetSize(); t.isFullScreen = false; } else { t.normalHeight = t.container.height(); t.normalWidth = t.container.width(); $(document.body).addClass(fullscreenClass); $(player.container).addClass(fullscreenClass); t.container.css({ width: "100%", height: "100%" }); $(player.layers).children().css("width", "100%").css("height", "100%"); t.containerSizeTimeout = setTimeout(function() { t.container.css({ width: "100%", height: "100%" }); $(player.layers).children().css("width", "100%").css("height", "100%"); t.setControlsSize(); }, 500); player.setControlsSize(); t.isFullScreen = true; } }); } } }, buildplaylistfeature: function(player, controls, layers, media) { var t = this, playlist = $('
' + '' + "
").appendTo(layers); if (!!$(media).find('video, audio').data("showplaylist")) { player.options.playlist = true; $("#" + player.id).find(".mejs__overlay-play").hide(); } if (!player.options.playlist) { playlist.hide(); } var getTrackName = function(trackUrl) { var trackUrlParts = trackUrl.split("/"); if (trackUrlParts.length > 0) { return decodeURIComponent(trackUrlParts[trackUrlParts.length - 1]); } else { return ""; } }; var tracks = [], sourceIsPlayable, foundMatchingType = ""; $("#" + player.id).find(".mejs__mediaelement source").each(function() { if ($(this).parent()[0] && $(this).parent()[0].canPlayType) { sourceIsPlayable = $(this).parent()[0].canPlayType(this.type); } else if ($(this).parent()[0] && $(this).parent()[0].player && $(this).parent()[0].player.media && $(this).parent()[0].player.media.canPlayType) { sourceIsPlayable = $(this).parent()[0].player.media.canPlayType(this.type); } else { console.error("Cannot determine if we can play this media (no canPlayType()) on" + $(this).toString()); } if (!foundMatchingType && (sourceIsPlayable === "maybe" || sourceIsPlayable === "probably")) { foundMatchingType = this.type; } // Change poster AA 19.03.18 var newtype = ''; if (this.type && this.type!==undefined) { newtype = this.type.split('/')[1]; } else { newtype = $(this).attr('type').split('/')[1]; } // Change poster AA 19.03.18 if (newtype) { if (newtype.toLowerCase() === "hls" && $(this).parent('video').css('display') === 'none') { return; } if (newtype.toLowerCase() === "hls" && $(this).parent('audio').attr('style') !== undefined) { return; } if (!foundMatchingType && (newtype.toLowerCase() === "hls" || newtype.toLowerCase() === "rtmp")) { foundMatchingType = this.type; } } if (!!foundMatchingType && this.type === foundMatchingType) { if ($.trim(this.src) !== "") { var track = {}; track.source = $.trim(this.src); if ($.trim(this.title) !== "") { track.name = $.trim(this.title); } else { track.name = getTrackName(track.source); } track.poster = $(this).data("poster"); tracks.push(track); } } }); for (var track in tracks) { var $thisLi = $('
  • ' + tracks[track].name + "
  • "); $(layers).find(".mejs__playlist > ul").append($thisLi); if ($(player.media).hasClass("mep-slider")) { $thisLi.css({ "background-image": 'url("' + $thisLi.data("poster") + '")' }); } } player.videoSliderTracks = tracks.length; $(layers).find("li:first").addClass("current played"); if (!player.isVideo) { player.changePoster($(layers).find("li:first").data("poster")); } var $prevVid = $(''), $nextVid = $(''); player.videoSliderIndex = 0; $(layers).find(".mejs__playlist").append($prevVid); $(layers).find(".mejs__playlist").append($nextVid); $("#" + player.id + ".mejs__container.mep-slider").find(".mejs__playlist ul li").css({ transform: "translate3d(0, -20px, 0) scale3d(0.75, 0.75, 1)" }); $prevVid.click(function() { var moveMe = true; player.videoSliderIndex -= 1; if (player.videoSliderIndex < 0) { player.videoSliderIndex = 0; moveMe = false; } if (player.videoSliderIndex === player.videoSliderTracks - 1) { $nextVid.fadeOut(); } else { $nextVid.fadeIn(); } if (player.videoSliderIndex === 0) { $prevVid.fadeOut(); } else { $prevVid.fadeIn(); } if (moveMe === true) { player.sliderWidth = $("#" + player.id).width(); $("#" + 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)" }); } }).hide(); $nextVid.click(function() { var moveMe = true; player.videoSliderIndex += 1; if (player.videoSliderIndex > player.videoSliderTracks - 1) { player.videoSliderIndex = player.videoSliderTracks - 1; moveMe = false; } if (player.videoSliderIndex === player.videoSliderTracks - 1) { $nextVid.fadeOut(); } else { $nextVid.fadeIn(); } if (player.videoSliderIndex === 0) { $prevVid.fadeOut(); } else { $prevVid.fadeIn(); } if (moveMe === true) { player.sliderWidth = $("#" + player.id).width(); $("#" + 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)" }); } }); $(layers).find(".mejs__playlist > ul li").click(function() { if (!$(this).hasClass("current")) { $(this).addClass("played"); player.playTrack($(this)); } else { if (!player.media.paused) { player.pause(); } else { player.play(); } } }); media.addEventListener("ended", function() { player.playNextTrack(); // Change AA 2019-02-08 if (player.options.loopplaylist) { player.play(); } }, false); media.addEventListener("playing", function() { $(player.container).removeClass("mep-paused").addClass("mep-playing"); if (player.isVideo) { //fadeOut playlist при переходе на следующий трек плейлиста //t.togglePlaylistDisplay(player, layers, media, "hide"); } }, false); media.addEventListener("play", function() { if (!player.isVideo) { $(layers).find(".mejs__poster").show(); } }, false); media.addEventListener("pause", function() { $(player.container).removeClass("mep-playing").addClass("mep-paused"); }, false); }, playNextTrack: function() { var t = this, nxt; var tracks = $(t.layers).find(".mejs__playlist > ul > li"); var current = tracks.filter(".current"); var notplayed = tracks.not(".played"); if (notplayed.length < 1) { $(current).removeClass("played").siblings().removeClass("played"); notplayed = tracks.not(".current"); } var atEnd = false; if (t.options.shuffle) { var random = Math.floor(Math.random() * notplayed.length); nxt = notplayed.eq(random); } else { nxt = current.next(); if (nxt.length < 1 && (t.options.loopplaylist || t.options.autoRewind)) { nxt = $(current).siblings().first(); atEnd = true; } } t.options.loop = false; if (nxt.length == 1) { $(nxt).addClass("played"); t.playTrack(nxt); t.options.loop = t.options.loopplaylist || t.options.continuous && !atEnd; } }, playPrevTrack: function() { var t = this, prev; var tracks = $(t.layers).find(".mejs__playlist > ul > li"); var current = tracks.filter(".current"); var played = tracks.filter(".played").not(".current"); if (played.length < 1) { $(current).removeClass("played"); played = tracks.not(".current"); } if (t.options.shuffle) { var random = Math.floor(Math.random() * played.length); prev = played.eq(random); } else { prev = current.prev(); if (prev.length < 1 && t.options.loopplaylist) { prev = current.siblings().last(); } } if (prev.length == 1) { $(current).removeClass("played"); t.playTrack(prev); } }, changePoster: function(posterUrl) { var t = this; $(t.layers).find(".mejs__playlist").css("background-image", 'url("' + posterUrl + '")'); t.setPoster(posterUrl); $(t.layers).find(".mejs__poster").show(); }, playTrack: function(track) { var t = this; t.pause(); t.setSrc(track.data("url")); t.load(); t.changePoster(track.data("poster")); t.play(); $(track).addClass("current").siblings().removeClass("current"); }, playTrackURL: function(url) { var t = this; var tracks = $(t.layers).find(".mejs__playlist > ul > li"); var track = tracks.filter('[data-url="' + url + '"]'); t.playTrack(track); }, togglePlaylistDisplay: function(player, layers, media, showHide) { var t = this; if (!!showHide) { player.options.playlist = showHide === "show" ? true : false; } else { player.options.playlist = !player.options.playlist; } $(media).trigger("mep-playlisttoggle", [ player.options.playlist ]); if (player.options.playlist) { $(layers).children(".mejs__playlist").fadeIn(); $(t.playlistToggle).removeClass("mejs__show-playlist").addClass("mejs__hide-playlist"); } else { $(layers).children(".mejs__playlist").fadeOut(); $(t.playlistToggle).removeClass("mejs__hide-playlist").addClass("mejs__show-playlist"); } }, oldSetPlayerSize: MediaElementPlayer.prototype.setPlayerSize, setPlayerSize: function(width, height) { var oldIsVideo = this.isVideo; this.isVideo = true; this.oldSetPlayerSize(width, height); this.isVideo = oldIsVideo; } }); })(mejs.$);