PageRenderTime 25ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/resources/assets/js/cart.js

https://bitbucket.org/maximefaulon/laravel-blackmoon
JavaScript | 351 lines | 234 code | 65 blank | 52 comment | 32 complexity | 7cbb1477b56a15c676335b94aeb6ae89 MD5 | raw file
  1. import $ from 'jquery';
  2. var baseUrlImg = "";
  3. var baseUrllink = "/catalog/productSheet/";
  4. // var baseUrlCatalog = "/Symfony/web/app_dev.php/catalog/";
  5. /*function AjaxCallProduct(id) {
  6. var price = 0;
  7. $.ajax({
  8. url: "/Symfony/web/app_dev.php/catalog/product/getPrice",
  9. method: "post",
  10. data: { id : id}
  11. }).done(function(msg) {
  12. console.log(msg);
  13. price = msg;
  14. });
  15. return price;
  16. }*/
  17. function setCookie(cname, cvalue, exhours) {
  18. var d = new Date();
  19. d.setTime(d.getTime() + (exhours * 60 * 60 * 1000));
  20. var expires = "expires=" + d.toUTCString();
  21. if ('btoa' in window) {
  22. cvalue = btoa(cvalue);
  23. }
  24. document.cookie = cname + "=" + cvalue + "; " + expires + ';path=/';
  25. }
  26. function saveCart(inCartItemsNum, cartArticles) {
  27. setCookie('inCartItemsNum', inCartItemsNum, 1);
  28. setCookie('cartArticles', JSON.stringify(cartArticles), 1);
  29. }
  30. function getCookie(cname) {
  31. var name = cname + "=";
  32. var ca = document.cookie.split(';');
  33. for (var i = 0; i < ca.length; i++) {
  34. var c = ca[i];
  35. while (c[0] == ' ') {
  36. c = c.substring(1);
  37. }
  38. if (c.indexOf(name) != -1) {
  39. if ('btoa' in window) {
  40. return atob(c.substring(name.length, c.length));
  41. }
  42. else {
  43. return c.substring(name.length, c.length);
  44. }
  45. }
  46. }
  47. return false;
  48. }
  49. var inCartItemsNum = 0;
  50. var cartArticles;
  51. function cartEmptyToggle() {
  52. // $('#no-empty-cart').hide();
  53. if (inCartItemsNum > 0) {
  54. // $('#btn-commander').removeClass('hidden');
  55. // $('#lien-panier').click(function(){
  56. // return window.location='/panier.php';
  57. // });
  58. $('#no-empty-cart').show();
  59. $('#empty-cart').hide()
  60. }
  61. else {
  62. // $('#lien-panier').click(function(){
  63. // return false;
  64. // });
  65. $('#no-empty-cart').hide();
  66. $('#empty-cart').show();
  67. }
  68. }
  69. inCartItemsNum = parseInt(getCookie('inCartItemsNum') ? getCookie('inCartItemsNum') : 0);
  70. cartArticles = getCookie('cartArticles') ? JSON.parse(getCookie('cartArticles')) : [];
  71. if (cartArticles == null) {
  72. inCartItemsNum = 0;
  73. cartArticles = [];
  74. saveCart(inCartItemsNum, cartArticles);
  75. }
  76. if (inCartItemsNum < 0 | cartArticles.length == 0) {
  77. inCartItemsNum = 0;
  78. cartArticles = [];
  79. saveCart(inCartItemsNum, cartArticles);
  80. }
  81. console.log(cartArticles)
  82. cartEmptyToggle();
  83. $('.badge').html(inCartItemsNum);
  84. var items = '';
  85. var item;
  86. var subTotal = 0;
  87. cartArticles.forEach(function (v) {
  88. subTotal += parseInt(v.price) * v.qt;
  89. /*.replace(',', '.') * 1000;*/
  90. item = `<a href="/product/` + v.name + `">
  91. <div class="row" id="'+ v.name + v.size +'" ref="`+ v.name +`">
  92. <div class="col-6">
  93. <img src="` + baseUrlImg + v.url + `" class="" width="100px" height="100px">
  94. </div>
  95. <div class="col-6">
  96. <p class=""><strong class="">` + v.name + `</strong></p><p class="">x<span id="qt-` + v.name + v.size + `" class="qt">` + v.qt + `</span></p>
  97. </div>
  98. </div>
  99. </a>`;
  100. items += item;
  101. });
  102. $('.subTotal').html(subTotal.toFixed(2) + '€');
  103. $('#cart').prepend(items);
  104. $(document).ready(function () {
  105. $('.add-to-cart').click(function () {
  106. console.log(cartArticles)
  107. var $this = $(this);
  108. var name = $this.attr('data-name');
  109. //
  110. // $.ajax({
  111. // url: "/catalog/product/getPrice",
  112. // method: "post",
  113. // data: { id : id}
  114. // }).done(function(msg) {
  115. //
  116. //
  117. var size = document.getElementById("select-size").value;
  118. if(!size) {
  119. window.alert('Veuillez sélectionner une taille');
  120. return false;
  121. }
  122. // var price = msg;
  123. // var price = 0;
  124. var price = $this.attr('data-price');
  125. var url = $this.attr('data-url');
  126. var qt = parseInt(document.getElementById("input-qt").value);
  127. var newArticle = true;
  128. subTotal += parseInt(price);
  129. cartArticles.forEach(function (v) {
  130. // var req;
  131. if (v.name == name & v.size == size) {
  132. newArticle = false;
  133. v.qt += qt;
  134. $('#qt-' + name + size).html(v.qt);
  135. }
  136. });
  137. if (newArticle) {
  138. var req = `<a href="/product/` + name + `">
  139. <div class="row" id="'+ v.name + v.size +'" ref="`+ name +`">
  140. <div class="col-6">
  141. <img src="` + baseUrlImg + url + `" class="" width="100px" height="100px">
  142. </div>
  143. <div class="col-6">
  144. <p class=""><strong class="">` + name + `</strong></p><p class="">x<span id="qt-` + name + size + `" class="qt">` + qt + `</span></p>
  145. </div>
  146. </div>
  147. </a>`;
  148. $('#cart').prepend(req);
  149. cartArticles.push({
  150. name: name,
  151. price: price,
  152. size: size,
  153. qt: qt,
  154. url: url
  155. });
  156. inCartItemsNum += 1;
  157. }
  158. /*$('.alert').show();*/
  159. saveCart(inCartItemsNum, cartArticles);
  160. $('.subTotal').html(subTotal.toFixed(2) + '€');
  161. $('.badge').html(inCartItemsNum);
  162. cartEmptyToggle();
  163. var alert = `<div class="alert alert-info alert-dismissible fade show" role="alert">
  164. <strong>Bravo !</strong> Article ajouté avec succès.
  165. <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  166. <span aria-hidden="true">&times;</span>
  167. </button>
  168. </div>`;
  169. $('main').prepend(alert);
  170. $('html, body').animate({scrollTop: 0}, 'slow');
  171. // });
  172. });
  173. });
  174. $(document).ready(function(){
  175. if (window.location.pathname == "/cart") {
  176. console.log(1)
  177. var items = '';
  178. var subTotal = 0;
  179. var total;
  180. if (inCartItemsNum > 0) {
  181. $('#cart-without').hide();
  182. $('#cart-with').addClass('cart-with')
  183. cartArticles.forEach(function(v) {
  184. var itemPrice = v.price;
  185. item = `<tr ref="`+ v.name + v.size +`">
  186. <td class="align-middle">
  187. <!--<div class="cell medium-6">-->
  188. <img src="`+ baseUrlImg + v.url +`" width="120px">
  189. <!--</div>-->
  190. <!--<div class="cell medium-6 grid-x">-->
  191. <p id="size" class="margin-right-2">`+ v.size +`</p>
  192. <p>`+ v.name +`</p>
  193. <!--</div>-->
  194. </td>
  195. <td class="align-middle">`+ v.price +`€</td>
  196. <td class="align-middle">`+ v.qt +`</td>
  197. <td class="align-middle">`+ v.qt * v.price +`€</td>
  198. <td class="align-middle delete-item"><i class="fas fa-times"></i></td>
  199. </tr>`;
  200. item = item.replace("url", v.url);
  201. items+= item;
  202. subTotal += v.price * v.qt;
  203. });
  204. $('#cartView').empty().html(items);
  205. $('.subTotal').html(subTotal.toFixed(2).replace('.', ',') + '€');
  206. }
  207. else
  208. {
  209. $('#cart-without').show();
  210. }
  211. $('input').on('change', function () {
  212. // $('input').prop("disabled", true);
  213. var qt = $(this).val();
  214. var size = $('#sizeValue').val();
  215. // console.log(size);
  216. subTotal = 0;
  217. // var subTotal = parseInt($('.subTotal').val());
  218. var ref = $(this).attr('ref');
  219. cartArticles.forEach(function(v) {
  220. if (v.id + v.size == ref) {
  221. v.qt = qt;
  222. }
  223. subTotal += v.price * v.qt;
  224. });
  225. $('.subTotal').html(subTotal.toFixed(2).replace('.', ',') + '€');
  226. saveCart(inCartItemsNum, cartArticles);
  227. cartEmptyToggle();
  228. $('input').attr("disabled", false);
  229. });
  230. }
  231. $(".delete-item").click( function() {
  232. var id = $(this).parent().attr('ref');
  233. // var qt = $("[ref="+id+"] .input_qt").val();
  234. // var size = $("[ref="+id+"] #size").val();
  235. // var size = document.getElementById("select_size-").value;
  236. // console.log(size);
  237. var arrayId = 0;
  238. var price;
  239. // supprime l'item du DOM
  240. $(this).parent().hide(600);
  241. $('#'+ id).hide(600);
  242. // $('#'+ id).remove();
  243. //
  244. cartArticles.forEach(function(v) {
  245. // on récupère l'id de l'article dans l'array
  246. // if (v.id == id & v.size == size) {
  247. if (v.name + v.size == id) {
  248. inCartItemsNum -= 1;
  249. // on met à jour le sous total et retire l'article de l'array
  250. // as usual, calcul sur des entiers
  251. var itemPrice = v.price.replace(',', '.') * 1000;
  252. subTotal -= (itemPrice * v.qt) / 1000;
  253. //weight -= artWeight * qt;
  254. cartArticles.splice(arrayId, 1);
  255. return false;
  256. }
  257. arrayId++;
  258. });
  259. $('.badge').html(inCartItemsNum);
  260. $('.subTotal').html(subTotal.toFixed(2).replace('.', ',') + '€');
  261. //$('.subtotal').html(subTotal.toFixed(2).replace('.', ','));
  262. saveCart(inCartItemsNum, cartArticles);
  263. cartEmptyToggle();
  264. if(inCartItemsNum == 0) {
  265. $('#cart-with').removeClass('cart-with')
  266. $('#cart-without').show();
  267. }
  268. });
  269. if (window.location.pathname == "/cart/checkout") {
  270. // $('#form_delivery').hide();
  271. $('document').ready(function () {
  272. $('#delivery_check').change( function () {
  273. if($('#delivery_check').is(':checked')){
  274. $('#form_delivery').animate({
  275. height: 'toggle'
  276. });
  277. $('.delivery').attr('required', true);
  278. }
  279. else {
  280. $('.delivery').attr('required', false);
  281. $('#form_delivery').hide();
  282. }
  283. });
  284. });
  285. }
  286. });