diff -r 20e00017dd60 -r 10974bff4dae web/res/metadataplayer/Transcript.js --- a/web/res/metadataplayer/Transcript.js Fri Dec 11 18:11:13 2015 +0100 +++ b/web/res/metadataplayer/Transcript.js Tue Dec 29 13:25:14 2015 +0100 @@ -7,13 +7,13 @@ IriSP.Widgets.Transcript.prototype = new IriSP.Widgets.Widget(); IriSP.Widgets.Transcript.prototype.defaults = { - annotation_type: "Caption" - // container: "transcriptContainer" + annotation_type: "Caption", + use_vtt_track: false } IriSP.Widgets.Transcript.prototype.template = '
'; -IriSP.Widgets.Transcript.prototype.annotationTemplate = '{{ content }} '; +IriSP.Widgets.Transcript.prototype.annotationTemplate = '{{ content }} '; IriSP.Widgets.Transcript.prototype.draw = function() { var _annotations = this.getWidgetAnnotations(); @@ -23,15 +23,57 @@ _this.renderTemplate(); content = _this.$.find('.Ldt-TranscriptWidget'); - _annotations.forEach(function(_a) { - var _data = { - id : _a.id, - content : IriSP.textFieldHtml(_a.title), - begin : _a.begin.toString(), - end : _a.end.toString() - }; - var _html = Mustache.to_html(_this.annotationTemplate, _data); - var _el = IriSP.jQuery(_html); - content.append(_el); - }); + if (_this.use_vtt_track) { + // Use webvtt track. It will only work with native video player. + var widgets = _this.player.widgets.filter(function (w) { return w.type == "HtmlPlayer"; }); + if (widgets) { + var v = widgets[0].$.find("video")[0]; + // FIXME: allow to specify the used track + v.addEventListener("loadedmetadata", function () { + var track = v.textTracks[0]; + var cues = track.cues; + var i = 1; + Array.prototype.forEach.apply(cues, [ function(_c) { + _c.id = "cue" + i; + var _html = Mustache.to_html(_this.annotationTemplate, { + id : _c.id, + content : _c.text, + begin : 1000 * _c.startTime, + end : 1000 * _c.endTime + }); + i += 1; + var _el = IriSP.jQuery(_html); + content.append(_el); + } ]); + track.addEventListener("cuechange", function () { + var acues = track.activeCues; + if (acues.length > 0) { + // Update attributes for active cues + _this.$.find(".Ldt-Transcript-Annotation.active").removeClass("active"); + Array.prototype.forEach.apply(acues, [ function(_c) { + _this.$.find("#" + _c.id).addClass("active"); + } ]); + } + }, false); + content.on("click", ".Ldt-Transcript-Annotation", function () { + _this.media.setCurrentTime(this.dataset.begin); + }); + }); + } else { + console.log("cannot find a video object"); + } + } else { + // Populate with annotation data + _annotations.forEach(function(_a) { + var _data = { + id : _a.id, + content : IriSP.textFieldHtml(_a.title), + begin : _a.begin.toString(), + end : _a.end.toString() + }; + var _html = Mustache.to_html(_this.annotationTemplate, _data); + var _el = IriSP.jQuery(_html); + content.append(_el); + }); + }; };