author | Chloe Laisne <chloe.laisne@gmail.com> |
Wed, 15 Jun 2016 11:10:20 +0200 | |
changeset 192 | e1435b37301a |
parent 191 | db5711fbbb6c |
child 209 | 35cb7200bb0a |
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'; |
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
2 |
|
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
3 |
export default Ember.Component.extend({ |
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
4 |
classNames: ['player-component'], |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
5 |
currentTime: "00:00", |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
6 |
duration: "00:00", |
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
7 |
|
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
8 |
documentLoaded: Ember.observer('document.mediaArray', function() { |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
9 |
var mediaList = this.get('document').get("mediaList"); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
10 |
if ((typeof(mediaList) !== 'undefined') && (mediaList.length > 0)) { |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
11 |
if (this.audio.src){ |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
12 |
this.pause(); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
13 |
this.updateProgress(0); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
14 |
} |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
15 |
var mp3 = mediaList.findBy('format', 'audio/mpeg'); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
16 |
this.audio.src = mp3.url; |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
17 |
this.audio.load(); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
18 |
this.set("currentTime", "00:00"); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
19 |
} |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
20 |
}), |
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
21 |
|
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
22 |
didInsertElement: function() { |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
23 |
var _this = this; |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
24 |
|
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
25 |
this.audio = new Audio(); |
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
26 |
|
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
27 |
this.button = { |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
28 |
play: this.$('#action_play'), |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
29 |
progress: this.$('.progress') |
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 |
|
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
32 |
this.$(document).on('touchmove', function(e){ |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
33 |
e.preventDefault(); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
34 |
}); |
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
35 |
|
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
36 |
// seeker |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
37 |
this.button.progress.on('mousedown', function(e){ |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
38 |
var r = _this.rotation(e.pageX, e.pageY); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
39 |
_this.updateProgress(r); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
40 |
_this.changeTime(r/360*100); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
41 |
}); |
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
42 |
|
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
43 |
this.audio.addEventListener('loadedmetadata',function (){ |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
44 |
var minutes = Math.floor( _this.audio.duration / 60); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
45 |
var seconds = Math.floor(_this.audio.duration) % 60; |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
46 |
_this.set('duration', ('0' + minutes).slice(-2)+':'+('0' + seconds).slice(-2)); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
47 |
}); |
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
48 |
|
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
49 |
// update bar onchange |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
50 |
this.audio.addEventListener('timeupdate',function (){ |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
51 |
var curtime = _this.audio.currentTime, |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
52 |
percent = (curtime/_this.audio.duration)*100, |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
53 |
deg = 360/100*percent, |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
54 |
minutes = Math.floor( curtime / 60), |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
55 |
seconds = Math.floor(curtime) % 60; |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
56 |
_this.set('currentTime', ('0' + minutes).slice(-2)+':'+('0' + seconds).slice(-2)); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
57 |
_this.updateProgress(deg); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
58 |
}); |
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
59 |
|
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
60 |
// when the audio has finished playing |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
61 |
this.audio.addEventListener('ended', function(){ |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
62 |
_this.pause(); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
63 |
_this.changeTime(0); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
64 |
_this.updateProgress(0); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
65 |
}); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
66 |
}, |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
67 |
|
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
68 |
// change seeked time |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
69 |
changeTime: function(percent){ |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
70 |
var t = (this.audio.duration*percent)/100; |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
71 |
this.audio.currentTime = t; |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
72 |
}, |
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
73 |
|
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
74 |
updateProgress: function(deg){ |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
75 |
var $slice = this.$('.slice'); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
76 |
if (deg > 180 && !$slice.is('.gt50')) { |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
77 |
$slice.addClass('gt50'); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
78 |
$slice.append('<div class="pie fill"></div>'); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
79 |
} else if (deg < 180 && $slice.is('.gt50')) { |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
80 |
$slice.removeClass('gt50'); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
81 |
$slice.find('.fill').remove(); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
82 |
} |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
83 |
$slice.find('.pie').css({ |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
84 |
'-moz-transform':'rotate('+deg+'deg)', |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
85 |
'-webkit-transform':'rotate('+deg+'deg)', |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
86 |
'-o-transform':'rotate('+deg+'deg)', |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
87 |
'transform':'rotate('+deg+'deg)' |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
88 |
}); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
89 |
}, |
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
90 |
|
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
91 |
rotation: function(x,y){ |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
92 |
var offset = this.button.progress.offset(); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
93 |
var button_centerX = (offset.left) + (this.button.progress.width()/2); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
94 |
var button_centerY = (offset.top) + (this.button.progress.height()/2); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
95 |
var radians = Math.atan2(x - button_centerX, y - button_centerY); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
96 |
var degree = Math.round( (radians * (180 / Math.PI) * -1) + 180 ); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
97 |
return degree; |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
98 |
}, |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
99 |
|
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
100 |
play: function(){ |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
101 |
this.audio.play(); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
102 |
this.button.play.addClass('playing'); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
103 |
this.button.play.text('Pause'); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
104 |
}, |
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
105 |
|
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
106 |
pause: function(){ |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
107 |
this.audio.pause(); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
108 |
this.button.play.removeClass('playing'); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
109 |
this.button.play.text('Play'); |
87
24fef043ea0b
add control to go next/previous sound
nowmad@nowmads-macbook-pro.local
parents:
86
diff
changeset
|
110 |
}, |
191
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
111 |
|
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
112 |
actions: { |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
113 |
|
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
114 |
tooglePlay: function(){ |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
115 |
if (this.button.play.is('.playing')) { |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
116 |
this.pause(); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
117 |
} else { |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
118 |
this.play(); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
119 |
} |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
120 |
}, |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
121 |
|
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
122 |
prevNextDocument(change){ |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
123 |
this.sendAction("action", change); |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
124 |
} |
db5711fbbb6c
Player component linting
Chloe Laisne <chloe.laisne@gmail.com>
parents:
94
diff
changeset
|
125 |
|
86
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
126 |
} |
15ded106ef1a
add a player component to handle sound play/pause
nowmad@23.1.168.192.in-addr.arpa
parents:
diff
changeset
|
127 |
}); |