Advertisement
AsiaKu

Untitled

Feb 21st, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.71 KB | None | 0 0
  1. $(document).ready(function () {
  2.  
  3. var API = 'https://api.punkapi.com/v2/beers'
  4. var perPage = 20
  5. var pageNumber = 1
  6.  
  7. var beerList = $('#beers')
  8. var loader = $("#loader")
  9.  
  10. loader.show()
  11.  
  12. $.ajax({
  13. url: API + '?page=' + pageNumber + '&per_page=' + perPage,
  14. method: 'GET',
  15. success: showBeerList
  16. });
  17.  
  18. function showPage () {
  19. loader.hide()
  20. $("#main").show()
  21. }
  22.  
  23. // CREATE PLACE FOR BEER SPECIFICATION
  24. function beerSpecification (item) {
  25.  
  26. var picture = "url(" + item.image_url + ")"
  27.  
  28. $('<div class="beer-specyfication">').attr('id', 'beer-number' + item.id)
  29. .append($('<div class="beer-picture">').css('background-image', picture))
  30. .append($('<h2 class="beer-title">').text(item.name))
  31. .append($('<h3 class="beer-tagline">').text(item.tagline))
  32. .appendTo(beerList);
  33. }
  34.  
  35. // CREATE MODAL WINDOW
  36. function displayModalWindow (item, allSimilarBeers) {
  37. var modalId = 'modal' + item.id
  38. var picture = "url(" + item.image_url + ")"
  39.  
  40. var modal = $('<div class="modal">').attr('id', modalId)
  41. .appendTo(beerList).css('background-color', 'rgba(0, 0, 0, 0.4)')
  42.  
  43. $('<div class="modal-content">')
  44. .append($('<div class="modal-beer-picture">').css('background-image', picture))
  45. .append($('<button class="close">').attr('id', 'button-back' + item.id).text('back')
  46. .click(function () {
  47. modal.remove();
  48. })
  49. )
  50. .append($('<h2 class="modal-beer-title">').text(item.name))
  51. .append($('<h3 class="modal-beer-tagline">').text(item.tagline))
  52. .append($('<p class="modal-beer-details">').text('IBU: ' + item.ibu))
  53. .append($('<p class="modal-beer-details">').text('ABV: ' + item.abv + '%'))
  54. .append($('<p class="modal-beer-details">').text('EBC: ' + item.ebc))
  55. .append($('<p class="modal-beer-description">').text(item.description))
  56. .append($('<p class="modal-beer-tips">').text(item.brewers_tips))
  57. .append($('<div class="similar-beer-list">'))
  58. .appendTo(modal)
  59.  
  60. $('<p class="show-more">').text('KEEP CALM AND TRY ALSO:').appendTo('.similar-beer-list');
  61.  
  62. allSimilarBeers
  63. .filter(function (elem) { return elem.id !== item.id; })
  64. .slice(0, 3)
  65. .forEach(function (similarBeer) {
  66.  
  67. var similarBeerId = 'similarBeer' + similarBeer.id
  68. var picture = 'url(' + similarBeer.image_url + ')'
  69.  
  70. $('<div class="similar-beer">').attr('id', similarBeerId)
  71. .append($('<div class="similar-beer-picture">').css('background-image', picture))
  72. .append($('<h2 class="similar-beer-title">').text(similarBeer.name))
  73. .appendTo('#modal' + item.id + ' .similar-beer-list').click(function () {
  74. modal.hide();
  75. retrieveSimilarBeers(similarBeer, function (allBeers) {
  76. modal.remove();
  77. displayModalWindow(similarBeer, allBeers);
  78. })
  79. })
  80. })
  81.  
  82. if (allSimilarBeers.length === 0) {
  83. $('<p>').text('No similar beers :( ').appendTo('#modal' + item.id + ' .similar-beer-list');
  84. }
  85.  
  86. return modal;
  87. }
  88.  
  89. function retrieveSimilarBeers (beer, callback) {
  90. function attr (name, value, diff) {
  91. var min = value - diff
  92. min = min >= 0 ? min : 0
  93. return `${name}_gt=${min}&${name}_lt=${value + diff}`
  94. }
  95.  
  96. similarItemAbv = Math.round(beer.abv)
  97. similarItemIbu = Math.round(beer.ibu)
  98. similarItemEbc = Math.round(beer.ebc)
  99.  
  100. var url = `${API}?${attr('abv', similarItemAbv, 3)}&${attr('ibu', similarItemIbu, 5)}&${attr('ebc', similarItemEbc, 5)}`
  101.  
  102. $.ajax({
  103. url: url,
  104. method: 'GET',
  105. success: callback
  106. })
  107. }
  108.  
  109. function showBeerList (resp) {
  110.  
  111. var loadMore = $('#load-more')
  112.  
  113. showPage()
  114. resp.forEach(function (item) {
  115. beerSpecification(item)
  116. $('#beer-number' + item.id).click(function () {
  117. retrieveSimilarBeers(item, function (allSimilarBeers) {
  118. displayModalWindow(item, allSimilarBeers)
  119. })
  120. })
  121.  
  122. loadMore.click(function() {
  123. perPage = perPage + 20
  124. pageNumber = pageNumber + 1
  125. beerSpecification(item);
  126. })
  127. })
  128. }
  129. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement