diff options
Diffstat (limited to 'apps/media/js/playlist.js')
-rw-r--r-- | apps/media/js/playlist.js | 142 |
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 |