author | ymh <ymh.work@gmail.com> |
Tue, 08 Nov 2016 15:48:01 +0100 | |
changeset 404 | 0a5eef6ad2fe |
parent 345 | 4b66390442fd |
child 431 | 3e0a4a322f9e |
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'], |
264
e0fc9f698b9b
undo bad merge on player component + correct jshint
ymh <ymh.work@gmail.com>
parents:
262
diff
changeset
|
6 |
classNameBindings: ['video:video'], |
262 | 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 | 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 | 12 |
head: 0, |
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 | 20 |
}), |
21 |
||
212
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
22 |
modelLoaded: Ember.observer('player.model', function() { |
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
23 |
var items = this.get('player').get('items'); |
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
24 |
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
|
25 |
this.set('isFirst', index === 0); |
f2c6080a73aa
Player backward/forward design logic
Chloe Laisne <chloe.laisne@gmail.com>
parents:
211
diff
changeset
|
26 |
this.set('isLast', index === items.length - 1); |
240
aa101458cd4e
Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents:
220
diff
changeset
|
27 |
if(this.get('player').get('playing')) { |
aa101458cd4e
Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents:
220
diff
changeset
|
28 |
this.play(); |
aa101458cd4e
Player forward and backward
Chloe Laisne <chloe.laisne@gmail.com>
parents:
220
diff
changeset
|
29 |
} |
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
30 |
}), |
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
31 |
|
242 | 32 |
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
|
33 |
this.get('popcorn').load(); |
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
34 |
}), |
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
35 |
|
248
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
36 |
playingObserver: Ember.observer('player.playing', function() { |
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
37 |
if(this.get('player').get('playing')) { |
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
38 |
this.play(); |
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
39 |
} else { |
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
40 |
this.pause(); |
262 | 41 |
} |
248
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
42 |
}), |
256272c33349
Transcript sentence lick and play
Chloe Laisne <chloe.laisne@gmail.com>
parents:
247
diff
changeset
|
43 |
|
209
35cb7200bb0a
Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents:
192
diff
changeset
|
44 |
init: function() { |
249 | 45 |
var self = this; |
46 |
this.get('player').on('progressupdate', function(progress) { |
|
47 |
self.get('popcorn').currentTime(progress / 1000); |
|
48 |
}); |
|
49 |
||
209
35cb7200bb0a
Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents:
192
diff
changeset
|
50 |
this._super(...arguments); |
35cb7200bb0a
Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents:
192
diff
changeset
|
51 |
}, |
35cb7200bb0a
Separate playlist and player component with player service as bridge
Chloe Laisne <chloe.laisne@gmail.com>
parents:
192
diff
changeset
|
52 |
|
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
53 |
didInsertElement: function() { |
264
e0fc9f698b9b
undo bad merge on player component + correct jshint
ymh <ymh.work@gmail.com>
parents:
262
diff
changeset
|
54 |
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
|
55 |
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
|
56 |
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
|
57 |
|
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
58 |
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
|
59 |
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
|
60 |
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
|
61 |
} else { |
241
da3c6ba8a80b
Set time from progress bar - Toggle play plause to actions
Chloe Laisne <chloe.laisne@gmail.com>
parents:
240
diff
changeset
|
62 |
this.send('toggle'); |
215
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
63 |
} |
82878d132784
Play/Pause/Reset events from player/playlist-components
Chloe Laisne <chloe.laisne@gmail.com>
parents:
214
diff
changeset
|
64 |
})); |
345
4b66390442fd
Cancel auto scroll on manual scroll
Chloe Laisne <chloe.laisne@gmail.com>
parents:
306
diff
changeset
|
65 |
|
4b66390442fd
Cancel auto scroll on manual scroll
Chloe Laisne <chloe.laisne@gmail.com>
parents:
306
diff
changeset
|
66 |
setTimeout(Ember.run.bind(this, function() { |
4b66390442fd
Cancel auto scroll on manual scroll
Chloe Laisne <chloe.laisne@gmail.com>
parents:
306
diff
changeset
|
67 |
this.textAutoscroll(Ember.$('#' + this.elementId).find('.title')); |
4b66390442fd
Cancel auto scroll on manual scroll
Chloe Laisne <chloe.laisne@gmail.com>
parents:
306
diff
changeset
|
68 |
this.textAutoscroll(Ember.$('#' + this.elementId).find('.author')); |
4b66390442fd
Cancel auto scroll on manual scroll
Chloe Laisne <chloe.laisne@gmail.com>
parents:
306
diff
changeset
|
69 |
}), 500); |
211 | 70 |
}, |
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; |
306
3fccf43160a7
Some more changes linked to the change of api organization + some jshint error cleaning
ymh <ymh.work@gmail.com>
parents:
302
diff
changeset
|
78 |
var animate = function() { |
302
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); |
306
3fccf43160a7
Some more changes linked to the change of api organization + some jshint error cleaning
ymh <ymh.work@gmail.com>
parents:
302
diff
changeset
|
84 |
text.css('text-indent', '0px'); |
3fccf43160a7
Some more changes linked to the change of api organization + some jshint error cleaning
ymh <ymh.work@gmail.com>
parents:
302
diff
changeset
|
85 |
window.setTimeout(function() { animate(); }, 1); |
302
973df1349591
Animate player text-overflow
Chloe Laisne <chloe.laisne@gmail.com>
parents:
272
diff
changeset
|
86 |
}); |
306
3fccf43160a7
Some more changes linked to the change of api organization + some jshint error cleaning
ymh <ymh.work@gmail.com>
parents:
302
diff
changeset
|
87 |
}; |
302
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 | 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 | 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 | 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 | 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 |
}); |