src/widgets/CurrentSegmentInfobox.js
author durandn
Fri, 03 Jul 2015 17:00:33 +0200
changeset 1040 be314c4ea4ac
child 1046 eb77616c245f
permissions -rw-r--r--
New widget CurrentSegmentInfobox that displays infos on currently viewed Segment (future features will allow for possibility to edit title descriptions and tags for current segment)

/* Widget displays info on the current segment, with possibility of config for editing description and tags */

IriSP.Widgets.CurrentSegmentInfobox = function(player, config){
    IriSP.Widgets.Widget.call(this, player, config);
};

IriSP.Widgets.CurrentSegmentInfobox.prototype = new IriSP.Widgets.Widget();

IriSP.Widgets.CurrentSegmentInfobox.prototype.defaults = {
    annotation_type: "chap",
    readonly: true,
    empty_message: false
};

IriSP.Widgets.CurrentSegmentInfobox.prototype.template = 
    "<div class='Ldt-CurrentSegmentInfobox'>" 
    + "    <div class='Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-Title'>{{title}}</div>" 
    + "    <div class='Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-Description'>{{description}}</div>" 
    + "    <div class='Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-Tags'>"
    + '        {{#tags.length}}'
    + '        <ul class="Ldt-CurrentSegmentInfobox-Tags-Ul">'
    + '        {{#tags}}'
    + '            {{#.}}'
    + '            <li class="Ldt-CurrentSegmentInfobox-Tags-Li">'
    + '                <span>{{.}}</span>'
    + '            </li>'
    + '            {{/.}}'
    + '        {{/tags}}'
    + '        </ul>'
    + '        {{/tags.length}}'
    + "    </div>" 
    + "</div>"

IriSP.Widgets.CurrentSegmentInfobox.prototype.messages = {
    fr : {
        empty : "Le player vidéo ne lit actuellement aucun segment"
    },
    en: {
        empty: "The player currently doesn't read any segment"
    }
}    
    
IriSP.Widgets.CurrentSegmentInfobox.prototype.draw = function() {
    var _this = this;
    this.segments = this.getWidgetAnnotations();
    
    this.renderTemplate();
    this.refresh();
    
    this.onMediaEvent("timeupdate", "refresh");
}

IriSP.Widgets.CurrentSegmentInfobox.prototype.refresh = function() {
    var _list = this.segments;
    
    _currentTime = this.media.getCurrentTime();
    _list = _list.filter(function(_segment){
        return (_segment.begin <= _currentTime && _segment.end >= _currentTime);
    })
    if (_list.length > 0){
        _currentSegment = _list[0];
        _data = {
            title: _currentSegment.title,
            description : _currentSegment.description,
            tags : _currentSegment.getTagTexts()
        }
        this.$.html(Mustache.to_html(this.template, _data))
    }
    else {
        var _empty_message = this.l10n.empty
        if (this.empty_message) {
            _empty_message = this.empty_message
        }
        this.$.find(".Ldt-CurrentSegmentInfobox").html("<div class='Ldt-CurrentSegmentInfobox-Element Ldt-CurrentSegmentInfobox-NoSegment'>"+_empty_message+"</div>");
    }
}