--- /dev/null
+// =========
+// BooksView
+
+var BooksView = (function() {
+ var my = {};
+
+ // ========================
+ // Private member variables
+ var booksModel = undefined;
+
+ // ==============
+ // Public Methods
+
+ my.init = function(linkedBooksModel) {
+ booksModel = linkedBooksModel;
+
+ booksModel.listen(my);
+ };
+
+ // Called when the model changes
+ my.notify = function () {
+ var i;
+ var html = '';
+ var limit = BooksModel.last - BooksModel.first;
+ for (i = 0; i <= limit; ++i) {
+ var book = BooksModel.cache[i];
+ html += bookHtml(book);
+ }
+
+ Browser.getElementById('books').innerHTML = html;
+ Browser.getElementById('first').innerHTML = (BooksModel.first + 1);
+ Browser.getElementById('last').innerHTML = (BooksModel.last + 1);
+ Browser.getElementById('count').innerHTML = BooksModel.count;
+ };
+
+ // ===============
+ // Private methods
+
+ function bookHtml(book) {
+ var result = '<div class="book">'
+ + '<table>'
+ + '<tr>'
+ + '<td><a href="/book/' + book.Id + '">';
+ if (0 == book.CoverId) {
+ result += '(No cover available)';
+ } else {
+ result += '<img class="cover-thumb" src="/download/' + book.CoverId + '"/>';
+ }
+ result += '</a></td>'
+ + '<td onclick="displayDetails(' + book.Id + ');" '
+ + ' onmouseover="ToolTip.startTooltipTimer(' + book.Id + ');"'
+ + ' onmouseleave="ToolTip.stopTooltipTimer();">'
+ + '<p><b>' + book.Title + '</b></p>'
+ + '<p>'
+ + '<i>' + book.AuthorReading + '</i>';
+ if (typeof(book.SeriesName) !== 'undefined' && book.SeriesName.length > 0) {
+ result += '<br/><i>' + book.SeriesName + ' ' + book.Volume + '</i>';
+ }
+ result += '</p>'
+ + '</td>'
+ + '</tr>'
+ + '</table>'
+ + '</div>';
+ return result;
+ }
+
+ return my;
+})();