X-Git-Url: http://jaekl.net/gitweb/?p=quanweb.git;a=blobdiff_plain;f=js%2Fsrc%2FSearchController.js;fp=js%2Fsrc%2FSearchController.js;h=0f131945bacbf56f2ac59cdcc1db7a96262590b7;hp=0000000000000000000000000000000000000000;hb=13efcb823cde095d5562ac061ef5a859d91c0f70;hpb=222a53b5def154dcc59dbaad98404ea2930e8434 diff --git a/js/src/SearchController.js b/js/src/SearchController.js new file mode 100644 index 0000000..0f13194 --- /dev/null +++ b/js/src/SearchController.js @@ -0,0 +1,87 @@ +// ================ +// SearchController + +var SearchController = (function () { + var my = {}, + booksModel = undefined; + + const terms = ['aut', 'tit', 'ser']; + + // ============== + // Public methods + + my.init = function(linkedBooksModel) { + booksModel = linkedBooksModel; + + for (var idx in terms) { + addEnterListener(terms[idx]); + } + }; + + my.onSearch = function() { + var url = constructSearchUrl(); + + fetch(url, {method:'GET', cache:'default'}) + .then(function(response) {return response.json();}) + .then(function(jsonValue) { + // console.log('JSON response: ', jsonValue); + booksModel.ids = jsonValue; + booksModel.count = booksModel.ids.length; + booksModel.first = (-1); + + var elem = Browser.getElementById('slider'); + elem.max = booksModel.count; + + PagingController.adjustPos(0); + }) + .catch(function(err) { + var msg = 'Error fetching JSON from URL: ' + url + ': ' + err + ':' + err.stack; + console.log(msg); + report(msg); + }); + }; + + // =============== + // Private methods + + // KeyUp listener. If the key is [Enter], then trigger a click on the [Search] button. + function addEnterListener(ctrlId) { + Browser.getElementById(ctrlId).addEventListener('keyup', function(event) { + event.preventDefault(); + if (event.keyCode === 13) { + Browser.getElementById('search').click(); + } + }); + } + + function constructSearchUrl() { + var url = window.location.protocol + '//' + window.location.host + '/search/'; + + var firstTime = true; + + for (var idx in terms) { + var term = terms[idx]; + var elem = Browser.getElementById(term); + if (null === elem) { + console.log('Error: could not find form element for search term "' + term + '".'); + continue; + } + + var value = elem.value; + if (value.length > 0) { + if (firstTime) { + url += '?'; + firstTime = false; + } + else { + url += '&'; + } + url += term + '=' + encodeURIComponent('%' + value + '%'); + } + } + + return url; + } + + return my; +})();