integration/js/mediaplayer.js
author veltr
Tue, 04 Dec 2012 19:00:15 +0100
changeset 105 5b753c18e329
parent 104 1b84c7b2aeee
child 109 3034776c1f35
permissions -rw-r--r--
Merge with fafc58f5b0de64dcc47488e124147d35442c4b3f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49
a21b851538b2 Added Media page
veltr
parents:
diff changeset
     1
IriSP.mediaplayer = function(options) {
a21b851538b2 Added Media page
veltr
parents:
diff changeset
     2
    
a21b851538b2 Added Media page
veltr
parents:
diff changeset
     3
    var directory = new IriSP.Model.Directory(),
a21b851538b2 Added Media page
veltr
parents:
diff changeset
     4
        content = directory.remoteSource({
a21b851538b2 Added Media page
veltr
parents:
diff changeset
     5
            url: IriSP.endpoints.content + options.id,
a21b851538b2 Added Media page
veltr
parents:
diff changeset
     6
            serializer: IriSP.serializers.content
a21b851538b2 Added Media page
veltr
parents:
diff changeset
     7
        }),
50
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
     8
        apidirectory = new IriSP.Model.Directory(),
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
     9
        segmenttemplate = _.template(
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    10
            '<div class="media-segment" data-mashup-id="<%= annotation.project_id %>">'
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    11
            + '<div class="media-segment-section" style="left:<%= left %>px; width:<%= width %>px; background:<%= color %>; top: <%= top %>px;" data-segment-id="<%= annotation.id %>"></div>'
65
60a1e58b0a08 Changed Pointer IMGs into DIVs
veltr
parents: 50
diff changeset
    12
            + '<div class="popin media-segment-popin" style="left:<%= popleft %>px; top: <%= 5+top %>px;"><div style="left:<%= pointerpos %>px;" class="pointer"></div><div class="popin-content">'
50
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    13
            + '<h3><%= annotation.title %></h3>'
104
1b84c7b2aeee Added Translations
veltr
parents: 82
diff changeset
    14
            + '<p><%= gettext("From:") %> <span><%= annotation.begin.toString() %></span> <%= gettext("to:") %> <span><%= annotation.end.toString() %></span> (<%= gettext("duration:") %> <span><%= annotation.getDuration().toString() %></span>)</p>'
1b84c7b2aeee Added Translations
veltr
parents: 82
diff changeset
    15
            + '<p class="mashup-link"><%= gettext("From hashcut:") %> <a href="<%= IriSP.endpoints.hashcut_page + annotation.project_id %>"></a></p>'
50
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    16
            + '</div></div></div>'
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    17
        ),
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    18
        segmentlisttemplate = _.template(
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    19
            '<div class="media-segment-list" style="height: <%= height %>px"><div class="media-segment-list-inner"></div><%= segments %><div class="frise-position"></div></div>'
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    20
        ),
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    21
        projtemplate = _.template(
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    22
            '<li class="item-video mashup" data-mashup-id="<%= ldt_id %>">'
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    23
            + '<a href="<%= IriSP.endpoints.hashcut_page + ldt_id %>"><img class="thumbnail" alt="<%= title %>" src="<%= image %>"></a><div class="video-info">'
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    24
            + '<h3 class="title-video"><a href="<%= IriSP.endpoints.hashcut_page + ldt_id %>"><%= title %></a></h3><p class="description"><%= description %></p>'
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    25
            + '</p></div></li>'
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    26
        ),
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    27
        media;
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    28
    
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    29
    function mediaSegmentList(_annotations) {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    30
        var html = '',
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    31
            k = $(".Ldt-Slider").width() / media.duration,
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    32
            lines = [];
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    33
        _(_annotations).each(function(_a, i) {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    34
            var pos = k * (_a.begin + _a.end) / 2,
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    35
                corrpos = Math.max(106, Math.min(516, pos)),
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    36
                line = IriSP._(lines).find(function(line) {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    37
                    return !IriSP._(line.annotations).find(function(ann) {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    38
                        return ann.begin < _a.end && ann.end > _a.begin
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    39
                    });
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    40
                });
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    41
            if (!line) {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    42
                line = { index: lines.length, annotations: []};
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    43
                lines.push(line); 
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    44
            }
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    45
            line.annotations.push(_a);
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    46
            vizdata = {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    47
                annotation : _a,
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    48
                popleft : corrpos,
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    49
                left : k * _a.begin,
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    50
                width : k * _a.getDuration(),
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    51
                height: 8,
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    52
                top: 8 * line.index,
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    53
                pointerpos : (pos - corrpos),
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    54
                color: IriSP.vizcolors[i % IriSP.vizcolors.length]
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    55
            }
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    56
            html += segmenttemplate(vizdata);
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    57
        });
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    58
        return segmentlisttemplate({
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    59
            height: 8 * lines.length,
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    60
            segments: html
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    61
        });
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    62
    }
49
a21b851538b2 Added Media page
veltr
parents:
diff changeset
    63
    
a21b851538b2 Added Media page
veltr
parents:
diff changeset
    64
    content.onLoad(function() {
a21b851538b2 Added Media page
veltr
parents:
diff changeset
    65
        
a21b851538b2 Added Media page
veltr
parents:
diff changeset
    66
        IriSP.mashupcore(content, new IriSP.Model.Mashup(false, content));
a21b851538b2 Added Media page
veltr
parents:
diff changeset
    67
        
50
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    68
        media = content.getMedias()[0];
49
a21b851538b2 Added Media page
veltr
parents:
diff changeset
    69
        
50
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    70
        apidirectory.remoteSource({
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    71
            url: IriSP.endpoints.segment,
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    72
            url_params: {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    73
                iri_id: options.id,
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    74
                limit: 0
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    75
            },
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    76
            serializer: IriSP.serializers.segmentapi
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    77
        }).onLoad(function() {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    78
            var medias = this.getMedias(),
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    79
                annotations = this.getAnnotations(),
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    80
                projlist = {};
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    81
            $(".media-segments").html(mediaSegmentList(annotations));
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    82
            annotations.forEach(function(a) {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    83
                projlist[a.project_id] = 1 + (projlist[a.project_id] || 0);
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    84
            });
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    85
            var projkeys = _(projlist)
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    86
                .chain()
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    87
                .keys()
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    88
                .sortBy(function(v) {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    89
                    return - projlist[v];
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    90
                })
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    91
                .first(8)
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    92
                .value();
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    93
            $.ajax({
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    94
                url: IriSP.endpoints.project,
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    95
                dataType: "json",
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    96
                data: {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    97
                    format: "json",
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    98
                    ldt_id__in: projkeys
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
    99
                },
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   100
                traditional: true,
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   101
                success: function(data) {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   102
                    var proj = _(data.objects)
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   103
                        .filter(function(p) {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   104
                            return /<inst/gm.test(p.ldt);
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   105
                        });
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   106
                    _(proj).each(function(p) {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   107
                        $(".media-segment[data-mashup-id='" + p.ldt_id + "']").each(function() {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   108
                            $(this)
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   109
                                .find(".mashup-link").show()
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   110
                                .find("a").text(p.title);
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   111
                        });
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   112
                    });
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   113
                    var html = _(proj)
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   114
                        .chain()
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   115
                        .sortBy(function(p) {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   116
                            return - projlist[p.ldt_id];
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   117
                        })
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   118
                        .map(projtemplate)
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   119
                        .value()
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   120
                        .join("");
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   121
                    $(".list-video").html(html);
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   122
                }
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   123
            });
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   124
        });
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   125
    
49
a21b851538b2 Added Media page
veltr
parents:
diff changeset
   126
        content.trigger("set-current", media);
a21b851538b2 Added Media page
veltr
parents:
diff changeset
   127
        
a21b851538b2 Added Media page
veltr
parents:
diff changeset
   128
        $(".info-duration td").text(media.duration.toString());
a21b851538b2 Added Media page
veltr
parents:
diff changeset
   129
        $(".info-description td").text(media.description);
a21b851538b2 Added Media page
veltr
parents:
diff changeset
   130
        $(".info-tags td").text(media.keywords);
a21b851538b2 Added Media page
veltr
parents:
diff changeset
   131
        
a21b851538b2 Added Media page
veltr
parents:
diff changeset
   132
    });
50
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   133
    
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   134
    $(".media-segments").on("mouseover", ".media-segment", function() {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   135
        var el = $(this);
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   136
        el.find(".media-segment-popin").show();
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   137
        var pid = el.attr("data-mashup-id");
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   138
        $(".item-video[data-mashup-id='" + pid + "']").addClass("active");
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   139
    }).on("mouseout", ".media-segment", function() {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   140
        $(this).find(".media-segment-popin").hide();
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   141
        $(".item-video").removeClass("active");
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   142
    }).on("click", ".media-segment-section", function() {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   143
        var sid = $(this).attr("data-segment-id"),
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   144
            s = apidirectory.getElement(sid);
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   145
        media.setCurrentTime(s.begin);
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   146
    });
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   147
    
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   148
    $(".list-video").on("mouseover", ".item-video", function() {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   149
        var pid = $(this).attr("data-mashup-id");
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   150
        $(".media-segment[data-mashup-id='" + pid + "']").addClass("active");
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   151
    }).on("mouseout", ".item-video", function() {
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   152
        $(".media-segment").removeClass("active");
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   153
    });
49
a21b851538b2 Added Media page
veltr
parents:
diff changeset
   154
}
50
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   155
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   156
/* END mediaplayer.js */
89e152523cb6 Improving media page
veltr
parents: 49
diff changeset
   157