Author: andre
Date: 2010-04-08 23:11:33 +0200 (Thu, 08 Apr 2010)
New Revision: 41808

Modified:
   openimages/trunk/src/main/webapp/oiplayer/css/oiplayer.css
   openimages/trunk/src/main/webapp/oiplayer/js/jquery.oiplayer.js
Log:
rewrote fullscreen to make it work with players in elements absolutely 
positioned, this introduced a new bug with flowplayer which does not like to be 
placed in a different spot in the DOM allthough other elements have no issues 
with it, filed this as a bug at flowplayer.org 

Modified: openimages/trunk/src/main/webapp/oiplayer/css/oiplayer.css
===================================================================
--- openimages/trunk/src/main/webapp/oiplayer/css/oiplayer.css  2010-04-08 
13:35:34 UTC (rev 41807)
+++ openimages/trunk/src/main/webapp/oiplayer/css/oiplayer.css  2010-04-08 
21:11:33 UTC (rev 41808)
@@ -8,43 +8,50 @@
 div.oiplayer
 {
        position: relative;
-       /*height: 270px;*/  /* player 240 + controls 25 + margin 5 (set in 
jquery.oiplayer.js) */
+       margin: 0;
+       padding: 0;
 }
 
 div.oiplayer audio,
-div.oiplayer video
+div.oiplayer video,
+div.oiplayer object,
+div.oiplayer embed
 {
-       display: inline;
+       display: block;
        margin: 0;
        padding: 0;
 }
 
 div.oiplayer > div.player
 {
-       z-index: 9;
        position: absolute;
        top: 0;
        left: 0;
-       /*height: 240px;*/        /* needed for audio controls at bottom (set 
in jquery.oiplayer.js) */
+       margin: 0;
+       padding: 0;
+       z-index: 10;
+       background-color: #000;
+       /*height: 240px;*/
 }
 
 div.oiplayer > div.controls
 {
-       height: 25px;
-       margin: 0;
-       z-index: 19;
        position: absolute;
        bottom: 0;
        left: 0;
+       height: 25px;
+       z-index: 19;
+       margin: 0;
+       padding: 0;
 }
 
-div.oiplayer.audio > div.player > audio
+div.oiplayer > div.player > audio
 {
-       margin: 0;
-       padding: 0;
        position: absolute;
        bottom: 0;
        left: 0;
+       margin: 0;
+       padding: 0;
        width: 100%;        /* not sure about this */
 }
 
@@ -56,7 +63,7 @@
        z-index: 11;
        cursor: pointer;
 }
-div.oiplayer > img.preview {  }
+div.oiplayer > img.preview { }
 div.oiplayer > div.preview.video { background: url(images/preview_video.png) 
left top repeat; }
 div.oiplayer > div.preview.audio { background: url(images/preview_audio.png) 
left top repeat; }
 
@@ -103,7 +110,7 @@
 {
        background-image: url(images/controls-play.png);
        width: 21px;
-       margin-left: -3px;
+       margin-left: 2px;
        float: left;
 }
 
@@ -111,7 +118,7 @@
 {
        background-image: url(images/controls-pause.png);
        width: 21px;
-       margin-left: -3px; /* aligns to border */
+       margin-left: 2px;
        float: left;
 }
 
@@ -124,6 +131,7 @@
        line-height: 26px;
        color: #555;
        text-align: right;
+       font-weight: normal;
 }
 div.oiplayer ul.controls li.position
 {
@@ -136,14 +144,13 @@
        width: 36px;
 }
 
-
 div.oiplayer ul.controls li.sound a
 {
        float: right;
        background-image: url(images/controls-soundon.png);
        background-repeat: no-repeat;
        width: 23px;
-       margin-left: 5px;
+       margin: 0 5px;
 }
 
 div.oiplayer ul.controls li.sound.muted a
@@ -236,7 +243,7 @@
 /* dark (only possible with top really) */
 div.oiplayer div.controls.dark { background-image: 
url(images/controls-blackbg.png); }
 div.oiplayer div.controls.dark li.position,
