diff --git a/app.js b/app.js index b0b06a9..68b5016 100644 --- a/app.js +++ b/app.js @@ -13,6 +13,58 @@ db.settings({ timestampsInSnapshots: true }); var searchTimeout = null; var resultsElm = document.getElementById('results'); + +function runQuery (query) { + var input = document.querySelector('input'); + input.parentElement.classList.add('is-loading'); + results.innerHTML = '
'; + query + .get() + .then(function (docs) { + if (docs.empty) { + results.innerHTML = 'No results found for query "' + queryString + '"'; + return; + } + + // Collect the data of our documents into an array + var data = []; + for (var i = 0; i < docs.size; i += 1) { + var doc = docs.docs[i]; + data.push(doc.data()); + } + + // Sort our array by my popular movie first + data.sort(function (a, b) { + if (a.imdb_position < b.imdb_position) return -1; + if (a.imdb_position > b.imdb_position) return 1; + return 0; + }); + + // Render our results + results.innerHTML = ''; + for (var i = 0; i < data.length; i += 1) { + var doc = data[i]; + tr = document.createElement('tr'); + var td = document.createElement('td'); + td.innerText = doc.imdb_position; + tr.appendChild(td); + + td = document.createElement('td'); + td.innerText = doc.title; + tr.appendChild(td); + + td = document.createElement('td'); + td.innerText = doc.released; + tr.appendChild(td); + + results.appendChild(tr); + } + }) + .finally(function () { + input.parentElement.classList.remove('is-loading'); + }); +} + document.querySelector('input').addEventListener('keyup', function (evt) { var elm = evt.target; var queryString = elm.value.trim(); @@ -43,74 +95,10 @@ document.querySelector('input').addEventListener('keyup', function (evt) { // Use `setTimeout` to debounce our api calls clearTimeout(searchTimeout); searchTimeout = setTimeout(function () { - elm.parentElement.classList.add('is-loading'); - query - .get() - .then(function (docs) { - if (docs.empty) { - results.innerHTML = '
No results found for query "' + queryString + '"
'; - return; - } - - // Collect the data of our documents into an array - var data = []; - for (var i = 0; i < docs.size; i += 1) { - var doc = docs.docs[i]; - data.push(doc.data()); - } - - // Sort our array by my popular movie first - data.sort(function (a, b) { - if (a.imdb_position < b.imdb_position) return -1; - if (a.imdb_position > b.imdb_position) return 1; - return 0; - }); - - // Render our results - // Table - var table = document.createElement('table'); - table.classList.add('table'); - table.classList.add('is-striped'); - - // Heading row - var thead = document.createElement('thead'); - table.appendChild(thead); - var tr = document.createElement('tr'); - thead.appendChild(tr); - - var th = document.createElement('th'); - th.innerText = 'Position'; - thead.appendChild(th); - th = document.createElement('th'); - th.innerText = 'Title'; - thead.appendChild(th); - th = document.createElement('th'); - th.innerText = 'Released'; - thead.appendChild(th); - - for (var i = 0; i < data.length; i += 1) { - var doc = data[i]; - tr = document.createElement('tr'); - var td = document.createElement('td'); - td.innerText = doc.imdb_position; - tr.appendChild(td); - - td = document.createElement('td'); - td.innerText = doc.title; - tr.appendChild(td); - - td = document.createElement('td'); - td.innerText = doc.released; - tr.appendChild(td); - - table.appendChild(tr); - } - - results.innerHTML = ''; - results.appendChild(table); - }) - .finally(function () { - elm.parentElement.classList.remove('is-loading'); - }); + runQuery(query); }, 300); }); + +// Run initial query to load some data +var top20 = db.collection('movies').orderBy('imdb_position', 'asc').limit(20); +runQuery(top20); diff --git a/index.html b/index.html index b521d31..05ca9a7 100644 --- a/index.html +++ b/index.html @@ -18,14 +18,24 @@
- +
-
+ + + + + + + + + + +
PositionTitleReleased