Adds unit test framework and a first unit test.
[quanweb.git] / js / src / BooksView.js
diff --git a/js/src/BooksView.js b/js/src/BooksView.js
new file mode 100644 (file)
index 0000000..0259edd
--- /dev/null
@@ -0,0 +1,68 @@
+// =========
+// 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;
+})();