src/widgets/MashupPlayer.js
changeset 1072 ac1eacb3aa33
parent 1022 793b3727d433
--- a/src/widgets/MashupPlayer.js	Sun Nov 12 22:07:33 2017 +0100
+++ b/src/widgets/MashupPlayer.js	Wed Sep 04 17:32:50 2024 +0200
@@ -1,19 +1,23 @@
-IriSP.Widgets.MashupPlayer = function(player, config) {
-    IriSP.Widgets.Widget.call(this, player, config);
-    this.is_mashup = true;
-};
-
-IriSP.Widgets.MashupPlayer.prototype = new IriSP.Widgets.Widget();
+import _ from "lodash";
+import jQuery from "jquery";
+import mashupPlayerStyles from "./MashupPlayer.module.css";
 
-IriSP.Widgets.MashupPlayer.prototype.defaults = {
-    aspect_ratio: 14/9,
-    split_screen: false,
-    player_type: "PopcornPlayer",
-    background: "#000000"
-};
+const MashupPlayer = function (ns) {
+  return class extends ns.Widgets.Widget {
+    constructor(player, config) {
+      super(player, config);
+      this.is_mashup = true;
+    }
 
-IriSP.Widgets.MashupPlayer.prototype.draw = function() {
-    var _this = this,
+    static defaults = {
+      aspect_ratio: 14 / 9,
+      split_screen: false,
+      player_type: "PopcornPlayer",
+      background: "#000000",
+    };
+
+    draw() {
+      var _this = this,
         _mashup = this.media,
         _currentMedia = null,
         _currentAnnotation = null,
@@ -24,233 +28,240 @@
         _seekdiv,
         _timedelta,
         medialist = _mashup.getMedias();
-    
-    _mashup.paused = (!this.autostart && !this.autoplay);
-    
-    function changeCurrentAnnotation() {
+
+      _mashup.paused = !this.autostart && !this.autoplay;
+
+      function changeCurrentAnnotation() {
         if (_timecode >= _mashup.duration) {
-            if (!_mashup.paused) {
-                _mashup.paused = true;
-                _mashup.trigger("pause");
-            }
-            _timecode = 0;
+          if (!_mashup.paused) {
+            _mashup.paused = true;
+            _mashup.trigger("pause");
+          }
+          _timecode = 0;
         }
-        var _annotation = _mashup.getAnnotationAtTime( _timecode );
+        var _annotation = _mashup.getAnnotationAtTime(_timecode);
         if (typeof _annotation === "undefined") {
-            if (_currentMedia) {
-                _currentMedia.pause();
-                if (!_mashup.paused) {
-                    _mashup.paused = true;
-                    _mashup.trigger("pause");
-                }
+          if (_currentMedia) {
+            _currentMedia.pause();
+            if (!_mashup.paused) {
+              _mashup.paused = true;
+              _mashup.trigger("pause");
             }
-            return;
+          }
+          return;
         }
         if (_annotation !== _currentAnnotation) {
-            _currentAnnotation = _annotation;
-            _segmentBegin = _currentAnnotation.annotation.begin.milliseconds;
-            _segmentEnd = _currentAnnotation.annotation.end.milliseconds;
-            _timedelta = _segmentBegin - _currentAnnotation.begin.milliseconds;
-            _currentMedia = _currentAnnotation.getMedia();
-            
-            for (var _i = 0; _i < medialist.length; _i++) {
-                if (medialist[_i].id !== _currentMedia.id) {
-                    if (!_this.split_screen) {
-                        medialist[_i].hide();
-                    }
-                    medialist[_i].pause();
-                } else {
-                    medialist[_i].show();
-                }
+          _currentAnnotation = _annotation;
+          _segmentBegin = _currentAnnotation.annotation.begin.milliseconds;
+          _segmentEnd = _currentAnnotation.annotation.end.milliseconds;
+          _timedelta = _segmentBegin - _currentAnnotation.begin.milliseconds;
+          _currentMedia = _currentAnnotation.getMedia();
+
+          for (var _i = 0; _i < medialist.length; _i++) {
+            if (medialist[_i].id !== _currentMedia.id) {
+              if (!_this.split_screen) {
+                medialist[_i].hide();
+              }
+              medialist[_i].pause();
+            } else {
+              medialist[_i].show();
             }
-            
-    /* PRELOADING */
-            var _preloadedMedias = [],
-                _toPreload = _mashup.getAnnotations().filter(function(_a) {
-                return (_a.begin >= _currentAnnotation.end && _a.getMedia() !== _currentMedia);
+          }
+
+          /* PRELOADING */
+          var _preloadedMedias = [],
+            _toPreload = _mashup.getAnnotations().filter(function (_a) {
+              return (
+                _a.begin >= _currentAnnotation.end &&
+                _a.getMedia() !== _currentMedia
+              );
             });
-            IriSP._(_toPreload).each(function(_a) {
-                var _media = _a.getMedia();
-                if (IriSP._(_preloadedMedias).indexOf(_media.id) === -1) {
-                    _preloadedMedias.push(_media.id);
-                    _media.setCurrentTime(_a.annotation.begin.getSeconds());
-                    _media.seeking = true;
-/*
+          _(_toPreload).each(function (_a) {
+            var _media = _a.getMedia();
+            if (_(_preloadedMedias).indexOf(_media.id) === -1) {
+              _preloadedMedias.push(_media.id);
+              _media.setCurrentTime(_a.annotation.begin.getSeconds());
+              _media.seeking = true;
+              /*
                     console.log("Preloading ", _media.id, " at t=", _a.annotation.begin.getSeconds());
 */
-                }
-            });
-            
-    //        console.log("Changed segment: media="+ this.currentMedia.id + ", from=" + this.segmentBegin + " to=" + this.segmentEnd +", timedelta = ", this.timedelta)
-    //    } else {
-    //        console.log("changeCurrentAnnotation called, but segment hasn't changed");
+            }
+          });
+
+          //        console.log("Changed segment: media="+ this.currentMedia.id + ", from=" + this.segmentBegin + " to=" + this.segmentEnd +", timedelta = ", this.timedelta)
+          //    } else {
+          //        console.log("changeCurrentAnnotation called, but segment hasn't changed");
         }
-        
-        _currentMedia.setCurrentTime( _timecode + _timedelta);
+
+        _currentMedia.setCurrentTime(_timecode + _timedelta);
         _currentMedia.seeking = true;
-        
+
         if (!_mashup.paused) {
-            _currentMedia.play();
-            _seeking = true;
-            _seekdiv.show();
+          _currentMedia.play();
+          _seeking = true;
+          _seekdiv.show();
         }
-/*
+        /*
         console.log("Setting time of media", _currentMedia.id, "to", _timecode + _timedelta)     
 */
-        _mashup.trigger("timeupdate", new IriSP.Model.Time(_timecode));
+        _mashup.trigger("timeupdate", new ns.Model.Time(_timecode));
+      }
 
-    }
-    
-    if (!this.height) {
-        this.height = Math.floor(this.width/this.aspect_ratio);
+      if (!this.height) {
+        this.height = Math.floor(this.width / this.aspect_ratio);
         this.$.css({
-            height: this.height
+          height: this.height,
         });
-    }
-    
-    this.$.css({
-        background: this.background
-    });
-    
-    var _grid = Math.ceil(Math.sqrt(medialist.length)),
-        _width = (this.split_screen ? this.width / _grid : this.width),
-        _height = (this.split_screen ? this.height / _grid : this.height);
+      }
+
+      this.$.css({
+        background: this.background,
+      });
+
+      var _grid = Math.ceil(Math.sqrt(medialist.length)),
+        _width = this.split_screen ? this.width / _grid : this.width,
+        _height = this.split_screen ? this.height / _grid : this.height;
 
-    IriSP._(medialist).each(function(_media, _key) {
-        var _el = IriSP.jQuery('<div class="Ldt-MashupPlayer-Media"><div class="Ldt-MashupPlayer-Subwidget"></div></div>');
+      _(medialist).each(function (_media, _key) {
+        var _el = jQuery(
+          '<div class="Ldt-MashupPlayer-Media"><div class="Ldt-MashupPlayer-Subwidget"></div></div>'
+        );
         _el.css({
-            top: (_this.split_screen ? _height * Math.floor(_key / _grid) : 0),
-            left: (_this.split_screen ? _width * (_key % _grid) : 0),
-            height: _height,
-            width: _width,
-            display: (_this.split_screen ? "block" : "none")
+          top: _this.split_screen ? _height * Math.floor(_key / _grid) : 0,
+          left: _this.split_screen ? _width * (_key % _grid) : 0,
+          height: _height,
+          width: _width,
+          display: _this.split_screen ? "block" : "none",
         });
         _this.$.append(_el);
-        
+
         _this.insertSubwidget(
-            _el.find(".Ldt-MashupPlayer-Subwidget"),
-            IriSP._({
-                type: _this.player_type,
-                media_id: _media.id,
-                height: _height,
-                width: _width,
-                url_transform: _this.url_transform
-            }).extend(_this.player_options)
+          _el.find(".Ldt-MashupPlayer-Subwidget"),
+          _({
+            type: _this.player_type,
+            media_id: _media.id,
+            height: _height,
+            width: _width,
+            url_transform: _this.url_transform,
+          }).extend(_this.player_options)
         );
-        
+
         _media.loadedMetadata = false;
-        _media.show = function() {
-            _el.show();
+        _media.show = function () {
+          _el.show();
         };
-        _media.hide = function() {
-            _el.hide();
+        _media.hide = function () {
+          _el.hide();
         };
-        _media.on("loadedmetadata", function() {
-            _media.loadedMetadata = true;
-            var _allLoaded = true;
-            for (var _i = 0; _i < medialist.length; _i++) {
-                _allLoaded = _allLoaded && medialist[_i].loadedMetadata;
-            }
-            if (_allLoaded) {
-                _seekdiv.fadeOut();
-                changeCurrentAnnotation();
-                _mashup.trigger("loadedmetadata");
-            }
+        _media.on("loadedmetadata", function () {
+          _media.loadedMetadata = true;
+          var _allLoaded = true;
+          for (var _i = 0; _i < medialist.length; _i++) {
+            _allLoaded = _allLoaded && medialist[_i].loadedMetadata;
+          }
+          if (_allLoaded) {
+            _seekdiv.fadeOut();
+            changeCurrentAnnotation();
+            _mashup.trigger("loadedmetadata");
+          }
         });
-        _media.on("timeupdate", function(_time) {
-            if (!_mashup.paused && _media === _currentMedia && !_media.seeking) {
-/*
+        _media.on("timeupdate", function (_time) {
+          if (!_mashup.paused && _media === _currentMedia && !_media.seeking) {
+            /*
                 var _status = "Timeupdate from " + _media.id + " at time " + _time;
 */
-                if ( _time < _segmentEnd ) {
-                    if ( _time >= _segmentBegin ) {
-                        _timecode = _time - _timedelta;
-/*
+            if (_time < _segmentEnd) {
+              if (_time >= _segmentBegin) {
+                _timecode = _time - _timedelta;
+                /*
                         _status += " within segment";
 */
-                    } else {
-                        _timecode = _segmentBegin - _timedelta;
-                        _media.setCurrentTime(_segmentBegin);
-/*
+              } else {
+                _timecode = _segmentBegin - _timedelta;
+                _media.setCurrentTime(_segmentBegin);
+                /*
                         _status += " before segment";
 */
-                    }
-                } else {
-                    _timecode = _segmentEnd - _timedelta;
-                    _media.pause();
-                    changeCurrentAnnotation();
-/*
+              }
+            } else {
+              _timecode = _segmentEnd - _timedelta;
+              _media.pause();
+              changeCurrentAnnotation();
+              /*
                     _status += " after segment";
 */
-                }
-/*
+            }
+            /*
                 _status += " (" + _segmentBegin + " to " + _segmentEnd + ")" + ", translated to " + _timecode;
                 console.log(_status);
 */
-                _mashup.trigger("timeupdate", new IriSP.Model.Time(_timecode));
-            }
+            _mashup.trigger("timeupdate", new ns.Model.Time(_timecode));
+          }
         });
-        _media.on("seeked", function() {
-            _media.seeking = false;
-            if (_media === _currentMedia && _seeking) {
-                _seeking = false;
-                _seekdiv.hide();
-            }
+        _media.on("seeked", function () {
+          _media.seeking = false;
+          if (_media === _currentMedia && _seeking) {
+            _seeking = false;
+            _seekdiv.hide();
+          }
         });
-        _media.on("play", function() {
-            if (_media === _currentMedia) {
-                _mashup.trigger("play");
-            }
+        _media.on("play", function () {
+          if (_media === _currentMedia) {
+            _mashup.trigger("play");
+          }
         });
-        _media.on("pause", function() {
-            if (_media === _currentMedia) {
-                _mashup.trigger("pause");
-            }
+        _media.on("pause", function () {
+          if (_media === _currentMedia) {
+            _mashup.trigger("pause");
+          }
         });
-        _media.on("volumechange", function() {
-            _mashup.muted = _media.muted;
-            _mashup.volume = _media.volume;
-            _mashup.trigger("volumechange");
+        _media.on("volumechange", function () {
+          _mashup.muted = _media.muted;
+          _mashup.volume = _media.volume;
+          _mashup.trigger("volumechange");
         });
-    });
-    
-    _seekdiv = IriSP.jQuery('<div class="Ldt-MashupPlayer-Waiting"></div>');
-    
-    this.$.append(_seekdiv);
+      });
+
+      _seekdiv = jQuery('<div class="Ldt-MashupPlayer-Waiting"></div>');
 
-    // Binding functions to Popcorn
-    
-    _mashup.on("setcurrenttime", function(_milliseconds) {
+      this.$.append(_seekdiv);
+
+      // Binding functions to Popcorn
+
+      _mashup.on("setcurrenttime", function (_milliseconds) {
         _timecode = _milliseconds;
         changeCurrentAnnotation();
-    });
-    
-    _mashup.on("setvolume", function(_vol) {
+      });
+
+      _mashup.on("setvolume", function (_vol) {
         for (var _i = 0; _i < medialist.length; _i++) {
-            medialist[_i].setVolume(_vol);
+          medialist[_i].setVolume(_vol);
         }
         _mashup.volume = _vol;
-    });
-    
-    _mashup.on("setmuted", function(_muted) {
+      });
+
+      _mashup.on("setmuted", function (_muted) {
         for (var _i = 0; _i < medialist.length; _i++) {
-            medialist[_i].setMuted(_muted);
+          medialist[_i].setMuted(_muted);
         }
         _mashup.muted = _muted;
-    });
-    
-    _mashup.on("setplay", function() {
+      });
+
+      _mashup.on("setplay", function () {
         _mashup.paused = false;
         changeCurrentAnnotation();
-    });
-    
-    _mashup.on("setpause", function() {
+      });
+
+      _mashup.on("setpause", function () {
         _mashup.paused = true;
         if (_currentMedia) {
-            _currentMedia.pause();
+          _currentMedia.pause();
         }
-    });
-    
-    _mashup.on("loadedmetadata", changeCurrentAnnotation);
-   
-};
\ No newline at end of file
+      });
+
+      _mashup.on("loadedmetadata", changeCurrentAnnotation);
+    }
+  };
+};
+
+export { MashupPlayer, mashupPlayerStyles };