mirror of
https://github.com/owntone/owntone-server.git
synced 2025-02-24 11:59:16 -05:00
First incarnation of playlist scrolling with Openrico Livegrid.
If you open playlist.html and without selecting anything head to the song list scroller you can scroll in your song list. With rows fetched dynamicly from the server. A lot of things are broken, but the scrolling works!
This commit is contained in:
parent
5ce3ebbb86
commit
a9dd972f25
@ -1972,6 +1972,17 @@ Rico.LiveGridBuffer.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
loadRows: function(ajaxResponse) {
|
loadRows: function(ajaxResponse) {
|
||||||
|
var newRows = [];
|
||||||
|
$A(ajaxResponse.responseXML.getElementsByTagName('dmap.listingitem')).each(function (el) {
|
||||||
|
var row = [];
|
||||||
|
//,dmap.itemid,,dmap.itemname']
|
||||||
|
['dmap.itemname','daap.songtime','daap.songartist','daap.songalbum','daap.songgenre'].each(function (name) {
|
||||||
|
row.push(el.getElementsByTagName(name)[0].firstChild.nodeValue);
|
||||||
|
});
|
||||||
|
newRows.push(row);
|
||||||
|
});
|
||||||
|
return newRows;
|
||||||
|
|
||||||
var rowsElement = ajaxResponse.getElementsByTagName('rows')[0];
|
var rowsElement = ajaxResponse.getElementsByTagName('rows')[0];
|
||||||
this.updateUI = rowsElement.getAttribute("update_ui") == "true"
|
this.updateUI = rowsElement.getAttribute("update_ui") == "true"
|
||||||
var newRows = new Array()
|
var newRows = new Array()
|
||||||
@ -2381,8 +2392,9 @@ Rico.LiveGrid.prototype = {
|
|||||||
queryString = queryString+'&sort_col='+escape(this.sortCol)+'&sort_dir='+this.sortDir;
|
queryString = queryString+'&sort_col='+escape(this.sortCol)+'&sort_dir='+this.sortDir;
|
||||||
|
|
||||||
this.ajaxOptions.parameters = queryString;
|
this.ajaxOptions.parameters = queryString;
|
||||||
|
var end = bufferStartPos+fetchSize;
|
||||||
ajaxEngine.sendRequest( this.tableId + '_request', this.ajaxOptions );
|
new Ajax.Request(Query.getFullUrl('songs')+'&index='+bufferStartPos+'-'+end,{method: 'get',onComplete: this.ajaxUpdate.bind(this)});
|
||||||
|
// ajaxEngine.sendRequest( this.tableId + '_request', this.ajaxOptions );
|
||||||
|
|
||||||
this.timeoutHandler = setTimeout( this.handleTimedOut.bind(this), this.options.bufferTimeout);
|
this.timeoutHandler = setTimeout( this.handleTimedOut.bind(this), this.options.bufferTimeout);
|
||||||
|
|
||||||
|
@ -96,9 +96,41 @@ Album<br />
|
|||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<div style="height: 400px; overflow: auto; width: 549px;">
|
<!-- <col style="width: 140px;" />
|
||||||
|
<col style="width: 50px;" />
|
||||||
|
<col style="width: 120px;" />
|
||||||
|
<col style="width: 120px;" />
|
||||||
|
<col style="width: 100px;" />
|
||||||
|
-->
|
||||||
|
|
||||||
|
<div style="height: 400px; width: 570px;">
|
||||||
<table id="songs_data" style="width:530px;" border="0" cellspacing="0" cellpadding="0">
|
<table id="songs_data" style="width:530px;" border="0" cellspacing="0" cellpadding="0">
|
||||||
<tr><td>hej</td><td></td><td></td><td></td><td></td></tr>
|
<col style="width: 140px;" />
|
||||||
|
<col style="width: 50px;" />
|
||||||
|
<col style="width: 120px;" />
|
||||||
|
<col style="width: 120px;" />
|
||||||
|
<col style="width: 100px;" />
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
|
<tr><td> </td><td></td><td></td><td></td><td></td></tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -24,6 +24,7 @@ function initPlaylist() {
|
|||||||
Event.observe('edit_playlist_name','keypress',EventHandler.editPlaylistNameKeyPress);
|
Event.observe('edit_playlist_name','keypress',EventHandler.editPlaylistNameKeyPress);
|
||||||
// Firefox remebers the search box value on page reload
|
// Firefox remebers the search box value on page reload
|
||||||
Field.clear('search');
|
Field.clear('search');
|
||||||
|
new Rico.LiveGrid('songs_data',20,1000,'',{prefetchBuffer: true});
|
||||||
}
|
}
|
||||||
var GlobalEvents = {
|
var GlobalEvents = {
|
||||||
_clickListeners: [],
|
_clickListeners: [],
|
||||||
@ -92,6 +93,7 @@ var Source = {
|
|||||||
input = $('edit_playlist_name');
|
input = $('edit_playlist_name');
|
||||||
Source.playlistId = $('source').value;
|
Source.playlistId = $('source').value;
|
||||||
playlistName = this._getOptionElement(Source.playlistId).firstChild.nodeValue;
|
playlistName = this._getOptionElement(Source.playlistId).firstChild.nodeValue;
|
||||||
|
//###FIXME use prototype Position instead
|
||||||
input.style.top = RicoUtil.toDocumentPosition(this._getOptionElement(Source.playlistId)).y + 'px';
|
input.style.top = RicoUtil.toDocumentPosition(this._getOptionElement(Source.playlistId)).y + 'px';
|
||||||
input.value = playlistName;
|
input.value = playlistName;
|
||||||
input.style.display = 'block';
|
input.style.display = 'block';
|
||||||
@ -126,6 +128,7 @@ var Source = {
|
|||||||
Query.send('genres');
|
Query.send('genres');
|
||||||
},
|
},
|
||||||
click: function (e) {
|
click: function (e) {
|
||||||
|
//###FIXME use prototype Position instead
|
||||||
var x = Event.pointerX(e);
|
var x = Event.pointerX(e);
|
||||||
var y = Event.pointerY(e);
|
var y = Event.pointerY(e);
|
||||||
var el = $('edit_playlist_name');
|
var el = $('edit_playlist_name');
|
||||||
@ -305,37 +308,39 @@ var Query = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
send: function (type) {
|
getFullUrl: function (type) {
|
||||||
this.busy = true;
|
this.busy = true;
|
||||||
var url;
|
var url;
|
||||||
var handler;
|
var handler;
|
||||||
var meta = '';
|
var meta = '';
|
||||||
var index = '';
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'genres':
|
case 'genres':
|
||||||
url = 'browse/genres';
|
url = 'browse/genres';
|
||||||
handler = ResponseHandler.genreAlbumArtist;
|
|
||||||
break;
|
break;
|
||||||
case 'artists':
|
case 'artists':
|
||||||
url = 'browse/artists';
|
url = 'browse/artists';
|
||||||
handler = ResponseHandler.genreAlbumArtist;
|
|
||||||
break;
|
break;
|
||||||
case 'albums':
|
case 'albums':
|
||||||
url = 'browse/albums';
|
url = 'browse/albums';
|
||||||
handler = ResponseHandler.genreAlbumArtist;
|
|
||||||
break;
|
break;
|
||||||
case 'songs':
|
case 'songs':
|
||||||
url = 'items';
|
url = 'items';
|
||||||
meta = '&meta=daap.songalbum,daap.songartist,daap.songgenre,dmap.itemid,daap.songtime,dmap.itemname';
|
meta = '&meta=daap.songalbum,daap.songartist,daap.songgenre,dmap.itemid,daap.songtime,dmap.itemname';
|
||||||
index = '&index=0-50';
|
|
||||||
handler = rsSongs;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
alert("Shouldn't happen 2");
|
alert("Shouldn't happen 2");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
url = this.baseUrl + this.playlistUrl + url + '?output=xml' + index + meta + this.getUrl(type);
|
return this.baseUrl + this.playlistUrl + url + '?output=xml' + meta + this.getUrl(type);
|
||||||
new Ajax.Request(url ,{method: 'get',onComplete:handler});
|
},
|
||||||
|
send: function(type) {
|
||||||
|
if (('genres' == type) || ('artists' == type) || ('albums' == type)) {
|
||||||
|
handler = ResponseHandler.genreAlbumArtist;
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
// handler = rsSongs;
|
||||||
|
}
|
||||||
|
new Ajax.Request(this.getFullUrl(type), {method: 'get',onComplete:handler});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
var ResponseHandler = {
|
var ResponseHandler = {
|
||||||
@ -378,7 +383,7 @@ var ResponseHandler = {
|
|||||||
Query.send('albums');
|
Query.send('albums');
|
||||||
break;
|
break;
|
||||||
case 'albums':
|
case 'albums':
|
||||||
Query.send('songs');
|
// Query.send('songs');
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
alert("Shouldn't happen 3");
|
alert("Shouldn't happen 3");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user