-div.oiplayer div.controls.dark li.timeleft { color: #efefef; }
+div.oiplayer div.controls.dark li.timeleft { color: #fff; }
 
 div.oiplayer div.controls.dark a { background-position: 0 -50px; }
 div.oiplayer div.controls.dark a:hover { background-position: 0 0; }
@@ -252,38 +259,71 @@
 div.oiplayer div.controls.dark li.changed .ui-state-default,
 div.oiplayer div.controls.dark li.changed .ui-widget-content .ui-state-default 
{ background-position: left -75px; }
 
+div.oiplayer > div.controls.top ul.controls li.sound a, 
+div.oiplayer > div.controls.top ul.controls li.sound.muted a { margin-right: 
8px; }
 
-/* fullscreen */
-div.oiplayer.fullscreen
+/* ### fullscreen ### */
+div#oiplayer-fullscreen
 {
+       position: absolute;
+       top: 0;
+       left: 0;
+       z-index: 109;
        width: 100%;
        height: 100%;
+}
+
+div#oiplayer-fullscreen > div.overlay {
        position: absolute;
        top: 0;
        left: 0;
-       background-color: #fff;
-       z-index: 99;
+       z-index: 100;
+       width: 100%;
+       height: 800px;
+       /*background-color: #333;*/
+       background-image: url(images/controls-blackbg.png);
+       background-repeat: repeat;
 }
 
-div.oiplayer.fullscreen > img.preview { margin: 0 auto; }
-div.oiplayer.fullscreen > div.player { margin: 0 auto; }
-div.oiplayer.fullscreen > div.controls { margin: 0 auto; }
+/*
+div#oiplayer-fullscreen > div.oiplayer
+{
+       position: relative;
+       top: 0;
+       left: 0;
+}
+*/
 
-div.oiplayer.fullscreen ul.controls li.play a,
-div.oiplayer.fullscreen ul.controls li.pause a { margin-left: 0; }
+div#oiplayer-fullscreen > div.oiplayer > img.preview
+{
+       margin: 0 auto;
+       z-index: 121;
+}
+div#oiplayer-fullscreen > div.oiplayer > div.player
+{
+       margin: 0 auto;
+       z-index: 120;
+}
+div#oiplayer-fullscreen > div.oiplayer > div.controls
+{
+       margin: 0 auto;
+       z-index: 122;
+}
 
-div.oiplayer.fullscreen ul.controls li.sound a, 
-div.oiplayer.fullscreen ul.controls li.sound.muted a { margin-right: 3px; }
+/*
+div#oiplayer-fullscreen ul.controls li.play a,
+div#oiplayer-fullscreen ul.controls li.pause a { margin-left: 0; }
 
-div.oiplayer > div.controls.top ul.controls li.play a,
-div.oiplayer > div.controls.top ul.controls li.pause a { margin-left: 5px; }
+div#oiplayer-fullscreen ul.controls li.sound a, 
+div#oiplayer-fullscreen ul.controls li.sound.muted a { margin-right: 3px; }
+*/
 
-div.oiplayer > div.controls.top ul.controls li.sound a, 
-div.oiplayer > div.controls.top ul.controls li.sound.muted a { margin-right: 
8px; }
+div#oiplayer-fullscreen div.controls.top ul.controls li.play a,
+div#oiplayer-fullscreen div.controls.top ul.controls li.pause a { margin-left: 
5px; }
 
 
 
-/* inavailable / no compatible sources */
+/* ### inavailable / no compatible sources ### */
 div.oiplayer.video.inavailable { background: url(images/preview_video.png) 
left top repeat; }
 div.oiplayer.audio.inavailable { background: url(images/preview_audio.png) 
left top repeat; }
 div.oiplayer.inavailable div.player { display: none; }

