web/res/metadataplayer/LdtPlayer-core.js
changeset 654 a5977736d2b0
parent 652 b3ccfdbd581b
child 694 e9400c80e1e4
--- a/web/res/metadataplayer/LdtPlayer-core.js	Tue Jul 03 18:19:39 2012 +0200
+++ b/web/res/metadataplayer/LdtPlayer-core.js	Fri Jul 06 18:22:13 2012 +0200
@@ -152,9 +152,9 @@
 
 IriSP.Metadataplayer.prototype.onVideoDataLoaded = function() {
     
-    /* Getting video URL from metadata if it's not in the player config options */
+    /* Setting default media from metadata */
    
-    if (typeof this.videoData !== "undefined" && typeof this.config.player.video === "undefined") {
+    if (typeof this.videoData !== "undefined") {
         
         var _media;
         
@@ -180,11 +180,12 @@
         
         this.videoData.currentMedia = _media;
         
-        if (typeof _media !== "undefined" && typeof _media.video !== "undefined") {
+        /* Getting video URL from metadata if it's not in the player config options */
+        
+        if (typeof _media !== "undefined" && typeof _media.video !== "undefined" && typeof this.config.player.video === "undefined") {
             this.config.player.video = _media.video;
-            if (typeof _media.streamer !== "undefined") {
+            if (typeof this.config.player.streamer == "undefined" && typeof _media.streamer !== "undefined") {
                 this.config.player.streamer = _media.streamer;
-                this.config.player.video = _media.video.replace(_media.streamer,'');
             }
         }
         
@@ -257,8 +258,12 @@
             var opts = IriSP.jQuery.extend({}, this.config.player);
             delete opts.container;
             delete opts.type;
+            if (typeof opts.streamer !== "undefined") {
+                opts.video = opts.video.replace(opts.streamer,"");
+            }
             opts.file = opts.video;
             delete opts.video;
+            delete opts.metadata;
 
             if(!opts.hasOwnProperty("flashplayer")) {
                 opts.flashplayer = IriSP.getLib("jwPlayerSWF");
@@ -595,19 +600,20 @@
         }
         return "autoid-" + this._ID_BASE + '-' + _n;
     },
-    regexpFromTextOrArray : function(_textOrArray) {
+    regexpFromTextOrArray : function(_textOrArray, _testOnly) {
+        var _testOnly = _testOnly || false;
         function escapeText(_text) {
             return _text.replace(/([\\\*\+\?\|\{\[\}\]\(\)\^\$\.\#\/])/gm, '\\$1');
         }
-        return new RegExp( '('
-            + (
-                typeof _textOrArray === "string"
-                ? escapeText(_textOrArray)
-                : IriSP._(_textOrArray).map(escapeText).join("|")
-            )
-            + ')',
-            'gim'
-        );
+        var _source = 
+            typeof _textOrArray === "string"
+            ? escapeText(_textOrArray)
+            : IriSP._(_textOrArray).map(escapeText).join("|");
+        if (_testOnly) {
+            return new RegExp( _source, 'im');
+        } else {
+            return new RegExp( '(' + _source + ')', 'gim');
+        }
     },
     isoToDate : function(_str) {
         // http://delete.me.uk/2005/03/iso8601.html
@@ -735,21 +741,21 @@
  * here we can search by these criteria
  */
 IriSP.Model.List.prototype.searchByTitle = function(_text) {
-    var _rgxp = IriSP.Model.regexpFromTextOrArray(_text);
+    var _rgxp = IriSP.Model.regexpFromTextOrArray(_text, true);
     return this.filter(function(_element) {
         return _rgxp.test(_element.title);
     });
 }
 
 IriSP.Model.List.prototype.searchByDescription = function(_text) {
-    var _rgxp = IriSP.Model.regexpFromTextOrArray(_text);
+    var _rgxp = IriSP.Model.regexpFromTextOrArray(_text, true);
     return this.filter(function(_element) {
         return _rgxp.test(_element.description);
     });
 }
 
 IriSP.Model.List.prototype.searchByTextFields = function(_text) {
-    var _rgxp =  IriSP.Model.regexpFromTextOrArray(_text);
+    var _rgxp =  IriSP.Model.regexpFromTextOrArray(_text, true);
     return this.filter(function(_element) {
         return _rgxp.test(_element.description) || _rgxp.test(_element.title);
     });
@@ -1477,18 +1483,6 @@
     this.$ = IriSP.jQuery('#' + this.container);
     this.$.addClass("Ldt-TraceMe Ldt-Widget").attr("widget-type", _type);
     
-    /* Does the widget require other widgets ? */
-    if (typeof this.requires !== "undefined") {
-        for (var _i = 0; _i < this.requires.length; _i++) {
-            var _subconfig = this.requires[_i];
-            _subconfig.container = IriSP._.uniqueId(this.container + '_' + _subconfig.type + '_');
-            this.$.append(IriSP.jQuery('<div>').attr("id",_subconfig.container));
-            this.player.loadWidget(_subconfig, function(_widget) {
-                _this[_subconfig.type.replace(/^./,function(_s){return _s.toLowerCase();})] = _widget
-            });
-        }
-    }
-    
     this.l10n = (
         typeof this.messages[IriSP.language] !== "undefined"
         ? this.messages[IriSP.language]
@@ -1543,6 +1537,19 @@
     });
 }
 
+IriSP.Widgets.Widget.prototype.insertSubwidget = function(_selector, _propname, _widgetoptions) {
+    var _id = _selector.attr("id"),
+        _this = this;
+    if (typeof _id == "undefined") {
+        _id = IriSP._.uniqueId(this.container + '_sub_widget_' + _widgetoptions.type);
+        _selector.attr("id", _id);
+    }
+    _widgetoptions.container = _id;
+    _this.player.loadWidget(_widgetoptions, function(_widget) {
+        _this[_propname] = _widget;
+    });
+}
+
 /**
  * This method responsible of drawing a widget on screen.
  */
@@ -1808,18 +1815,25 @@
 IriSP.PopcornReplacement.jwplayer = function(container, options) {
     /* appel du parent pour initialiser les structures communes à tous les players */
     IriSP.PopcornReplacement.player.call(this, container, options);
-  
-    this.media.duration = options.duration; /* optional */
+    
+    if (options.autostart) {
+        this.media.paused = false;
+        this.trigger("play");
+    }
  
     var _player = jwplayer(this.container),
-        _this = this;
+        _this = this,
+        _seekPause = false;
   
   /* Définition des fonctions de l'API -  */
     this.playerFns = {
         play: function() { return _player.play(true); },
         pause: function() { return _player.pause(true); },
         getPosition: function() { return _player.getPosition(); },
-        seek: function(pos) { return _player.seek(pos); },
+        seek: function(pos) {
+            _seekPause = _this.media.paused;
+            return _player.seek(pos);
+        },
         getMute: function() { return _player.getMute() },
         setMute: function(p) { return _player.setMute(p); },
         getVolume: function() { return _player.getVolume() / 100; },
@@ -1831,15 +1845,22 @@
             _this.trigger("loadedmetadata");
         },
         onTime:   function() {
-            if (_this.media.paused && _player.getState() === "PLAYING") {
-                _this.media.paused = false;
-                _this.trigger("play");
+            if (_seekPause) {
+                _player.pause(true);
+                _seekPause = false;
+            } else {
+                if (_this.media.paused && _player.getState() === "PLAYING") {
+                    _this.media.paused = false;
+                    _this.trigger("play");
+                }
             }
             _this.trigger("timeupdate");
         },
         onPlay:   function() {
-            _this.media.paused = false;
-            _this.trigger("play");
+            if (!_seekPause) {
+                _this.media.paused = false;
+                _this.trigger("play");
+            }
         },
         onPause:  function() {
             _this.media.paused = true;
@@ -2438,7 +2459,7 @@
             var _anndata = _data.annotations[0],
                 _ann = new IriSP.Model.Annotation(_anndata.id, _source);
             _ann.description = _anndata.content.data || "";
-            _ann.title = _data.creator;
+            _ann.title = _data.creator || "";
             _ann.created = new Date(_data.meta.created);
             _ann.setMedia(_anndata.media, _source);
             var _anntypes = _source.getAnnotationTypes(true).searchByTitle(_anndata.type_title);