diff --git a/www/assets/js/data.js b/www/assets/js/data.js index b8797caf..614ee06c 100644 --- a/www/assets/js/data.js +++ b/www/assets/js/data.js @@ -103,6 +103,7 @@ var USEROPTS = { modhat : getOrDefault("modhat", false), blink_title : getOrDefault("blink_title", false), sync_accuracy : getOrDefault("sync_accuracy", 2), + wmode_transparent : getOrDefault("wmode_transparent", true), chatbtn : getOrDefault("chatbtn", false), altsocket : getOrDefault("altsocket", false), joinmessage : getOrDefault("joinmessage", true), diff --git a/www/assets/js/player.js b/www/assets/js/player.js index 7a58acc5..2a951963 100644 --- a/www/assets/js/player.js +++ b/www/assets/js/player.js @@ -22,80 +22,84 @@ function removeOld(replace) { var YouTubePlayer = function (data) { var self = this; waitUntilDefined(window, "YT", function () { - removeOld(); - self.paused = false; - self.videoId = data.id; - self.player = new YT.Player("ytapiplayer", { - height: VHEIGHT, - width: VWIDTH, - videoId: data.id, - playerVars: { - autohide: 1, // Autohide controls - autoplay: 1, // Autoplay video - controls: 1, // Show controls - iv_load_policy: 3, // No annotations - modestbranding: 1, // No logo - rel: 0 // No related videos - }, - events: { - onReady: function () { + waitUntilDefined(YT, "Player", function () { + removeOld(); + self.paused = false; + self.videoId = data.id; + var wmode = USEROPTS.wmode_transparent ? "transparent" : "opaque"; + self.player = new YT.Player("ytapiplayer", { + height: VHEIGHT, + width: VWIDTH, + videoId: data.id, + playerVars: { + autohide: 1, // Autohide controls + autoplay: 1, // Autoplay video + controls: 1, // Show controls + iv_load_policy: 3, // No annotations + modestbranding: 1, // No logo + rel: 0, // No related videos + wmode: wmode }, - onStateChange: function (ev) { - if(PLAYER.paused && ev.data != YT.PlayerState.PAUSED || - !PLAYER.paused && ev.data == YT.PlayerState.PAUSED) { - self.paused = (ev.data == YT.PlayerState.PAUSED); - if(CLIENT.leader) - sendVideoUpdate(); - } - else { - self.paused = (ev.data == YT.PlayerState.PAUSED); - } - if(CLIENT.leader && ev.data == YT.PlayerState.ENDED) { - socket.emit("playNext"); + events: { + onReady: function () { + }, + onStateChange: function (ev) { + if(PLAYER.paused && ev.data != YT.PlayerState.PAUSED || + !PLAYER.paused && ev.data == YT.PlayerState.PAUSED) { + self.paused = (ev.data == YT.PlayerState.PAUSED); + if(CLIENT.leader) + sendVideoUpdate(); + } + else { + self.paused = (ev.data == YT.PlayerState.PAUSED); + } + if(CLIENT.leader && ev.data == YT.PlayerState.ENDED) { + socket.emit("playNext"); + } } } - } + }); + $("#ytapiplayer").css("border", "none"); }); - $("#ytapiplayer").css("border", "none"); - - self.load = function (data) { - if(self.player.loadVideoById) { - self.player.loadVideoById(data.id, data.currentTime); - if(VIDEOQUALITY) - self.player.setPlaybackQuality(VIDEOQUALITY); - self.videoId = data.id; - } - }; - - self.pause = function() { - if(self.player.pauseVideo) - self.player.pauseVideo(); - }; - - self.play = function() { - if(self.player.playVideo) - self.player.playVideo(); - }; - - self.isPaused = function(callback) { - if(self.player.getPlayerState) { - var state = self.player.getPlayerState(); - callback(state != YT.PlayerState.PLAYING); - } else { - callback(false); - } - }; - - self.getTime = function(callback) { - if(self.player.getCurrentTime) - callback(self.player.getCurrentTime()); - }; - - self.seek = function(time) { - if(self.player.seekTo) - self.player.seekTo(time, true); - }; }); + + self.load = function (data) { + if(self.player && self.player.loadVideoById) { + self.player.loadVideoById(data.id, data.currentTime); + if(VIDEOQUALITY) + self.player.setPlaybackQuality(VIDEOQUALITY); + self.videoId = data.id; + } + }; + + self.pause = function () { + if(self.player && self.player.pauseVideo) + self.player.pauseVideo(); + }; + + self.play = function () { + if(self.player && self.player.playVideo) + self.player.playVideo(); + }; + + self.isPaused = function (callback) { + if(self.player && self.player.getPlayerState) { + var state = self.player.getPlayerState(); + callback(state != YT.PlayerState.PLAYING); + } else { + callback(false); + } + }; + + self.getTime = function (callback) { + if(self.player && self.player.getCurrentTime) + callback(self.player.getCurrentTime()); + }; + + self.seek = function (time) { + if(self.player && self.player.seekTo) + self.player.seekTo(time, true); + }; }; var VimeoPlayer = function (data) { @@ -111,6 +115,8 @@ var VimeoPlayer = function (data) { iframe.attr("webkitAllowFullScreen", ""); iframe.attr("mozallowfullscreen", ""); iframe.attr("allowFullScreen", ""); + if(USEROPTS.wmode_transparent) + iframe.attr("wmode", "transparent"); iframe.css("border", "none"); $f(iframe[0]).addEvent("ready", function () { @@ -195,7 +201,8 @@ var VimeoFlashPlayer = function (data) { }; var params = { allowfullscreen: true, - allowScriptAccess: "always" + allowScriptAccess: "always", + wmode: USEROPTS.wmode_transparent ? "transparent" : undefined }; swfobject.embedSWF(url, "ytapiplayer", diff --git a/www/assets/js/util.js b/www/assets/js/util.js index 8c123d81..9b1179ba 100644 --- a/www/assets/js/util.js +++ b/www/assets/js/util.js @@ -451,6 +451,13 @@ function showOptionsMenu() { syncacc.val(USEROPTS.sync_accuracy); addOption("Synch Accuracy", syncacc); + var wmcontainer = $("