web/res/metadataplayer/MultiSegments.js
changeset 729 f411402f80e4
child 778 525f00c2d6ac
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/res/metadataplayer/MultiSegments.js	Fri Dec 07 11:16:46 2012 +0100
@@ -0,0 +1,120 @@
+IriSP.Widgets.MultiSegments = function(player, config) {
+    IriSP.Widgets.Widget.call(this, player, config);
+};
+
+IriSP.Widgets.MultiSegments.prototype = new IriSP.Widgets.Widget();
+
+IriSP.Widgets.MultiSegments.prototype.defaults = {
+    annotation_show_arrow: true,
+    annotation_start_minimized: true,
+    annotation_show_annotation_type: true,
+    show_all: false
+}
+
+IriSP.Widgets.MultiSegments.prototype.draw = function() {
+    var _this = this,
+        lines = [],
+        currentLine = null,
+        segmentsopts = {},
+        annotationopts = {};
+    IriSP._(this).each(function(_v,_k) {
+        if (/^segments_/.test(_k)) {
+            segmentsopts[_k.replace(/^segments_/,"")] = _v;
+        }
+        if (/^annotation_/.test(_k)) {
+            annotationopts[_k.replace(/^annotation_/,"")] = _v;
+        }
+    })
+    this.source.getAnnotationTypes().forEach(function(_anntype) {
+        var segments = _anntype.getAnnotations().filter(function(_ann) {
+            return _ann.getDuration() > 0;
+        });
+        if (segments.length) {
+            
+            var visible = false;
+            
+            var line = {
+                segmentWidget: IriSP.jQuery("<div>"),
+                annotationWidget: IriSP.jQuery("<div>"),
+                hasSegmentsNow: function() {
+                    var _time = _this.media.getCurrentTime();
+                    return !!segments.filter(function(_annotation) {
+                        return _annotation.begin <= _time && _annotation.end > _time;
+                    }).length;
+                },
+                hide: function() {
+                    if (visible) {
+                        visible = false;
+                        this.annotationWidget.slideUp();
+                    }
+                },
+                show: function() {
+                    if (!visible) {
+                        visible = true;
+                        this.annotationWidget.slideDown();
+                    }
+                }
+            }
+                
+                
+            line.segmentWidget
+                .addClass("Ldt-MultiSegments-Segment")
+                .appendTo(_this.$);
+                
+            if (!_this.show_all) {
+                line.segmentWidget.mouseenter(function() {
+                    if (line.hasSegmentsNow()) {
+                        currentLine = line;
+                        checkVisibilities();
+                    }
+                });
+            }
+            
+            line.annotationWidget
+                .addClass("Ldt-MultiSegments-Annotation")
+                .appendTo(_this.$)
+                .hide();
+                
+            _this.insertSubwidget(
+                line.segmentWidget,
+                IriSP._({
+                    type: "Segments",
+                    annotation_type: _anntype
+                }).extend(segmentsopts)
+            );
+            
+            _this.insertSubwidget(
+                line.annotationWidget,
+                IriSP._({
+                    type: "Annotation",
+                    annotation_type: _anntype
+                }).extend(annotationopts)
+            );
+            
+            lines.push(line);
+        }
+    });
+    var _annotationWidgets = _this.$.find(".Ldt-MultiSegments-Annotation")
+    
+    function checkVisibilities(_time) {
+        if (!_this.show_all && currentLine && !currentLine.hasSegmentsNow()) {
+            currentLine = undefined;
+        }
+        IriSP._(lines).each(function(line) {
+            if (line.hasSegmentsNow()) {
+                if (!_this.show_all && !currentLine) {
+                    currentLine = line;
+                }
+                if (_this.show_all || line === currentLine) {
+                    line.show();
+                } else {
+                    line.hide();
+                }
+            } else {
+                line.hide();
+            }
+        });
+    }
+    
+    this.onMediaEvent("timeupdate", checkVisibilities);
+}
\ No newline at end of file