src/widgets/Annotation.js
author veltr
Mon, 14 May 2012 16:59:07 +0200
branchnew-model
changeset 902 14022f1d49ab
parent 880 4c7b33bf2795
child 904 510ebab76fa3
permissions -rw-r--r--
Added MediaList widget for mashup
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
     1
// TODO: Open share links in a small window - Migrate Timeupdate functions to Extract
876
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
     2
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
     3
IriSP.Widgets.Annotation = function(player, config) {
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
     4
    IriSP.Widgets.Widget.call(this, player, config);
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
     5
    this.lastAnnotation = false;
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
     6
};
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
     7
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
     8
IriSP.Widgets.Annotation.prototype = new IriSP.Widgets.Widget();
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
     9
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    10
IriSP.Widgets.Annotation.prototype.messages = {
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    11
    "fr": {
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    12
        share_on: "Partager sur",
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    13
        watching: "Je regarde ",
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    14
        on_site: " sur ",
902
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
    15
        tags: "Mots-clés :",
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
    16
        excerpt_from: "Extrait de :"
876
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    17
    },
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    18
    "en": {
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    19
        share_on: "Share on",
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    20
        watching: "I'm watching ",
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    21
        on_site: " on ",
902
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
    22
        tags: "Keywords:",
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
    23
        excerpt_from: "Excerpt from:"
876
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    24
    }
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    25
}
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    26
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    27
IriSP.Widgets.Annotation.prototype.template =
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    28
    '<div class="Ldt-Annotation-Widget {{#show_top_border}}Ldt-Annotation-ShowTop{{/show_top_border}}">'
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    29
    + '<div class="Ldt-Annotation-Inner Ldt-Annotation-Empty"><div class="Ldt-Annotation-ShareIcons Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty">'
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    30
    + '<a href="#" target="_blank" class="Ldt-Annotation-Share Ldt-Annotation-Fb" title="{{l10n.share_on}} Facebook"></a>'
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    31
    + '<a href="#" target="_blank" class="Ldt-Annotation-Share Ldt-Annotation-Twitter" title="{{l10n.share_on}} Twitter"></a>'
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    32
    + '<a href="#" target="_blank" class="Ldt-Annotation-Share Ldt-Annotation-Gplus" title="{{l10n.share_on}} Google+"></a>'
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    33
    + '</div><h3 class="Ldt-Annotation-HiddenWhenEmpty"><span class="Ldt-Annotation-Title"></span> <span class="Ldt-Annotation-Time">'
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    34
    + '( <span class="Ldt-Annotation-Begin"></span> - <span class="Ldt-Annotation-End"></span> )</span></h3>'
902
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
    35
    + '<h3 class="Ldt-Annotation-MashupOrigin Ldt-Annotation-HiddenWhenEmpty">{{l10n.excerpt_from}} <span class="Ldt-Annotation-MashupMedia"></span> <span class="Ldt-Annotation-Time">'
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
    36
    + '( <span class="Ldt-Annotation-MashupBegin"></span> - <span class="Ldt-Annotation-MashupEnd"></span> )</span></h3>'
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    37
    + '<p class="Ldt-Annotation-Description Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty"></p>'
902
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
    38
    + '<div class="Ldt-Annotation-Tags-Block Ldt-Annotation-HiddenWhenMinimized Ldt-Annotation-HiddenWhenEmpty Ldt-Annotation-NoTags"><span class="Ldt-Annotation-TagTitle">{{l10n.tags}}</span><ul class="Ldt-Annotation-Tags"></ul></div></div></div>';
