diff -r 982d2226771c -r cfcbac34d020 src/widgets/MultiSegments.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/widgets/MultiSegments.js Fri Nov 16 17:36:56 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("
"), + annotationWidget: IriSP.jQuery("
"), + 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