Playlist. close #27
This commit is contained in:
parent
242c170a41
commit
ffea37188c
@ -9,5 +9,6 @@ class TrackController < ApplicationController
|
|||||||
|
|
||||||
url = Vkontakte.get(artist.name, track.name, (track.length / 1000).round)
|
url = Vkontakte.get(artist.name, track.name, (track.length / 1000).round)
|
||||||
|
|
||||||
|
redirect_to url
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<li id="<%= track.id %>">
|
<li id="<%= track.id %>">
|
||||||
<span class="play<%= (track.inDb ? '' : ' disabled') %>"><img src="/images/player/play.svg" alt="play" /></span>
|
<span class="play<%= (track.inDb ? '' : ' disabled') %>"><img src="/images/player/play.svg" alt="play" /></span>
|
||||||
<span class="track-name"><%= track.name %></span>
|
<span class="track-name"><%= track.name %></span>
|
||||||
<span class="duration"><%= track.length.toTime %></span>
|
<span class="duration" data-length="<%= track.length %>"><%= track.length.toTime %></span>
|
||||||
</li>
|
</li>
|
||||||
<% end %>
|
<% end %>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -28,7 +28,13 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="time-left">0:00</div>
|
<div class="time-left">0:00</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="playlist">
|
||||||
|
<div class="show-button"></div>
|
||||||
|
<ul style="display:none;">
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
<%= yield %>
|
<%= yield %>
|
||||||
|
<a href="" onclick="addToPlaylist('Artist', 'Track', 123, 123);return(false);">add</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
@ -3,6 +3,7 @@ var utid;
|
|||||||
$(function(){
|
$(function(){
|
||||||
audio = document.getElementsByTagName('audio')[0];
|
audio = document.getElementsByTagName('audio')[0];
|
||||||
$('#player .play').click(function(){
|
$('#player .play').click(function(){
|
||||||
|
if (! audio.src) return;
|
||||||
audio.play();
|
audio.play();
|
||||||
utid = window.setTimeout(updatePlayer, 100);
|
utid = window.setTimeout(updatePlayer, 100);
|
||||||
$('#player .pause').show();
|
$('#player .pause').show();
|
||||||
@ -16,21 +17,32 @@ $(function(){
|
|||||||
})
|
})
|
||||||
|
|
||||||
$('.tracks .play').click(function(){
|
$('.tracks .play').click(function(){
|
||||||
playTrack($('h1.artist').html(), $(this).parent().find('.track-name').html(), '/listen/'+ $(this).parent().attr('id') +'/');
|
addToPlaylist(
|
||||||
|
$('h1.artist').html(),
|
||||||
|
$(this).parent().find('.track-name').html(),
|
||||||
|
Math.round($(this).parent().find('.duration').attr('data-length') / 1000),
|
||||||
|
$(this).parent().attr('id')
|
||||||
|
);
|
||||||
|
})
|
||||||
|
$('#playlist .show-button').click(function(){
|
||||||
|
$('#playlist ul').toggle();
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
function updatePlayer() {
|
function updatePlayer() {
|
||||||
duration = audio.duration;
|
duration = audio.duration;
|
||||||
cur_time = audio.currentTime;
|
cur_time = audio.currentTime;
|
||||||
|
if (cur_time == duration) {
|
||||||
|
playNext();
|
||||||
|
}
|
||||||
loaded = 0;
|
loaded = 0;
|
||||||
if ((audio.buffered != undefined) && (audio.buffered.length != 0)) {
|
if ((audio.buffered != undefined) && (audio.buffered.length != 0)) {
|
||||||
loaded = Math.round((audio.buffered.end(0) / audio.duration) * 730);
|
loaded = Math.round((audio.buffered.end(0) / audio.duration) * 730);
|
||||||
}
|
|
||||||
$('#player .time-played').html(formatTime(cur_time));
|
$('#player .time-played').html(formatTime(cur_time));
|
||||||
$('#player .time-left').html(formatTime(duration - cur_time));
|
$('#player .time-left').html(formatTime(duration - cur_time));
|
||||||
progress = Math.round((cur_time / duration) * 730);
|
progress = Math.round((cur_time / duration) * 730);
|
||||||
$('#player .progress-loaded').css('width', loaded +'px')
|
$('#player .progress-loaded').css('width', loaded +'px')
|
||||||
$('#player .progress-point').css('margin-left', progress +'px')
|
$('#player .progress-point').css('margin-left', progress +'px')
|
||||||
|
}
|
||||||
utid = window.setTimeout(updatePlayer, 100);
|
utid = window.setTimeout(updatePlayer, 100);
|
||||||
}
|
}
|
||||||
function formatTime(sec) {
|
function formatTime(sec) {
|
||||||
@ -39,12 +51,32 @@ function formatTime(sec) {
|
|||||||
s = sec - (m * 60);
|
s = sec - (m * 60);
|
||||||
return m +':'+ (s < 10 ? '0' : '') +s;
|
return m +':'+ (s < 10 ? '0' : '') +s;
|
||||||
}
|
}
|
||||||
function playTrack(artist, track, stream) {
|
function playTrack(artist, track, id) {
|
||||||
$(audio).attr('src', stream);
|
$(audio).attr('src', '/listen/'+ id +'/');
|
||||||
$('#player .track-title').html(artist +' — '+ track);
|
$('#player .track-title').html(artist +' — '+ track);
|
||||||
$('#player .time-played').html('0:00');
|
$('#player .time-played').html('0:00');
|
||||||
$('#player .time-left').html('0:00');
|
$('#player .time-left').html('0:00');
|
||||||
$('#player .progress-loaded').css('width', 0 +'px')
|
$('#player .progress-loaded').css('width', 0 +'px')
|
||||||
$('#player .progress-point').css('margin-left', 0 +'px')
|
$('#player .progress-point').css('margin-left', 0 +'px')
|
||||||
|
$('#playlist li').removeClass('now-playing');
|
||||||
|
$('#playlist li[data-id="'+ id +'"]').addClass('now-playing');
|
||||||
$('#player .play').trigger('click');
|
$('#player .play').trigger('click');
|
||||||
}
|
}
|
||||||
|
function playNext() {
|
||||||
|
$('#playlist ul li.now-playing').next().trigger('click');
|
||||||
|
}
|
||||||
|
function addToPlaylist(artist, track, length, id) {
|
||||||
|
$('#playlist ul').append($(
|
||||||
|
'<li data-id="'+ id +'">'+
|
||||||
|
'<span class="artist">'+ artist +'</span> — '+
|
||||||
|
'<span class="track">'+ track +'</span>'+
|
||||||
|
'<span class="length" data-seconds="'+ length +'">'+ formatTime(length) +'</span>'+
|
||||||
|
'</li>'
|
||||||
|
));
|
||||||
|
$('#playlist ul li[data-id="'+ id +'"]').click(function(){
|
||||||
|
playTrack(artist, track, id);
|
||||||
|
})
|
||||||
|
if ($('#playlist ul li').length == 1) {
|
||||||
|
playTrack(artist, track, id);
|
||||||
|
}
|
||||||
|
}
|
@ -17,7 +17,7 @@ body {
|
|||||||
margin: 2em;
|
margin: 2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.artist {
|
h1.artist {
|
||||||
display: block;
|
display: block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
@ -100,3 +100,46 @@
|
|||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
#playlist {
|
||||||
|
position: fixed;
|
||||||
|
top: 50px;
|
||||||
|
left: 50%;
|
||||||
|
width: 1000px;
|
||||||
|
margin-left: -500px;
|
||||||
|
background-color: #000;
|
||||||
|
opacity: 60;
|
||||||
|
-moz-opacity: 60;
|
||||||
|
-khtml-opacity: 60;
|
||||||
|
-webkit-opacity: 60;
|
||||||
|
}
|
||||||
|
#playlist .show-button {
|
||||||
|
width: 100%;
|
||||||
|
height: 10px;
|
||||||
|
background-color: #222;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
#playlist ul {
|
||||||
|
margin: 0.2em 0.3em;
|
||||||
|
padding: 0;
|
||||||
|
max-height: 10em;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
#playlist ul li {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0.2em 0;
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
font-size: 0.8em;
|
||||||
|
color: #FFF;
|
||||||
|
}
|
||||||
|
#playlist ul li:hover {
|
||||||
|
background-color: #222;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
#playlist ul li.now-playing {
|
||||||
|
background-color: #013;
|
||||||
|
}
|
||||||
|
#playlist ul li .length {
|
||||||
|
margin: 0 0.5em;
|
||||||
|
color: #AAA;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user