876
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    39
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    40
IriSP.Widgets.Annotation.prototype.defaults = {
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    41
    annotation_type : "chap",
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    42
    show_top_border : false,
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    43
    site_name : "Lignes de Temps"
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    44
}
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    45
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    46
IriSP.Widgets.Annotation.prototype.draw = function() {
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    47
    this.renderTemplate();
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    48
    this.bindPopcorn("timeupdate","onTimeupdate");
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    49
    this.bindPopcorn("IriSP.Annotation.hide","hide");
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    50
    this.bindPopcorn("IriSP.Annotation.show","show");
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    51
    this.bindPopcorn("IriSP.Annotation.minimize","minimize");
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    52
    this.bindPopcorn("IriSP.Annotation.maximize","maximize");
876
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    53
    this.onTimeupdate();
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    54
}
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    55
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    56
IriSP.Widgets.Annotation.prototype.onTimeupdate = function() {
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    57
    var _time = Math.floor(this.player.popcorn.currentTime() * 1000),
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    58
        _list = this.getWidgetAnnotations().filter(function(_annotation) {
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    59
            return _annotation.begin <= _time && _annotation.end > _time;
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    60
        });
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    61
    if (_list.length) {
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    62
        if (_list[0].id !== this.lastAnnotation) {
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    63
            this.drawAnnotation(_list[0]);
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    64
            this.player.popcorn.trigger("IriSP.Annotation.boundsChanged",[ _list[0].begin.valueOf(), _list[0].end.valueOf() ]);
876
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    65
        }
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    66
        this.player.popcorn.trigger("IriSP.Arrow.updatePosition",{widget: this.type, time: ( _list[0].begin + _list[0].end ) / 2});
876
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    67
    }
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    68
    else {
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    69
        this.lastAnnotation = false;
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    70
        this.$.find(".Ldt-Annotation-Inner").addClass("Ldt-Annotation-Empty");
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    71
        this.player.popcorn.trigger("IriSP.Arrow.updatePosition",{widget: this.type, time: _time});
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    72
        this.player.popcorn.trigger("IriSP.Annotation.boundsChanged",[ _time, _time ]);
876
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    73
    }
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    74
}
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    75
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    76
IriSP.Widgets.Annotation.prototype.drawAnnotation = function(_annotation) {
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    77
    this.lastAnnotation = _annotation.id;
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    78
    var _url = (typeof _annotation.url !== "undefined" 
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
    79
            ? _annotation.url
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    80
            : (document.location.href.replace(/#.*$/,'') + '#id='  + _annotation.namespacedId.name));
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    81
    var _text = this.l10n.watching + _annotation.title + (this.site_name ? this.l10n.on_site + this.site_name : '');
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    82
    var _tags = _annotation.getTagTexts();
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    83
    if (_tags.length) {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    84
        var _html = IriSP._(_tags).map(function(_tag) {
902
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
    85
            return '<li class="Ldt-Annotation-TagLabel"><span>' + _tag + '</span></li>';
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    86
        }).join("");
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    87
        this.$.find(".Ldt-Annotation-Tags").html(_html);
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    88
        this.$.find(".Ldt-Annotation-Tags-Block").removeClass("Ldt-Annotation-NoTags");
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    89
    } else {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    90
        this.$.find(".Ldt-Annotation-Tags-Block").addClass("Ldt-Annotation-NoTags");
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    91
    }
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    92
    this.$.find(".Ldt-Annotation-Title").html(_annotation.title);
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    93
    this.$.find(".Ldt-Annotation-Description").html(_annotation.description);
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    94
    this.$.find(".Ldt-Annotation-Begin").html(_annotation.begin.toString());
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
    95
    this.$.find(".Ldt-Annotation-End").html(_annotation.end.toString());
902
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
    96
    if (_annotation.elementType === "mashedAnnotation") {
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
    97
        this.$.find('.Ldt-Annotation-Inner').addClass("Ldt-Annotation-isMashup");
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
    98
        this.$.find(".Ldt-Annotation-MashupMedia").html(_annotation.getMedia().title);
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
    99
        this.$.find(".Ldt-Annotation-MashupBegin").html(_annotation.annotation.begin.toString());
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
   100
        this.$.find(".Ldt-Annotation-MashupEnd").html(_annotation.annotation.end.toString());
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
   101
    } else {
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
   102
        this.$.find('.Ldt-Annotation-Inner').removeClass("Ldt-Annotation-isMashup");
14022f1d49ab Added MediaList widget for mashup
veltr
parents: 880
diff changeset
   103
    }
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   104
    this.$.find(".Ldt-Annotation-Fb").attr("href", "http://www.facebook.com/share.php?" + IriSP.jQuery.param({ u: _url, t: _text }));
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   105
    this.$.find(".Ldt-Annotation-Twitter").attr("href", "https://twitter.com/intent/tweet?" + IriSP.jQuery.param({ url: _url, text: _text }));
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   106
    this.$.find(".Ldt-Annotation-Gplus").attr("href", "https://plusone.google.com/_/+1/confirm?" + IriSP.jQuery.param({ url: _url, title: _text }));
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   107
    this.$.find(".Ldt-Annotation-Inner").removeClass("Ldt-Annotation-Empty");
876
03967b6ada7c ArrowWidget, AnnotationWidget
veltr
parents:
diff changeset
   108
}
880
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   109
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   110
IriSP.Widgets.Annotation.prototype.hide = function() {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   111
    this.$.slideUp();
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   112
}
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   113
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   114
IriSP.Widgets.Annotation.prototype.show = function() {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   115
    this.$.slideDown();
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   116
}
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   117
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   118
IriSP.Widgets.Annotation.prototype.minimize = function() {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   119
    this.$.find('.Ldt-Annotation-Inner').addClass("Ldt-Annotation-Minimized");
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   120
}
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   121
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   122
IriSP.Widgets.Annotation.prototype.maximize = function() {
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   123
    this.$.find('.Ldt-Annotation-Inner').removeClass("Ldt-Annotation-Minimized");
4c7b33bf2795 Started work on CreateAnnotation and Mediafragment
veltr
parents: 876
diff changeset
   124
}