Advertisement
mArtti

Untitled

Jun 17th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.65 KB | None | 0 0
  1. (function () {
  2. // SELECTORS
  3. const searchButton = document.querySelector(".search-trigger"),
  4. closeButton = document.querySelector(".search-overlay__close"),
  5. searchOverlay = document.querySelector(".search-overlay"),
  6. searchField = document.querySelector('#search-term'),
  7. resultsDiv = document.querySelector('#search-overlay__results'),
  8. body = document.body;
  9. postsRequest = fetch(`${universityData.root_url}/wp-json/wp/v2/posts/?search=${searchField.value}`);
  10. pagesRequest = fetch(`${universityData.root_url}/wp-json/wp/v2/pages/?search=${searchField.value}`);
  11.  
  12.  
  13.  
  14.  
  15. let isOverlayOpen = false,
  16. isSpinnerVisable = false,
  17. typingTimer, previousValue;
  18.  
  19. // ACTIONS
  20. const events = {
  21. keyPressDispatcher (e) {
  22. //too many future conflicts with s = search, poor design practice
  23. if (e.keyCode === 27 && isOverlayOpen) events.closeOverlay();
  24. },
  25.  
  26. openOverlay() {
  27. searchOverlay.classList.add("search-overlay--active");
  28. body.classList.add("body-no-scroll");
  29. setTimeout(() => searchField.focus(), 301);
  30. isOverlayOpen = true;
  31. },
  32.  
  33. closeOverlay() {
  34. searchOverlay.classList.remove("search-overlay--active");
  35. body.classList.remove("body-no-scroll");
  36. isOverlayOpen = false;
  37. },
  38.  
  39. typingLogic() {
  40. if(searchField.value != previousValue) {
  41. clearTimeout(typingTimer);
  42. if(searchField.value) {
  43. if(!isSpinnerVisable) {
  44. resultsDiv.innerHTML = '<div class="spinner-loader"></div>';
  45. isSpinnerVisable = true;
  46. }
  47. typingTimer = setTimeout(() => events.getResults(), 750);
  48. } else {
  49. resultsDiv.innerHTML = '';
  50. isSpinnerVisable = false;
  51. }
  52. }
  53. previousValue = searchField.value;
  54. },
  55.  
  56. getResults() {
  57. fetchURLs();
  58. async function fetchURLs() {
  59. try {
  60. let data = await Promise.all([
  61. fetch(`${universityData.root_url}/wp-json/wp/v2/posts/?search=${searchField.value}`).then((response) => response.json()),
  62. fetch(`${universityData.root_url}/wp-json/wp/v2/pages/?search=${searchField.value}`).then((response) => response.json())
  63. ]);
  64.  
  65. resultsDiv.innerHTML = `
  66. <h2 class="search-overlay__section-title">General Information</h2>
  67. <ul class="link-list min-list">
  68. ${!data[0].length && !data[1].length ? `<p>No General Information Matches That Search<p>` :
  69. `${data[0].map(arr => `<li><a href="${arr.link}">${arr.title.rendered}</a></li>`).join(''). concat(data[1].map(arr => `<li><a href="${arr.link}">${arr.title.rendered}</a></li>`).join(''))}
  70. </ul> `}
  71. `;
  72. } catch (error) {
  73. resultsDiv.innerHTML = `<p>There was a problem with the search.<p>`;
  74. }
  75. isSpinnerVisable = false;
  76. }
  77. }
  78.  
  79.  
  80. // EVENTS
  81. searchButton.addEventListener('click', events.openOverlay);
  82. closeButton.addEventListener('click', events.closeOverlay);
  83. searchField.addEventListener('keyup', events.typingLogic);
  84. document.addEventListener('keydown', events.keyPressDispatcher);
  85. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement