Author: andre
Date: 2009-11-13 13:46:17 +0100 (Fri, 13 Nov 2009)
New Revision: 39679

Modified:
   openimages/trunk/src/main/webapp/player/player.html
   openimages/trunk/src/main/webapp/style/css/player.css
   openimages/trunk/src/main/webapp/style/js/play.js.jsp
   openimages/trunk/src/main/webapp/style/js/player.js
Log:
basic rewrite of mainly player.js to a true(?) jQuery plugin, still need to 
readapt  the jspx's in oip to make use of it (see player.html) and still need 
to re-implement the poster/overlay image

Modified: openimages/trunk/src/main/webapp/player/player.html
===================================================================
--- openimages/trunk/src/main/webapp/player/player.html 2009-11-13 10:37:34 UTC 
(rev 39678)
+++ openimages/trunk/src/main/webapp/player/player.html 2009-11-13 12:46:17 UTC 
(rev 39679)
@@ -3,15 +3,16 @@
 <html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="nl">
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-  <title>De man met de grote bril : Media  - Open Beelden</title>
+  <title>Testpagina : Media  - Open Beelden</title>
   <link href="../style/css/main.css" rel="stylesheet" type="text/css" />
   <link href="../style/images/favicon.ico" rel="shortcut icon" />
   <script src="../mmbase/jquery/jquery-1.3.2.min.js" 
type="text/javascript"></script>
   <script src="../style/js/main.js.jsp" type="text/javascript"><!-- help ie 
--></script>
-  <script type="text/javascript" src="flowplayer-3.1.1.min.js"><!-- help ie 
--></script>
+  <script type="text/javascript" src="flowplayer-3.1.4.min.js"><!-- help ie 
--></script>
   <script src="../style/js/player.js" type="text/javascript"><!-- help ie 
--></script>
   <script src="../style/js/play.js.jsp" type="text/javascript"><!-- help ie 
--></script>
   <link href="../style/css/player.css" rel="stylesheet" type="text/css" />
+
 </head>
 <body class="media-item">
 <div id="header">
@@ -40,21 +41,21 @@
 </div>
 
 <div class="main-column">
+  <div id="clientcaps">  </div>
   <h2>Media item</h2>
 
-  <div id="oiplayer">
-    <div class="player">
-      <video controls="false" width="320" height="240" 
poster="../html/bril-groot.png" autobuffer="false">
-        <!-- <source src="http://www.toly.net/downloads-oip/presto2.mp4"; 
type="video/mp4" /> -->
-        <!-- <source src="presto.ogv" type="video/ogg" /> -->
-        <source src="matrix.mp4" type="video/mp4" />
-        <p>
-           Your need a browser that understands the html5 video tag to play 
this media item.
-           Firefox 3.1 nightly builds, Opera experimental builds and Safari 
(with XiphQT for Ogg)
-           installed can understand the video tag with varying degrees of 
success.
-        </p>
-      </video>
-    </div>
+  <div class="oiplayer">
+    <video controls="false" width="320" height="240" 
poster="../html/bril-groot.png" autobuffer="false">
+      <!-- <source src="http://www.toly.net/downloads-oip/presto2.mp4"; 
type="video/mp4" /> -->
+      <source src="presto.ogv" type="video/ogg" />
+      <source src="matrix.mp4" type="video/mp4" />
+      <p>
+         Your need a browser that understands the html5 video tag to play this 
media item.
+         Firefox 3.1 nightly builds, Opera experimental builds and Safari 
(with XiphQT for Ogg)
+         installed can understand the video tag with varying degrees of 
success.
+      </p>
+    </video>
+<!-- 
     <ul class="controls">
       <li class="play"><a href="#">play</a></li>
       <li class="position">
@@ -67,10 +68,23 @@
         <a href="#">sound</a>
       </li>
     </ul>
+ -->
   </div>
 
   <h3 class="subtitle">Man met grote bril</h3>
-  <h4>Collectie Beeld en Geluid</h4>
+  
+  <h2>Media item</h2>
+  <div class="oiplayer">
+    <video controls="false" width="320" height="240" poster="matrix.png" 
autobuffer="false">
+      <source src="matrix.mp4" type="video/mp4" />
+      <p>
+         Your need a browser that understands the html5 video tag to play this 
media item.
+         Firefox 3.1 nightly builds, Opera experimental builds and Safari 
(with XiphQT for Ogg)
+         installed can understand the video tag with varying degrees of 
success.
+      </p>
+    </video>
+  </div>
+  <h3 class="subtitle">Matrix</h3>
 
 
 </div>

