Guest User

Untitled

a guest
Sep 26th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.10 KB | None | 0 0
  1. const defaults = {
  2. cartModal: '.js-ajax-cart-modal', // classname
  3. cartModalContent: '.js-ajax-cart-modal-content', // classname
  4. cartModalClose: '.js-ajax-cart-modal-close', // classname
  5. cartDrawer: '.js-ajax-cart-drawer', // classname
  6. cartDrawerContent: '.js-ajax-cart-drawer-content', // classname
  7. cartDrawerClose: '.js-ajax-cart-drawer-close', // classname
  8. cartDrawerTrigger: '.js-ajax-cart-drawer-trigger', // classname
  9. cartOverlay: '.js-ajax-cart-overlay', // classname
  10. cartCounter: '.js-ajax-cart-counter', // classname
  11. addToCart: '.js-ajax-add-to-cart', // classname
  12. removeFromCart: '.js-ajax-remove-from-cart', //classname
  13. removeFromCartNoDot: 'js-ajax-remove-from-cart', //classname
  14. };
  15.  
  16. const cartModal = document.querySelector(defaults.cartModal);
  17. const cartModalContent = document.querySelector(defaults.cartModalContent);
  18. const cartModalClose = document.querySelector(defaults.cartModalClose);
  19. const cartDrawer = document.querySelector(defaults.cartDrawer);
  20. const cartDrawerContent = document.querySelector(defaults.cartDrawerContent);
  21. const cartDrawerClose = document.querySelector(defaults.cartDrawerClose);
  22. const cartDrawerTrigger = document.querySelector(defaults.cartDrawerTrigger);
  23. const cartOverlay = document.querySelector(defaults.cartOverlay);
  24. const cartCounter = document.querySelector(defaults.cartCounter);
  25. const addToCart = document.querySelectorAll(defaults.addToCart);
  26. let removeFromCart = document.querySelectorAll(defaults.removeFromCart);
  27. const htmlSelector = document.documentElement;
  28.  
  29. for (let i = 0; i < addToCart.length; i++) {
  30.  
  31. addToCart[i].addEventListener('click', function(event) {
  32.  
  33. event.preventDefault();
  34. const formID = this.parentNode.getAttribute('id');
  35. console.log(formID);
  36.  
  37. $.ajax({
  38. type: 'POST',
  39. url: '/cart/add.js',
  40. dataType: 'json',
  41. data: $('#' + formID)
  42. .serialize(),
  43. success: addToCartOk,
  44. error: addToCartFail,
  45. });
  46.  
  47. });
  48.  
  49. }
  50.  
  51. function fetchCart(callback) {
  52. fetch('/cart.js', {credentials: 'same-origin'})
  53. .then(function(r) {
  54. return r.json();
  55. })
  56. .then(function(cart) {
  57. if (typeof callback === 'function') {
  58. callback(cart);
  59. } else {
  60. onCartUpdate(cart);
  61. renderCart(cart);
  62. }
  63. });
  64. }
  65.  
  66. function changeItem(line, callback) {
  67. const quantity = 0;
  68. $.ajax({
  69. type: 'POST',
  70. url: '/cart/change.js',
  71. data: 'quantity=' + quantity + '&line=' + line,
  72. dataType: 'json',
  73. success: function(cart) {
  74. if ((typeof callback) === 'function') {
  75. callback(cart);
  76. } else {
  77. onCartUpdate(cart);
  78. }
  79. },
  80. });
  81. }
  82.  
  83. function onCartUpdate(cart) {
  84. console.log('items in the cart?', cart.item_count);
  85. }
  86.  
  87. function addToCartOk(product) {
  88. cartModalContent.innerHTML = product.title + ' was added to the cart!';
  89. cartCounter.innerHTML = Number(cartCounter.innerHTML) + 1;
  90. openAddModal();
  91. openCartOverlay();
  92. fetchCart();
  93. }
  94.  
  95. function addToCartFail() {
  96. cartModalContent.innerHTML = 'The product you are trying to add is out of stock.';
  97. openAddModal();
  98. openCartOverlay();
  99. }
  100.  
  101. function renderCart(cart) {
  102.  
  103. console.log(cart);
  104.  
  105. clearCartDrawer();
  106.  
  107. cart.items.forEach(function(item, index) {
  108.  
  109. //console.log(item.title);
  110. //console.log(item.image);
  111. //console.log(item.line_price);
  112. //console.log(item.quantity);
  113.  
  114. const productTitle = '<div class="ajax-cart-item__title">' + item.title + '</div>';
  115. const productImage = '<img class="ajax-cart-item__image" src="' + item.image + '" >';
  116. const productPrice = '<div class="ajax-cart-item__price">' + item.line_price + '</div>';
  117. const productQuantity = '<div class="ajax-cart-item__quantity">' + item.quantity + '</div>';
  118. const productRemove = '<div class="ajax-cart-item__remove ' + defaults.removeFromCartNoDot + '"></div>';
  119.  
  120. const concatProductInfo = '<div class="ajax-cart-item__single" data-line="' + Number(index + 1) + '">' + productTitle + productImage + productPrice + productQuantity + productRemove + '</div>';
  121.  
  122. cartDrawerContent.innerHTML = cartDrawerContent.innerHTML + concatProductInfo;
  123.  
  124. });
  125.  
  126. // document.querySelectorAll('.js-ajax-remove-from-cart')
  127. // .forEach((element) => {
  128. // element.addEventListener('click', function() {
  129. // const lineID = this.parentNode.getAttribute('data-line');
  130. // console.log('aa');
  131. // });
  132. // });
  133.  
  134. removeFromCart = document.querySelectorAll(defaults.removeFromCart);
  135.  
  136. for (let i = 0; i < removeFromCart.length; i++) {
  137. removeFromCart[i].addEventListener('click', function() {
  138. const lineID = this.parentNode.getAttribute('data-line');
  139. console.log(lineID);
  140. });
  141. }
  142.  
  143. }
  144.  
  145. function openCartDrawer() {
  146. cartDrawer.classList.add('is-open');
  147. }
  148.  
  149. function closeCartDrawer() {
  150. cartDrawer.classList.remove('is-open');
  151. }
  152.  
  153. function clearCartDrawer() {
  154. cartDrawerContent.innerHTML = '';
  155. }
  156.  
  157. function openAddModal() {
  158. cartModal.classList.add('is-open');
  159. }
  160.  
  161. function closeAddModal() {
  162. cartModal.classList.remove('is-open');
  163. }
  164.  
  165. function openCartOverlay() {
  166. cartOverlay.classList.add('is-open');
  167. htmlSelector.classList.add('is-locked');
  168. }
  169.  
  170. function closeCartOverlay() {
  171. cartOverlay.classList.remove('is-open');
  172. htmlSelector.classList.remove('is-locked');
  173. }
  174.  
  175. cartModalClose.addEventListener('click', function() {
  176. closeAddModal();
  177. closeCartOverlay();
  178. });
  179.  
  180. cartDrawerClose.addEventListener('click', function() {
  181. closeCartDrawer();
  182. closeCartOverlay();
  183. });
  184. // cart is empty stanje
  185. cartOverlay.addEventListener('click', function() {
  186. closeAddModal();
  187. closeCartDrawer();
  188. closeCartOverlay();
  189. });
  190.  
  191. cartDrawerTrigger.addEventListener('click', function(event) {
  192. event.preventDefault();
  193. //fetchCart();
  194. openCartDrawer();
  195. openCartOverlay();
  196. });
  197.  
  198. document.addEventListener('DOMContentLoaded', function() {
  199. fetchCart();
  200. });
Add Comment
Please, Sign In to add comment