src/widgets/DailymotionPlayer.js
author ymh <ymh.work@gmail.com>
Fri, 02 Oct 2015 11:27:17 +0200
changeset 1068 7623f9af9272
parent 1013 392ddcd212d7
child 1072 ac1eacb3aa33
permissions -rw-r--r--
merge pull request #3 from O. Auber
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
     1
IriSP.Widgets.DailymotionPlayer = function(player, config) {
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
     2
    IriSP.Widgets.Widget.call(this, player, config);
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
     3
};
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
     4
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
     5
IriSP.Widgets.DailymotionPlayer.prototype = new IriSP.Widgets.Widget();
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
     6
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
     7
IriSP.Widgets.DailymotionPlayer.prototype.defaults = {
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
     8
    aspect_ratio: 14/9
1013
392ddcd212d7 Throwed in a bunch of semicolons
veltr
parents: 959
diff changeset
     9
};
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    10
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    11
IriSP.Widgets.DailymotionPlayer.prototype.draw = function() {
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    12
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    13
    if (typeof this.video === "undefined") {
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    14
        this.video = this.media.video;
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    15
    }
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    16
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    17
    this.height = this.height || Math.floor(this.width / this.aspect_ratio);
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    18
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    19
    var _media = this.media,
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    20
        videoid = null,
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    21
        _this = this,
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    22
        state = {
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    23
            pause: true,
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    24
            apiready: false,
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    25
            volume: 0,
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    26
            time: 0,
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    27
            duration: 0
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    28
        };
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    29
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    30
    var m = this.video.match(/www.dailymotion.com\/video\/(.+)/);
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    31
    if (m) {
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    32
        videoid = m[1];
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    33
    }
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    34
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    35
    var player_url = Mustache.to_html('{{ protocol }}//www.dailymotion.com/embed/video/{{ videoid }}', {
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    36
        protocol: document.location.protocol.search('http') == 0 ? document.location.protocol : 'http:',
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    37
        videoid: videoid
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    38
    });
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    39
    var params = {
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    40
        'api': 'postMessage',
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    41
        'chromeless': 1,
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    42
        'id': 'dm_player',
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    43
        'related': 0,
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    44
        'autoplay': 1
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    45
    };
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    46
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    47
    _this.$.html(Mustache.to_html('<iframe id="{{ id }}" src="{{ player_url }}?{{ params }}" width="{{ width }}" height="{{ height }}" frameborder="0"></iframe>', {
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    48
        player_url: player_url,
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    49
        params: Object.keys(params).reduce(function(a,k){a.push(k+'='+encodeURIComponent(params[k]));return a;},[]).join('&'),
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    50
        width: this.width,
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    51
        height: this.height,
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    52
        id: params.id
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    53
    }));
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    54
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    55
    function setup_media_methods () {
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    56
        var dest = _this.$.find("#" + params.id)[0].contentWindow;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    57
        var execute = function(c, v) {
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    58
            if (v !== undefined)
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    59
                c = c + "=" + v;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    60
            dest.postMessage(c, "*");
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    61
        };
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    62
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    63
        _media.getCurrentTime = function() {
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    64
            return state.time;
1013
392ddcd212d7 Throwed in a bunch of semicolons
veltr
parents: 959
diff changeset
    65
        };
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    66
        _media.getVolume = function() {
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    67
            return state.volume;
1013
392ddcd212d7 Throwed in a bunch of semicolons
veltr
parents: 959
diff changeset
    68
        };
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    69
        _media.getPaused = function() {
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    70
            return state.pause;
1013
392ddcd212d7 Throwed in a bunch of semicolons
veltr
parents: 959
diff changeset
    71
        };
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    72
        _media.getMuted = function() {
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    73
            return state.muted;
1013
392ddcd212d7 Throwed in a bunch of semicolons
veltr
parents: 959
diff changeset
    74
        };
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    75
        _media.setCurrentTime = function(_milliseconds) {
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    76
            execute("seek", _milliseconds / 1000);
1013
392ddcd212d7 Throwed in a bunch of semicolons
veltr
parents: 959
diff changeset
    77
        };
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    78
        _media.setVolume = function(_vol) {
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    79
            execute("volume", _vol * 100);
1013
392ddcd212d7 Throwed in a bunch of semicolons
veltr
parents: 959
diff changeset
    80
        };
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    81
        _media.mute = function() {
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    82
            execute("muted", 1);
1013
392ddcd212d7 Throwed in a bunch of semicolons
veltr
parents: 959
diff changeset
    83
        };
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    84
        _media.unmute = function() {
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    85
            execute("muted", 0);
1013
392ddcd212d7 Throwed in a bunch of semicolons
veltr
parents: 959
diff changeset
    86
        };
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    87
        _media.play = function() {
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    88
            execute("play");
1013
392ddcd212d7 Throwed in a bunch of semicolons
veltr
parents: 959
diff changeset
    89
        };
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    90
        _media.pause = function() {
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    91
            execute("pause");
1013
392ddcd212d7 Throwed in a bunch of semicolons
veltr
parents: 959
diff changeset
    92
        };
959
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    93
    };
ee11ed1b739e Mashup Player and Dailymotion are now widgets
veltr
parents:
diff changeset
    94
1068
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    95
    window.addEventListener("message", function (event) {
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    96
        // Parse event.data (query-string for to object)
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    97
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    98
        // Duck-checking if event.data is a string
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
    99
        if (event.data.split === undefined)
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   100
            return;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   101
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   102
        var info = event.data.split("&").map( function(s) { return s.split("="); }).reduce( function(o, v) { o[v[0]] = decodeURIComponent(v[1]); return o; }, {});
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   103
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   104
        switch (info.event) {
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   105
        case "apiready":
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   106
            state.apiready = true;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   107
            setup_media_methods();
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   108
            break;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   109
        //case "canplay":
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   110
        //    break;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   111
        case "durationchange":
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   112
            if (info.duration.slice(-2) == "sc") {
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   113
                state.duration = 1000 * Number(info.duration.slice(0, -2));
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   114
                _media.setDuration(state.duration);
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   115
            }
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   116
            break;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   117
        case "ended":
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   118
            state.pause = true;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   119
            break;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   120
        case "loadedmetadata":
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   121
            _media.trigger("loadedmetadata");
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   122
            break;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   123
        case "pause":
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   124
            state.pause = true;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   125
            _media.trigger("pause");
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   126
            break;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   127
        case "play":
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   128
            state.pause = false;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   129
            _media.trigger("play");
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   130
            break;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   131
            //case "playing":
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   132
            //    break;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   133
            //case "progress":
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   134
            //  Loading progress
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   135
            //    break;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   136
        case "seeked":
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   137
            state.time = new IriSP.Model.Time(1000 * Number(info.time));
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   138
            _media.trigger("seeked");            
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   139
            break;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   140
        case "timeupdate":
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   141
            state.time = new IriSP.Model.Time(1000 * Number(info.time));
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   142
            _media.trigger("timeupdate", state.time);
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   143
            break;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   144
        case "volumechange":
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   145
            state.muted = (info.muted == "true");
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   146
            state.volume = Number(info.volume) / 100;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   147
            break;
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   148
        }
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   149
    }, false);
7623f9af9272 merge pull request #3 from O. Auber
ymh <ymh.work@gmail.com>
parents: 1013
diff changeset
   150
};