Modified: openimages/trunk/src/main/webapp/style/css/player.css
===================================================================
--- openimages/trunk/src/main/webapp/style/css/player.css       2009-11-13 
10:37:34 UTC (rev 39678)
+++ openimages/trunk/src/main/webapp/style/css/player.css       2009-11-13 
12:46:17 UTC (rev 39679)
@@ -46,6 +46,20 @@
        position: relative;
 }
 
+div.oiplayer
+{
+       margin: 0;
+       padding: 0;
+       position: relative;
+}
+
+img.preview
+{
+       margin: 0;
+       padding: 0;
+       position: absolute;
+}
+
 div.player audio, #msie_cortadoplayer_oiplayer
 {
        position: absolute;

Modified: openimages/trunk/src/main/webapp/style/js/play.js.jsp
===================================================================
--- openimages/trunk/src/main/webapp/style/js/play.js.jsp       2009-11-13 
10:37:34 UTC (rev 39678)
+++ openimages/trunk/src/main/webapp/style/js/play.js.jsp       2009-11-13 
12:46:17 UTC (rev 39679)
@@ -11,14 +11,23 @@
   @changes: moved methods to player.js, classes for id's
 */
 
+function inititPlayer() {
+    $('div.oiplayer').oipPlayer({
+        /* msie (or windows java) has issues with just a dir */
+        'server' : '<mm:url page="/" absolute="true" />',
+        /* the files (jar, flash) need to be in this directory */
+        'jar' : '${mm:link('/player/cortado-ovt-stripped-wm_r38710.jar')}',
+        'flash' : '${mm:link('/player/flowplayer-3.1.1.swf')}'
+    });
+}
+
 function initPlayer(id) {
     var config = { 
         /* msie (or windows java) has issues with just a dir */
         'server' : '<mm:url page="/" absolute="true" />',
         /* the files (jar, flash) need to be in this directory */
-        'dir' : '${mm:link('/player')}',
-        'jar' : 'cortado-ovt-stripped-wm_r38710.jar',
-        'flash' : 'flowplayer-3.1.1.swf'
+        'jar' : '/player/cortado-ovt-stripped-wm_r38710.jar',
+        'flash' : '/player/flowplayer-3.1.1.swf'
     };
     
     var mediaEl = createPlayer(id, config);
@@ -78,7 +87,8 @@
 }
 
 $(document).ready(function() {
-    initPlayer('oiplayer');
+    //initPlayer('oiplayer');
+    inititPlayer();
 });
 
 </mm:content>

Modified: openimages/trunk/src/main/webapp/style/js/player.js
===================================================================
--- openimages/trunk/src/main/webapp/style/js/player.js 2009-11-13 10:37:34 UTC 
(rev 39678)
+++ openimages/trunk/src/main/webapp/style/js/player.js 2009-11-13 12:46:17 UTC 
(rev 39679)
@@ -6,80 +6,309 @@
   a multitude of players (but defies MSIE ;-) http://footage.stealthisfilm.com/
 
   @author: André van Toly
-  @version: 0.3
+  @version: 0.4
   @params:
     id - id of the element that contains the video-tag
     config - configuration parameters
-        'dir' : directory the plugins live in
+        'server' : server url (think only for ie)
         'jar' : JAR file of Cortado
         'flash' : location of flowplayer.swf
 
-  @changes: trying to support the audio tag some more (with thanks to 
Cannoball Adderley)
+  @changes: jQuery plugin
 */
 
-var player;
+jQuery.fn.oipPlayer = function(conf) {
+    return this.each(function() {
+        var self = this;
+        var config = jQuery.extend({    // example configuration
+            server : 'http://localhost',
+            jar : '/player/cortado-ovt-stripped-wm_r38710.jar',
+            flash : '/player/flowplayer-3.1.1.swf'
+        }, conf);
+        
+        var mediatag = findTag(this);
+        var player = createPlayer(this, config);
+        //console.log("player state hier: " + player.state);
+        //console.log(player);
 
-function createPlayer(id, config) {
-    var mediatag = findMediatag(id);
-    var sources = $('#' + id).find('source');
-    var types = $.map(sources, function(i) {
-        return $(i).attr('type');
+        $(this).find(player.type).remove();
+        $(this).append(player.player);
+       
+        var poster = createPoster(this, mediatag, config);
+        //$(this).prepend(poster);
+        $(this).append(createControls());
+
+        /* click play/pause button */
+        var self = this;
+        $(this).find('ul.controls li.play').click(function(ev) {
+            ev.preventDefault();
+            var timer = $(self).find('ul.controls li.position');
+            if (player.state == 'pause') {
+                //console.log("1: play");
+                player.play();
+                if ($(self).find('ul.controls li.pause').length == 0) {
+                    $(self).find('ul.controls li.play').addClass('pause');
+                }
+                followProgress(player, timer);
+            } else if (player.state == 'play') {
+                //console.log("2: pause");
+                player.pause();
+                $(self).find('ul.controls li.play').removeClass('pause');
+            } else {
+                //console.log("3: play");
+                if (mediatag.type == 'video') {
+                    $(self).find('img.preview').remove();
+                }
+                //$(this).append(player);
+                player.play();
+                if ($(self).find('ul.controls li.pause').length == 0) {
+                    $(self).find('ul.controls li.play').addClass('pause');
+                }
+                followProgress(player, timer);
+            }
+            //console.log("player state: " + player.state);
+        });
+        
     });
-    var urls = $.map(sources, function(i) {
-        return $(i).attr('src');
-    });
+        
+    function createPlayer(el, config) {
+        var player;
+        var mediatag = findTag(el);
+        var sources = $(el).find('source');
+        var types = $.map(sources, function(i) {
+            return $(i).attr('type');
+        });
+        var urls = $.map(sources, function(i) {
+            return $(i).attr('src');
+        });
+    
+        if (urls.length == 0) { // no sources in body
+            urls[0] = $(mediatag).attr('src');
+            types[0] = "unknown";   // TODO ? 
+        }
+        if (mediatag != undefined) {
+            var selectedPlayer = selectPlayer(mediatag, types, urls);
+            if (selectedPlayer.type == 'media') {
+                player = new MediaPlayer();
+            } else if (selectedPlayer.type == 'cortado') {
+                player = new CortadoPlayer();
+            } else if (selectedPlayer.type == 'msie_cortado') {
+                player = new MSCortadoPlayer();
+            } else if (selectedPlayer.type == 'flash') {
+                player = new FlowPlayer();
+            } else {
+                player = new Player();
+            }
+            player.type = mediatag.type;        // previous .type is of no 
interest any more
+            player.player = mediatag.element;
+            player.url = selectedPlayer.url;
+            player.info = selectedPlayer.type + ":" + selectedPlayer.url;
+            player.init(el, selectedPlayer.url, config);
+            return player;
+        }
+    }
+    
+    /* 
+       Selects which player to use and returns a proposal.type and 
proposal.url. 
+       Adapt this to change the prefered order, here the order is: video, 
cortado, msie_cortado flash.
+    */
+    function selectPlayer(tag, types, urls) {
+        var proposal = new Object();
+        var probably = canPlayMedia(types, urls);
+        if (probably != undefined) {
+            proposal.type = "media";
+            proposal.url = probably;
+            return proposal;    // optimization
+        }
+        if (proposal.type == undefined) {
+            probably = canPlayCortado(types, urls);
+            if (probably != undefined && 
(supportMimetype('application/x-java-applet') || navigator.javaEnabled())) {
+                if ($.browser.msie) {   // Argh! A browser check!
+                    /* IE always reports true on navigator.javaEnabled(),
+                       that's why we need to check for the java plugin IE 
style. 
+                       It needs an element with id 'clientcaps' somewhere in 
the page. 
+                    */
+                    var javaVersionIE = 
clientcaps.getComponentVersion("{08B0E5C0-4FCB-11CF-AAA5-00401C608500}", 
"ComponentID");
+                    if (javaVersionIE) {
+                        proposal.type = "msie_cortado";
+                        proposal.url = probably;
+                    }
+                    if (tag.type == 'audio') {      // always use cortado on 
msie
+                        proposal.type = "msie_cortado";
+                        proposal.url = probably;
+                    }
+                } else {
+                    proposal.type = "cortado";
+                    proposal.url = probably;
+                }
+            }
+        }
+        if (proposal.type == undefined) {
+            var flash_url;
+            for (var i = 0; i < types.length; i++) {
+                if (types[i].indexOf("video/mp4") > -1 || 
types[i].indexOf("video/flv") > -1
+                    /* || types[i].indexOf("video/mpeg") > -1 */ ) {
+                    proposal.url = urls[i];
+                    proposal.type = "flash";
+                }
+            }
+        }
+        alert("proposal: " + proposal.type);
+        return proposal;
+    }
+    
+    /*
+     * Returns ogg url it expects to be able to play
+    */
+    function canPlayCortado(types, urls) {
+        var url;
+        for (var i = 0; i < types.length; i++) {
+            if (types[i].indexOf("video/ogg") > -1 ||
+                types[i].indexOf("audio/ogg") > -1 ||
+                types[i].indexOf("application/ogg") > -1 ||
+                types[i].indexOf("application/x-ogg") > -1) {
+                url = urls[i];
+                break;
+            }
+        }
+        return url;
+    }
+    
+    /*
+     * Returns url it expects to be able to play
+    */
+    function canPlayMedia(types, urls) {
+        //var probably;
+        var vEl = document.createElement("video");
+        var aEl = document.createElement("audio");
+        if (vEl.canPlayType || aEl.canPlayType) {
+            for (var i = 0; i < types.length; i++) {
+                /*
+                 
http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-navigator-canplaytype
+                 Firefox 3.5 is very strict about this and does not return 
'probably', but does on 'maybe'.
+                */
+                if (vEl.canPlayType( types[i] ) == "probably" || 
aEl.canPlayType( types[i] ) == "probably") {
+                    return urls[i]; // this is the best we can do
+                }
+                if (vEl.canPlayType( types[i] ) == "maybe" || aEl.canPlayType( 
types[i] ) == "maybe") {
+                    return urls[i]; // if we find nothing better
+                }
+            }
+        }
+    }
+    
+    function findTag(el, conf) {
+        var o = new Object();
+        o.type = "video";
+        o.element = $(el).find('video')[0];
+        if (o.element == undefined) {
+            o.type = "audio";
+            o.element = $(el).find('audio')[0];
+        }
+        return o;
+    }
+    
+    function supportMimetype(mt) {
+        var support = false;    /* navigator.mimeTypes is unsupported by MSIE 
! */
+        if (navigator.mimeTypes && navigator.mimeTypes.length > 0) {
+            for (var i = 0; i < navigator.mimeTypes.length; i++) {
+                if (navigator.mimeTypes[i].type.indexOf(mt) > -1) {
+                    support = true;
+                }
+            }
+        }
+        return support;
+    }
 
-    if (urls.length == 0) {
-        urls[0] = $(mediatag).attr('src');
-        types[0] = "unknown";
+    function createPoster(el, mediatag, config) {
+        var src = $(mediatag.element).attr('poster');
+        if (src == undefined) src = $(el).find('img').attr('src');
+        return img = '<img src="' + src + '" alt="" class="preview" width="' + 
config.width + '" height="' + config.height + '" />';
     }
-
-    if (mediatag != undefined) {
-        var selectedPlayer = selectPlayer(mediatag, types, urls);
-        if (selectedPlayer.type == 'media') {
-            player = new MediaPlayer();
-        } else if (selectedPlayer.type == 'cortado') {
-            player = new CortadoPlayer();
-        } else if (selectedPlayer.type == 'msie_cortado') {
-            player = new MSCortadoPlayer();
-        } else if (selectedPlayer.type == 'flash') {
-            player = new FlowPlayer();
-        } else {
-            player = new Player();
+        
+    function createControls() {
+        var html = '<ul class="controls">' + 
+                      '<li class="play"><a href="#play">play</a></li>' +
+                      '<li class="position">00:00</li>' +
+                   '</ul>';
+        return html;
+    }
+    
+    function showInfo() {
+        var text = player.info;
+        var id = player.id;
+        if ($('#' + id).find('div.playerinfo').length > 0) $('#' + 
id).find('div.playerinfo').remove();
+        $('#' + id).append('<div class="playerinfo">' + text + '</div>');
+    }
+    
+    
+    /* 
+     * Updates the provided html element with progress time of player
+     * @param player Object of player
+     * @param el     HTML element
+     */
+    function followProgress(player, el) {
+        var pos;
+        $(el).text("just starting..");
+        var progress = null;
+        clearInterval(progress);
+        progres = setInterval(function() {
+                pos = player.position();
+                if (!isNaN(pos) && pos > 0) {
+                    $(el).text(toTime(pos));
+                }
+                if (pos == undefined) {
+                    //console.log("pos undef");
+                    clearInterval(progress);
+                    return;
+                }
+            }, 200);
+    }
+    
+    function toTime(sec) {
+        var h = Math.floor(sec / 3600);
+        var min = Math.floor(sec / 60);
+        var sec = Math.floor(sec - (min * 60));
+        if (h >= 1) {
+            min -= h * 60;
+            return addZero(h) + ":" + addZero(min) + ":" + addZero(sec);
         }
-        player.info = selectedPlayer.type + ": " + selectedPlayer.url;
-        //console.log(player.info);
-        return player.init(id, selectedPlayer.url, config);
+        return addZero(min) + ":" + addZero(sec);
     }
-}
+    
+    function addZero(time) {
+        time = parseInt(time, 10);
+        return time < 10 ? "0" + time : time;
+    }
+    
+    return this; // plugin convention
+};
 
+
+//  
------------------------------------------------------------------------------------------------
+//  Prototypes of several players
+//  
------------------------------------------------------------------------------------------------
+
 function Player() {
     this.myname = "super";
 }
 
-Player.prototype._init = function(id, url, config) {
-    var mediatag = findMediatag(id);
-    this.player = mediatag.element;
-    this.type = mediatag.type;
+Player.prototype.init = function(el, url, config) { }
+Player.prototype.play = function() { }
+Player.prototype.pause = function() { }
+Player.prototype.position = function() { }
+Player.prototype.info = function() { }
+
+Player.prototype._init = function(el, url, config) {
     this.url = url;
-    this.id = id;
-    /* if (this.urls.length == 0) this.urls[0] = $(this.player).attr('src'); */
+    this.mediatype = this.type;
     this.poster = $(this.player).attr('poster');
-    if ($(this.player).attr('autoplay') == undefined) { // html5 can just have 
<video autoplay />
-        this.autoplay = false;
-    } else {
-        this.autoplay = true;
-    }
-    if ($(this.player).attr('autobuffer') == undefined) {
-        this.autobuffer = false;
-    } else {
-        this.autobuffer = true;
-    }
-    if ($(this.player).attr('controls') == undefined) {
-        this.controls = false;
-    } else {
-        this.controls = true;
-    }
+    this.autoplay = $(this.player).attr('autoplay');
+    if (this.autoplay == undefined) this.autoplay = false;
+    this.autobuffer = $(this.player).attr('autobuffer');
+    if (this.autobuffer == undefined) this.autobuffer = false;
+    this.controls = $(this.player).attr('controls');
+    if (this.controls == undefined) this.controls = false;
     this.width  = $(this.player).attr('width');
     this.height = $(this.player).attr('height');
     if (this.width  == undefined) this.width  = $("head 
meta[name=media-width]").attr("content");
@@ -87,33 +316,31 @@
     this.duration = $("head meta[name=media-duration]").attr("content"); // 
not a mediatag attr.
     this.state = 'init';
     this.pos = 0;
+    
     return this.player;
 }
 
-Player.prototype.init = function(id, url, config) { }
-Player.prototype.play = function() { }
-Player.prototype.pause = function() { }
-Player.prototype.position = function() { }
-Player.prototype.info = function() { }
-
 function MediaPlayer() {
     this.myname = "mediaplayer";
 }
 MediaPlayer.prototype = new Player();
-MediaPlayer.prototype.init = function(id, url, config) {
-    this._init(id, url, config); // just init and pass it along
+MediaPlayer.prototype.init = function(el, url, config) {
+    this._init(el, url, config); // just init and pass it along
     this.url = url;
     var self = this;
     this.player.addEventListener("playing", 
                                   function(ev) {
                                       self.state = 'play';
-                                      followProgress();
+                                      //followProgress();
                                   },
                                   false);
+    //console.log("MediaPlayer:");
+    //console.log(this.player);
     return this.player;
 }
 MediaPlayer.prototype.play = function() {
     //this.player.autoplay = true;
+    //console.log("MediaPlayer starts to play...");
     this.player.play();
     this.state = 'play';
 }
@@ -144,10 +371,10 @@
     this.myname = "cortadoplayer";
 }
 CortadoPlayer.prototype = new Player();
-CortadoPlayer.prototype.init = function(id, url, config) {
-    this._init(id, url, config);
+CortadoPlayer.prototype.init = function(el, url, config) {
+    this._init(el, url, config);
     this.url = url;
-    var jar = config.dir + "/" + config.jar;
+    var jar = config.jar;
     var usevideo = true;
     var useheight = this.height;
     if (this.type == 'audio') {
@@ -198,7 +425,6 @@
     }
     this.state = 'play';
 }
-
 CortadoPlayer.prototype.pause = function() {
     this.pos = this.player.getPlayPosition();
     this.player.doPause();
@@ -222,7 +448,7 @@
 MSCortadoPlayer.prototype.init = function(id, url, config) {
     this._init(id, url, config);
     /* msie (or windows java) can only load an applet from the root of a site, 
not a directory or context */
-    var jar = config.server + config.dir + "/" + config.jar; 
+    var jar = config.server + config.jar; 
     var usevideo = true;
     var useheight = this.height;
     if (this.type == 'audio') { 
@@ -260,14 +486,14 @@
     this.myname = "flowplayer";
 }
 FlowPlayer.prototype = new Player();
-FlowPlayer.prototype.init = function(id, url, config) {
-    this._init(id, url, config);
-    var flwplayer = config.dir + "/" + config.flash;
+FlowPlayer.prototype.init = function(el, url, config) {
+    this._init(el, url, config);
+    var flwplayer = config.flash;
     var duration = (this.duration == undefined ? 0 : this.duration);
-
-    /* flowplayer replaces everything in the geven element */
-    var el = $('#' + id).find('div.player')[0];
-    this.player = $f(el, { src : flwplayer, width : this.width, height : 
this.height }, {
+    
+    $(el).append('<div class="playfp" />');
+    var div = $(el).find('div.playfp')[0];
+    this.player = $f(div, { src : flwplayer, width : this.width, height : 
this.height }, {
         clip: {
             url: this.url,
             autoPlay: this.autoplay,
@@ -278,11 +504,12 @@
         },
         plugins: { controls: { height: 24, autoHide: 'always', hideDelay: 
2000, fullscreen: false } }
     });
-
+    //console.log("FlowPlayer:");
+    //console.log(this.player);
     return this.player;
 }
-
 FlowPlayer.prototype.play = function() {
+    //console.log("FlowPlayer starts to play...");
     if (this.player.getState() == 4) {
         this.player.resume();
     } else if (this.player.getState() != 3) {
@@ -290,169 +517,16 @@
     }
     this.state = 'play';
 }
-
 FlowPlayer.prototype.pause = function() {
     if (this.player.getState() == 3) this.player.pause();
     this.state = 'pause';
 }
-
 FlowPlayer.prototype.position = function() {
     this.pos = this.player.getTime();
     return this.pos;
 }
-
 FlowPlayer.prototype.info = function() {
     //return "Playing: " + this.url;
 }
 
-/* 
-   Selects which player to use and returns a proposal.type and proposal.url. 
-   Adapt this to change the prefered order, here the order is: video, cortado, 
msie_cortado flash.
-*/
-function selectPlayer(tag, types, urls) {
-    var proposal = new Object();
-    var probably = canPlayMedia(types, urls);
-    if (probably != undefined) {
-        proposal.type = "media";
-        proposal.url = probably;
-        return proposal;    // optimization
-    }
-    
-    if (proposal.type == undefined) {
-        probably = canPlayCortado(types, urls);
-        if (probably != undefined && 
(supportMimetype('application/x-java-applet') || navigator.javaEnabled())) {
-            if ($.browser.msie) {   // Argh! A browser check!
-                /* IE always reports true on navigator.javaEnabled(),
-                   that's why we need to check for the java plugin IE style. 
-                   It needs an element with id 'clientcaps' somewhere in the 
page. 
-                */
-                var javaVersionIE = 
clientcaps.getComponentVersion("{08B0E5C0-4FCB-11CF-AAA5-00401C608500}", 
"ComponentID");
-                if (javaVersionIE) {
-                    proposal.type = "msie_cortado";
-                    proposal.url = probably;
-                }
-                if (tag.type == 'audio') {      // always use cortado on msie
-                    proposal.type = "msie_cortado";
-                    proposal.url = probably;
-                }
-            } else {
-                proposal.type = "cortado";
-                proposal.url = probably;
-            }
-        }
-    }
-    if (proposal.type == undefined) {
-        var flash_url;
-        for (var i = 0; i < types.length; i++) {
-            if (types[i].indexOf("video/mp4") > -1 || 
types[i].indexOf("video/flv") > -1
-                /* || types[i].indexOf("video/mpeg") > -1 */ ) {
-                proposal.url = urls[i];
-                proposal.type = "flash";
-            }
-        }
-    }
-    return proposal;
-}
 
-/*
- * Returns Ogg url it expects to be able to play
-*/
-function canPlayCortado(types, urls) {
-    var url;
-    for (var i = 0; i < types.length; i++) {
-        if (types[i].indexOf("video/ogg") > -1 ||
-            types[i].indexOf("audio/ogg") > -1 ||
-            types[i].indexOf("application/ogg") > -1 ||
-            types[i].indexOf("application/x-ogg") > -1) {
-            url = urls[i];
-            break;
-        }
-    }
-    return url;
-}
-
-/*
- * Returns url it expects to be able to play
-*/
-function canPlayMedia(types, urls) {
-    //var probably;
-    var vEl = document.createElement("video");
-    var aEl = document.createElement("audio");
-    if (vEl.canPlayType || aEl.canPlayType) {
-        for (var i = 0; i < types.length; i++) {
-            /*
-             
http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-navigator-canplaytype
-             Firefox 3.5 is very strict about this and does not return 
'probably', but does on 'maybe'.
-            */
-            if (vEl.canPlayType( types[i] ) == "probably" || aEl.canPlayType( 
types[i] ) == "probably") {
-                return urls[i]; // this is the best we can do
-            }
-            if (vEl.canPlayType( types[i] ) == "maybe" || aEl.canPlayType( 
types[i] ) == "maybe") {
-                return urls[i]; // if we find nothing better
-            }
-        }
-    }
-}
-
-function findMediatag(id) {
-    var mediatag = new Object();
-    mediatag.type = "video";
-    mediatag.element = $('#' + id).find('video')[0];
-    if (mediatag.element == undefined) {
-        mediatag.type = "audio";
-        mediatag.element = $('#' + id).find('audio')[0];
-    }
-    return mediatag;
-}
-
-function supportMimetype(mt) {
-       var support = false;    /* navigator.mimeTypes is unsupported by MSIE ! 
*/
-    if (navigator.mimeTypes && navigator.mimeTypes.length > 0) {
-               for (var i = 0; i < navigator.mimeTypes.length; i++) {
-                       if (navigator.mimeTypes[i].type.indexOf(mt) > -1) {
-                               support = true;
-               }
-               }
-    }
-       return support;
-}
-
-function showInfo() {
-    var text = player.info;
-    var id = player.id;
-       if ($('#' + id).find('div.playerinfo').length > 0) $('#' + 
id).find('div.playerinfo').remove();
-    $('#' + id).append('<div class="playerinfo">' + text + '</div>');
-}
-
-function followProgress() {
-    var pos;
-    var oldpos = -1;
-    var text = "00:00";
-    var id = player.id;
-    var progress = function() {
-        pos = player.position();
-        //console.log("oldpos: " + oldpos +  ", pos: " + pos + " state: " + 
player.state)
-        if (!isNaN(pos) && pos > 0) {
-            var min = Math.floor(pos / 60);
-            var sec = Math.floor(pos - (min * 60));
-            text = (min < 10 ? '0' + min : min) + ":" + (sec < 10 ? '0' + sec 
: sec);
-            $('#' + id + ' ul.controls li.position').text(text);
-
-            if (oldpos == pos) {
-                player.state = 'pause';
-                $('#' + id + ' ul.controls li.play').removeClass('pause');
-            }
-        }
-        
-        if (player.state == "play") {
-            setTimeout(progress, 200);
-            if (!isNaN(pos) && pos > 0) oldpos = pos;
-            if ($('#' + id + ' ul.controls li.pause').length == 0) {
-                $('#' + id + ' ul.controls li.play').addClass('pause');
-            }
-        }
-        
-    };
-    progress();
-    //showInfo();
-}

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

Reply via email to