Created
July 9, 2017 23:53
-
-
Save juusechec/67135bae65ba1a6995b14388eea6a402 to your computer and use it in GitHub Desktop.
modified jquery.mb.YTPlayer for react js https://github.com/pupunzi/jquery.mb.YTPlayer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /*___________________________________________________________________________________________________________________________________________________ | |
| _ jquery.mb.components _ | |
| _ _ | |
| _ file: jquery.mb.YTPlayer.src.js _ | |
| _ last modified: 05/01/16 17.43 _ | |
| _ _ | |
| _ Open Lab s.r.l., Florence - Italy _ | |
| _ _ | |
| _ email: matteo@open-lab.com _ | |
| _ site: http://pupunzi.com _ | |
| _ http://open-lab.com _ | |
| _ blog: http://pupunzi.open-lab.com _ | |
| _ Q&A: http://jquery.pupunzi.com _ | |
| _ _ | |
| _ Licences: MIT, GPL _ | |
| _ http://www.opensource.org/licenses/mit-license.php _ | |
| _ http://www.gnu.org/licenses/gpl.html _ | |
| _ _ | |
| _ Copyright (c) 2001-2016. Matteo Bicocchi (Pupunzi); _ | |
| ___________________________________________________________________________________________________________________________________________________*/ | |
| /*___________________________________________________________________________________________________________________________________________________ | |
| _ jquery.mb.components _ | |
| _ _ | |
| _ file: jquery.mb.YTPlayer.src.js _ | |
| _ last modified: 09/07/17 18.43 _ | |
| _ _ | |
| _ Colombia _ | |
| _ _ | |
| _ email: juusechec@gmail.com _ | |
| _ site: http://github.com/juuseche _ | |
| _ blog: http://ulisesuseche.blogspot.com.co/ _ | |
| _ _ | |
| _ Licences: MIT, GPL _ | |
| _ http://www.opensource.org/licenses/mit-license.php _ | |
| _ http://www.gnu.org/licenses/gpl.html _ | |
| _ _ | |
| _ Copyright (c) 2017. Jorge Ulises Useche Cuellar (juusechec); _ | |
| ___________________________________________________________________________________________________________________________________________________*/ | |
| window.ytp = window.ytp || {}; | |
| window.onYouTubeIframeAPIReady = function() { | |
| if (ytp.YTAPIReady) return; | |
| ytp.YTAPIReady = true; | |
| jQuery(document).trigger("YTAPIReady"); | |
| } | |
| window.getYTPVideoID = function(url) { | |
| var videoID, playlistID; | |
| if (url.indexOf("youtu.be") > 0) { | |
| videoID = url.substr(url.lastIndexOf("/") + 1, url.length); | |
| playlistID = videoID.indexOf("?list=") > 0 ? videoID.substr(videoID.lastIndexOf("="), videoID.length) : null; | |
| videoID = playlistID ? videoID.substr(0, videoID.lastIndexOf("?")) : videoID; | |
| } else if (url.indexOf("http") > -1) { | |
| //videoID = url.match( /([\/&]v\/([^&#]*))|([\\?&]v=([^&#]*))/ )[ 1 ]; | |
| videoID = url.match(/[\\?&]v=([^&#]*)/)[1]; | |
| playlistID = url.indexOf("list=") > 0 ? url.match(/[\\?&]list=([^&#]*)/)[1] : null; | |
| } else { | |
| videoID = url.length > 15 ? null : url; | |
| playlistID = videoID ? null : url; | |
| } | |
| return { | |
| videoID: videoID, | |
| playlistID: playlistID | |
| }; | |
| }; | |
| (function(jQuery, ytp) { | |
| jQuery.mbYTPlayer = { | |
| name: "jquery.mb.YTPlayer", | |
| version: "3.0.8", | |
| build: "5883", | |
| author: "Matteo Bicocchi", | |
| apiKey: "", | |
| defaults: { | |
| containment: "body", | |
| ratio: "auto", // "auto", "16/9", "4/3" | |
| videoURL: null, | |
| playlistURL: null, | |
| startAt: 0, | |
| stopAt: 0, | |
| autoPlay: true, | |
| vol: 50, // 1 to 100 | |
| addRaster: false, | |
| mask: false, | |
| opacity: 1, | |
| quality: "default", //or “small”, “medium”, “large”, “hd720”, “hd1080”, “highres” | |
| mute: false, | |
| loop: true, | |
| showControls: true, | |
| showAnnotations: false, | |
| showYTLogo: true, | |
| stopMovieOnBlur: true, | |
| realfullscreen: true, | |
| mobileFallbackImage: null, | |
| gaTrack: true, | |
| optimizeDisplay: true, | |
| align: "center,center", // top,bottom,left,right | |
| onReady: function(player) {} | |
| }, | |
| /** | |
| * @fontface icons | |
| * */ | |
| controls: { | |
| play: "P", | |
| pause: "p", | |
| mute: "M", | |
| unmute: "A", | |
| onlyYT: "O", | |
| showSite: "R", | |
| ytLogo: "Y" | |
| }, | |
| controlBar: null, | |
| loading: null, | |
| locationProtocol: "https:", | |
| filters: { | |
| grayscale: { | |
| value: 0, | |
| unit: "%" | |
| }, | |
| hue_rotate: { | |
| value: 0, | |
| unit: "deg" | |
| }, | |
| invert: { | |
| value: 0, | |
| unit: "%" | |
| }, | |
| opacity: { | |
| value: 0, | |
| unit: "%" | |
| }, | |
| saturate: { | |
| value: 0, | |
| unit: "%" | |
| }, | |
| sepia: { | |
| value: 0, | |
| unit: "%" | |
| }, | |
| brightness: { | |
| value: 0, | |
| unit: "%" | |
| }, | |
| contrast: { | |
| value: 0, | |
| unit: "%" | |
| }, | |
| blur: { | |
| value: 0, | |
| unit: "px" | |
| } | |
| }, | |
| /** | |
| * | |
| * @param options | |
| * @returns [players] | |
| */ | |
| buildPlayer: function(options) { | |
| return this.each(function() { | |
| var YTPlayer = this; | |
| var $YTPlayer = jQuery(YTPlayer); | |
| YTPlayer.loop = 0; | |
| YTPlayer.opt = {}; | |
| YTPlayer.state = {}; | |
| YTPlayer.filters = jQuery.mbYTPlayer.filters; | |
| YTPlayer.filtersEnabled = true; | |
| YTPlayer.id = YTPlayer.id || "YTP_" + new Date().getTime(); | |
| $YTPlayer.addClass("mb_YTPlayer"); | |
| var property = $YTPlayer.data("property") && typeof $YTPlayer.data("property") == "string" ? eval('(' + $YTPlayer.data("property") + ')') : $YTPlayer.data("property"); | |
| if (typeof property != "undefined" && typeof property.vol != "undefined") property.vol = property.vol === 0 ? property.vol = 1 : property.vol; | |
| jQuery.extend(YTPlayer.opt, jQuery.mbYTPlayer.defaults, options, property); | |
| if (!YTPlayer.hasChanged) { | |
| YTPlayer.defaultOpt = {}; | |
| jQuery.extend(YTPlayer.defaultOpt, jQuery.mbYTPlayer.defaults, options); | |
| } | |
| if (YTPlayer.opt.loop == "true") | |
| YTPlayer.opt.loop = 9999; | |
| YTPlayer.isRetina = (window.retina || window.devicePixelRatio > 1); | |
| var isIframe = function() { | |
| var isIfr = false; | |
| try { | |
| if (self.location.href != top.location.href) isIfr = true; | |
| } catch (e) { | |
| isIfr = true; | |
| } | |
| return isIfr; | |
| }; | |
| YTPlayer.canGoFullScreen = !(jQuery.browser.msie || jQuery.browser.opera || isIframe()); | |
| if (!YTPlayer.canGoFullScreen) YTPlayer.opt.realfullscreen = false; | |
| if (!$YTPlayer.attr("id")) $YTPlayer.attr("id", "video_" + new Date().getTime()); | |
| var playerID = "mbYTP_" + YTPlayer.id; | |
| YTPlayer.isAlone = false; | |
| YTPlayer.hasFocus = true; | |
| YTPlayer.videoID = this.opt.videoURL ? getYTPVideoID(this.opt.videoURL).videoID : $YTPlayer.attr("href") ? getYTPVideoID($YTPlayer.attr("href")).videoID : false; | |
| YTPlayer.playlistID = this.opt.videoURL ? getYTPVideoID(this.opt.videoURL).playlistID : $YTPlayer.attr("href") ? getYTPVideoID($YTPlayer.attr("href")).playlistID : false; | |
| /* | |
| YTPlayer.videoID = videoID; | |
| YTPlayer.playlistID = playlistID; | |
| */ | |
| YTPlayer.opt.showAnnotations = YTPlayer.opt.showAnnotations ? '0' : '3'; | |
| var playerVars = { | |
| 'modestbranding': 1, | |
| 'autoplay': 0, | |
| 'controls': 0, | |
| 'showinfo': 0, | |
| 'rel': 0, | |
| 'enablejsapi': 1, | |
| 'version': 3, | |
| 'playerapiid': playerID, | |
| 'origin': '*', | |
| 'allowfullscreen': true, | |
| 'wmode': 'transparent', | |
| 'iv_load_policy': YTPlayer.opt.showAnnotations | |
| }; | |
| if (document.createElement('video').canPlayType) jQuery.extend(playerVars, { | |
| 'html5': 1 | |
| }); | |
| if (jQuery.browser.msie && jQuery.browser.version < 9) this.opt.opacity = 1; | |
| YTPlayer.isSelf = YTPlayer.opt.containment == "self"; | |
| YTPlayer.defaultOpt.containment = YTPlayer.opt.containment = YTPlayer.opt.containment == "self" ? jQuery(this) : jQuery(YTPlayer.opt.containment); | |
| YTPlayer.isBackground = YTPlayer.opt.containment.is("body"); | |
| if (YTPlayer.isBackground && ytp.backgroundIsInited) | |
| return; | |
| var isPlayer = YTPlayer.opt.containment.is(jQuery(this)); | |
| YTPlayer.canPlayOnMobile = isPlayer && jQuery(this).children().length === 0; | |
| YTPlayer.isPlayer = false; | |
| if (!isPlayer) { | |
| $YTPlayer.hide(); | |
| } else { | |
| YTPlayer.isPlayer = true; | |
| } | |
| var overlay = jQuery("<div/>").css({ | |
| position: "absolute", | |
| top: 0, | |
| left: 0, | |
| width: "100%", | |
| height: "100%" | |
| }).addClass("YTPOverlay"); | |
| if (YTPlayer.isPlayer) { | |
| overlay.on("click", function() { | |
| $YTPlayer.YTPTogglePlay(); | |
| }) | |
| } | |
| var wrapper = jQuery("<div/>").addClass("mbYTP_wrapper").attr("id", "wrapper_" + playerID); | |
| wrapper.css({ | |
| position: "absolute", | |
| zIndex: 0, | |
| minWidth: "100%", | |
| minHeight: "100%", | |
| left: 0, | |
| top: 0, | |
| overflow: "hidden", | |
| opacity: 0 | |
| }); | |
| var playerBox = jQuery("<div/>").attr("id", playerID).addClass("playerBox"); | |
| playerBox.css({ | |
| position: "absolute", | |
| zIndex: 0, | |
| width: "100%", | |
| height: "100%", | |
| top: 0, | |
| left: 0, | |
| overflow: "hidden" | |
| }); | |
| wrapper.append(playerBox); | |
| YTPlayer.opt.containment.children().not("script, style").each(function() { | |
| if (jQuery(this).css("position") == "static") jQuery(this).css("position", "relative"); | |
| }); | |
| if (YTPlayer.isBackground) { | |
| jQuery("body").css({ | |
| boxSizing: "border-box" | |
| }); | |
| wrapper.css({ | |
| position: "fixed", | |
| top: 0, | |
| left: 0, | |
| zIndex: 0 | |
| }); | |
| $YTPlayer.hide(); | |
| } else if (YTPlayer.opt.containment.css("position") == "static") | |
| YTPlayer.opt.containment.css({ | |
| position: "relative" | |
| }); | |
| YTPlayer.opt.containment.prepend(wrapper); | |
| YTPlayer.wrapper = wrapper; | |
| playerBox.css({ | |
| opacity: 1 | |
| }); | |
| if (!jQuery.browser.mobile) { | |
| playerBox.after(overlay); | |
| YTPlayer.overlay = overlay; | |
| } | |
| if (!YTPlayer.isBackground) { | |
| overlay.on("mouseenter", function() { | |
| if (YTPlayer.controlBar.length) | |
| YTPlayer.controlBar.addClass("visible"); | |
| }).on("mouseleave", function() { | |
| if (YTPlayer.controlBar.length) | |
| YTPlayer.controlBar.removeClass("visible"); | |
| }); | |
| } | |
| if (!ytp.YTAPIReady) { | |
| jQuery("#YTAPI").remove(); | |
| var tag = jQuery("<script></script>").attr({ | |
| "src": jQuery.mbYTPlayer.locationProtocol + "//www.youtube.com/iframe_api?v=" + jQuery.mbYTPlayer.version, | |
| "id": "YTAPI" | |
| }); | |
| jQuery("head").prepend(tag); | |
| } else { | |
| setTimeout(function() { | |
| jQuery(document).trigger("YTAPIReady"); | |
| }, 100) | |
| } | |
| if (jQuery.browser.mobile && !YTPlayer.canPlayOnMobile) { | |
| if (YTPlayer.opt.mobileFallbackImage) { | |
| YTPlayer.opt.containment.css({ | |
| backgroundImage: "url(" + YTPlayer.opt.mobileFallbackImage + ")", | |
| backgroundPosition: "center center", | |
| backgroundSize: "cover", | |
| backgroundRepeat: "no-repeat" | |
| }) | |
| }; | |
| $YTPlayer.remove(); | |
| jQuery(document).trigger("YTPUnavailable"); | |
| return; | |
| } | |
| jQuery(document).on("YTAPIReady", function() { | |
| if ((YTPlayer.isBackground && ytp.backgroundIsInited) || YTPlayer.isInit) return; | |
| if (YTPlayer.isBackground) { | |
| ytp.backgroundIsInited = true; | |
| } | |
| YTPlayer.opt.autoPlay = typeof YTPlayer.opt.autoPlay == "undefined" ? (YTPlayer.isBackground ? true : false) : YTPlayer.opt.autoPlay; | |
| YTPlayer.opt.vol = YTPlayer.opt.vol ? YTPlayer.opt.vol : 100; | |
| jQuery.mbYTPlayer.getDataFromAPI(YTPlayer); | |
| jQuery(YTPlayer).on("YTPChanged", function() { | |
| if (YTPlayer.isInit) | |
| return; | |
| YTPlayer.isInit = true; | |
| //if is mobile && isPlayer fallback to the default YT player | |
| if (jQuery.browser.mobile && YTPlayer.canPlayOnMobile) { | |
| // Try to adjust the player dimention | |
| if (YTPlayer.opt.containment.outerWidth() > jQuery(window).width()) { | |
| YTPlayer.opt.containment.css({ | |
| maxWidth: "100%" | |
| }); | |
| var h = YTPlayer.opt.containment.outerWidth() * .563; | |
| YTPlayer.opt.containment.css({ | |
| maxHeight: h | |
| }); | |
| } | |
| new YT.Player(playerID, { | |
| videoId: YTPlayer.videoID.toString(), | |
| width: '100%', | |
| height: h, | |
| playerVars: playerVars, | |
| events: { | |
| 'onReady': function(event) { | |
| YTPlayer.player = event.target; | |
| playerBox.css({ | |
| opacity: 1 | |
| }); | |
| YTPlayer.wrapper.css({ | |
| opacity: 1 | |
| }); | |
| } | |
| } | |
| }); | |
| return; | |
| } | |
| new YT.Player(playerID, { | |
| videoId: YTPlayer.videoID.toString(), | |
| playerVars: playerVars, | |
| events: { | |
| 'onReady': function(event) { | |
| YTPlayer.player = event.target; | |
| if (YTPlayer.isReady) return; | |
| YTPlayer.isReady = YTPlayer.isPlayer && !YTPlayer.opt.autoPlay ? false : true; | |
| YTPlayer.playerEl = YTPlayer.player.getIframe(); | |
| jQuery(YTPlayer.playerEl).unselectable(); | |
| $YTPlayer.optimizeDisplay(); | |
| jQuery(window).off("resize.YTP_" + YTPlayer.id).on("resize.YTP_" + YTPlayer.id, function() { | |
| $YTPlayer.optimizeDisplay(); | |
| }); | |
| jQuery.mbYTPlayer.checkForState(YTPlayer); | |
| }, | |
| /** | |
| * | |
| * @param event | |
| * | |
| * -1 (unstarted) | |
| * 0 (ended) | |
| * 1 (playing) | |
| * 2 (paused) | |
| * 3 (buffering) | |
| * 5 (video cued). | |
| * | |
| * | |
| */ | |
| 'onStateChange': function(event) { | |
| if (typeof event.target.getPlayerState != "function") return; | |
| var state = event.target.getPlayerState(); | |
| if (YTPlayer.preventTrigger) { | |
| YTPlayer.preventTrigger = false; | |
| return | |
| } | |
| /* | |
| if( YTPlayer.state == state ) | |
| return; | |
| */ | |
| YTPlayer.state = state; | |
| var eventType; | |
| switch (state) { | |
| case -1: //----------------------------------------------- unstarted | |
| eventType = "YTPUnstarted"; | |
| break; | |
| case 0: //------------------------------------------------ ended | |
| eventType = "YTPEnd"; | |
| break; | |
| case 1: //------------------------------------------------ play | |
| eventType = "YTPPlay"; | |
| if (YTPlayer.controlBar.length) | |
| YTPlayer.controlBar.find(".mb_YTPPlaypause").html(jQuery.mbYTPlayer.controls.pause); | |
| if (typeof _gaq != "undefined" && eval(YTPlayer.opt.gaTrack)) _gaq.push(['_trackEvent', 'YTPlayer', 'Play', (YTPlayer.hasData ? YTPlayer.videoData.title : YTPlayer.videoID.toString())]); | |
| if (typeof ga != "undefined" && eval(YTPlayer.opt.gaTrack)) ga('send', 'event', 'YTPlayer', 'play', (YTPlayer.hasData ? YTPlayer.videoData.title : YTPlayer.videoID.toString())); | |
| break; | |
| case 2: //------------------------------------------------ pause | |
| eventType = "YTPPause"; | |
| if (YTPlayer.controlBar.length) | |
| YTPlayer.controlBar.find(".mb_YTPPlaypause").html(jQuery.mbYTPlayer.controls.play); | |
| break; | |
| case 3: //------------------------------------------------ buffer | |
| YTPlayer.player.setPlaybackQuality(YTPlayer.opt.quality); | |
| eventType = "YTPBuffering"; | |
| if (YTPlayer.controlBar.length) | |
| YTPlayer.controlBar.find(".mb_YTPPlaypause").html(jQuery.mbYTPlayer.controls.play); | |
| break; | |
| case 5: //------------------------------------------------ cued | |
| eventType = "YTPCued"; | |
| break; | |
| default: | |
| break; | |
| } | |
| // Trigger state events | |
| var YTPEvent = jQuery.Event(eventType); | |
| YTPEvent.time = YTPlayer.currentTime; | |
| if (YTPlayer.canTrigger) jQuery(YTPlayer).trigger(YTPEvent); | |
| }, | |
| /** | |
| * | |
| * @param e | |
| */ | |
| 'onPlaybackQualityChange': function(e) { | |
| var quality = e.target.getPlaybackQuality(); | |
| var YTPQualityChange = jQuery.Event("YTPQualityChange"); | |
| YTPQualityChange.quality = quality; | |
| jQuery(YTPlayer).trigger(YTPQualityChange); | |
| }, | |
| /** | |
| * | |
| * @param err | |
| */ | |
| 'onError': function(err) { | |
| if (err.data == 150) { | |
| console.log("Embedding this video is restricted by Youtube."); | |
| if (YTPlayer.isPlayList) jQuery(YTPlayer).playNext(); | |
| } | |
| if (err.data == 2 && YTPlayer.isPlayList) | |
| jQuery(YTPlayer).playNext(); | |
| if (typeof YTPlayer.opt.onError == "function") | |
| YTPlayer.opt.onError($YTPlayer, err); | |
| } | |
| } | |
| }); | |
| }); | |
| }); | |
| $YTPlayer.off("YTPTime.mask"); | |
| jQuery.mbYTPlayer.applyMask(YTPlayer); | |
| }); | |
| }, | |
| /** | |
| * | |
| * @param YTPlayer | |
| */ | |
| getDataFromAPI: function(YTPlayer) { | |
| YTPlayer.videoData = jQuery.mbStorage.get("YTPlayer_data_" + YTPlayer.videoID); | |
| jQuery(YTPlayer).off("YTPData.YTPlayer").on("YTPData.YTPlayer", function() { | |
| if (YTPlayer.hasData) { | |
| if (YTPlayer.isPlayer && !YTPlayer.opt.autoPlay) { | |
| var bgndURL = YTPlayer.videoData.thumb_max || YTPlayer.videoData.thumb_high || YTPlayer.videoData.thumb_medium; | |
| YTPlayer.opt.containment.css({ | |
| background: "rgba(0,0,0,0.5) url(" + bgndURL + ") center center", | |
| backgroundSize: "cover" | |
| }); | |
| YTPlayer.opt.backgroundUrl = bgndURL; | |
| } | |
| } | |
| }); | |
| if (YTPlayer.videoData) { | |
| setTimeout(function() { | |
| YTPlayer.opt.ratio = YTPlayer.opt.ratio == "auto" ? "16/9" : YTPlayer.opt.ratio; | |
| YTPlayer.dataReceived = true; | |
| jQuery(YTPlayer).trigger("YTPChanged"); | |
| var YTPData = jQuery.Event("YTPData"); | |
| YTPData.prop = {}; | |
| for (var x in YTPlayer.videoData) YTPData.prop[x] = YTPlayer.videoData[x]; | |
| jQuery(YTPlayer).trigger(YTPData); | |
| }, 500); | |
| YTPlayer.hasData = true; | |
| } else if (jQuery.mbYTPlayer.apiKey) { | |
| // Get video info from API3 (needs api key) | |
| // snippet,player,contentDetails,statistics,status | |
| jQuery.getJSON(jQuery.mbYTPlayer.locationProtocol + "//www.googleapis.com/youtube/v3/videos?id=" + YTPlayer.videoID + "&key=" + jQuery.mbYTPlayer.apiKey + "&part=snippet", function(data) { | |
| YTPlayer.dataReceived = true; | |
| jQuery(YTPlayer).trigger("YTPChanged"); | |
| function parseYTPlayer_data(data) { | |
| YTPlayer.videoData = {}; | |
| YTPlayer.videoData.id = YTPlayer.videoID; | |
| YTPlayer.videoData.channelTitle = data.channelTitle; | |
| YTPlayer.videoData.title = data.title; | |
| YTPlayer.videoData.description = data.description.length < 400 ? data.description : data.description.substring(0, 400) + " ..."; | |
| YTPlayer.videoData.aspectratio = YTPlayer.opt.ratio == "auto" ? "16/9" : YTPlayer.opt.ratio; | |
| YTPlayer.opt.ratio = YTPlayer.videoData.aspectratio; | |
| YTPlayer.videoData.thumb_max = data.thumbnails.maxres ? data.thumbnails.maxres.url : null; | |
| YTPlayer.videoData.thumb_high = data.thumbnails.high ? data.thumbnails.high.url : null; | |
| YTPlayer.videoData.thumb_medium = data.thumbnails.medium ? data.thumbnails.medium.url : null; | |
| jQuery.mbStorage.set("YTPlayer_data_" + YTPlayer.videoID, YTPlayer.videoData); | |
| } | |
| parseYTPlayer_data(data.items[0].snippet); | |
| YTPlayer.hasData = true; | |
| var YTPData = jQuery.Event("YTPData"); | |
| YTPData.prop = {}; | |
| for (var x in YTPlayer.videoData) YTPData.prop[x] = YTPlayer.videoData[x]; | |
| jQuery(YTPlayer).trigger(YTPData); | |
| }); | |
| } else { | |
| setTimeout(function() { | |
| jQuery(YTPlayer).trigger("YTPChanged"); | |
| }, 50); | |
| if (YTPlayer.isPlayer && !YTPlayer.opt.autoPlay) { | |
| var bgndURL = jQuery.mbYTPlayer.locationProtocol + "//i.ytimg.com/vi/" + YTPlayer.videoID + "/hqdefault.jpg"; | |
| YTPlayer.opt.containment.css({ | |
| background: "rgba(0,0,0,0.5) url(" + bgndURL + ") center center", | |
| backgroundSize: "cover" | |
| }); | |
| YTPlayer.opt.backgroundUrl = bgndURL; | |
| } | |
| YTPlayer.videoData = null; | |
| YTPlayer.opt.ratio = YTPlayer.opt.ratio == "auto" ? "16/9" : YTPlayer.opt.ratio; | |
| } | |
| if (YTPlayer.isPlayer && !YTPlayer.opt.autoPlay && !jQuery.browser.mobile) { | |
| YTPlayer.loading = jQuery("<div/>").addClass("loading").html("Loading").hide(); | |
| jQuery(YTPlayer).append(YTPlayer.loading); | |
| YTPlayer.loading.fadeIn(); | |
| } | |
| }, | |
| /** | |
| * | |
| */ | |
| removeStoredData: function() { | |
| jQuery.mbStorage.remove(); | |
| }, | |
| /** | |
| * | |
| * @returns {*|YTPlayer.videoData} | |
| */ | |
| getVideoData: function() { | |
| var YTPlayer = this.get(0); | |
| return YTPlayer.videoData; | |
| }, | |
| /** | |
| * | |
| * @returns {*|YTPlayer.videoID|boolean} | |
| */ | |
| getVideoID: function() { | |
| var YTPlayer = this.get(0); | |
| return YTPlayer.videoID || false; | |
| }, | |
| /** | |
| * | |
| * @param quality | |
| */ | |
| setVideoQuality: function(quality) { | |
| var YTPlayer = this.get(0); | |
| //if( !jQuery.browser.chrome ) | |
| YTPlayer.player.setPlaybackQuality(quality); | |
| }, | |
| /** | |
| * | |
| * @param videos | |
| * @param shuffle | |
| * @param callback | |
| * @param loopList | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| playlist: function(videos, shuffle, callback, loopList) { | |
| var $YTPlayer = this; | |
| var YTPlayer = $YTPlayer.get(0); | |
| YTPlayer.isPlayList = true; | |
| if (shuffle) videos = jQuery.shuffle(videos); | |
| if (!YTPlayer.videoID) { | |
| YTPlayer.videos = videos; | |
| YTPlayer.videoCounter = 0; | |
| YTPlayer.videoLength = videos.length; | |
| jQuery(YTPlayer).data("property", videos[0]); | |
| jQuery(YTPlayer).mb_YTPlayer(); | |
| } | |
| if (typeof callback == "function") jQuery(YTPlayer).one("YTPChanged", function() { | |
| callback(YTPlayer); | |
| }); | |
| jQuery(YTPlayer).on("YTPEnd", function() { | |
| loopList = typeof loopList == "undefined" ? true : loopList; | |
| jQuery(YTPlayer).playNext(loopList); | |
| }); | |
| return $YTPlayer; | |
| }, | |
| /** | |
| * | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| playNext: function(loopList) { | |
| var YTPlayer = this.get(0); | |
| if (YTPlayer.checkForStartAt) { | |
| clearTimeout(YTPlayer.checkForStartAt); | |
| clearInterval(YTPlayer.getState); | |
| } | |
| YTPlayer.videoCounter++; | |
| if (YTPlayer.videoCounter >= YTPlayer.videoLength && loopList) | |
| YTPlayer.videoCounter = 0; | |
| if (YTPlayer.videoCounter < YTPlayer.videoLength) | |
| jQuery(YTPlayer).changeMovie(YTPlayer.videos[YTPlayer.videoCounter]); | |
| else | |
| YTPlayer.videoCounter--; | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| playPrev: function() { | |
| var YTPlayer = this.get(0); | |
| if (YTPlayer.checkForStartAt) { | |
| clearInterval(YTPlayer.checkForStartAt); | |
| clearInterval(YTPlayer.getState); | |
| } | |
| YTPlayer.videoCounter--; | |
| if (YTPlayer.videoCounter < 0) YTPlayer.videoCounter = YTPlayer.videoLength - 1; | |
| jQuery(YTPlayer).changeMovie(YTPlayer.videos[YTPlayer.videoCounter]); | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| playIndex: function(idx) { | |
| var YTPlayer = this.get(0); | |
| idx = idx - 1; | |
| if (YTPlayer.checkForStartAt) { | |
| clearInterval(YTPlayer.checkForStartAt); | |
| clearInterval(YTPlayer.getState); | |
| } | |
| YTPlayer.videoCounter = idx; | |
| if (YTPlayer.videoCounter >= YTPlayer.videoLength - 1) | |
| YTPlayer.videoCounter = YTPlayer.videoLength - 1; | |
| jQuery(YTPlayer).changeMovie(YTPlayer.videos[YTPlayer.videoCounter]); | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @param opt | |
| */ | |
| changeMovie: function(opt) { | |
| var $YTPlayer = this; | |
| var YTPlayer = $YTPlayer.get(0); | |
| YTPlayer.opt.startAt = 0; | |
| YTPlayer.opt.stopAt = 0; | |
| YTPlayer.opt.mask = false; | |
| YTPlayer.opt.mute = true; | |
| YTPlayer.hasData = false; | |
| YTPlayer.hasChanged = true; | |
| YTPlayer.player.loopTime = undefined; | |
| if (opt) | |
| jQuery.extend(YTPlayer.opt, opt); //YTPlayer.defaultOpt, | |
| YTPlayer.videoID = getYTPVideoID(YTPlayer.opt.videoURL).videoID; | |
| if (YTPlayer.opt.loop == "true") | |
| YTPlayer.opt.loop = 9999; | |
| jQuery(YTPlayer.playerEl).CSSAnimate({ | |
| opacity: 0 | |
| }, 200, function() { | |
| var YTPChangeMovie = jQuery.Event("YTPChangeMovie"); | |
| YTPChangeMovie.time = YTPlayer.currentTime; | |
| YTPChangeMovie.videoId = YTPlayer.videoID; | |
| jQuery(YTPlayer).trigger(YTPChangeMovie); | |
| jQuery(YTPlayer).YTPGetPlayer().cueVideoByUrl(encodeURI(jQuery.mbYTPlayer.locationProtocol + "//www.youtube.com/v/" + YTPlayer.videoID), 1, YTPlayer.opt.quality); | |
| jQuery(YTPlayer).optimizeDisplay(); | |
| jQuery.mbYTPlayer.checkForState(YTPlayer); | |
| jQuery.mbYTPlayer.getDataFromAPI(YTPlayer); | |
| }); | |
| jQuery.mbYTPlayer.applyMask(YTPlayer); | |
| }, | |
| /** | |
| * | |
| * @returns {player} | |
| */ | |
| getPlayer: function() { | |
| return jQuery(this).get(0).player; | |
| }, | |
| playerDestroy: function() { | |
| var YTPlayer = this.get(0); | |
| ytp.YTAPIReady = true; | |
| ytp.backgroundIsInited = false; | |
| YTPlayer.isInit = false; | |
| YTPlayer.videoID = null; | |
| var playerBox = YTPlayer.wrapper; | |
| playerBox.remove(); | |
| jQuery("#controlBar_" + YTPlayer.id).remove(); | |
| clearInterval(YTPlayer.checkForStartAt); | |
| clearInterval(YTPlayer.getState); | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @param real | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| fullscreen: function(real) { | |
| var YTPlayer = this.get(0); | |
| if (typeof real == "undefined") real = YTPlayer.opt.realfullscreen; | |
| real = eval(real); | |
| var controls = jQuery("#controlBar_" + YTPlayer.id); | |
| var fullScreenBtn = controls.find(".mb_OnlyYT"); | |
| var videoWrapper = YTPlayer.isSelf ? YTPlayer.opt.containment : YTPlayer.wrapper; | |
| //var videoWrapper = YTPlayer.wrapper; | |
| if (real) { | |
| var fullscreenchange = jQuery.browser.mozilla ? "mozfullscreenchange" : jQuery.browser.webkit ? "webkitfullscreenchange" : "fullscreenchange"; | |
| jQuery(document).off(fullscreenchange).on(fullscreenchange, function() { | |
| var isFullScreen = RunPrefixMethod(document, "IsFullScreen") || RunPrefixMethod(document, "FullScreen"); | |
| if (!isFullScreen) { | |
| YTPlayer.isAlone = false; | |
| fullScreenBtn.html(jQuery.mbYTPlayer.controls.onlyYT); | |
| jQuery(YTPlayer).YTPSetVideoQuality(YTPlayer.opt.quality); | |
| videoWrapper.removeClass("YTPFullscreen"); | |
| videoWrapper.CSSAnimate({ | |
| opacity: YTPlayer.opt.opacity | |
| }, 500); | |
| videoWrapper.css({ | |
| zIndex: 0 | |
| }); | |
| if (YTPlayer.isBackground) { | |
| jQuery("body").after(controls); | |
| } else { | |
| YTPlayer.wrapper.before(controls); | |
| } | |
| jQuery(window).resize(); | |
| jQuery(YTPlayer).trigger("YTPFullScreenEnd"); | |
| } else { | |
| jQuery(YTPlayer).YTPSetVideoQuality("default"); | |
| jQuery(YTPlayer).trigger("YTPFullScreenStart"); | |
| } | |
| }); | |
| } | |
| if (!YTPlayer.isAlone) { | |
| function hideMouse() { | |
| YTPlayer.overlay.css({ | |
| cursor: "none" | |
| }); | |
| } | |
| jQuery(document).on("mousemove.YTPlayer", function(e) { | |
| YTPlayer.overlay.css({ | |
| cursor: "auto" | |
| }); | |
| clearTimeout(YTPlayer.hideCursor); | |
| if (!jQuery(e.target).parents().is(".mb_YTPBar")) YTPlayer.hideCursor = setTimeout(hideMouse, 3000); | |
| }); | |
| hideMouse(); | |
| if (real) { | |
| videoWrapper.css({ | |
| opacity: 0 | |
| }); | |
| videoWrapper.addClass("YTPFullscreen"); | |
| launchFullscreen(videoWrapper.get(0)); | |
| setTimeout(function() { | |
| videoWrapper.CSSAnimate({ | |
| opacity: 1 | |
| }, 1000); | |
| YTPlayer.wrapper.append(controls); | |
| jQuery(YTPlayer).optimizeDisplay(); | |
| YTPlayer.player.seekTo(YTPlayer.player.getCurrentTime() + .1, true); | |
| }, 500) | |
| } else videoWrapper.css({ | |
| zIndex: 10000 | |
| }).CSSAnimate({ | |
| opacity: 1 | |
| }, 1000); | |
| fullScreenBtn.html(jQuery.mbYTPlayer.controls.showSite); | |
| YTPlayer.isAlone = true; | |
| } else { | |
| jQuery(document).off("mousemove.YTPlayer"); | |
| clearTimeout(YTPlayer.hideCursor); | |
| YTPlayer.overlay.css({ | |
| cursor: "auto" | |
| }); | |
| if (real) { | |
| cancelFullscreen(); | |
| } else { | |
| videoWrapper.CSSAnimate({ | |
| opacity: YTPlayer.opt.opacity | |
| }, 500); | |
| videoWrapper.css({ | |
| zIndex: 0 | |
| }); | |
| } | |
| fullScreenBtn.html(jQuery.mbYTPlayer.controls.onlyYT); | |
| YTPlayer.isAlone = false; | |
| } | |
| function RunPrefixMethod(obj, method) { | |
| var pfx = ["webkit", "moz", "ms", "o", ""]; | |
| var p = 0, | |
| m, t; | |
| while (p < pfx.length && !obj[m]) { | |
| m = method; | |
| if (pfx[p] == "") { | |
| m = m.substr(0, 1).toLowerCase() + m.substr(1); | |
| } | |
| m = pfx[p] + m; | |
| t = typeof obj[m]; | |
| if (t != "undefined") { | |
| pfx = [pfx[p]]; | |
| return (t == "function" ? obj[m]() : obj[m]); | |
| } | |
| p++; | |
| } | |
| } | |
| function launchFullscreen(element) { | |
| RunPrefixMethod(element, "RequestFullScreen"); | |
| } | |
| function cancelFullscreen() { | |
| if (RunPrefixMethod(document, "FullScreen") || RunPrefixMethod(document, "IsFullScreen")) { | |
| RunPrefixMethod(document, "CancelFullScreen"); | |
| } | |
| } | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| toggleLoops: function() { | |
| var YTPlayer = this.get(0); | |
| var data = YTPlayer.opt; | |
| if (data.loop == 1) { | |
| data.loop = 0; | |
| } else { | |
| if (data.startAt) { | |
| YTPlayer.player.seekTo(data.startAt); | |
| } else { | |
| YTPlayer.player.playVideo(); | |
| } | |
| data.loop = 1; | |
| } | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| play: function() { | |
| var YTPlayer = this.get(0); | |
| if (!YTPlayer.isReady) | |
| return this; | |
| YTPlayer.player.playVideo(); | |
| YTPlayer.wrapper.CSSAnimate({ | |
| opacity: YTPlayer.isAlone ? 1 : YTPlayer.opt.opacity | |
| }, 2000); | |
| jQuery(YTPlayer.playerEl).CSSAnimate({ | |
| opacity: 1 | |
| }, 1000); | |
| var controls = jQuery("#controlBar_" + YTPlayer.id); | |
| var playBtn = controls.find(".mb_YTPPlaypause"); | |
| playBtn.html(jQuery.mbYTPlayer.controls.pause); | |
| YTPlayer.state = 1; | |
| jQuery(YTPlayer).css("background-image", "none"); | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @param callback | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| togglePlay: function(callback) { | |
| var YTPlayer = this.get(0); | |
| if (YTPlayer.state == 1) | |
| this.YTPPause(); | |
| else | |
| this.YTPPlay(); | |
| if (typeof callback == "function") | |
| callback(YTPlayer.state); | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| stop: function() { | |
| var YTPlayer = this.get(0); | |
| var controls = jQuery("#controlBar_" + YTPlayer.id); | |
| var playBtn = controls.find(".mb_YTPPlaypause"); | |
| playBtn.html(jQuery.mbYTPlayer.controls.play); | |
| YTPlayer.player.stopVideo(); | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| pause: function() { | |
| var YTPlayer = this.get(0); | |
| YTPlayer.player.pauseVideo(); | |
| YTPlayer.state = 2; | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @param val | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| seekTo: function(val) { | |
| var YTPlayer = this.get(0); | |
| YTPlayer.player.seekTo(val, true); | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @param val | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| setVolume: function(val) { | |
| var YTPlayer = this.get(0); | |
| if (!val && !YTPlayer.opt.vol && YTPlayer.player.getVolume() == 0) jQuery(YTPlayer).YTPUnmute(); | |
| else if ((!val && YTPlayer.player.getVolume() > 0) || (val && YTPlayer.opt.vol == val)) { | |
| if (!YTPlayer.isMute) jQuery(YTPlayer).YTPMute(); | |
| else jQuery(YTPlayer).YTPUnmute(); | |
| } else { | |
| YTPlayer.opt.vol = val; | |
| YTPlayer.player.setVolume(YTPlayer.opt.vol); | |
| if (YTPlayer.volumeBar && YTPlayer.volumeBar.length) YTPlayer.volumeBar.updateSliderVal(val) | |
| } | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @returns {boolean} | |
| */ | |
| toggleVolume: function() { | |
| var YTPlayer = this.get(0); | |
| if (!YTPlayer) return; | |
| if (YTPlayer.player.isMuted()) { | |
| jQuery(YTPlayer).YTPUnmute(); | |
| return true; | |
| } else { | |
| jQuery(YTPlayer).YTPMute(); | |
| return false; | |
| } | |
| }, | |
| /** | |
| * | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| mute: function() { | |
| var YTPlayer = this.get(0); | |
| if (YTPlayer.isMute) return; | |
| YTPlayer.player.mute(); | |
| YTPlayer.isMute = true; | |
| YTPlayer.player.setVolume(0); | |
| if (YTPlayer.volumeBar && YTPlayer.volumeBar.length && YTPlayer.volumeBar.width() > 10) { | |
| YTPlayer.volumeBar.updateSliderVal(0); | |
| } | |
| var controls = jQuery("#controlBar_" + YTPlayer.id); | |
| var muteBtn = controls.find(".mb_YTPMuteUnmute"); | |
| muteBtn.html(jQuery.mbYTPlayer.controls.unmute); | |
| jQuery(YTPlayer).addClass("isMuted"); | |
| if (YTPlayer.volumeBar && YTPlayer.volumeBar.length) YTPlayer.volumeBar.addClass("muted"); | |
| var YTPEvent = jQuery.Event("YTPMuted"); | |
| YTPEvent.time = YTPlayer.currentTime; | |
| if (YTPlayer.canTrigger) jQuery(YTPlayer).trigger(YTPEvent); | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| unmute: function() { | |
| var YTPlayer = this.get(0); | |
| if (!YTPlayer.isMute) return; | |
| YTPlayer.player.unMute(); | |
| YTPlayer.isMute = false; | |
| YTPlayer.player.setVolume(YTPlayer.opt.vol); | |
| if (YTPlayer.volumeBar && YTPlayer.volumeBar.length) YTPlayer.volumeBar.updateSliderVal(YTPlayer.opt.vol > 10 ? YTPlayer.opt.vol : 10); | |
| var controls = jQuery("#controlBar_" + YTPlayer.id); | |
| var muteBtn = controls.find(".mb_YTPMuteUnmute"); | |
| muteBtn.html(jQuery.mbYTPlayer.controls.mute); | |
| jQuery(YTPlayer).removeClass("isMuted"); | |
| if (YTPlayer.volumeBar && YTPlayer.volumeBar.length) YTPlayer.volumeBar.removeClass("muted"); | |
| var YTPEvent = jQuery.Event("YTPUnmuted"); | |
| YTPEvent.time = YTPlayer.currentTime; | |
| if (YTPlayer.canTrigger) jQuery(YTPlayer).trigger(YTPEvent); | |
| return this; | |
| }, | |
| /** | |
| * FILTERS | |
| * | |
| * | |
| * @param filter | |
| * @param value | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| applyFilter: function(filter, value) { | |
| return this.each(function() { | |
| var YTPlayer = this; | |
| YTPlayer.filters[filter].value = value; | |
| if (YTPlayer.filtersEnabled) | |
| jQuery(YTPlayer).YTPEnableFilters(); | |
| }); | |
| }, | |
| /** | |
| * | |
| * @param filters | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| applyFilters: function(filters) { | |
| return this.each(function() { | |
| var YTPlayer = this; | |
| if (!YTPlayer.isReady) { | |
| jQuery(YTPlayer).on("YTPReady", function() { | |
| jQuery(YTPlayer).YTPApplyFilters(filters); | |
| }); | |
| return; | |
| } | |
| for (var key in filters) | |
| jQuery(YTPlayer).YTPApplyFilter(key, filters[key]); | |
| jQuery(YTPlayer).trigger("YTPFiltersApplied"); | |
| }); | |
| }, | |
| /** | |
| * | |
| * @param filter | |
| * @param value | |
| * @returns {*} | |
| */ | |
| toggleFilter: function(filter, value) { | |
| return this.each(function() { | |
| var YTPlayer = this; | |
| if (!YTPlayer.filters[filter].value) YTPlayer.filters[filter].value = value; | |
| else YTPlayer.filters[filter].value = 0; | |
| if (YTPlayer.filtersEnabled) jQuery(this).YTPEnableFilters(); | |
| }); | |
| }, | |
| /** | |
| * | |
| * @param callback | |
| * @returns {*} | |
| */ | |
| toggleFilters: function(callback) { | |
| return this.each(function() { | |
| var YTPlayer = this; | |
| if (YTPlayer.filtersEnabled) { | |
| jQuery(YTPlayer).trigger("YTPDisableFilters"); | |
| jQuery(YTPlayer).YTPDisableFilters(); | |
| } else { | |
| jQuery(YTPlayer).YTPEnableFilters(); | |
| jQuery(YTPlayer).trigger("YTPEnableFilters"); | |
| } | |
| if (typeof callback == "function") | |
| callback(YTPlayer.filtersEnabled); | |
| }) | |
| }, | |
| /** | |
| * | |
| * @returns {*} | |
| */ | |
| disableFilters: function() { | |
| return this.each(function() { | |
| var YTPlayer = this; | |
| var iframe = jQuery(YTPlayer.playerEl); | |
| iframe.css("-webkit-filter", ""); | |
| iframe.css("filter", ""); | |
| YTPlayer.filtersEnabled = false; | |
| }) | |
| }, | |
| /** | |
| * | |
| * @returns {*} | |
| */ | |
| enableFilters: function() { | |
| return this.each(function() { | |
| var YTPlayer = this; | |
| var iframe = jQuery(YTPlayer.playerEl); | |
| var filterStyle = ""; | |
| for (var key in YTPlayer.filters) { | |
| if (YTPlayer.filters[key].value) | |
| filterStyle += key.replace("_", "-") + "(" + YTPlayer.filters[key].value + YTPlayer.filters[key].unit + ") "; | |
| } | |
| iframe.css("-webkit-filter", filterStyle); | |
| iframe.css("filter", filterStyle); | |
| YTPlayer.filtersEnabled = true; | |
| }); | |
| }, | |
| /** | |
| * | |
| * @param filter | |
| * @param callback | |
| * @returns {*} | |
| */ | |
| removeFilter: function(filter, callback) { | |
| return this.each(function() { | |
| var YTPlayer = this; | |
| if (typeof filter == "function") { | |
| callback = filter; | |
| filter = null; | |
| } | |
| if (!filter) | |
| for (var key in YTPlayer.filters) { | |
| jQuery(this).YTPApplyFilter(key, 0); | |
| if (typeof callback == "function") callback(key); | |
| } else { | |
| jQuery(this).YTPApplyFilter(filter, 0); | |
| if (typeof callback == "function") callback(filter); | |
| } | |
| }); | |
| }, | |
| /** | |
| * | |
| * @returns {*} | |
| */ | |
| getFilters: function() { | |
| var YTPlayer = this.get(0); | |
| return YTPlayer.filters; | |
| }, | |
| /** | |
| * MASK | |
| * | |
| * | |
| * @param mask | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| addMask: function(mask) { | |
| var YTPlayer = this.get(0); | |
| var overlay = YTPlayer.overlay; | |
| if (!mask) { | |
| mask = YTPlayer.actualMask; | |
| } | |
| var tempImg = jQuery("<img/>").attr("src", mask).on("load", function() { | |
| overlay.CSSAnimate({ | |
| opacity: 0 | |
| }, 500, function() { | |
| YTPlayer.hasMask = true; | |
| tempImg.remove(); | |
| overlay.css({ | |
| backgroundImage: "url(" + mask + ")", | |
| backgroundRepeat: "no-repeat", | |
| backgroundPosition: "center center", | |
| backgroundSize: "cover" | |
| }); | |
| overlay.CSSAnimate({ | |
| opacity: 1 | |
| }, 500); | |
| }); | |
| }); | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @returns {jQuery.mbYTPlayer} | |
| */ | |
| removeMask: function() { | |
| var YTPlayer = this.get(0); | |
| var overlay = YTPlayer.overlay; | |
| overlay.CSSAnimate({ | |
| opacity: 0 | |
| }, 500, function() { | |
| YTPlayer.hasMask = false; | |
| overlay.css({ | |
| backgroundImage: "", | |
| backgroundRepeat: "", | |
| backgroundPosition: "", | |
| backgroundSize: "" | |
| }); | |
| overlay.CSSAnimate({ | |
| opacity: 1 | |
| }, 500); | |
| }); | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @param YTPlayer | |
| */ | |
| applyMask: function(YTPlayer) { | |
| var $YTPlayer = jQuery(YTPlayer); | |
| $YTPlayer.off("YTPTime.mask"); | |
| if (YTPlayer.opt.mask) { | |
| if (typeof YTPlayer.opt.mask == "string") { | |
| $YTPlayer.YTPAddMask(YTPlayer.opt.mask); | |
| YTPlayer.actualMask = YTPlayer.opt.mask; | |
| } else if (typeof YTPlayer.opt.mask == "object") { | |
| for (var time in YTPlayer.opt.mask) { | |
| if (YTPlayer.opt.mask[time]) | |
| var img = jQuery("<img/>").attr("src", YTPlayer.opt.mask[time]); | |
| } | |
| if (YTPlayer.opt.mask[0]) | |
| $YTPlayer.YTPAddMask(YTPlayer.opt.mask[0]); | |
| $YTPlayer.on("YTPTime.mask", function(e) { | |
| for (var time in YTPlayer.opt.mask) { | |
| if (e.time == time) | |
| if (!YTPlayer.opt.mask[time]) { | |
| $YTPlayer.YTPRemoveMask(); | |
| } else { | |
| $YTPlayer.YTPAddMask(YTPlayer.opt.mask[time]); | |
| YTPlayer.actualMask = YTPlayer.opt.mask[time]; | |
| } | |
| } | |
| }); | |
| } | |
| } | |
| }, | |
| /** | |
| * | |
| */ | |
| toggleMask: function() { | |
| var YTPlayer = this.get(0); | |
| var $YTPlayer = $(YTPlayer); | |
| if (YTPlayer.hasMask) | |
| $YTPlayer.YTPRemoveMask(); | |
| else | |
| $YTPlayer.YTPAddMask(); | |
| return this; | |
| }, | |
| /** | |
| * | |
| * @returns {{totalTime: number, currentTime: number}} | |
| */ | |
| manageProgress: function() { | |
| var YTPlayer = this.get(0); | |
| var controls = jQuery("#controlBar_" + YTPlayer.id); | |
| var progressBar = controls.find(".mb_YTPProgress"); | |
| var loadedBar = controls.find(".mb_YTPLoaded"); | |
| var timeBar = controls.find(".mb_YTPseekbar"); | |
| var totW = progressBar.outerWidth(); | |
| var currentTime = Math.floor(YTPlayer.player.getCurrentTime()); | |
| var totalTime = Math.floor(YTPlayer.player.getDuration()); | |
| var timeW = (currentTime * totW) / totalTime; | |
| var startLeft = 0; | |
| var loadedW = YTPlayer.player.getVideoLoadedFraction() * 100; | |
| loadedBar.css({ | |
| left: startLeft, | |
| width: loadedW + "%" | |
| }); | |
| timeBar.css({ | |
| left: 0, | |
| width: timeW | |
| }); | |
| return { | |
| totalTime: totalTime, | |
| currentTime: currentTime | |
| }; | |
| }, | |
| /** | |
| * | |
| * @param YTPlayer | |
| */ | |
| buildControls: function(YTPlayer) { | |
| var data = YTPlayer.opt; | |
| // @data.printUrl: is deprecated; use data.showYTLogo | |
| data.showYTLogo = data.showYTLogo || data.printUrl; | |
| if (jQuery("#controlBar_" + YTPlayer.id).length) | |
| return; | |
| YTPlayer.controlBar = jQuery("<span/>").attr("id", "controlBar_" + YTPlayer.id).addClass("mb_YTPBar").css({ | |
| whiteSpace: "noWrap", | |
| position: YTPlayer.isBackground ? "fixed" : "absolute", | |
| zIndex: YTPlayer.isBackground ? 10000 : 1000 | |
| }).hide(); | |
| var buttonBar = jQuery("<div/>").addClass("buttonBar"); | |
| /* play/pause button*/ | |
| var playpause = jQuery("<span>" + jQuery.mbYTPlayer.controls.play + "</span>").addClass("mb_YTPPlaypause ytpicon").click(function() { | |
| if (YTPlayer.player.getPlayerState() == 1) jQuery(YTPlayer).YTPPause(); | |
| else jQuery(YTPlayer).YTPPlay(); | |
| }); | |
| /* mute/unmute button*/ | |
| var MuteUnmute = jQuery("<span>" + jQuery.mbYTPlayer.controls.mute + "</span>").addClass("mb_YTPMuteUnmute ytpicon").click(function() { | |
| if (YTPlayer.player.getVolume() == 0) { | |
| jQuery(YTPlayer).YTPUnmute(); | |
| } else { | |
| jQuery(YTPlayer).YTPMute(); | |
| } | |
| }); | |
| /* volume bar*/ | |
| var volumeBar = jQuery("<div/>").addClass("mb_YTPVolumeBar").css({ | |
| display: "inline-block" | |
| }); | |
| YTPlayer.volumeBar = volumeBar; | |
| /* time elapsed */ | |
| var idx = jQuery("<span/>").addClass("mb_YTPTime"); | |
| var vURL = data.videoURL ? data.videoURL : ""; | |
| if (vURL.indexOf("http") < 0) vURL = jQuery.mbYTPlayer.locationProtocol + "//www.youtube.com/watch?v=" + data.videoURL; | |
| var movieUrl = jQuery("<span/>").html(jQuery.mbYTPlayer.controls.ytLogo).addClass("mb_YTPUrl ytpicon").attr("title", "view on YouTube").on("click", function() { | |
| window.open(vURL, "viewOnYT") | |
| }); | |
| var onlyVideo = jQuery("<span/>").html(jQuery.mbYTPlayer.controls.onlyYT).addClass("mb_OnlyYT ytpicon").on("click", function() { | |
| jQuery(YTPlayer).YTPFullscreen(data.realfullscreen); | |
| }); | |
| var progressBar = jQuery("<div/>").addClass("mb_YTPProgress").css("position", "absolute").click(function(e) { | |
| timeBar.css({ | |
| width: (e.clientX - timeBar.offset().left) | |
| }); | |
| YTPlayer.timeW = e.clientX - timeBar.offset().left; | |
| YTPlayer.controlBar.find(".mb_YTPLoaded").css({ | |
| width: 0 | |
| }); | |
| var totalTime = Math.floor(YTPlayer.player.getDuration()); | |
| YTPlayer.goto = (timeBar.outerWidth() * totalTime) / progressBar.outerWidth(); | |
| YTPlayer.player.seekTo(parseFloat(YTPlayer.goto), true); | |
| YTPlayer.controlBar.find(".mb_YTPLoaded").css({ | |
| width: 0 | |
| }); | |
| }); | |
| var loadedBar = jQuery("<div/>").addClass("mb_YTPLoaded").css("position", "absolute"); | |
| var timeBar = jQuery("<div/>").addClass("mb_YTPseekbar").css("position", "absolute"); | |
| progressBar.append(loadedBar).append(timeBar); | |
| buttonBar.append(playpause).append(MuteUnmute).append(volumeBar).append(idx); | |
| if (data.showYTLogo) { | |
| buttonBar.append(movieUrl); | |
| } | |
| if (YTPlayer.isBackground || (eval(YTPlayer.opt.realfullscreen) && !YTPlayer.isBackground)) buttonBar.append(onlyVideo); | |
| YTPlayer.controlBar.append(buttonBar).append(progressBar); | |
| if (!YTPlayer.isBackground) { | |
| YTPlayer.controlBar.addClass("inlinePlayer"); | |
| YTPlayer.wrapper.before(YTPlayer.controlBar); | |
| } else { | |
| jQuery("body").after(YTPlayer.controlBar); | |
| } | |
| volumeBar.simpleSlider({ | |
| initialval: YTPlayer.opt.vol, | |
| scale: 100, | |
| orientation: "h", | |
| callback: function(el) { | |
| if (el.value == 0) { | |
| jQuery(YTPlayer).YTPMute(); | |
| } else { | |
| jQuery(YTPlayer).YTPUnmute(); | |
| } | |
| YTPlayer.player.setVolume(el.value); | |
| if (!YTPlayer.isMute) YTPlayer.opt.vol = el.value; | |
| } | |
| }); | |
| }, | |
| /** | |
| * | |
| * @param YTPlayer | |
| */ | |
| checkForState: function(YTPlayer) { | |
| var interval = YTPlayer.opt.showControls ? 100 : 400; | |
| clearInterval(YTPlayer.getState); | |
| //Checking if player has been removed from scene | |
| if (!jQuery.contains(document, YTPlayer)) { | |
| jQuery(YTPlayer).YTPPlayerDestroy(); | |
| clearInterval(YTPlayer.getState); | |
| clearInterval(YTPlayer.checkForStartAt); | |
| return; | |
| } | |
| jQuery.mbYTPlayer.checkForStart(YTPlayer); | |
| YTPlayer.getState = setInterval(function() { | |
| var prog = jQuery(YTPlayer).YTPManageProgress(); | |
| var $YTPlayer = jQuery(YTPlayer); | |
| var data = YTPlayer.opt; | |
| var startAt = YTPlayer.opt.startAt ? YTPlayer.opt.startAt : 1; | |
| var stopAt = YTPlayer.opt.stopAt > YTPlayer.opt.startAt ? YTPlayer.opt.stopAt : 0; | |
| stopAt = stopAt < YTPlayer.player.getDuration() ? stopAt : 0; | |
| if (YTPlayer.currentTime != prog.currentTime) { | |
| var YTPEvent = jQuery.Event("YTPTime"); | |
| YTPEvent.time = YTPlayer.currentTime; | |
| jQuery(YTPlayer).trigger(YTPEvent); | |
| } | |
| YTPlayer.currentTime = prog.currentTime; | |
| YTPlayer.totalTime = YTPlayer.player.getDuration(); | |
| if (YTPlayer.player.getVolume() == 0) $YTPlayer.addClass("isMuted"); | |
| else $YTPlayer.removeClass("isMuted"); | |
| if (YTPlayer.opt.showControls) | |
| if (prog.totalTime) { | |
| YTPlayer.controlBar.find(".mb_YTPTime").html(jQuery.mbYTPlayer.formatTime(prog.currentTime) + " / " + jQuery.mbYTPlayer.formatTime(prog.totalTime)); | |
| } else { | |
| YTPlayer.controlBar.find(".mb_YTPTime").html("-- : -- / -- : --"); | |
| } | |
| if (eval(YTPlayer.opt.stopMovieOnBlur)) { | |
| if (!document.hasFocus()) { | |
| if (YTPlayer.state == 1) { | |
| YTPlayer.hasFocus = false; | |
| $YTPlayer.YTPPause(); | |
| } | |
| } else if (document.hasFocus() && !YTPlayer.hasFocus && !(YTPlayer.state == -1 || YTPlayer.state == 0)) { | |
| YTPlayer.hasFocus = true; | |
| $YTPlayer.YTPPlay(); | |
| } | |
| } | |
| if (YTPlayer.controlBar.length && YTPlayer.controlBar.outerWidth() <= 400 && !YTPlayer.isCompact) { | |
| YTPlayer.controlBar.addClass("compact"); | |
| YTPlayer.isCompact = true; | |
| if (!YTPlayer.isMute && YTPlayer.volumeBar) YTPlayer.volumeBar.updateSliderVal(YTPlayer.opt.vol); | |
| } else if (YTPlayer.controlBar.length && YTPlayer.controlBar.outerWidth() > 400 && YTPlayer.isCompact) { | |
| YTPlayer.controlBar.removeClass("compact"); | |
| YTPlayer.isCompact = false; | |
| if (!YTPlayer.isMute && YTPlayer.volumeBar) YTPlayer.volumeBar.updateSliderVal(YTPlayer.opt.vol); | |
| } | |
| if (YTPlayer.player.getPlayerState() == 1 && (parseFloat(YTPlayer.player.getDuration() - 1.5) < YTPlayer.player.getCurrentTime() || (stopAt > 0 && parseFloat(YTPlayer.player.getCurrentTime()) > stopAt))) { | |
| if (YTPlayer.isEnded) return; | |
| YTPlayer.isEnded = true; | |
| setTimeout(function() { | |
| YTPlayer.isEnded = false | |
| }, 1000); | |
| if (YTPlayer.isPlayList) { | |
| if (!data.loop || (data.loop > 0 && YTPlayer.player.loopTime === data.loop - 1)) { | |
| YTPlayer.player.loopTime = undefined; | |
| clearInterval(YTPlayer.getState); | |
| var YTPEnd = jQuery.Event("YTPEnd"); | |
| YTPEnd.time = YTPlayer.currentTime; | |
| jQuery(YTPlayer).trigger(YTPEnd); | |
| //YTPlayer.state = 0; | |
| return; | |
| } | |
| } else if (!data.loop || (data.loop > 0 && YTPlayer.player.loopTime === data.loop - 1)) { | |
| YTPlayer.player.loopTime = undefined; | |
| YTPlayer.preventTrigger = true; | |
| YTPlayer.state = 2; | |
| jQuery(YTPlayer).YTPPause(); | |
| YTPlayer.wrapper.CSSAnimate({ | |
| opacity: 0 | |
| }, 500, function() { | |
| if (YTPlayer.controlBar.length) | |
| YTPlayer.controlBar.find(".mb_YTPPlaypause").html(jQuery.mbYTPlayer.controls.play); | |
| var YTPEnd = jQuery.Event("YTPEnd"); | |
| YTPEnd.time = YTPlayer.currentTime; | |
| jQuery(YTPlayer).trigger(YTPEnd); | |
| YTPlayer.player.seekTo(startAt, true); | |
| if (!YTPlayer.isBackground) { | |
| YTPlayer.opt.containment.css({ | |
| background: "rgba(0,0,0,0.5) url(" + YTPlayer.opt.backgroundUrl + ") center center", | |
| backgroundSize: "cover" | |
| }); | |
| } | |
| }); | |
| return; | |
| } | |
| YTPlayer.player.loopTime = YTPlayer.player.loopTime ? ++YTPlayer.player.loopTime : 1; | |
| startAt = startAt || 1; | |
| YTPlayer.preventTrigger = true; | |
| YTPlayer.state = 2; | |
| jQuery(YTPlayer).YTPPause(); | |
| YTPlayer.player.seekTo(startAt, true); | |
| $YTPlayer.YTPPlay(); | |
| } | |
| }, interval); | |
| }, | |
| /** | |
| * | |
| * @returns {string} time | |
| */ | |
| getTime: function() { | |
| var YTPlayer = this.get(0); | |
| return jQuery.mbYTPlayer.formatTime(YTPlayer.currentTime); | |
| }, | |
| /** | |
| * | |
| * @returns {string} total time | |
| */ | |
| getTotalTime: function() { | |
| var YTPlayer = this.get(0); | |
| return jQuery.mbYTPlayer.formatTime(YTPlayer.totalTime); | |
| }, | |
| /** | |
| * | |
| * @param YTPlayer | |
| */ | |
| checkForStart: function(YTPlayer) { | |
| var $YTPlayer = jQuery(YTPlayer); | |
| //Checking if player has been removed from scene | |
| if (!jQuery.contains(document, YTPlayer)) { | |
| jQuery(YTPlayer).YTPPlayerDestroy(); | |
| return | |
| } | |
| /* | |
| if( jQuery.browser.chrome ) | |
| YTPlayer.opt.quality = "default"; | |
| */ | |
| YTPlayer.preventTrigger = true; | |
| YTPlayer.state = 2 | |
| jQuery(YTPlayer).YTPPause(); | |
| jQuery(YTPlayer).muteYTPVolume(); | |
| jQuery("#controlBar_" + YTPlayer.id).remove(); | |
| YTPlayer.controlBar = false; | |
| if (YTPlayer.opt.showControls) | |
| jQuery.mbYTPlayer.buildControls(YTPlayer); | |
| if (YTPlayer.opt.addRaster) { | |
| var classN = YTPlayer.opt.addRaster == "dot" ? "raster-dot" : "raster"; | |
| YTPlayer.overlay.addClass(YTPlayer.isRetina ? classN + " retina" : classN); | |
| } else { | |
| YTPlayer.overlay.removeClass(function(index, classNames) { | |
| // change the list into an array | |
| var current_classes = classNames.split(" "), | |
| // array of classes which are to be removed | |
| classes_to_remove = []; | |
| jQuery.each(current_classes, function(index, class_name) { | |
| // if the classname begins with bg add it to the classes_to_remove array | |
| if (/raster.*/.test(class_name)) { | |
| classes_to_remove.push(class_name); | |
| } | |
| }); | |
| classes_to_remove.push("retina"); | |
| // turn the array back into a string | |
| return classes_to_remove.join(" "); | |
| }) | |
| } | |
| var startAt = YTPlayer.opt.startAt ? YTPlayer.opt.startAt : 1; | |
| YTPlayer.player.playVideo(); | |
| YTPlayer.player.seekTo(startAt, true); | |
| YTPlayer.checkForStartAt = setInterval(function() { | |
| jQuery(YTPlayer).YTPMute(); | |
| var canPlayVideo = YTPlayer.player.getVideoLoadedFraction() >= startAt / YTPlayer.player.getDuration(); | |
| if (YTPlayer.player.getDuration() > 0 && YTPlayer.player.getCurrentTime() >= startAt && canPlayVideo) { | |
| //YTPlayer.player.playVideo(); | |
| //console.timeEnd( "checkforStart" ); | |
| clearInterval(YTPlayer.checkForStartAt); | |
| if (typeof YTPlayer.opt.onReady == "function") | |
| YTPlayer.opt.onReady(YTPlayer); | |
| YTPlayer.isReady = true; | |
| var YTPready = jQuery.Event("YTPReady"); | |
| YTPready.time = YTPlayer.currentTime; | |
| jQuery(YTPlayer).trigger(YTPready); | |
| YTPlayer.preventTrigger = true; | |
| YTPlayer.state = 2; | |
| jQuery(YTPlayer).YTPPause(); | |
| if (!YTPlayer.opt.mute) jQuery(YTPlayer).YTPUnmute(); | |
| YTPlayer.canTrigger = true; | |
| if (YTPlayer.opt.autoPlay) { | |
| var YTPStart = jQuery.Event("YTPStart"); | |
| YTPStart.time = YTPlayer.currentTime; | |
| jQuery(YTPlayer).trigger(YTPStart); | |
| $YTPlayer.css("background-image", "none"); | |
| jQuery(YTPlayer.playerEl).CSSAnimate({ | |
| opacity: 1 | |
| }, 1000); | |
| $YTPlayer.YTPPlay(); | |
| YTPlayer.wrapper.CSSAnimate({ | |
| opacity: YTPlayer.isAlone ? 1 : YTPlayer.opt.opacity | |
| }, 1000); | |
| /* Fix for Safari freeze */ | |
| if (jQuery.browser.safari) { | |
| YTPlayer.safariPlay = setInterval(function() { | |
| if (YTPlayer.state != 1) | |
| $YTPlayer.YTPPlay(); | |
| else | |
| clearInterval(YTPlayer.safariPlay) | |
| }, 10) | |
| } | |
| $YTPlayer.on("YTPReady", function() { | |
| $YTPlayer.YTPPlay(); | |
| }); | |
| } else { | |
| //$YTPlayer.YTPPause(); | |
| YTPlayer.player.pauseVideo(); | |
| if (!YTPlayer.isPlayer) { | |
| jQuery(YTPlayer.playerEl).CSSAnimate({ | |
| opacity: 1 | |
| }, 500); | |
| YTPlayer.wrapper.CSSAnimate({ | |
| opacity: YTPlayer.isAlone ? 1 : YTPlayer.opt.opacity | |
| }, 500); | |
| } | |
| if (YTPlayer.controlBar.length) | |
| YTPlayer.controlBar.find(".mb_YTPPlaypause").html(jQuery.mbYTPlayer.controls.play); | |
| } | |
| if (YTPlayer.isPlayer && !YTPlayer.opt.autoPlay && (YTPlayer.loading && YTPlayer.loading.length)) { | |
| YTPlayer.loading.html("Ready"); | |
| setTimeout(function() { | |
| YTPlayer.loading.fadeOut(); | |
| }, 100) | |
| } | |
| if (YTPlayer.controlBar && YTPlayer.controlBar.length) | |
| YTPlayer.controlBar.slideDown(1000); | |
| } else if (jQuery.browser.safari) { | |
| YTPlayer.player.playVideo(); | |
| if (startAt >= 0) YTPlayer.player.seekTo(startAt, true); | |
| } | |
| }, 1); | |
| }, | |
| /** | |
| * | |
| * @param align | |
| */ | |
| setAlign: function(align) { | |
| var $YTplayer = this; | |
| $YTplayer.optimizeDisplay(align); | |
| }, | |
| /** | |
| * | |
| * @param align | |
| */ | |
| getAlign: function() { | |
| var YTPlayer = this.get(0); | |
| return YTPlayer.opt.align; | |
| }, | |
| /** | |
| * | |
| * @param s | |
| * @returns {string} | |
| */ | |
| formatTime: function(s) { | |
| var min = Math.floor(s / 60); | |
| var sec = Math.floor(s - (60 * min)); | |
| return (min <= 9 ? "0" + min : min) + " : " + (sec <= 9 ? "0" + sec : sec); | |
| } | |
| }; | |
| /** | |
| * | |
| * @param align | |
| * can be center, top, bottom, right, left; (default is center,center) | |
| */ | |
| jQuery.fn.optimizeDisplay = function(align) { | |
| var YTPlayer = this.get(0); | |
| var playerBox = jQuery(YTPlayer.playerEl); | |
| var vid = {}; | |
| YTPlayer.opt.align = align || YTPlayer.opt.align; | |
| YTPlayer.opt.align = typeof YTPlayer.opt.align != "undefined " ? YTPlayer.opt.align : "center,center"; | |
| var YTPAlign = YTPlayer.opt.align.split(","); | |
| //data.optimizeDisplay = YTPlayer.isPlayer ? false : data.optimizeDisplay; | |
| if (YTPlayer.opt.optimizeDisplay) { | |
| var win = {}; | |
| var el = YTPlayer.wrapper; | |
| win.width = el.outerWidth(); | |
| win.height = el.outerHeight(); | |
| vid.width = win.width + 100; | |
| vid.height = YTPlayer.opt.ratio == "16/9" ? Math.ceil(vid.width * (9 / 16)) : Math.ceil(vid.width * (3 / 4)); | |
| vid.marginTop = -((vid.height - win.height) / 2); | |
| vid.marginLeft = 0; | |
| var lowest = vid.height < win.height; | |
| if (lowest) { | |
| vid.height = win.height; | |
| vid.width = YTPlayer.opt.ratio == "16/9" ? Math.floor(win.height * (16 / 9)) : Math.floor(win.height * (4 / 3)); | |
| vid.marginTop = 0; | |
| vid.marginLeft = -((vid.width - win.width) / 2); | |
| } | |
| for (var a in YTPAlign) { | |
| //var al = YTPAlign[ a ].trim(); | |
| var al = YTPAlign[a].replace(/ /g, ""); | |
| switch (al) { | |
| case "top": | |
| vid.marginTop = lowest ? -((vid.height - win.height) / 2) : 0; | |
| break; | |
| case "bottom": | |
| vid.marginTop = lowest ? 0 : -(vid.height - win.height); | |
| break; | |
| case "left": | |
| vid.marginLeft = 0; | |
| break; | |
| case "right": | |
| vid.marginLeft = lowest ? -(vid.width - win.width) : 0; | |
| break; | |
| default: | |
| break; | |
| } | |
| } | |
| } else { | |
| vid.width = "100%"; | |
| vid.height = "100%"; | |
| vid.marginTop = 0; | |
| vid.marginLeft = 0; | |
| } | |
| playerBox.css({ | |
| width: vid.width, | |
| height: vid.height, | |
| marginTop: vid.marginTop, | |
| marginLeft: vid.marginLeft | |
| }); | |
| }; | |
| /** | |
| * | |
| * @param arr | |
| * @returns {Array|string|Blob|*} | |
| * | |
| */ | |
| jQuery.shuffle = function(arr) { | |
| var newArray = arr.slice(); | |
| var len = newArray.length; | |
| var i = len; | |
| while (i--) { | |
| var p = parseInt(Math.random() * len); | |
| var t = newArray[i]; | |
| newArray[i] = newArray[p]; | |
| newArray[p] = t; | |
| } | |
| return newArray; | |
| }; | |
| jQuery.fn.unselectable = function() { | |
| return this.each(function() { | |
| jQuery(this).css({ | |
| "-moz-user-select": "none", | |
| "-webkit-user-select": "none", | |
| "user-select": "none" | |
| }).attr("unselectable", "on"); | |
| }); | |
| }; | |
| /* Exposed public method */ | |
| jQuery.fn.YTPlayer = jQuery.mbYTPlayer.buildPlayer; | |
| jQuery.fn.YTPGetPlayer = jQuery.mbYTPlayer.getPlayer; | |
| jQuery.fn.YTPGetVideoID = jQuery.mbYTPlayer.getVideoID; | |
| jQuery.fn.YTPChangeMovie = jQuery.mbYTPlayer.changeMovie; | |
| jQuery.fn.YTPPlayerDestroy = jQuery.mbYTPlayer.playerDestroy; | |
| jQuery.fn.YTPPlay = jQuery.mbYTPlayer.play; | |
| jQuery.fn.YTPTogglePlay = jQuery.mbYTPlayer.togglePlay; | |
| jQuery.fn.YTPStop = jQuery.mbYTPlayer.stop; | |
| jQuery.fn.YTPPause = jQuery.mbYTPlayer.pause; | |
| jQuery.fn.YTPSeekTo = jQuery.mbYTPlayer.seekTo; | |
| jQuery.fn.YTPlaylist = jQuery.mbYTPlayer.playlist; | |
| jQuery.fn.YTPPlayNext = jQuery.mbYTPlayer.playNext; | |
| jQuery.fn.YTPPlayPrev = jQuery.mbYTPlayer.playPrev; | |
| jQuery.fn.YTPPlayIndex = jQuery.mbYTPlayer.playIndex; | |
| jQuery.fn.YTPMute = jQuery.mbYTPlayer.mute; | |
| jQuery.fn.YTPUnmute = jQuery.mbYTPlayer.unmute; | |
| jQuery.fn.YTPToggleVolume = jQuery.mbYTPlayer.toggleVolume; | |
| jQuery.fn.YTPSetVolume = jQuery.mbYTPlayer.setVolume; | |
| jQuery.fn.YTPGetVideoData = jQuery.mbYTPlayer.getVideoData; | |
| jQuery.fn.YTPFullscreen = jQuery.mbYTPlayer.fullscreen; | |
| jQuery.fn.YTPToggleLoops = jQuery.mbYTPlayer.toggleLoops; | |
| jQuery.fn.YTPSetVideoQuality = jQuery.mbYTPlayer.setVideoQuality; | |
| jQuery.fn.YTPManageProgress = jQuery.mbYTPlayer.manageProgress; | |
| jQuery.fn.YTPApplyFilter = jQuery.mbYTPlayer.applyFilter; | |
| jQuery.fn.YTPApplyFilters = jQuery.mbYTPlayer.applyFilters; | |
| jQuery.fn.YTPToggleFilter = jQuery.mbYTPlayer.toggleFilter; | |
| jQuery.fn.YTPToggleFilters = jQuery.mbYTPlayer.toggleFilters; | |
| jQuery.fn.YTPRemoveFilter = jQuery.mbYTPlayer.removeFilter; | |
| jQuery.fn.YTPDisableFilters = jQuery.mbYTPlayer.disableFilters; | |
| jQuery.fn.YTPEnableFilters = jQuery.mbYTPlayer.enableFilters; | |
| jQuery.fn.YTPGetFilters = jQuery.mbYTPlayer.getFilters; | |
| jQuery.fn.YTPGetTime = jQuery.mbYTPlayer.getTime; | |
| jQuery.fn.YTPGetTotalTime = jQuery.mbYTPlayer.getTotalTime; | |
| jQuery.fn.YTPAddMask = jQuery.mbYTPlayer.addMask; | |
| jQuery.fn.YTPRemoveMask = jQuery.mbYTPlayer.removeMask; | |
| jQuery.fn.YTPToggleMask = jQuery.mbYTPlayer.toggleMask; | |
| jQuery.fn.YTPSetAlign = jQuery.mbYTPlayer.setAlign; | |
| jQuery.fn.YTPGetAlign = jQuery.mbYTPlayer.getAlign; | |
| /** | |
| * | |
| * @deprecated | |
| * todo: Above methods will be removed with version 3.5.0 | |
| * | |
| **/ | |
| jQuery.fn.mb_YTPlayer = jQuery.mbYTPlayer.buildPlayer; | |
| jQuery.fn.playNext = jQuery.mbYTPlayer.playNext; | |
| jQuery.fn.playPrev = jQuery.mbYTPlayer.playPrev; | |
| jQuery.fn.changeMovie = jQuery.mbYTPlayer.changeMovie; | |
| jQuery.fn.getVideoID = jQuery.mbYTPlayer.getVideoID; | |
| jQuery.fn.getPlayer = jQuery.mbYTPlayer.getPlayer; | |
| jQuery.fn.playerDestroy = jQuery.mbYTPlayer.playerDestroy; | |
| jQuery.fn.fullscreen = jQuery.mbYTPlayer.fullscreen; | |
| jQuery.fn.buildYTPControls = jQuery.mbYTPlayer.buildControls; | |
| jQuery.fn.playYTP = jQuery.mbYTPlayer.play; | |
| jQuery.fn.toggleLoops = jQuery.mbYTPlayer.toggleLoops; | |
| jQuery.fn.stopYTP = jQuery.mbYTPlayer.stop; | |
| jQuery.fn.pauseYTP = jQuery.mbYTPlayer.pause; | |
| jQuery.fn.seekToYTP = jQuery.mbYTPlayer.seekTo; | |
| jQuery.fn.muteYTPVolume = jQuery.mbYTPlayer.mute; | |
| jQuery.fn.unmuteYTPVolume = jQuery.mbYTPlayer.unmute; | |
| jQuery.fn.setYTPVolume = jQuery.mbYTPlayer.setVolume; | |
| jQuery.fn.setVideoQuality = jQuery.mbYTPlayer.setVideoQuality; | |
| jQuery.fn.manageYTPProgress = jQuery.mbYTPlayer.manageProgress; | |
| jQuery.fn.YTPGetDataFromFeed = jQuery.mbYTPlayer.getVideoData; | |
| })(jQuery, ytp);; | |
| /* | |
| * ****************************************************************************** | |
| * jquery.mb.components | |
| * file: jquery.mb.CSSAnimate.min.js | |
| * | |
| * Copyright (c) 2001-2014. Matteo Bicocchi (Pupunzi); | |
| * Open lab srl, Firenze - Italy | |
| * email: matteo@open-lab.com | |
| * site: http://pupunzi.com | |
| * blog: http://pupunzi.open-lab.com | |
| * http://open-lab.com | |
| * | |
| * Licences: MIT, GPL | |
| * http://www.opensource.org/licenses/mit-license.php | |
| * http://www.gnu.org/licenses/gpl.html | |
| * | |
| * last modified: 26/03/14 21.40 | |
| * ***************************************************************************** | |
| */ | |
| window.uncamel = function (e) { | |
| return e.replace(/([A-Z])/g, function(e) { | |
| return "-" + e.toLowerCase() | |
| }) | |
| } | |
| window.setUnit = function (e, t) { | |
| return "string" != typeof e || e.match(/^[\-0-9\.]+jQuery/) ? "" + e + t : e | |
| } | |
| window.setFilter = function (e, t, r) { | |
| var i = uncamel(t), | |
| n = jQuery.browser.mozilla ? "" : jQuery.CSS.sfx; | |
| e[n + "filter"] = e[n + "filter"] || "", r = setUnit(r > jQuery.CSS.filters[t].max ? jQuery.CSS.filters[t].max : r, jQuery.CSS.filters[t].unit), e[n + "filter"] += i + "(" + r + ") ", delete e[t] | |
| } | |
| jQuery.support.CSStransition = function() { | |
| var e = document.body || document.documentElement, | |
| t = e.style; | |
| return void 0 !== t.transition || void 0 !== t.WebkitTransition || void 0 !== t.MozTransition || void 0 !== t.MsTransition || void 0 !== t.OTransition | |
| }(), jQuery.CSS = { | |
| name: "mb.CSSAnimate", | |
| author: "Matteo Bicocchi", | |
| version: "2.0.0", | |
| transitionEnd: "transitionEnd", | |
| sfx: "", | |
| filters: { | |
| blur: { | |
| min: 0, | |
| max: 100, | |
| unit: "px" | |
| }, | |
| brightness: { | |
| min: 0, | |
| max: 400, | |
| unit: "%" | |
| }, | |
| contrast: { | |
| min: 0, | |
| max: 400, | |
| unit: "%" | |
| }, | |
| grayscale: { | |
| min: 0, | |
| max: 100, | |
| unit: "%" | |
| }, | |
| hueRotate: { | |
| min: 0, | |
| max: 360, | |
| unit: "deg" | |
| }, | |
| invert: { | |
| min: 0, | |
| max: 100, | |
| unit: "%" | |
| }, | |
| saturate: { | |
| min: 0, | |
| max: 400, | |
| unit: "%" | |
| }, | |
| sepia: { | |
| min: 0, | |
| max: 100, | |
| unit: "%" | |
| } | |
| }, | |
| normalizeCss: function(e) { | |
| var t = jQuery.extend(!0, {}, e); | |
| jQuery.browser.webkit || jQuery.browser.opera ? jQuery.CSS.sfx = "-webkit-" : jQuery.browser.mozilla ? jQuery.CSS.sfx = "-moz-" : jQuery.browser.msie && (jQuery.CSS.sfx = "-ms-"); | |
| for (var r in t) { | |
| "transform" === r && (t[jQuery.CSS.sfx + "transform"] = t[r], delete t[r]), "transform-origin" === r && (t[jQuery.CSS.sfx + "transform-origin"] = e[r], delete t[r]), "filter" !== r || jQuery.browser.mozilla || (t[jQuery.CSS.sfx + "filter"] = e[r], delete t[r]), "blur" === r && setFilter(t, "blur", e[r]), "brightness" === r && setFilter(t, "brightness", e[r]), "contrast" === r && setFilter(t, "contrast", e[r]), "grayscale" === r && setFilter(t, "grayscale", e[r]), "hueRotate" === r && setFilter(t, "hueRotate", e[r]), "invert" === r && setFilter(t, "invert", e[r]), "saturate" === r && setFilter(t, "saturate", e[r]), "sepia" === r && setFilter(t, "sepia", e[r]); | |
| var i = ""; | |
| "x" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " translateX(" + setUnit(e[r], "px") + ")", delete t[r]), "y" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " translateY(" + setUnit(e[r], "px") + ")", delete t[r]), "z" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " translateZ(" + setUnit(e[r], "px") + ")", delete t[r]), "rotate" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " rotate(" + setUnit(e[r], "deg") + ")", delete t[r]), "rotateX" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " rotateX(" + setUnit(e[r], "deg") + ")", delete t[r]), "rotateY" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " rotateY(" + setUnit(e[r], "deg") + ")", delete t[r]), "rotateZ" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " rotateZ(" + setUnit(e[r], "deg") + ")", delete t[r]), "scale" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " scale(" + setUnit(e[r], "") + ")", delete t[r]), "scaleX" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " scaleX(" + setUnit(e[r], "") + ")", delete t[r]), "scaleY" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " scaleY(" + setUnit(e[r], "") + ")", delete t[r]), "scaleZ" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " scaleZ(" + setUnit(e[r], "") + ")", delete t[r]), "skew" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " skew(" + setUnit(e[r], "deg") + ")", delete t[r]), "skewX" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " skewX(" + setUnit(e[r], "deg") + ")", delete t[r]), "skewY" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " skewY(" + setUnit(e[r], "deg") + ")", delete t[r]), "perspective" === r && (i = jQuery.CSS.sfx + "transform", t[i] = t[i] || "", t[i] += " perspective(" + setUnit(e[r], "px") + ")", delete t[r]) | |
| } | |
| return t | |
| }, | |
| getProp: function(e) { | |
| var t = []; | |
| for (var r in e) t.indexOf(r) < 0 && t.push(uncamel(r)); | |
| return t.join(",") | |
| }, | |
| animate: function(e, t, r, i, n) { | |
| return this.each(function() { | |
| function s() { | |
| u.called = !0, u.CSSAIsRunning = !1, a.off(jQuery.CSS.transitionEnd + "." + u.id), clearTimeout(u.timeout), a.css(jQuery.CSS.sfx + "transition", ""), "function" == typeof n && n.apply(u), "function" == typeof u.CSSqueue && (u.CSSqueue(), u.CSSqueue = null) | |
| } | |
| var u = this, | |
| a = jQuery(this); | |
| u.id = u.id || "CSSA_" + (new Date).getTime(); | |
| var o = o || { | |
| type: "noEvent" | |
| }; | |
| if (u.CSSAIsRunning && u.eventType == o.type && !jQuery.browser.msie && jQuery.browser.version <= 9) return void(u.CSSqueue = function() { | |
| a.CSSAnimate(e, t, r, i, n) | |
| }); | |
| if (u.CSSqueue = null, u.eventType = o.type, 0 !== a.length && e) { | |
| if (e = jQuery.normalizeCss(e), u.CSSAIsRunning = !0, "function" == typeof t && (n = t, t = jQuery.fx.speeds._default), "function" == typeof r && (i = r, r = 0), "string" == typeof r && (n = r, r = 0), "function" == typeof i && (n = i, i = "cubic-bezier(0.65,0.03,0.36,0.72)"), "string" == typeof t) | |
| for (var f in jQuery.fx.speeds) { | |
| if (t == f) { | |
| t = jQuery.fx.speeds[f]; | |
| break | |
| } | |
| t = jQuery.fx.speeds._default | |
| } | |
| if (t || (t = jQuery.fx.speeds._default), "string" == typeof n && (i = n, n = null), !jQuery.support.CSStransition) { | |
| for (var c in e) { | |
| if ("transform" === c && delete e[c], "filter" === c && delete e[c], "transform-origin" === c && delete e[c], "auto" === e[c] && delete e[c], "x" === c) { | |
| var S = e[c], | |
| l = "left"; | |
| e[l] = S, delete e[c] | |
| } | |
| if ("y" === c) { | |
| var S = e[c], | |
| l = "top"; | |
| e[l] = S, delete e[c] | |
| }("-ms-transform" === c || "-ms-filter" === c) && delete e[c] | |
| } | |
| return void a.delay(r).animate(e, t, n) | |
| } | |
| var y = { | |
| "default": "ease", | |
| "in": "ease-in", | |
| out: "ease-out", | |
| "in-out": "ease-in-out", | |
| snap: "cubic-bezier(0,1,.5,1)", | |
| easeOutCubic: "cubic-bezier(.215,.61,.355,1)", | |
| easeInOutCubic: "cubic-bezier(.645,.045,.355,1)", | |
| easeInCirc: "cubic-bezier(.6,.04,.98,.335)", | |
| easeOutCirc: "cubic-bezier(.075,.82,.165,1)", | |
| easeInOutCirc: "cubic-bezier(.785,.135,.15,.86)", | |
| easeInExpo: "cubic-bezier(.95,.05,.795,.035)", | |
| easeOutExpo: "cubic-bezier(.19,1,.22,1)", | |
| easeInOutExpo: "cubic-bezier(1,0,0,1)", | |
| easeInQuad: "cubic-bezier(.55,.085,.68,.53)", | |
| easeOutQuad: "cubic-bezier(.25,.46,.45,.94)", | |
| easeInOutQuad: "cubic-bezier(.455,.03,.515,.955)", | |
| easeInQuart: "cubic-bezier(.895,.03,.685,.22)", | |
| easeOutQuart: "cubic-bezier(.165,.84,.44,1)", | |
| easeInOutQuart: "cubic-bezier(.77,0,.175,1)", | |
| easeInQuint: "cubic-bezier(.755,.05,.855,.06)", | |
| easeOutQuint: "cubic-bezier(.23,1,.32,1)", | |
| easeInOutQuint: "cubic-bezier(.86,0,.07,1)", | |
| easeInSine: "cubic-bezier(.47,0,.745,.715)", | |
| easeOutSine: "cubic-bezier(.39,.575,.565,1)", | |
| easeInOutSine: "cubic-bezier(.445,.05,.55,.95)", | |
| easeInBack: "cubic-bezier(.6,-.28,.735,.045)", | |
| easeOutBack: "cubic-bezier(.175, .885,.32,1.275)", | |
| easeInOutBack: "cubic-bezier(.68,-.55,.265,1.55)" | |
| }; | |
| y[i] && (i = y[i]), a.off(jQuery.CSS.transitionEnd + "." + u.id); | |
| var m = jQuery.CSS.getProp(e), | |
| d = {}; | |
| jQuery.extend(d, e), d[jQuery.CSS.sfx + "transition-property"] = m, d[jQuery.CSS.sfx + "transition-duration"] = t + "ms", d[jQuery.CSS.sfx + "transition-delay"] = r + "ms", d[jQuery.CSS.sfx + "transition-timing-function"] = i, setTimeout(function() { | |
| a.one(jQuery.CSS.transitionEnd + "." + u.id, s), a.css(d) | |
| }, 1), u.timeout = setTimeout(function() { | |
| return u.called || !n ? (u.called = !1, void(u.CSSAIsRunning = !1)) : (a.css(jQuery.CSS.sfx + "transition", ""), n.apply(u), u.CSSAIsRunning = !1, void("function" == typeof u.CSSqueue && (u.CSSqueue(), u.CSSqueue = null))) | |
| }, t + r + 10) | |
| } | |
| }) | |
| } | |
| }, jQuery.fn.CSSAnimate = jQuery.CSS.animate, jQuery.normalizeCss = jQuery.CSS.normalizeCss, jQuery.fn.css3 = function(e) { | |
| return this.each(function() { | |
| var t = jQuery(this), | |
| r = jQuery.normalizeCss(e); | |
| t.css(r) | |
| }) | |
| };; | |
| /* | |
| * ****************************************************************************** | |
| * jquery.mb.components | |
| * file: jquery.mb.browser.min.js | |
| * | |
| * Copyright (c) 2001-2014. Matteo Bicocchi (Pupunzi); | |
| * Open lab srl, Firenze - Italy | |
| * email: matteo@open-lab.com | |
| * site: http://pupunzi.com | |
| * blog: http://pupunzi.open-lab.com | |
| * http://open-lab.com | |
| * | |
| * Licences: MIT, GPL | |
| * http://www.opensource.org/licenses/mit-license.php | |
| * http://www.gnu.org/licenses/gpl.html | |
| * | |
| * last modified: 26/03/14 21.43 | |
| * ***************************************************************************** | |
| */ | |
| window.nAgt = navigator.userAgent; | |
| if (!jQuery.browser) { | |
| jQuery.browser = {}, jQuery.browser.mozilla = !1, jQuery.browser.webkit = !1, jQuery.browser.opera = !1, jQuery.browser.safari = !1, jQuery.browser.chrome = !1, jQuery.browser.androidStock = !1, jQuery.browser.msie = !1, jQuery.browser.ua = nAgt, jQuery.browser.name = navigator.appName, jQuery.browser.fullVersion = "" + parseFloat(navigator.appVersion), jQuery.browser.majorVersion = parseInt(navigator.appVersion, 10); | |
| var nameOffset, verOffset, ix; | |
| if (-1 != (verOffset = nAgt.indexOf("Opera"))) jQuery.browser.opera = !0, jQuery.browser.name = "Opera", jQuery.browser.fullVersion = nAgt.substring(verOffset + 6), -1 != (verOffset = nAgt.indexOf("Version")) && (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8)); | |
| else if (-1 != (verOffset = nAgt.indexOf("OPR"))) jQuery.browser.opera = !0, jQuery.browser.name = "Opera", jQuery.browser.fullVersion = nAgt.substring(verOffset + 4); | |
| else if (-1 != (verOffset = nAgt.indexOf("MSIE"))) jQuery.browser.msie = !0, jQuery.browser.name = "Microsoft Internet Explorer", jQuery.browser.fullVersion = nAgt.substring(verOffset + 5); | |
| else if (-1 != nAgt.indexOf("Trident") || -1 != nAgt.indexOf("Edge")) { | |
| jQuery.browser.msie = !0, jQuery.browser.name = "Microsoft Internet Explorer"; | |
| var start = nAgt.indexOf("rv:") + 3, | |
| end = start + 4; | |
| jQuery.browser.fullVersion = nAgt.substring(start, end) | |
| } else -1 != (verOffset = nAgt.indexOf("Chrome")) ? (jQuery.browser.webkit = !0, jQuery.browser.chrome = !0, jQuery.browser.name = "Chrome", jQuery.browser.fullVersion = nAgt.substring(verOffset + 7)) : nAgt.indexOf("mozilla/5.0") > -1 && nAgt.indexOf("android ") > -1 && nAgt.indexOf("applewebkit") > -1 && !(nAgt.indexOf("chrome") > -1) ? (verOffset = nAgt.indexOf("Chrome"), jQuery.browser.webkit = !0, jQuery.browser.androidStock = !0, jQuery.browser.name = "androidStock", jQuery.browser.fullVersion = nAgt.substring(verOffset + 7)) : -1 != (verOffset = nAgt.indexOf("Safari")) ? (jQuery.browser.webkit = !0, jQuery.browser.safari = !0, jQuery.browser.name = "Safari", jQuery.browser.fullVersion = nAgt.substring(verOffset + 7), -1 != (verOffset = nAgt.indexOf("Version")) && (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8))) : -1 != (verOffset = nAgt.indexOf("AppleWebkit")) ? (jQuery.browser.webkit = !0, jQuery.browser.safari = !0, jQuery.browser.name = "Safari", jQuery.browser.fullVersion = nAgt.substring(verOffset + 7), -1 != (verOffset = nAgt.indexOf("Version")) && (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8))) : -1 != (verOffset = nAgt.indexOf("Firefox")) ? (jQuery.browser.mozilla = !0, jQuery.browser.name = "Firefox", jQuery.browser.fullVersion = nAgt.substring(verOffset + 8)) : (nameOffset = nAgt.lastIndexOf(" ") + 1) < (verOffset = nAgt.lastIndexOf("/")) && (jQuery.browser.name = nAgt.substring(nameOffset, verOffset), jQuery.browser.fullVersion = nAgt.substring(verOffset + 1), jQuery.browser.name.toLowerCase() == jQuery.browser.name.toUpperCase() && (jQuery.browser.name = navigator.appName)); - 1 != (ix = jQuery.browser.fullVersion.indexOf(";")) && (jQuery.browser.fullVersion = jQuery.browser.fullVersion.substring(0, ix)), -1 != (ix = jQuery.browser.fullVersion.indexOf(" ")) && (jQuery.browser.fullVersion = jQuery.browser.fullVersion.substring(0, ix)), jQuery.browser.majorVersion = parseInt("" + jQuery.browser.fullVersion, 10), isNaN(jQuery.browser.majorVersion) && (jQuery.browser.fullVersion = "" + parseFloat(navigator.appVersion), jQuery.browser.majorVersion = parseInt(navigator.appVersion, 10)), jQuery.browser.version = jQuery.browser.majorVersion | |
| } | |
| jQuery.browser.android = /Android/i.test(nAgt), jQuery.browser.blackberry = /BlackBerry|BB|PlayBook/i.test(nAgt), jQuery.browser.ios = /iPhone|iPad|iPod|webOS/i.test(nAgt), jQuery.browser.operaMobile = /Opera Mini/i.test(nAgt), jQuery.browser.windowsMobile = /IEMobile|Windows Phone/i.test(nAgt), jQuery.browser.kindle = /Kindle|Silk/i.test(nAgt), jQuery.browser.mobile = jQuery.browser.android || jQuery.browser.blackberry || jQuery.browser.ios || jQuery.browser.windowsMobile || jQuery.browser.operaMobile || jQuery.browser.kindle, jQuery.isMobile = jQuery.browser.mobile, jQuery.isTablet = jQuery.browser.mobile && jQuery(window).width() > 765, jQuery.isAndroidDefault = jQuery.browser.android && !/chrome/i.test(nAgt);; | |
| /*___________________________________________________________________________________________________________________________________________________ | |
| _ jquery.mb.components _ | |
| _ _ | |
| _ file: jquery.mb.simpleSlider.min.js _ | |
| _ last modified: 16/05/15 23.45 _ | |
| _ _ | |
| _ Open Lab s.r.l., Florence - Italy _ | |
| _ _ | |
| _ email: matteo@open-lab.com _ | |
| _ site: http://pupunzi.com _ | |
| _ http://open-lab.com _ | |
| _ blog: http://pupunzi.open-lab.com _ | |
| _ Q&A: http://jquery.pupunzi.com _ | |
| _ _ | |
| _ Licences: MIT, GPL _ | |
| _ http://www.opensource.org/licenses/mit-license.php _ | |
| _ http://www.gnu.org/licenses/gpl.html _ | |
| _ _ | |
| _ Copyright (c) 2001-2015. Matteo Bicocchi (Pupunzi); _ | |
| ___________________________________________________________________________________________________________________________________________________*/ | |
| ! function(e) { | |
| var t = (/iphone|ipod|ipad|android|ie|blackberry|fennec/.test(navigator.userAgent.toLowerCase()), "ontouchstart" in window || window.navigator && window.navigator.msPointerEnabled && window.MSGesture || window.DocumentTouch && document instanceof DocumentTouch || !1); | |
| e.simpleSlider = { | |
| defaults: { | |
| initialval: 0, | |
| scale: 100, | |
| orientation: "h", | |
| readonly: !1, | |
| callback: !1 | |
| }, | |
| events: { | |
| start: t ? "touchstart" : "mousedown", | |
| end: t ? "touchend" : "mouseup", | |
| move: t ? "touchmove" : "mousemove" | |
| }, | |
| init: function(o) { | |
| return this.each(function() { | |
| var a = this, | |
| l = e(a); | |
| l.addClass("simpleSlider"), a.opt = {}, e.extend(a.opt, e.simpleSlider.defaults, o), e.extend(a.opt, l.data()); | |
| var i = "h" == a.opt.orientation ? "horizontal" : "vertical", | |
| n = e("<div/>").addClass("level").addClass(i); | |
| l.prepend(n), a.level = n, l.css({ | |
| cursor: "default" | |
| }), "auto" == a.opt.scale && (a.opt.scale = e(a).outerWidth()), l.updateSliderVal(), a.opt.readonly || (l.on(e.simpleSlider.events.start, function(e) { | |
| t && (e = e.changedTouches[0]), a.canSlide = !0, l.updateSliderVal(e), l.css({ | |
| cursor: "col-resize" | |
| }), e.preventDefault(), e.stopPropagation() | |
| }), e(document).on(e.simpleSlider.events.move, function(o) { | |
| t && (o = o.changedTouches[0]), a.canSlide && (e(document).css({ | |
| cursor: "default" | |
| }), l.updateSliderVal(o), o.preventDefault(), o.stopPropagation()) | |
| }).on(e.simpleSlider.events.end, function() { | |
| e(document).css({ | |
| cursor: "auto" | |
| }), a.canSlide = !1, l.css({ | |
| cursor: "auto" | |
| }) | |
| })) | |
| }) | |
| }, | |
| updateSliderVal: function(t) { | |
| function o(e, t) { | |
| return Math.floor(100 * e / t) | |
| } | |
| var a = this, | |
| l = a.get(0); | |
| if (l.opt) { | |
| l.opt.initialval = "number" == typeof l.opt.initialval ? l.opt.initialval : l.opt.initialval(l); | |
| var i = e(l).outerWidth(), | |
| n = e(l).outerHeight(); | |
| l.x = "object" == typeof t ? t.clientX + document.body.scrollLeft - a.offset().left : "number" == typeof t ? t * i / l.opt.scale : l.opt.initialval * i / l.opt.scale, l.y = "object" == typeof t ? t.clientY + document.body.scrollTop - a.offset().top : "number" == typeof t ? (l.opt.scale - l.opt.initialval - t) * n / l.opt.scale : l.opt.initialval * n / l.opt.scale, l.y = a.outerHeight() - l.y, l.scaleX = l.x * l.opt.scale / i, l.scaleY = l.y * l.opt.scale / n, l.outOfRangeX = l.scaleX > l.opt.scale ? l.scaleX - l.opt.scale : l.scaleX < 0 ? l.scaleX : 0, l.outOfRangeY = l.scaleY > l.opt.scale ? l.scaleY - l.opt.scale : l.scaleY < 0 ? l.scaleY : 0, l.outOfRange = "h" == l.opt.orientation ? l.outOfRangeX : l.outOfRangeY, "undefined" != typeof t ? l.value = "h" == l.opt.orientation ? l.x >= a.outerWidth() ? l.opt.scale : l.x <= 0 ? 0 : l.scaleX : l.y >= a.outerHeight() ? l.opt.scale : l.y <= 0 ? 0 : l.scaleY : l.value = "h" == l.opt.orientation ? l.scaleX : l.scaleY, "h" == l.opt.orientation ? l.level.width(o(l.x, i) + "%") : l.level.height(o(l.y, n)), "function" == typeof l.opt.callback && l.opt.callback(l) | |
| } | |
| } | |
| }, e.fn.simpleSlider = e.simpleSlider.init, e.fn.updateSliderVal = e.simpleSlider.updateSliderVal | |
| }(jQuery);; | |
| /*___________________________________________________________________________________________________________________________________________________ | |
| _ jquery.mb.components _ | |
| _ _ | |
| _ file: jquery.mb.storage.min.js _ | |
| _ last modified: 24/05/15 16.08 _ | |
| _ _ | |
| _ Open Lab s.r.l., Florence - Italy _ | |
| _ _ | |
| _ email: matteo@open-lab.com _ | |
| _ site: http://pupunzi.com _ | |
| _ http://open-lab.com _ | |
| _ blog: http://pupunzi.open-lab.com _ | |
| _ Q&A: http://jquery.pupunzi.com _ | |
| _ _ | |
| _ Licences: MIT, GPL _ | |
| _ http://www.opensource.org/licenses/mit-license.php _ | |
| _ http://www.gnu.org/licenses/gpl.html _ | |
| _ _ | |
| _ Copyright (c) 2001-2015. Matteo Bicocchi (Pupunzi); _ | |
| ___________________________________________________________________________________________________________________________________________________*/ | |
| ! function(a) { | |
| a.mbCookie = { | |
| set: function(a, b, c, d) { | |
| b = JSON.stringify(b), c || (c = 7), d = d ? "; domain=" + d : ""; | |
| var f, e = new Date; | |
| e.setTime(e.getTime() + 1e3 * 60 * 60 * 24 * c), f = "; expires=" + e.toGMTString(), document.cookie = a + "=" + b + f + "; path=/" + d | |
| }, | |
| get: function(a) { | |
| for (var b = a + "=", c = document.cookie.split(";"), d = 0; d < c.length; d++) { | |
| for (var e = c[d]; | |
| " " == e.charAt(0);) e = e.substring(1, e.length); | |
| if (0 == e.indexOf(b)) return JSON.parse(e.substring(b.length, e.length)) | |
| } | |
| return null | |
| }, | |
| remove: function(b) { | |
| a.mbCookie.set(b, "", -1) | |
| } | |
| }, a.mbStorage = { | |
| set: function(a, b) { | |
| b = JSON.stringify(b), localStorage.setItem(a, b) | |
| }, | |
| get: function(a) { | |
| return localStorage[a] ? JSON.parse(localStorage[a]) : null | |
| }, | |
| remove: function(a) { | |
| a ? localStorage.removeItem(a) : localStorage.clear() | |
| } | |
| } | |
| }(jQuery); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment