aboutsummaryrefslogtreecommitdiffstats
path: root/apps/media/js/playlist.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/media/js/playlist.js')
-rw-r--r--apps/media/js/playlist.js142
1 files changed, 142 insertions, 0 deletions
diff --git a/apps/media/js/playlist.js b/apps/media/js/playlist.js
new file mode 100644
index 00000000000..570e725b57e
--- /dev/null
+++ b/apps/media/js/playlist.js
@@ -0,0 +1,142 @@
+PlayList.render=function(){
+ $('#playlist').show();
+ PlayList.parent.empty();
+ for(var i=0;i<PlayList.items.length;i++){
+ var tr=PlayList.template.clone();
+ var item=PlayList.items[i];
+ if(i==PlayList.current){
+ tr.addClass('current');
+ }
+ tr.removeClass('template');
+ tr.data('name',item.name);
+ tr.data('artist',item.artist);
+ tr.data('album',item.album);
+ tr.data('time',item.length);
+ tr.data('plays',item.playcount);
+ tr.children('td.name').children('span').text(item.name);
+ tr.children('td.artist').text(item.artist);
+ tr.children('td.album').text(item.album);
+ var secconds=(item.length%60);
+ if(secconds<10){
+ secconds='0'+secconds;
+ }
+ var length=Math.floor(item.length/60)+':'+secconds;
+ tr.children('td.time').text(length);
+ tr.children('td.plays').text(item.playcount);
+ tr.data('index',i);
+ tr.click(function(){
+ PlayList.play($(this).data('index'));
+ PlayList.parent.children('tr').removeClass('current');
+ $(this).addClass('current');
+ });
+ tr.hover(function(){
+ var button=$('<img class="remove" title="Remove"/>');
+ button.attr('src',OC.imagePath('core','actions/delete'));
+ $(this).children().last().append(button);
+ button.click(function(event){
+ event.stopPropagation();
+ event.preventDefault();
+ var index=$(this).parent().parent().data('index');
+ PlayList.remove(index);
+ });
+ },function(){
+ $(this).children().last().children('img.remove').remove();
+ });
+ tr.children('td.name').children('input').click(function(event){
+ event.stopPropagation();
+ if($(this).attr('checked')){
+ $(this).parent().parent().addClass('selected');
+ if($('td.name input:checkbox').length==$('td.name input:checkbox:checked').length){
+ $('#selectAll').attr('checked',true);
+ }
+ }else{
+ $(this).parent().parent().removeClass('selected');
+ $('#selectAll').attr('checked',false);
+ }
+ procesSelection();
+ });
+ PlayList.parent.append(tr);
+ }
+}
+PlayList.getSelected=function(){
+ return $('td.name input:checkbox:checked').parent().parent();
+}
+PlayList.hide=function(){
+ $('#playlist').hide();
+}
+
+$(document).ready(function(){
+ PlayList.parent=$('#playlist tbody');
+ PlayList.template=$('#playlist tr.template');
+ $('#selectAll').click(function(){
+ if($(this).attr('checked')){
+ // Check all
+ $('td.name input:checkbox').attr('checked', true);
+ $('td.name input:checkbox').parent().parent().addClass('selected');
+ }else{
+ // Uncheck all
+ $('td.name input:checkbox').attr('checked', false);
+ $('td.name input:checkbox').parent().parent().removeClass('selected');
+ }
+ procesSelection();
+ });
+});
+
+function procesSelection(){
+ var selected=PlayList.getSelected();
+ if(selected.length==0){
+ $('th.name span').text('Name');
+ $('th.artist').text('Artist');
+ $('th.album').text('Album');
+ $('th.time').text('Time');
+ $('th.plays').empty();
+ $('th.plays').text('Plays');
+ }else{
+ var name=selected.length+' selected';
+ var artist=$(selected[0]).data('artist');
+ var album=$(selected[0]).data('album');
+ var time=$(selected[0]).data('time');
+ var plays=$(selected[0]).data('plays');
+ for(var i=1;i<selected.length;i++){
+ var item=$(selected[i]);
+ if(artist!='mixed' && item.data('artist')!==artist){
+ artist='mixed'
+ }
+ if(album!='mixed' && item.data('album')!==album){
+ album='mixed'
+ }
+ if(time!='mixed' && item.data('time')!==time){
+ time='mixed'
+ }
+ if(plays!='mixed' && item.data('plays')!==plays){
+ plays='mixed'
+ }
+ }
+ $('th.name span').text(name);
+ $('th.artist').text(artist);
+ $('th.album').text(album);
+ if(time!='mixed'){
+ var secconds=(time%60);
+ if(secconds<10){
+ secconds='0'+secconds;
+ }
+ var time=Math.floor(time/60)+':'+secconds;
+ }
+ $('th.time').text(time);
+ $('th.plays').text(plays);
+ var button=$('<img class="remove" title="Remove"/>');
+ button.attr('src',OC.imagePath('core','actions/delete'));
+ $('th.plays').append(button);
+ button.click(function(event){
+ event.stopPropagation();
+ event.preventDefault();
+ PlayList.getSelected().each(function(index,element){
+ var index=$(element).data('index');
+ PlayList.items[index]=null;
+ });
+ PlayList.items=PlayList.items.filter(function(item){return item!==null});
+ PlayList.render();
+ procesSelection();
+ });
+ }
+} \ No newline at end of file