cms/app-client/app/components/player-component.js
author Chloe Laisne <chloe.laisne@gmail.com>
Sun, 02 Oct 2016 15:24:56 +0200
changeset 311 f4327199e8f0
parent 302 973df1349591
child 306 3fccf43160a7
permissions -rw-r--r--
Solve count value on discourses
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
86
15ded106ef1a add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff changeset
     1
import Ember from 'ember';
261
02e2396bcbbc Migrate to ember 2.7 + correct jquery null context error + declare shim for popcorn (instead of silencing the JSHint error)
ymh <ymh.work@gmail.com>
parents: 254
diff changeset
     2
import Popcorn from 'popcorn';
86
15ded106ef1a add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff changeset
     3
15ded106ef1a add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff changeset
     4
export default Ember.Component.extend({
191
db5711fbbb6c Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents: 94
diff changeset
     5
    classNames: ['player-component'],
264
e0fc9f698b9b undo bad merge on player component + correct jshint
ymh <ymh.work@gmail.com>
parents: 262
diff changeset
     6
    classNameBindings: ['video:video'],
262
e999bcaa0c08 Migration to ember 2.8 beta
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
     7
    video: Ember.computed.alias('player.model.video'),
209
35cb7200bb0a Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents: 192
diff changeset
     8
35cb7200bb0a Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents: 192
diff changeset
     9
    player: Ember.inject.service(),
211
7451203a1321 Setup progress bar
Chloe Laisne <chloe.laisne@gmail.com>
parents: 210
diff changeset
    10
    popcorn: null,
209
35cb7200bb0a Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents: 192
diff changeset
    11
211
7451203a1321 Setup progress bar
Chloe Laisne <chloe.laisne@gmail.com>
parents: 210
diff changeset
    12
    head: 0,
7451203a1321 Setup progress bar
Chloe Laisne <chloe.laisne@gmail.com>
parents: 210
diff changeset
    13
    remaining: 0,
86
15ded106ef1a add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff changeset
    14
212
f2c6080a73aa Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents: 211
diff changeset
    15
    isFirst: false,
f2c6080a73aa Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents: 211
diff changeset
    16
    isLast: false,
f2c6080a73aa Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents: 211
diff changeset
    17
f2c6080a73aa Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents: 211
diff changeset
    18
    item: Ember.computed('player.model', function() {
f2c6080a73aa Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents: 211
diff changeset
    19
        return this.get('player').get('model');
210
08ad36c693b1 Player design
Chloe Laisne <chloe.laisne@gmail.com>
parents: 209
diff changeset
    20
    }),
08ad36c693b1 Player design
Chloe Laisne <chloe.laisne@gmail.com>
parents: 209
diff changeset
    21
302
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    22
    didRender: function() {
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    23
        this.textAutoscroll(Ember.$('#' + this.elementId).find('.title'));
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    24
        this.textAutoscroll(Ember.$('#' + this.elementId).find('.author'));
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    25
    },
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    26
212
f2c6080a73aa Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents: 211
diff changeset
    27
    modelLoaded: Ember.observer('player.model', function() {
f2c6080a73aa Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents: 211
diff changeset
    28
        var items = this.get('player').get('items');
f2c6080a73aa Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents: 211
diff changeset
    29
        var index = items.indexOf(this.get('player').get('item'));
f2c6080a73aa Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents: 211
diff changeset
    30
        this.set('isFirst', index === 0);
f2c6080a73aa Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents: 211
diff changeset
    31
        this.set('isLast', index === items.length - 1);
240
aa101458cd4e Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents: 220
diff changeset
    32
        if(this.get('player').get('playing')) {
aa101458cd4e Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents: 220
diff changeset
    33
            this.play();
aa101458cd4e Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents: 220
diff changeset
    34
        }
191
db5711fbbb6c Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents: 94
diff changeset
    35
    }),
86
15ded106ef1a add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff changeset
    36
242
523ca6e73353 Add video player
Chloe Laisne <chloe.laisne@gmail.com>
parents: 241
diff changeset
    37
    itemLoaded: Ember.observer('player.model.media', function() {
215
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
    38
        this.get('popcorn').load();
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
    39
    }),
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
    40
248
256272c33349 Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents: 247
diff changeset
    41
    playingObserver: Ember.observer('player.playing', function() {
256272c33349 Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents: 247
diff changeset
    42
        if(this.get('player').get('playing')) {
256272c33349 Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents: 247
diff changeset
    43
            this.play();
256272c33349 Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents: 247
diff changeset
    44
        } else {
256272c33349 Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents: 247
diff changeset
    45
            this.pause();
262
e999bcaa0c08 Migration to ember 2.8 beta
ymh <ymh.work@gmail.com>
parents: 261
diff changeset
    46
        }
248
256272c33349 Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents: 247
diff changeset
    47
    }),
256272c33349 Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents: 247
diff changeset
    48
209
35cb7200bb0a Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents: 192
diff changeset
    49
    init: function() {
249
e4204b1a579a Quickfix micro-cuts
Chloe Laisne <chloe.laisne@gmail.com>
parents: 248
diff changeset
    50
        var self = this;
e4204b1a579a Quickfix micro-cuts
Chloe Laisne <chloe.laisne@gmail.com>
parents: 248
diff changeset
    51
        this.get('player').on('progressupdate', function(progress) {
e4204b1a579a Quickfix micro-cuts
Chloe Laisne <chloe.laisne@gmail.com>
parents: 248
diff changeset
    52
            self.get('popcorn').currentTime(progress / 1000);
e4204b1a579a Quickfix micro-cuts
Chloe Laisne <chloe.laisne@gmail.com>
parents: 248
diff changeset
    53
        });
e4204b1a579a Quickfix micro-cuts
Chloe Laisne <chloe.laisne@gmail.com>
parents: 248
diff changeset
    54
209
35cb7200bb0a Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents: 192
diff changeset
    55
        this._super(...arguments);
35cb7200bb0a Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents: 192
diff changeset
    56
    },
35cb7200bb0a Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents: 192
diff changeset
    57
191
db5711fbbb6c Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents: 94
diff changeset
    58
    didInsertElement: function() {
264
e0fc9f698b9b undo bad merge on player component + correct jshint
ymh <ymh.work@gmail.com>
parents: 262
diff changeset
    59
        this.set('popcorn', new Popcorn('#popcorn-audio'));
215
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
    60
        this.get('popcorn').on('loadeddata', Ember.run.bind(this, this.get('onUpdate')));
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
    61
        this.get('popcorn').on('timeupdate', Ember.run.bind(this, this.get('onUpdate')));
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
    62
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
    63
        this.get('player').on('reset', Ember.run.bind(this, function(id) {
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
    64
            if(this.get('player').get('item') !== id) {
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
    65
                this.get('popcorn').on('loadeddata', Ember.run.bind(this, this.get('play')));
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
    66
            } else {
241
da3c6ba8a80b Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents: 240
diff changeset
    67
                this.send('toggle');
215
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
    68
            }
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
    69
        }));
211
7451203a1321 Setup progress bar
Chloe Laisne <chloe.laisne@gmail.com>
parents: 210
diff changeset
    70
    },
7451203a1321 Setup progress bar
Chloe Laisne <chloe.laisne@gmail.com>
parents: 210
diff changeset
    71
302
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    72
    textAutoscroll: function(jElement) {
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    73
        var text = jElement.find('span');
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    74
        text.stop(true);
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    75
        text.css('text-indent', '0px');
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    76
        if(text.width() > jElement.width()) {
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    77
            var duration = ( ( text.width() - jElement.width() ) * 8 / 100 ) * 1000;
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    78
            function animate() {
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    79
                text.delay(4000)
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    80
                    .animate({
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    81
                        'text-indent': -( text.width() - jElement.width() ) + 'px'
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    82
                    }, duration, 'linear', function() {
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    83
                        text.stop(true);
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    84
                        text.css('text-indent', '0px')
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    85
                        window.setTimeout(function() { animate() }, 1);
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    86
                    });
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    87
            }
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    88
            animate();
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    89
        }
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    90
    },
973df1349591 Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents: 272
diff changeset
    91
220
2145b80776a3 Linting
Chloe Laisne <chloe.laisne@gmail.com>
parents: 215
diff changeset
    92
    onUpdate: function() {
246
5b7ae96768be Bsic transcript-component design
Chloe Laisne <chloe.laisne@gmail.com>
parents: 242
diff changeset
    93
        var progress = this.get('popcorn').currentTime();
211
7451203a1321 Setup progress bar
Chloe Laisne <chloe.laisne@gmail.com>
parents: 210
diff changeset
    94
        var duration = this.get('popcorn').duration();
246
5b7ae96768be Bsic transcript-component design
Chloe Laisne <chloe.laisne@gmail.com>
parents: 242
diff changeset
    95
        this.$('.bar .value').width(progress * 100 / duration + '%');
249
e4204b1a579a Quickfix micro-cuts
Chloe Laisne <chloe.laisne@gmail.com>
parents: 248
diff changeset
    96
        this.get('player').setProgress(progress * 1000);
246
5b7ae96768be Bsic transcript-component design
Chloe Laisne <chloe.laisne@gmail.com>
parents: 242
diff changeset
    97
        this.set('head', progress);
5b7ae96768be Bsic transcript-component design
Chloe Laisne <chloe.laisne@gmail.com>
parents: 242
diff changeset
    98
        this.set('remaining', duration - progress);
87
24fef043ea0b add control to go next/previous sound
nowmad@nowmads-macbook-pro.local
parents: 86
diff changeset
    99
    },
191
db5711fbbb6c Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents: 94
diff changeset
   100
215
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
   101
    play: function() {
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
   102
        this.get('popcorn').play();
272
97c06607949b Page title when track is playing
Chloe Laisne <chloe.laisne@gmail.com>
parents: 264
diff changeset
   103
        Ember.$(document).attr('title', this.get('player').get('model').get('title') + ' - ' + Ember.$(document).attr('title'));
215
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
   104
    },
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
   105
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
   106
    pause: function() {
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
   107
        this.get('popcorn').pause();
272
97c06607949b Page title when track is playing
Chloe Laisne <chloe.laisne@gmail.com>
parents: 264
diff changeset
   108
        Ember.$(document).attr('title', Ember.$(document).attr('title').split(' - ').pop());
215
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
   109
    },
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
   110
241
da3c6ba8a80b Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents: 240
diff changeset
   111
    actions: {
215
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
   112
241
da3c6ba8a80b Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents: 240
diff changeset
   113
        toggle: function() {
248
256272c33349 Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents: 247
diff changeset
   114
            this.get('player').set('playing', !this.get('player').get('playing'));
241
da3c6ba8a80b Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents: 240
diff changeset
   115
        },
191
db5711fbbb6c Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents: 94
diff changeset
   116
212
f2c6080a73aa Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents: 211
diff changeset
   117
        backward: function() {
215
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
   118
            var index = this.get('player').get('items').indexOf(this.get('player').get('item'));
240
aa101458cd4e Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents: 220
diff changeset
   119
            var item = this.get('player').get('items')[index - 1];
aa101458cd4e Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents: 220
diff changeset
   120
            this.get('player').set('item', item);
212
f2c6080a73aa Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents: 211
diff changeset
   121
        },
f2c6080a73aa Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents: 211
diff changeset
   122
f2c6080a73aa Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents: 211
diff changeset
   123
        forward: function() {
215
82878d132784 Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents: 214
diff changeset
   124
            var index = this.get('player').get('items').indexOf(this.get('player').get('item'));
240
aa101458cd4e Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents: 220
diff changeset
   125
            var item = this.get('player').get('items')[index + 1];
aa101458cd4e Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents: 220
diff changeset
   126
            this.get('player').set('item', item);
241
da3c6ba8a80b Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents: 240
diff changeset
   127
        },
da3c6ba8a80b Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents: 240
diff changeset
   128
da3c6ba8a80b Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents: 240
diff changeset
   129
        setTime: function(event) {
da3c6ba8a80b Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents: 240
diff changeset
   130
            this.get('popcorn').currentTime(event.layerX * this.get('popcorn').duration() / Ember.$(event.target).width());
251
ac320de33ec7 Add transcript button to player-component
Chloe Laisne <chloe.laisne@gmail.com>
parents: 249
diff changeset
   131
        },
ac320de33ec7 Add transcript button to player-component
Chloe Laisne <chloe.laisne@gmail.com>
parents: 249
diff changeset
   132
ac320de33ec7 Add transcript button to player-component
Chloe Laisne <chloe.laisne@gmail.com>
parents: 249
diff changeset
   133
        display: function(el) {
254
a7cf2887e993 Hide/Show video CSS
Chloe Laisne <chloe.laisne@gmail.com>
parents: 251
diff changeset
   134
            this.get('player').displayAdditionalInformation(el);
191
db5711fbbb6c Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents: 94
diff changeset
   135
        }
db5711fbbb6c Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents: 94
diff changeset
   136
86
15ded106ef1a add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff changeset
   137
    }
15ded106ef1a add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff changeset
   138
});