Author: andre
Date: 2009-11-13 13:52:59 +0100 (Fri, 13 Nov 2009)
New Revision: 39680

Added:
   openimages/trunk/src/main/webapp/style/js/jquery.oiplayer.js
Removed:
   openimages/trunk/src/main/webapp/style/js/player.js
Log:
jQuery convention to start plugins with jquery.

Copied: openimages/trunk/src/main/webapp/style/js/jquery.oiplayer.js (from rev 
39679, openimages/trunk/src/main/webapp/style/js/player.js)
===================================================================
--- openimages/trunk/src/main/webapp/style/js/jquery.oiplayer.js                
                (rev 0)
+++ openimages/trunk/src/main/webapp/style/js/jquery.oiplayer.js        
2009-11-13 12:52:59 UTC (rev 39680)
@@ -0,0 +1,532 @@
+/*
+  Inits and controls the video player based on the html5 videotag. Depends on 
jquery. It enables
+  the use of three players in a generic way: video-tag, java player cortado 
(for ogg) and flash.
+  Sifts through the sources provided by the video-tag to find a suitable 
player.
+  This script borrows heavily from the rather brilliant one used at Steal This 
Footage which enables
+  a multitude of players (but defies MSIE ;-) http://footage.stealthisfilm.com/
+
+  @author: André van Toly
+  @version: 0.4
+  @params:
+    id - id of the element that contains the video-tag
+    config - configuration parameters
+        'server' : server url (think only for ie)
+        'jar' : JAR file of Cortado
+        'flash' : location of flowplayer.swf
+
+  @changes: jQuery plugin
+*/
+
+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);
+
+        $(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);
+        });
+        
+    });
+        
+    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;
+    }
+
+    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 + '" />';
+    }
+        
+    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);
+        }
+        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(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.mediatype = this.type;
+    this.poster = $(this.player).attr('poster');
+    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");
+    if (this.height == undefined) this.height = $("head 
meta[name=media-height]").attr("content");
+    this.duration = $("head meta[name=media-duration]").attr("content"); // 
not a mediatag attr.
+    this.state = 'init';
+    this.pos = 0;
+    
+    return this.player;
+}
+
+function MediaPlayer() {
+    this.myname = "mediaplayer";
+}
+MediaPlayer.prototype = new Player();
+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();
+                                  },
+                                  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';
+}
+
+MediaPlayer.prototype.pause = function() {
+    this.player.pause();
+    this.state = 'pause';
+}
+
+MediaPlayer.prototype.position = function() {
+    try {
+        this.pos = this.player.currentTime;
+        return this.pos;
+    } catch(err) {
+        //console.log("Error: " + err);
+    }
+    return -1;
+}
+MediaPlayer.prototype.info = function() {
+    /*  duration able in webkit, 
+        unable in mozilla without: 
https://developer.mozilla.org/en/Configuring_servers_for_Ogg_media
+    */
+    //return "Duration: " + this.player.duration + " readyState: " + 
this.player.readyState;
+}
+
+
+function CortadoPlayer() {
+    this.myname = "cortadoplayer";
+}
+CortadoPlayer.prototype = new Player();
+CortadoPlayer.prototype.init = function(el, url, config) {
+    this._init(el, url, config);
+    this.url = url;
+    var jar = config.jar;
+    var usevideo = true;
+    var useheight = this.height;
+    if (this.type == 'audio') {
+        usevideo = false;
+        useheight = 12;
+    }
+    
+    this.player = document.createElement('object'); // create new element!
+    $(this.player).attr('classid', 'java:com.fluendo.player.Cortado.class');
+    $(this.player).attr('style', 'display:block;width:' + this.width + 
'px;height:' + useheight + 'px;');
+    $(this.player).attr('type', 'application/x-java-applet');
+    $(this.player).attr('archive', jar);
+    if (this.width)  $(this.player).attr('width', this.width);
+    if (this.height) $(this.player).attr('height', this.height);
+    var params = {
+        'code' : 'com.fluendo.player.Cortado.class',
+        'archive' : jar,
+        'url': url,
+         // 'local': 'false',
+        'duration': Math.round(this.duration),
+        'keepAspect': 'true',
+        'showStatus' : this.controls,
+        'video': usevideo,
+        'audio': 'true',
+        'seekable': 'auto',
+        'autoPlay': this.autoplay,
+        'bufferSize': '256',
+        'bufferHigh': '50',
+        'bufferLow': '5'
+    }
+    for (name in params) {
+        var p = document.createElement('param');
+        p.name = name;
+        p.value = params[name];
+        this.player.appendChild(p);
+    }
+    return this.player;
+}
+
+CortadoPlayer.prototype.play = function() {
+    if (this.state == 'pause') {
+        // impossible when duration is unknown (and not really smooth in 
cortado)
+        // console.log("pos: " + this.pos + " pos as double: " + this.duration 
/ this.pos);
+        // this.player.doSeek(this.duration / this.pos);
+        this.player.doPlay();
+    } else {
+        this.player.doPlay();
+    }
+    this.state = 'play';
+}
+CortadoPlayer.prototype.pause = function() {
+    this.pos = this.player.getPlayPosition();
+    this.player.doPause();
+    this.state = 'pause';
+//     try {
+//         this.player.doStop();
+//     } catch(err) { }
+}
+CortadoPlayer.prototype.position = function() {
+    this.pos = this.player.getPlayPosition();
+    return this.pos;
+}
+CortadoPlayer.prototype.info = function() {
+    //return "Playing: " + this.url";
+}
+
+function MSCortadoPlayer() {
+    this.myname = "msie_cortadoplayer";
+}
+MSCortadoPlayer.prototype = new CortadoPlayer();
+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.jar; 
+    var usevideo = true;
+    var useheight = this.height;
+    if (this.type == 'audio') { 
+        usevideo = false;
+        useheight = 12;
+    }
+    var element = document.createElement('div');
+    var obj_html = '' +
+    '<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" '+
+    '  
codebase="http://java.sun.com/update/1.5.0/jinstall-1_5_0-windows-i586.cab"; '+
+    '  id="msie_cortadoplayer_' + id + '" '+
+    '  allowscriptaccess="always" width="' + this.width + '" height="' + 
useheight + '">'+
+    ' <param name="code" value="com.fluendo.player.Cortado" />'+
+    ' <param name="archive" value="' + jar + '" />'+
+    ' <param name="url" value="' + this.url + '" /> '+
+    ' <param name="duration" value="' + Math.round(this.duration) + '" /> '+
+    ' <param name="local" value="true" /> ' +
+    ' <param name="keepAspect" value="false" /> ' +
+    ' <param name="video" value="' + usevideo + '" /> ' +
+    ' <param name="audio" value="true" /> ' +
+    ' <param name="seekable" value="auto" /> '+
+    ' <param name="showStatus" value="' + this.controls + '" /> '+
+    ' <param name="bufferSize" value="256" /> '+
+    ' <param name="bufferHigh" value="50" /> '+
+    ' <param name="bufferLow" value="5" /> '+
+    ' <param name="autoPlay" value="' + this.autoplay + '" /> '+
+    ' <strong>Your browser does not have a Java Plug-in. <a 
href="http://java.com/download";>Get the latest Java Plug-in here</a>.</strong>' 
+
+    '</object>';
+    $(element).html(obj_html);
+    this.player = element.firstChild;
+    return this.player;
+}
+
+function FlowPlayer() {
+    this.myname = "flowplayer";
+}
+FlowPlayer.prototype = new Player();
+FlowPlayer.prototype.init = function(el, url, config) {
+    this._init(el, url, config);
+    var flwplayer = config.flash;
+    var duration = (this.duration == undefined ? 0 : this.duration);
+    
+    $(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,
+            duration: duration,
+            scaling: 'fit',
+            autoBuffering: this.autobuffer,
+            bufferLength: 5
+        },
+        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) {
+        this.player.play();
+    }
+    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;
+}
+
+

