X-Git-Url: http://jaekl.net/gitweb/?p=quanweb.git;a=blobdiff_plain;f=app%2Flib.js;h=50086d0db6c12fda13f253e31f41edbf7489a164;hp=7175471c084b4822b8f479e84b91858c78d079e8;hb=2df0b2d1b40d59b36cb0964f1bbfb5247b55178a;hpb=ca96e0b6276f6efe56b102ad8286a2534d6e264b diff --git a/app/lib.js b/app/lib.js index 7175471..50086d0 100644 --- a/app/lib.js +++ b/app/lib.js @@ -6,7 +6,34 @@ g_state = { count: 0, first: 0, ids: [], - last: 0, + last: (-1), + pageSize: 9 +} + +function adjustPos(setting) { + var value = parseInt(setting) + + if (g_state.first === value) { + // No change + return; + } + + var maxFirst = g_state.count - g_state.pageSize; + + if (value < 0) { + g_state.first = 0; + } else if (value > maxFirst) { + g_state.first = maxFirst; + } else { + g_state.first = value; + } + + g_state.last = g_state.first + g_state.pageSize - 1; + if (g_state.last >= g_state.count) { + g_state.last = g_state.count - 1; + } + + refreshData(); } function constructSearchUrl() { @@ -40,9 +67,19 @@ function constructSearchUrl() { } function onNext() { + if (g_state.last < (g_state.count - 1)) { + adjustPos(g_state.first + g_state.pageSize); + } } function onPrev() { + if (g_state.first > 0) { + adjustPos(g_state.first - g_state.pageSize); + } +} + +function onSlide(value) { + adjustPos(value); } function onSearch() { @@ -58,12 +95,14 @@ function onSearch() { .then((jsonValue) => { console.log('JSON response: ', jsonValue); g_state.ids = jsonValue - g_state.first = 0 - g_state.last = (g_state.ids.length) - 1; - if (g_state.last > 100) { - g_state.last = 100; - } - refreshData() + g_state.count = g_state.ids.length; + g_state.first = (-1) + + var elem = document.getElementById('slider'); + elem.max = g_state.count; + elem.value = '0' + + adjustPos(0); }) .catch(err => { var msg = 'Error fetching JSON from URL: ' + url + ': ' + err + ':' + err.stack; @@ -78,7 +117,7 @@ function refreshData() { var i; var url = '/info/?ids='; for (i = g_state.first; i <= g_state.last; ++i) { - if (i > 0) { + if (i > g_state.first) { url += ','; } url += g_state.ids[i]; @@ -102,12 +141,16 @@ function refreshData() { function refreshLayout() { var i; var html = ''; - for (i = g_state.first; i <= g_state.last; ++i) { + var limit = g_state.last - g_state.first; + for (i = 0; i <= limit; ++i) { var book = g_state.cache[i]; html += bookHtml(book); } document.getElementById('books').innerHTML = html; + document.getElementById('first').innerHTML = (g_state.first + 1); + document.getElementById('last').innerHTML = (g_state.last + 1); + document.getElementById('count').innerHTML = g_state.count; } function report(message) { @@ -116,10 +159,28 @@ function report(message) { function bookHtml(book) { console.log('bookHtml(): ', book); - var result = '
' - + '' - + '
' - + '' + book.Description + '
'; + var result = '
' + + '' + + '' + + '' + + '' + + '' + + '
'; + if (0 == book.CoverId) { + result += '(No cover available)' + } else { + result += '' + } + result += '' + + '

' + book.Title + '

' + + '

' + + '' + book.AuthorReading + ''; + if (typeof(book.SeriesName) !== 'undefined' && book.SeriesName.length > 0) { + result += '
' + book.SeriesName + ' ' + book.Volume + ''; + } + result += '

' + + '
' + + '
'; return result; }