Collection={ artists:[], albums:[], songs:[], artistsById:{}, albumsById:{}, loaded:false, loading:false, loadedListeners:[], load:function(ready){ if(ready){ Collection.loadedListeners.push(ready); } if(!Collection.loading){ Collection.loading=true; $.ajax({ url: OC.linkTo('media','ajax/api.php')+'?action=get_collection', dataType: 'json', success: function(data){ //normalize the data for(var i=0;i0){ var tr=template.clone().removeClass('template'); tr.find('td.title a').text(artist.songs.length+' '+t('media','songs')); tr.find('td.album a').text(artist.albums.length+' '+t('media','albums')); tr.find('td.artist a').text(artist.name); tr.data('artistData',artist); tr.find('td.artist a').click(function(event){ event.preventDefault(); PlayList.add(artist); PlayList.play(0); Collection.parent.find('tr').removeClass('active'); $('tr[data-artist="'+artist.name+'"]').addClass('active'); }); var expander=$('>'); expander.data('expanded',false); expander.click(function(event){ var tr=$(this).parent().parent(); if(expander.data('expanded')){ Collection.hideArtist(tr.data('artist')); }else{ Collection.showArtist(tr.data('artist')); } }); tr.find('td.artist').addClass('buttons'); Collection.addButtons(tr,artist); tr.children('td.artist').append(expander); tr.attr('data-artist',artist.name); Collection.parent.find('tbody').append(tr); } }); } } }, showArtist:function(artist){ var tr=Collection.parent.find('tr[data-artist="'+artist+'"]'); var nextRow=tr.next(); var artist=tr.data('artistData'); var first=true; $.each(artist.albums,function(foo,album){ $.each(album.songs,function(i,song){ if(first){ newRow=tr; }else{ var newRow=tr.clone(); } newRow.find('.expander').remove(); if(i==0){ newRow.find('td.album a').text(album.name); newRow.find('td.album a').click(function(event){ event.preventDefault(); PlayList.add(album); PlayList.play(0); Collection.parent.find('tr').removeClass('active'); $('tr[data-album="'+album.name+'"]').addClass('active'); }); var expander=$('v '); expander.data('expanded',true); expander.click(function(event){ var tr=$(this).parent().parent(); if(expander.data('expanded')) { Collection.hideAlbum(tr.data('artist'),tr.data('album')); } else { Collection.showAlbum(tr.data('artist'),tr.data('album')); } }); newRow.children('td.artist').append(expander); Collection.addButtons(newRow,album); } else { newRow.find('td.album a').text(''); Collection.addButtons(newRow,song); } newRow.find('td.title a').text(song.name); newRow.find('td.title a').click(function(event){ event.preventDefault(); PlayList.add(song); PlayList.play(0); Collection.parent.find('tr').removeClass('active'); $('tr[data-title="'+song.name+'"]').addClass('active'); }); newRow.attr('data-album',album.name); newRow.attr('data-title',song.name); newRow.attr('data-artist',artist.name); if(!first){ nextRow.before(newRow); } first=false; }); }); tr.removeClass('collapsed'); tr.find('a.expander').data('expanded',true); tr.find('a.expander').addClass('expanded'); tr.find('a.expander').text('v'); }, hideArtist:function(artist){ var tr=Collection.parent.find('tr[data-artist="'+artist+'"]'); if(tr.length>1){ var artist=tr.first().data('artistData'); tr.first().find('td.album a').text(artist.albums.length+' '+t('media','albums')); tr.first().find('td.title a').text(artist.songs.length+' '+t('media','songs')); tr.first().find('td.album a').unbind('click'); tr.first().find('td.title a').unbind('click'); tr.each(function(i,row){ if(i>0){ $(row).remove(); } }); tr.find('a.expander').data('expanded',false); tr.find('a.expander').removeClass('expanded'); tr.find('a.expander').text('>'); Collection.addButtons(tr,artist); } }, showAlbum:function(artist,album){ var tr = Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]'); tr.find('a.expander').data('expanded',true); tr.find('a.expander').addClass('expanded'); tr.find('a.expander').text('v '); tr.show(); }, hideAlbum:function(artist,album){ var tr = Collection.parent.find('tr[data-artist="'+artist+'"][data-album="'+album+'"]'); tr.find('a.expander').data('expanded',false); tr.find('a.expander').removeClass('expanded'); tr.find('a.expander').text('> '); tr.hide(); tr.first().show(); }, parent:null, hide:function(){ if(Collection.parent){ Collection.parent.hide(); } }, registerPlay:function(item){ if(item){ var song=Collection.findSong(item.artist,item.album,item.name); song.song_playcount++; } }, addButtons:function(parent,data){ buttons = parent.find('.buttons'); if(buttons.find('.add').length<=0) { buttons.append(''); } if(buttons.find('.play').length<=0) { buttons.append(''); } buttons.find('.add').unbind('click'); buttons.find('.add').click(function(event){ event.preventDefault(); PlayList.add(data,true); PlayList.render(); }); buttons.find('.play').unbind('click'); buttons.find('.play').click(function(event){ event.preventDefault(); PlayList.add(data); PlayList.play(0,0); PlayList.render(); }); }, find:function(artistName,albumName,songName){ if(songName){ return Collection.findSong(artistName,albumName,songName); }else if(albumName){ return Collection.findAlbum(artistName,albumName); }else{ return Collection.findArtist(artistName); } }, findArtist:function(name){ for(var i=0;i