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