author | ymh <ymh.work@gmail.com> |
Mon, 08 Aug 2016 15:27:35 +0700 | |
changeset 262 | e999bcaa0c08 |
parent 261 | 02e2396bcbbc |
child 264 | e0fc9f698b9b |
permissions | -rw-r--r-- |
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'], |
262 | 6 |
classNameBindings: ['video:video', 'reduce:reduce'], |
7 |
video: Ember.computed.alias('player.model.video'), |
|
8 |
reduce: Ember.computed.alias('player.reduce'), |
|
209
35cb7200bb0a
Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents:
192
diff
changeset
|
9 |
|
35cb7200bb0a
Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents:
192
diff
changeset
|
10 |
player: Ember.inject.service(), |
211 | 11 |
popcorn: null, |
209
35cb7200bb0a
Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents:
192
diff
changeset
|
12 |
|
211 | 13 |
head: 0, |
14 |
remaining: 0, |
|
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
15 |
|
212
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
16 |
isFirst: false, |
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
17 |
isLast: false, |
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
18 |
|
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
19 |
item: Ember.computed('player.model', function() { |
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
20 |
return this.get('player').get('model'); |
210 | 21 |
}), |
22 |
||
212
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
23 |
modelLoaded: Ember.observer('player.model', function() { |
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
24 |
var items = this.get('player').get('items'); |
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
25 |
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
|
26 |
this.set('isFirst', index === 0); |
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
27 |
this.set('isLast', index === items.length - 1); |
240
aa101458cd4e
Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents:
220
diff
changeset
|
28 |
if(this.get('player').get('playing')) { |
aa101458cd4e
Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents:
220
diff
changeset
|
29 |
this.play(); |
aa101458cd4e
Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents:
220
diff
changeset
|
30 |
} |
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
31 |
}), |
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
32 |
|
242 | 33 |
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
|
34 |
this.get('popcorn').load(); |
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
35 |
}), |
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
36 |
|
248
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
37 |
playingObserver: Ember.observer('player.playing', function() { |
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
38 |
if(this.get('player').get('playing')) { |
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
39 |
this.play(); |
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
40 |
} else { |
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
41 |
this.pause(); |
262 | 42 |
} |
248
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
43 |
}), |
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
44 |
|
209
35cb7200bb0a
Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents:
192
diff
changeset
|
45 |
init: function() { |
249 | 46 |
var self = this; |
47 |
this.get('player').on('progressupdate', function(progress) { |
|
48 |
self.get('popcorn').currentTime(progress / 1000); |
|
49 |
}); |
|
50 |
||
209
35cb7200bb0a
Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents:
192
diff
changeset
|
51 |
this._super(...arguments); |
35cb7200bb0a
Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents:
192
diff
changeset
|
52 |
}, |
35cb7200bb0a
Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents:
192
diff
changeset
|
53 |
|
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
54 |
didInsertElement: function() { |
211 | 55 |
this.set('popcorn', Popcorn('#popcorn-audio')); |
215
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
56 |
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
|
57 |
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
|
58 |
|
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
59 |
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
|
60 |
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
|
61 |
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
|
62 |
} else { |
241
da3c6ba8a80b
Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents:
240
diff
changeset
|
63 |
this.send('toggle'); |
215
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
64 |
} |
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
65 |
})); |
211 | 66 |
}, |
67 |
||
220 | 68 |
onUpdate: function() { |
246
5b7ae96768be
Bsic transcript-component design
Chloe Laisne <chloe.laisne@gmail.com>
parents:
242
diff
changeset
|
69 |
var progress = this.get('popcorn').currentTime(); |
211 | 70 |
var duration = this.get('popcorn').duration(); |
246
5b7ae96768be
Bsic transcript-component design
Chloe Laisne <chloe.laisne@gmail.com>
parents:
242
diff
changeset
|
71 |
this.$('.bar .value').width(progress * 100 / duration + '%'); |
249 | 72 |
this.get('player').setProgress(progress * 1000); |
246
5b7ae96768be
Bsic transcript-component design
Chloe Laisne <chloe.laisne@gmail.com>
parents:
242
diff
changeset
|
73 |
this.set('head', progress); |
5b7ae96768be
Bsic transcript-component design
Chloe Laisne <chloe.laisne@gmail.com>
parents:
242
diff
changeset
|
74 |
this.set('remaining', duration - progress); |
87
24fef043ea0b
add control to go next/previous sound
nowmad@nowmads-macbook-pro.local
parents:
86
diff
changeset
|
75 |
}, |
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
76 |
|
215
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
77 |
play: function() { |
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
78 |
this.get('popcorn').play(); |
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
79 |
}, |
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
80 |
|
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
81 |
pause: function() { |
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
82 |
this.get('popcorn').pause(); |
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
83 |
}, |
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
84 |
|
241
da3c6ba8a80b
Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents:
240
diff
changeset
|
85 |
actions: { |
215
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
86 |
|
241
da3c6ba8a80b
Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents:
240
diff
changeset
|
87 |
toggle: function() { |
248
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
88 |
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
|
89 |
}, |
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
90 |
|
212
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
91 |
backward: function() { |
215
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
92 |
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
|
93 |
var item = this.get('player').get('items')[index - 1]; |
aa101458cd4e
Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents:
220
diff
changeset
|
94 |
this.get('player').set('item', item); |
212
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
95 |
}, |
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
96 |
|
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
97 |
forward: function() { |
215
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
98 |
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
|
99 |
var item = this.get('player').get('items')[index + 1]; |
aa101458cd4e
Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents:
220
diff
changeset
|
100 |
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
|
101 |
}, |
da3c6ba8a80b
Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents:
240
diff
changeset
|
102 |
|
da3c6ba8a80b
Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents:
240
diff
changeset
|
103 |
setTime: function(event) { |
da3c6ba8a80b
Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents:
240
diff
changeset
|
104 |
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
|
105 |
}, |
ac320de33ec7
Add transcript button to player-component
Chloe Laisne <chloe.laisne@gmail.com>
parents:
249
diff
changeset
|
106 |
|
ac320de33ec7
Add transcript button to player-component
Chloe Laisne <chloe.laisne@gmail.com>
parents:
249
diff
changeset
|
107 |
display: function(el) { |
254 | 108 |
this.get('player').displayAdditionalInformation(el); |
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
109 |
} |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
110 |
|
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
111 |
} |
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
112 |
}); |