Deleted: openimages/trunk/src/main/webapp/style/js/player.js
===================================================================
--- openimages/trunk/src/main/webapp/style/js/player.js 2009-11-13 12:46:17 UTC 
(rev 39679)
+++ openimages/trunk/src/main/webapp/style/js/player.js 2009-11-13 12:52:59 UTC 
(rev 39680)
@@ -1,532 +0,0 @@
-/*
-  Inits and controls the video player based on the html5 videotag. Depends on 
jquery. It enables
-  the use of three players in a generic way: video-tag, java player cortado 
(for ogg) and flash.
-  Sifts through the sources provided by the video-tag to find a suitable 
player.
-  This script borrows heavily from the rather brilliant one used at Steal This 
Footage which enables
-  a multitude of players (but defies MSIE ;-) http://footage.stealthisfilm.com/
-
-  @author: André van Toly
-  @version: 0.4
-  @params:
-    id - id of the element that contains the video-tag
-    config - configuration parameters
-        'server' : server url (think only for ie)
-        'jar' : JAR file of Cortado
-        'flash' : location of flowplayer.swf
-
-  @changes: jQuery plugin
-*/
-
-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);
-
-        $(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);
-        });
-        
-    });
-        
-    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;
-    }
-
-    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 + '" />';
-    }
-        
-    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);
-        }
-        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(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.mediatype = this.type;
-    this.poster = $(this.player).attr('poster');
-    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");
-    if (this.height == undefined) this.height = $("head 
meta[name=media-height]").attr("content");
-    this.duration = $("head meta[name=media-duration]").attr("content"); // 
not a mediatag attr.
-    this.state = 'init';
-    this.pos = 0;
-    
-    return this.player;
-}
-
-function MediaPlayer() {
-    this.myname = "mediaplayer";
-}
-MediaPlayer.prototype = new Player();
-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();
-                                  },
-                                  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';
-}
-
-MediaPlayer.prototype.pause = function() {
-    this.player.pause();
-    this.state = 'pause';
-}
-
-MediaPlayer.prototype.position = function() {
-    try {
-        this.pos = this.player.currentTime;
-        return this.pos;
-    } catch(err) {
-        //console.log("Error: " + err);
-    }
-    return -1;
-}
-MediaPlayer.prototype.info = function() {
-    /*  duration able in webkit, 
-        unable in mozilla without: 
https://developer.mozilla.org/en/Configuring_servers_for_Ogg_media
-    */
-    //return "Duration: " + this.player.duration + " readyState: " + 
this.player.readyState;
-}
-
-
-function CortadoPlayer() {
-    this.myname = "cortadoplayer";
-}
-CortadoPlayer.prototype = new Player();
-CortadoPlayer.prototype.init = function(el, url, config) {
-    this._init(el, url, config);
-    this.url = url;
-    var jar = config.jar;
-    var usevideo = true;
-    var useheight = this.height;
-    if (this.type == 'audio') {
-        usevideo = false;
-        useheight = 12;
-    }
-    
-    this.player = document.createElement('object'); // create new element!
-    $(this.player).attr('classid', 'java:com.fluendo.player.Cortado.class');
-    $(this.player).attr('style', 'display:block;width:' + this.width + 
'px;height:' + useheight + 'px;');
-    $(this.player).attr('type', 'application/x-java-applet');
-    $(this.player).attr('archive', jar);
-    if (this.width)  $(this.player).attr('width', this.width);
-    if (this.height) $(this.player).attr('height', this.height);
-    var params = {
-        'code' : 'com.fluendo.player.Cortado.class',
-        'archive' : jar,
-        'url': url,
-         // 'local': 'false',
-        'duration': Math.round(this.duration),
-        'keepAspect': 'true',
-        'showStatus' : this.controls,
-        'video': usevideo,
-        'audio': 'true',
-        'seekable': 'auto',
-        'autoPlay': this.autoplay,
-        'bufferSize': '256',
-        'bufferHigh': '50',
-        'bufferLow': '5'
-    }
-    for (name in params) {
-        var p = document.createElement('param');
-        p.name = name;
-        p.value = params[name];
-        this.player.appendChild(p);
-    }
-    return this.player;
-}
-
-CortadoPlayer.prototype.play = function() {
-    if (this.state == 'pause') {
-        // impossible when duration is unknown (and not really smooth in 
cortado)
-        // console.log("pos: " + this.pos + " pos as double: " + this.duration 
/ this.pos);
-        // this.player.doSeek(this.duration / this.pos);
-        this.player.doPlay();
-    } else {
-        this.player.doPlay();
-    }
-    this.state = 'play';
-}
-CortadoPlayer.prototype.pause = function() {
-    this.pos = this.player.getPlayPosition();
-    this.player.doPause();
-    this.state = 'pause';
-//     try {
-//         this.player.doStop();
-//     } catch(err) { }
-}
-CortadoPlayer.prototype.position = function() {
-    this.pos = this.player.getPlayPosition();
-    return this.pos;
-}
-CortadoPlayer.prototype.info = function() {
-    //return "Playing: " + this.url";
-}
-
-function MSCortadoPlayer() {
-    this.myname = "msie_cortadoplayer";
-}
-MSCortadoPlayer.prototype = new CortadoPlayer();
-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.jar; 
-    var usevideo = true;
-    var useheight = this.height;
-    if (this.type == 'audio') { 
-        usevideo = false;
-        useheight = 12;
-    }
-    var element = document.createElement('div');
-    var obj_html = '' +
-    '<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" '+
-    '  
codebase="http://java.sun.com/update/1.5.0/jinstall-1_5_0-windows-i586.cab"; '+
-    '  id="msie_cortadoplayer_' + id + '" '+
-    '  allowscriptaccess="always" width="' + this.width + '" height="' + 
useheight + '">'+
-    ' <param name="code" value="com.fluendo.player.Cortado" />'+
-    ' <param name="archive" value="' + jar + '" />'+
-    ' <param name="url" value="' + this.url + '" /> '+
-    ' <param name="duration" value="' + Math.round(this.duration) + '" /> '+
-    ' <param name="local" value="true" /> ' +
-    ' <param name="keepAspect" value="false" /> ' +
-    ' <param name="video" value="' + usevideo + '" /> ' +
-    ' <param name="audio" value="true" /> ' +
-    ' <param name="seekable" value="auto" /> '+
-    ' <param name="showStatus" value="' + this.controls + '" /> '+
-    ' <param name="bufferSize" value="256" /> '+
-    ' <param name="bufferHigh" value="50" /> '+
-    ' <param name="bufferLow" value="5" /> '+
-    ' <param name="autoPlay" value="' + this.autoplay + '" /> '+
-    ' <strong>Your browser does not have a Java Plug-in. <a 
href="http://java.com/download";>Get the latest Java Plug-in here</a>.</strong>' 
+
-    '</object>';
-    $(element).html(obj_html);
-    this.player = element.firstChild;
-    return this.player;
-}
-
-function FlowPlayer() {
-    this.myname = "flowplayer";
-}
-FlowPlayer.prototype = new Player();
-FlowPlayer.prototype.init = function(el, url, config) {
-    this._init(el, url, config);
-    var flwplayer = config.flash;
-    var duration = (this.duration == undefined ? 0 : this.duration);
-    
-    $(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,
-            duration: duration,
-            scaling: 'fit',
-            autoBuffering: this.autobuffer,
-            bufferLength: 5
-        },
-        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) {
-        this.player.play();
-    }
-    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;
-}
-
-

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

Reply via email to