Fix slider max to match maximum attainable value.
[quanweb.git] / js / src / SearchController.js
1 // ================
2 // SearchController
3
4 var SearchController = (function () {
5     var my = {},
6         booksModel = undefined;
7
8     const terms = ['aut', 'lan', 'lst', 'ser', 'tit'];
9
10     // ==============
11     // Public methods
12     
13     my.init = function(linkedBooksModel) {
14         booksModel = linkedBooksModel;
15         
16         for (var idx in terms) {
17             addEnterListener(terms[idx]);
18         }
19     };
20     
21     my.onSearch = function() {
22         var url = constructSearchUrl();
23
24         fetch(url, {method:'GET', cache:'default'})
25             .then(function(response) {return response.json();})
26             .then(function(jsonValue) {
27                 // console.log('JSON response:  ', jsonValue);
28                 booksModel.ids = jsonValue;
29                 booksModel.count = booksModel.ids.length;
30                 booksModel.first = (-1);
31
32                 const max_pos = Math.max(0, booksModel.count - booksModel.pageSize);
33         
34                 var elem = Browser.getElementById('slider');
35                 elem.max = max_pos;
36                 elem = Browser.getElementById('bottom_slider');
37                 elem.max = max_pos;
38         
39                 PagingController.adjustPos(0);
40             })
41             .catch(function(err) { 
42                 var msg = 'Error fetching JSON from URL:  ' + url + ': ' + err + ':' + err.stack;
43                 console.log(msg);
44                 report(msg);
45             });
46     };
47
48     // ===============
49     // Private methods
50     
51     // KeyUp listener.  If the key is [Enter], then trigger a click on the [Search] button.
52     function addEnterListener(ctrlId) {
53         Browser.getElementById(ctrlId).addEventListener('keyup', function(event) {
54             event.preventDefault();
55             if (event.keyCode === 13) {
56                 Browser.getElementById('search').click();
57             }
58         });
59     }
60     
61     function constructSearchUrl() {
62         var url = window.location.protocol + '//' + window.location.host + '/search/';
63
64         var firstTime = true;
65
66         for (var idx in terms) {
67             var term = terms[idx];
68             var elem = Browser.getElementById(term);
69             if (null === elem) {
70                 console.log('Error:  could not find form element for search term "' + term + '".');
71                 continue;
72             }
73
74             var value = elem.value;
75             if (value.length > 0) {
76                 if (firstTime) {
77                     url += '?';
78                     firstTime = false;
79                 }
80                 else {
81                     url += '&';
82                 }
83                 if (term === 'lst') {
84                   url += term + '=' + encodeURIComponent('' + value);
85                 }
86                 else {
87                   url += term + '=' + encodeURIComponent('%' + value + '%');
88                 }
89             }
90         }
91         return url;
92     }
93
94     return my;
95 })();