Modified: openimages/trunk/src/main/webapp/oiplayer/js/jquery.oiplayer.js
===================================================================
--- openimages/trunk/src/main/webapp/oiplayer/js/jquery.oiplayer.js     
2010-04-08 13:35:34 UTC (rev 41807)
+++ openimages/trunk/src/main/webapp/oiplayer/js/jquery.oiplayer.js     
2010-04-08 21:11:33 UTC (rev 41808)
@@ -54,6 +54,7 @@
             $(mt).wrap('<div class="oiplayer"><div 
class="player"></div></div>');
             var div = $(mt).closest('div.oiplayer');
             var player = createPlayer(mt, sources, config);
+            player.div = div;
             $(div).addClass(player.type);
             if (player.myname.indexOf('cortado') > -1) {
                 $(div).find('div.player').empty();
@@ -70,17 +71,18 @@
             $(div).width(player.width).height(player.height);
             if (config.controls && player.url != undefined) {
                 $(div).append(createControls());
-                $(div).find('div.controls').width(player.width);
-                $(div).find('li.slider').width(player.width - 190);
+                player.controls = $(div).find('div.controls');
+                $(player.controls).width(player.width);
+                $(player.controls).find('li.slider').width(player.width - 190);
                 if (config.controls != true) {  // append classes
-                    $(div).find('div.controls').addClass(config.controls);
+                    $(player.controls).addClass(config.controls);
                     if (config.controls.indexOf('top') > -1) {
-                        $(div).find('div.controls').hide();
+                        $(player.controls).hide();
                     } else {
-                        $(div).height(player.height + 30);
+                        $(div).height( player.height + 
$(player.controls).height() );
                     }
                 } else {
-                    $(div).height(player.height + 30);
+                    $(div).height( player.height + $(player.controls).height() 
);
                 }
             }
             if (player.url == undefined) {  // no compatible sources to play
@@ -94,68 +96,67 @@
         
         /* html ready, bind controls */
         $.each(players, function(i, pl) {
-            var el = $.oiplayer.div(pl);
-            $(el).find('.preview').click(function(ev) {
+            $(pl.div).find('.preview').click(function(ev) {
                 ev.preventDefault();
                 start(pl);
             });
                 
             if (config.controls) {
-                var ctrls = $(el).find('ul.controls');
-                $(ctrls).find('li.play a').click(function(ev) {
+                $(pl.controls).find('li.play a').click(function(ev) {
                     ev.preventDefault();
                     if (pl.state == 'pause') {
                         pl.play();
-                        if ($(ctrls).find('li.pause').length == 0) {
-                            $(ctrls).find('li.play').addClass('pause');
+                        if ($(pl.controls).find('li.pause').length == 0) {
+                            $(pl.controls).find('li.play').addClass('pause');
                         }
                         $.oiplayer.follow(pl);
                     } else if (pl.state == 'play') {
                         pl.pause();
-                        $(ctrls).find('li.play').removeClass('pause');
+                        $(pl.controls).find('li.play').removeClass('pause');
                     } else {
                         start(pl);
                     }
                     //console.log("player state: " + pl.state);
                 });
 
-                $(ctrls).find('li.sound a').click(function(ev){
+                $(pl.controls).find('li.sound a').click(function(ev){
                     if (pl.state != 'init' && pl.state != 'ended') {
                         pl.mute();
-                        $(ctrls).find('li.sound').toggleClass('muted');
+                        $(pl.controls).find('li.sound').toggleClass('muted');
                     }
                 });
-                $(ctrls).find('li.screen a').click(function(ev){
+                $(pl.controls).find('li.screen a').click(function(ev){
                     ev.preventDefault();
-                    fullscreen(pl, el);
+                    $(ev.target).parent('div').css('border', '2px solid #c00');
+                    fullscreen(pl);
                 });
                 
                 if (pl.duration) {  // else no use
-                    $(ctrls).find("div.slider > div").slider({
+                    $(pl.controls).find("div.slider > div").slider({
                             animate: true,
                             range: 'min',
                             value: (pl.start ? pl.start : 0),
                             max: Math.round(pl.duration)
                     });
-                    $(ctrls).find("div.slider > div").bind('slide', 
function(ev, ui) {
+                    $(pl.controls).find("div.slider > div").bind('slide', 
function(ev, ui) {
                         pos(pl, ui.value);
                     });
-                    $(ctrls).find("div.slider > div").bind('slidechange', 
function(ev, ui) {
+                    $(pl.controls).find("div.slider > 
div").bind('slidechange', function(ev, ui) {
                         if (ev.originalEvent != undefined && 
ev.originalEvent.type == "mouseup") { 
                             pos(pl, ui.value);
                         }
                     });
-                    $(ctrls).find("li.slider").after('<li class="timeleft">-' 
+ $.oiplayer.totime(pl.duration) + '</li>');
+                    $(pl.controls).find("li.slider").after('<li 
class="timeleft">-' + $.oiplayer.totime(pl.duration) + '</li>');
                 }
 
-                /* show/hide */
-                if ($(el).find('div.controls').is('.top')) {
-                    $(el).hover(
+                // show/hide
+                if (config.controls.indexOf('top') > -1) {
+                    $(pl.div).hover(
                         function() { 
-                            $(el).find('div.controls').fadeIn();
+                            $(pl.controls).fadeIn();
                         },
                         function() {
-                            $(el).find('div.controls').fadeOut('slow');
+                            $(pl.controls).fadeOut('slow');
                         }
                     );
                 }
@@ -165,32 +166,30 @@
     
     function pos(player, pos) {
         player.seek(pos);
-        var ctrls = $( $.oiplayer.div(player) ).find('ul.controls');
-        $(ctrls).find('li.position').text( $.oiplayer.totime(pos) );
-        $(ctrls).find('li.timeleft').text('-' + 
$.oiplayer.totime(player.duration - pos) );
+        //var ctrls = $(player.div).find('ul.controls');
+        $(player.controls).find('li.position').text( $.oiplayer.totime(pos) );
+        $(player.controls).find('li.timeleft').text('-' + 
$.oiplayer.totime(player.duration - pos) );
         if (pos > 0) {
-            $(ctrls).find('li.slider').addClass("changed");
+            $(player.controls).find('li.slider').addClass("changed");
         } else {
-            $(ctrls).find('li.slider').removeClass("changed");
+            $(player.controls).find('li.slider').removeClass("changed");
         }
     }
 
     /* Mainly user interface stuff on first start of playing */
     function start(player) {
-        var div = $.oiplayer.div(player);
         if (player.type == 'video') {
-            $(div).find('.preview').hide();
+            $(player.div).find('.preview').hide();
         } else {
-            $(div).find('.preview').css("z-index", "1");
+            $(player.div).find('.preview').css("z-index", "1");
         }
 
         player.play();
         
         if (player.config.controls) {
-            var ctrls = $(div).find('ul.controls');
-            var timer = $(ctrls).find('li.position');
-            if ($(ctrls).find('li.pause').length == 0) {
-                $(ctrls).find('li.play').addClass('pause');
+            var timer = $(player.controls).find('li.position');
+            if ($(player.controls).find('li.pause').length == 0) {
+                $(player.controls).find('li.play').addClass('pause');
             }
             $.oiplayer.follow(player);
         }
@@ -198,61 +197,69 @@
     }
 
     function fullscreen(player) {
-        var div = $.oiplayer.div(player);
         if (typeof(player.owidth) == "undefined") {
             player.owidth = player.width;
             player.oheight = player.height;
         }
         var window_w = $(window).width();
         var window_h = $(window).height();
-        if (! $(div).find('div.controls').is('.top')) {
-            window_h = window_h - 30;
+        if (player.config.controls.indexOf('top') == -1) {
+            window_h = window_h - $(player.controls).height();   // available 
space
         }
         var multi_w = window_w / player.owidth;
         var multi_h = window_h / player.oheight;
         var half = 0;
         if (player.width != player.owidth) {
-            var h = player.oheight;
-            if (! $(div).find('div.controls').is('.top')) { h = h + 30; }
-            $(div).width(player.owidth).height(h);
             player.width = player.owidth;
             player.height = player.oheight;
         } else if (multi_h < multi_w) {
-            $(div).width('100%').height('100%');
             player.width = Math.round(player.owidth * multi_h);
             player.height = window_h;
             half = Math.round((window_w - player.width) / 2);
         } else {
-            $(div).width('100%').height('100%');
             player.width = window_w;
-            player.height = Math.round(player.oheight * multi_w);
+            player.height = Math.floor(player.oheight * multi_w);
         }
         
-        $(div).toggleClass('fullscreen');
+        if (player.origpos != null) {   // append them back to original div
+            $(player.origpos).append(player.div);
+            $('#oiplayer-fullscreen').remove();
+            $(player.div).unwrap();
+            player.origpos = null;
+        } else {
+            $(player.div).wrap('<div class="oiplayer-origpos" />');
+            player.origpos = $(player.div).closest('div.oiplayer-origpos');
+            $('body').append('<div id="oiplayer-fullscreen"><div 
class="oiplayer"></div><div class="overlay"></div></div>');
+            $('#oiplayer-fullscreen').append(player.div);
+        }
+        
+        if (player.state == 'play' && player.myname != 'flowplayer') { 
player.play(); }
         $(player.player).width(player.width).height(player.height);
         
-        if ($(div).is('.fullscreen')) {
-            
$(div).find('div.player').width(player.width).height(player.height).css('margin-left',
 half);
-            
$(div).find('.preview').width(player.width).height(player.height).css('margin-left',
 half);
-            
-            $(div).find('div.controls').width(player.width).css('margin-left', 
half);
-            $(div).find('div.controls li.slider').width(player.width - 190);
+        if (player.config.controls.indexOf('top') == -1) {
+            $(player.div).width(player.width).height( player.height + 
$(player.controls).height() ).css('margin-left', half);
         } else {
-            
$(div).find('div.player').width(player.width).height(player.height).css('margin-left',
 '0');
-            
$(div).find('.preview').width(player.width).height(player.height).css('margin-left',
 '0');
-            
-            $(div).find('div.controls').width(player.width).css('margin-left', 
'0');
-            $(div).find('div.controls li.slider').width(player.width - 190);
+            
$(player.div).width(player.width).height(player.height).css('margin-left', 
half);
         }
         
+        if ($('#oiplayer-fullscreen').find('div').length > 0) {
+            
$(player.div).find('.preview').width(player.width).height(player.height);
+            
$(player.div).find('div.player').width(player.width).height(player.height);
+            
$(player.controls).width(player.width).find('li.slider').width(player.width - 
190);
+        } else {
+            
$(player.div).find('.preview').width(player.width).height(player.height).css('margin-left',
 '0');
+            
$(player.div).find('div.player').width(player.width).height(player.height).css('margin-left',
 '0');
+            $(player.controls).width(player.width).css('margin-left', 
'0').find('li.slider').width(player.width - 190);
+        }
+        
         var pos;
         if (player.myname == 'flowplayer') {
             pos = parseInt(player.position());
             
//player.player.getScreen().animate({width:player.width,height:player.height});
             player.player.unload();
-            player.player.play();
+            if (player.state == 'play') { player.player.play(); }
         }
-        $('div.player').find('object').attr("width", 
player.width).attr("height", player.height);
+        $(player.div).find('object').attr("width", 
player.width).attr("height", player.height);
         if (player.myname == 'flowplayer') {
             setTimeout(function() { player.seek(pos) }, 1500);   // give fp 
time to reinitialize
         }
@@ -421,7 +428,7 @@
         var agent = navigator.userAgent.toLowerCase(); 
         var html;
         if (agent.indexOf('iphone') > -1 || agent.indexOf('ipod') > -1) {
-            // sorry for this :-( could not find a suitable abilities check
+            // sorry about this :-( could not find a suitable abilities check
             html = '<div class="controls"><ul class="controls">' + 
                       '<li class="play"><a title="play" 
href="#play">play</a></li>' +
                       '<li class="position">00:00</li>' +
@@ -468,10 +475,9 @@
     /* 
      * Updates controls with progress of player
      * @param player Object of player
-     * @param ctrls  controls to update
      */
     follow: function (player) {
-        var ctrls = $( $.oiplayer.div(player) ).find('ul.controls');
+        //var ctrls = $(player.div).find('ul.controls');
         var pos = 0;
         var progress = null;
         //var sec = player.start;
@@ -486,20 +492,20 @@
                 //sec = Math.floor(pos);
                 //console.log("n: " + now + ", s: " + sec + ", pos: " + pos);
                 if (!isNaN(pos) && pos > 0 && pos != now) {
-                    $(ctrls).find('li.position').text( $.oiplayer.totime(pos) 
);
-                    $(ctrls).find('div.slider > div').slider('option', 
'value', pos);
-                    $(ctrls).find('li.slider').addClass('changed');
+                    $(player.controls).find('li.position').text( 
$.oiplayer.totime(pos) );
+                    $(player.controls).find('div.slider > 
div').slider('option', 'value', pos);
+                    $(player.controls).find('li.slider').addClass('changed');
                     
                     //console.log("left: " + left);
                     if (player.duration > 0) {
                         left = player.duration - pos;
-                        $(ctrls).find('li.timeleft').text("-" + 
$.oiplayer.totime(left));
+                        $(player.controls).find('li.timeleft').text("-" + 
$.oiplayer.totime(left));
                     }
                     
                     i = 0;
                     now = pos;
                 }
-                if (pos < 1) { 
$(ctrls).find('li.slider').removeClass('changed'); }
+                if (pos < 1) { 
$(player.controls).find('li.slider').removeClass('changed'); }
                 if (now == pos) { i++; }
                 if (i > 9) {
                     //console.log("stopped after " + (i * 0.2) + " seconds.");
@@ -522,7 +528,7 @@
     },
     
     msg: function(player, msg) {
-        $('<div class="oiplayerinfo"></div>').text(msg).hide().appendTo( 
$.oiplayer.div(player) ).fadeIn();
+        $('<div 
class="oiplayerinfo"></div>').text(msg).hide().appendTo(player.div).fadeIn();
     },
     
     /* 
@@ -608,25 +614,25 @@
             function(ev) {
                 self.state = 'play';
                 $.oiplayer.follow(self);
-                $( $.oiplayer.div(self) ).find('li.play').addClass('pause');
+                $(self.div).find('li.play').addClass('pause');
             }, false);
         this.player.addEventListener("pause", 
             function(ev) {
                 self.state = 'pause';
-                $( $.oiplayer.div(self) ).find('li.play').removeClass('pause');
+                $(self.div).find('li.play').removeClass('pause');
             }, false);
         this.player.addEventListener("volumechange", 
             function(ev) {
                 if (self.player.muted) { 
-                    $( $.oiplayer.div(self) 
).find('li.sound').addClass('muted');
+                    $(self.div).find('li.sound').addClass('muted');
                 } else {
-                    $( $.oiplayer.div(self) 
).find('li.sound').removeClass('muted');
+                    $(self.div).find('li.sound').removeClass('muted');
                 }
             }, false);
         this.player.addEventListener("ended", 
             function(ev) {
                 self.state = 'ended';
-                $( $.oiplayer.div(self) ).find('li.play').removeClass('pause');
+                $(self.div).find('li.play').removeClass('pause');
             }, false);
     }
     return this.player;
@@ -797,7 +803,7 @@
     
     var ctrls;
     if (this.controls) {
-        ctrls = { height: 24, autoHide: 'always', hideDelay: 2000, fullscreen: 
false };
+        ctrls = { height: 24, autoHide: 'always', hideDelay: 2000, fullscreen: 
true };
     } else {
         ctrls = null;
     }
@@ -820,26 +826,26 @@
     if (config.controls) {
         var self = this;
         this.player.onMute(function() {
-            $( $.oiplayer.div(self) ).find('li.sound').addClass('muted');
+            $(self.div).find('li.sound').addClass('muted');
         });
         this.player.onUnmute(function() {
-            $( $.oiplayer.div(self) ).find('li.sound').removeClass('muted');
+            $(self.div).find('li.sound').removeClass('muted');
         });
         var clip = this.player.getCommonClip();
         clip.onStart(function() {
-            $( $.oiplayer.div(self) ).find('li.play').addClass('pause');
+            $(self.div).find('li.play').addClass('pause');
             self.state = 'play';
         });
         clip.onPause(function() {
-            $( $.oiplayer.div(self) ).find('li.play').removeClass('pause');
+            $(self.div).find('li.play').removeClass('pause');
             self.state = 'pause';
         });
         clip.onResume(function() {
-            $( $.oiplayer.div(self) ).find('li.play').addClass('pause');
+            $(self.div).find('li.play').addClass('pause');
             self.state = 'play';
         });
         clip.onFinish(function() {
-            $( $.oiplayer.div(self) ).find('li.play').removeClass('pause');
+            $(self.div).find('li.play').removeClass('pause');
             self.state = 'ended';
         });
     }

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to