--- /dev/null
+// ================
+// 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;
+})();