diff --git a/app.js b/app.js index f8813d4..7563707 100644 --- a/app.js +++ b/app.js @@ -302,6 +302,12 @@ handlebars = handlebars.create({ '/': lvalue / rvalue, '%': lvalue % rvalue }[operator]; + }, + showCartButtons: (cart) => { + if(!cart){ + return'd-none'; + } + return''; } } }); diff --git a/public/javascripts/expressCart.js b/public/javascripts/expressCart.js index 264a809..47d00f3 100644 --- a/public/javascripts/expressCart.js +++ b/public/javascripts/expressCart.js @@ -1,5 +1,5 @@ /* eslint-disable prefer-arrow-callback, no-var, no-tabs */ -/* globals showNotification */ +/* globals showNotification, numeral */ $(document).ready(function (){ if($(window).width() < 768){ $('.menu-side').on('click', function(e){ @@ -19,13 +19,6 @@ $(document).ready(function (){ $('#offcanvasClose').hide(); } - // If cart was open before reload, open it again - var isCartOpen = (localStorage.getItem('cartOpen') === 'true'); - if(isCartOpen === true){ - localStorage.setItem('cartOpen', false); - $('body').addClass('pushy-open-right'); - } - $('#userSetupForm').validator().on('submit', function(e){ if(!e.isDefaultPrevented()){ e.preventDefault(); @@ -304,8 +297,8 @@ $(document).ready(function (){ } }) .done(function(msg){ - $('#cart-count').text(msg.totalCartItems); - showNotification(msg.message, 'success', true); + showNotification(msg.message, 'success'); + updateCartDiv(); }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger'); @@ -335,8 +328,8 @@ $(document).ready(function (){ data: { productId: $(this).attr('data-id') } }) .done(function(msg){ - $('#cart-count').text(msg.totalCartItems); - showNotification(msg.message, 'success', true); + showNotification(msg.message, 'success'); + updateCartDiv(); }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger'); @@ -350,7 +343,7 @@ $(document).ready(function (){ url: '/product/emptycart' }) .done(function(msg){ - $('#cart-count').text(msg.totalCartItems); + updateCartDiv(); showNotification(msg.message, 'success', true); }); }); @@ -405,8 +398,8 @@ function deleteFromCart(element){ data: { productId: element.attr('data-id') } }) .done(function(msg){ - setCartOpen(); - showNotification(msg.message, 'success', true); + showNotification(msg.message, 'success'); + updateCartDiv(); }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger'); @@ -423,14 +416,6 @@ function cartUpdate(element){ } } -function setCartOpen(){ - if($('body').hasClass('pushy-open-right') === true){ - localStorage.setItem('cartOpen', true); - }else{ - localStorage.setItem('cartOpen', false); - } -} - function updateCart(element){ // update cart on server $.ajax({ @@ -442,8 +427,7 @@ function updateCart(element){ } }) .done(function(msg){ - setCartOpen(); - showNotification(msg.message, 'success', true); + updateCartDiv(); }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger', true); @@ -487,3 +471,128 @@ function getSelectedOptions(){ }); return options; } + +function updateCartDiv(){ + $.ajax({ + method: 'GET', + url: '/checkout/cartdata' + }) + .done(function(result){ + // Update the cart div + var cart = result.cart; + var session = result.session; + var productHtml = ''; + var totalAmount = numeral(session.totalCartAmount).format('0.00'); + + // Work out the shipping + var shippingTotalAmt = numeral(session.totalCartShipping).format('0.00'); + var shippingTotal = `${result.currencySymbol}${shippingTotalAmt}`; + if(shippingTotalAmt === 0){ + shippingTotal = 'FREE'; + } + + // If the cart has contents + if(cart){ + $('#cart-empty').empty(); + Object.keys(cart).forEach(function(productId){ + var item = cart[productId]; + // Setup the product + var productTotalAmount = numeral(item.totalItemPrice).format('0.00'); + var optionsHtml = ''; + var optionIndex = 1; + Object.keys(item.options).forEach(function(key){ + var option = item.options[key]; + if(optionIndex === Object.keys(item.options).length){ + optionsHtml += `${upperFirst(option.name)}: ${option.value}`; + }else{ + optionsHtml += `${upperFirst(option.name)}: ${option.value} / `; + } + optionIndex++; + }); + var productImage = `${item.title} product image`; + if(item.productImage){ + productImage = `${item.title} product image`; + } + + // Setup the product html + productHtml += ` +
+
+ ${productImage} +
+
+
+ +
+ ${optionsHtml} +
+
+
+
+ +
+ +
+ +
+
+
+
+ +
+
+
+
+ ${result.currencySymbol}${productTotalAmount} +
+
`; + }); + + $('#cartBodyWrapper').html(productHtml); + $('#cart-count').text(session.totalCartItems); + }else{ + $('#cartBodyWrapper').html(''); + } + + // Set the totals section + var cartTotalsHtml = ` +
+
+
+ Shipping: ${shippingTotal} +
+
+ Total: + ${result.currencySymbol}${totalAmount} +
+
+
`; + + var cartTotalsEmptyHtml = ` +
+
+ Cart empty +
+
`; + + // Set depending on cart contents + if(cart){ + $('#cartTotalsWrapper').html(cartTotalsHtml); + $('#cart-buttons').removeClass('d-none'); + }else{ + $('#cartTotalsWrapper').html(cartTotalsEmptyHtml); + $('#cart-buttons').addClass('d-none'); + } + }) + .fail(function(result){ + showNotification(result.responseJSON.message, 'danger'); + }); +} + +function upperFirst(value){ + return value.replace(/^\w/, (chr) => { + return chr.toUpperCase(); + }); +} diff --git a/public/javascripts/expressCart.min.js b/public/javascripts/expressCart.min.js index 12d421f..7722eb6 100644 --- a/public/javascripts/expressCart.min.js +++ b/public/javascripts/expressCart.min.js @@ -1 +1 @@ -function deleteFromCart(t){$.ajax({method:"POST",url:"/product/removefromcart",data:{productId:t.attr("data-id")}}).done(function(t){setCartOpen(),showNotification(t.message,"success",!0)}).fail(function(t){showNotification(t.responseJSON.message,"danger")})}function cartUpdate(t){$(t).val()>0?""!==$(t).val()&&updateCart(t):$(t).val(1)}function setCartOpen(){!0===$("body").hasClass("pushy-open-right")?localStorage.setItem("cartOpen",!0):localStorage.setItem("cartOpen",!1)}function updateCart(t){$.ajax({method:"POST",url:"/product/updatecart",data:{productId:t.attr("data-id"),quantity:t.val()}}).done(function(t){setCartOpen(),showNotification(t.message,"success",!0)}).fail(function(t){showNotification(t.responseJSON.message,"danger",!0)})}function getSelectedOptions(){var t={};return $(".product-opt").each(function(){var a=$(this).val().trim(),e=$(this).attr("data-label"),o=$(this).attr("name"),n=$(this).attr("type");n||(t[o]={label:e,name:o,value:a}),"radio"===n&&(t[o]={label:e,name:o,value:$('input[name="'+o+'"]:checked').val()}),"checkbox"===n&&(t[o]={label:e,name:o,value:$('input[name="'+$(this).attr("name")+'"]').is(":checked")})}),t}$(document).ready(function(){if($(window).width()<768&&($(".menu-side").on("click",function(t){t.preventDefault(),$('.menu-side li:not(".active")').slideToggle()}),$('.menu-side li:not(".active")').hide(),$(".menu-side>.active").html(''),$(".menu-side>.active").addClass("menu-side-mobile"),0===$("#navbar ul li").length&&$("#navbar").hide(),$("#offcanvasClose").hide()),!0===("true"===localStorage.getItem("cartOpen"))&&(localStorage.setItem("cartOpen",!1),$("body").addClass("pushy-open-right")),$("#userSetupForm").validator().on("submit",function(t){t.isDefaultPrevented()||(t.preventDefault(),$.ajax({method:"POST",url:"/admin/setup_action",data:{usersName:$("#usersName").val(),userEmail:$("#userEmail").val(),userPassword:$("#userPassword").val()}}).done(function(t){showNotification(t.message,"success",!1,"/admin/login")}).fail(function(t){showNotification(t.responseJSON.message,"danger")}))}),$(document).on("click",".menu-btn",function(t){t.preventDefault(),$("body").addClass("pushy-open-right")}),$("table").each(function(){$(this).addClass("table table-hover")}),$("#productTags").length&&$("#productTags").tokenfield(),$(document).on("click",".dashboard_list",function(t){window.document.location=$(this).attr("href")}).hover(function(){$(this).toggleClass("hover")}),$(document).on("click",".btn-qty-minus",function(t){t.preventDefault();var a=$(t.target).parent().parent().find(".cart-product-quantity");$(a).val(parseInt(a.val())-1),cartUpdate(a)}),$(document).on("click",".btn-qty-add",function(t){t.preventDefault();var a=$(t.target).parent().parent().find(".cart-product-quantity");$(a).val(parseInt(a.val())+1),cartUpdate(a)}),$(document).on("click",".btn-delete-from-cart",function(t){deleteFromCart($(t.target))}),$("#pager").length){var t=$("#pageNum").val(),a=$("#productsPerPage").val(),e=$("#totalProductCount").val(),o=$("#paginateUrl").val(),n=$("#searchTerm").val();""!==n&&(n+="/");var i="/"+o+"/"+n+"{{number}}",r=Math.ceil(e/a);parseInt(e)>parseInt(a)&&($("#pager").bootpag({total:r,page:t,maxVisible:5,href:i,wrapClass:"pagination",prevClass:"page-item previous",nextClass:"page-item next",activeClass:"page-item active"}),$("#pager a").each(function(){$(this).addClass("page-link")}))}if($("#customerLogout").on("click",function(t){$.ajax({method:"POST",url:"/customer/logout",data:{}}).done(function(t){location.reload()})}),$("#customerForgotten").validator().on("submit",function(t){t.isDefaultPrevented()||(t.preventDefault(),$.ajax({method:"POST",url:"/customer/forgotten_action",data:{email:$("#email").val()}}).done(function(t){showNotification(t.message,"success")}).fail(function(t){t.message?showNotification(t.responseJSON.message,"danger"):showNotification(t.responseText,"danger")}))}),$(document).on("click","#createAccountCheckbox",function(t){$("#newCustomerPassword").prop("required",$("#createAccountCheckbox").prop("checked"))}),$("#checkoutInformation").validator().on("click",function(t){if(t.preventDefault(),0===$("#shipping-form").validator("validate").has(".has-error").length){var a="/customer/save";$("#createAccountCheckbox").prop("checked")&&(a="/customer/create"),$.ajax({method:"POST",url:a,data:{email:$("#shipEmail").val(),firstName:$("#shipFirstname").val(),lastName:$("#shipLastname").val(),address1:$("#shipAddr1").val(),address2:$("#shipAddr2").val(),country:$("#shipCountry").val(),state:$("#shipState").val(),postcode:$("#shipPostcode").val(),phone:$("#shipPhoneNumber").val(),password:$("#newCustomerPassword").val(),orderComment:$("#orderComment").val()}}).done(function(){window.location="/checkout/shipping"}).fail(function(t){showNotification(t.responseJSON.message,"danger")})}}),$("#loginForm").on("click",function(t){t.isDefaultPrevented()||(t.preventDefault(),$.ajax({method:"POST",url:"/admin/login_action",data:{email:$("#email").val(),password:$("#password").val()}}).done(function(t){window.location="/admin"}).fail(function(t){showNotification(t.responseJSON.message,"danger")})),t.preventDefault()}),$("#customerLogin").on("click",function(t){t.isDefaultPrevented()||(t.preventDefault(),$.ajax({method:"POST",url:"/customer/login_action",data:{loginEmail:$("#customerLoginEmail").val(),loginPassword:$("#customerLoginPassword").val()}}).done(function(t){var a=t.customer;$("#shipEmail").val(a.email),$("#shipFirstname").val(a.firstName),$("#shipLastname").val(a.lastName),$("#shipAddr1").val(a.address1),$("#shipAddr2").val(a.address2),$("#shipCountry").val(a.country),$("#shipState").val(a.state),$("#shipPostcode").val(a.postcode),$("#shipPhoneNumber").val(a.phone),location.reload()}).fail(function(t){showNotification(t.responseJSON.message,"danger")})),t.preventDefault()}),$(document).on("click",".image-next",function(t){var a=$(".thumbnail-image"),e=0,o=0;$(".thumbnail-image").each(function(){$("#product-title-image").attr("src")===$(this).attr("src")&&(o=e+1===a.length||e+1<0?0:e+1),e++}),$("#product-title-image").attr("src",$(a).eq(o).attr("src"))}),$(document).on("click",".image-prev",function(t){var a=$(".thumbnail-image"),e=0,o=0;$(".thumbnail-image").each(function(){$("#product-title-image").attr("src")===$(this).attr("src")&&(o=e-1===a.length||e-1<0?a.length-1:e-1),e++}),$("#product-title-image").attr("src",$(a).eq(o).attr("src"))}),$(document).on("click",".product-add-to-cart",function(t){var a=getSelectedOptions();parseInt($("#product_quantity").val())<0&&$("#product_quantity").val(0),$.ajax({method:"POST",url:"/product/addtocart",data:{productId:$("#productId").val(),productQuantity:$("#product_quantity").val(),productOptions:JSON.stringify(a),productComment:$("#product_comment").val()}}).done(function(t){$("#cart-count").text(t.totalCartItems),showNotification(t.message,"success",!0)}).fail(function(t){showNotification(t.responseJSON.message,"danger")})}),$(".cart-product-quantity").on("focusout",function(t){cartUpdate($(t.target))}),$(document).on("click",".pushy-link",function(t){$("body").removeClass("pushy-open-right")}),$(document).on("click",".add-to-cart",function(t){var a="/product/"+$(this).attr("data-id");$(this).attr("data-link")&&(a="/product/"+$(this).attr("data-link")),"true"===$(this).attr("data-has-options")?window.location=a:$.ajax({method:"POST",url:"/product/addtocart",data:{productId:$(this).attr("data-id")}}).done(function(t){$("#cart-count").text(t.totalCartItems),showNotification(t.message,"success",!0)}).fail(function(t){showNotification(t.responseJSON.message,"danger")})}),$(document).on("click","#empty-cart",function(t){$.ajax({method:"POST",url:"/product/emptycart"}).done(function(t){$("#cart-count").text(t.totalCartItems),showNotification(t.message,"success",!0)})}),$(".qty-btn-minus").on("click",function(){var t=parseInt($("#product_quantity").val())-1;$("#product_quantity").val(t>0?t:1)}),$(".qty-btn-plus").on("click",function(){$("#product_quantity").val(parseInt($("#product_quantity").val())+1)}),$(".thumbnail-image").on("click",function(){$("#product-title-image").attr("src",$(this).attr("src"))}),$(document).on("click","#btn_search_reset",function(t){window.location.replace("/")}),$(document).on("click","#btn_search",function(t){t.preventDefault(),""===$("#frm_search").val().trim()?showNotification("Please enter a search value","danger"):window.location.href="/search/"+$("#frm_search").val()}),""!==$("#input_notify_message").val()){var c=$("#input_notify_message").val(),s=$("#input_notify_messageType").val();$("#input_notify_message").val(""),$("#input_notify_messageType").val(""),showNotification(c,s||"danger",!1)}}); \ No newline at end of file +function deleteFromCart(t){$.ajax({method:"POST",url:"/product/removefromcart",data:{productId:t.attr("data-id")}}).done(function(t){showNotification(t.message,"success"),updateCartDiv()}).fail(function(t){showNotification(t.responseJSON.message,"danger")})}function cartUpdate(t){$(t).val()>0?""!==$(t).val()&&updateCart(t):$(t).val(1)}function updateCart(t){$.ajax({method:"POST",url:"/product/updatecart",data:{productId:t.attr("data-id"),quantity:t.val()}}).done(function(t){updateCartDiv()}).fail(function(t){showNotification(t.responseJSON.message,"danger",!0)})}function getSelectedOptions(){var t={};return $(".product-opt").each(function(){var a=$(this).val().trim(),e=$(this).attr("data-label"),n=$(this).attr("name"),o=$(this).attr("type");o||(t[n]={label:e,name:n,value:a}),"radio"===o&&(t[n]={label:e,name:n,value:$('input[name="'+n+'"]:checked').val()}),"checkbox"===o&&(t[n]={label:e,name:n,value:$('input[name="'+$(this).attr("name")+'"]').is(":checked")})}),t}function updateCartDiv(){$.ajax({method:"GET",url:"/checkout/cartdata"}).done(function(t){var a=t.cart,e=t.session,n="",o=numeral(e.totalCartAmount).format("0.00"),i=numeral(e.totalCartShipping).format("0.00"),r=`${t.currencySymbol}${i}`;0===i&&(r='FREE'),a?($("#cart-empty").empty(),Object.keys(a).forEach(function(e){var o=a[e],i=numeral(o.totalItemPrice).format("0.00"),r="",s=1;Object.keys(o.options).forEach(function(t){var a=o.options[t];s===Object.keys(o.options).length?r+=`${upperFirst(a.name)}: ${a.value}`:r+=`${upperFirst(a.name)}: ${a.value} / `,s++});var c=`${o.title} product image`;o.productImage&&(c=`${o.title} product image`),n+=`\n
\n
\n ${c}\n
\n
\n
\n \n
\n ${r}\n
\n
\n
\n
\n \n
\n \n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n ${t.currencySymbol}${i}\n
\n
`}),$("#cartBodyWrapper").html(n),$("#cart-count").text(e.totalCartItems)):$("#cartBodyWrapper").html("");var s=`\n
\n
\n
\n Shipping: ${r}\n
\n
\n Total:\n ${t.currencySymbol}${o}\n
\n
\n
`;a?($("#cartTotalsWrapper").html(s),$("#cart-buttons").removeClass("d-none")):($("#cartTotalsWrapper").html('\n
\n
\n Cart empty\n
\n
'),$("#cart-buttons").addClass("d-none"))}).fail(function(t){showNotification(t.responseJSON.message,"danger")})}function upperFirst(t){return t.replace(/^\w/,t=>t.toUpperCase())}$(document).ready(function(){if($(window).width()<768&&($(".menu-side").on("click",function(t){t.preventDefault(),$('.menu-side li:not(".active")').slideToggle()}),$('.menu-side li:not(".active")').hide(),$(".menu-side>.active").html(''),$(".menu-side>.active").addClass("menu-side-mobile"),0===$("#navbar ul li").length&&$("#navbar").hide(),$("#offcanvasClose").hide()),$("#userSetupForm").validator().on("submit",function(t){t.isDefaultPrevented()||(t.preventDefault(),$.ajax({method:"POST",url:"/admin/setup_action",data:{usersName:$("#usersName").val(),userEmail:$("#userEmail").val(),userPassword:$("#userPassword").val()}}).done(function(t){showNotification(t.message,"success",!1,"/admin/login")}).fail(function(t){showNotification(t.responseJSON.message,"danger")}))}),$(document).on("click",".menu-btn",function(t){t.preventDefault(),$("body").addClass("pushy-open-right")}),$("table").each(function(){$(this).addClass("table table-hover")}),$("#productTags").length&&$("#productTags").tokenfield(),$(document).on("click",".dashboard_list",function(t){window.document.location=$(this).attr("href")}).hover(function(){$(this).toggleClass("hover")}),$(document).on("click",".btn-qty-minus",function(t){t.preventDefault();var a=$(t.target).parent().parent().find(".cart-product-quantity");$(a).val(parseInt(a.val())-1),cartUpdate(a)}),$(document).on("click",".btn-qty-add",function(t){t.preventDefault();var a=$(t.target).parent().parent().find(".cart-product-quantity");$(a).val(parseInt(a.val())+1),cartUpdate(a)}),$(document).on("click",".btn-delete-from-cart",function(t){deleteFromCart($(t.target))}),$("#pager").length){var t=$("#pageNum").val(),a=$("#productsPerPage").val(),e=$("#totalProductCount").val(),n=$("#paginateUrl").val(),o=$("#searchTerm").val();""!==o&&(o+="/");var i="/"+n+"/"+o+"{{number}}",r=Math.ceil(e/a);parseInt(e)>parseInt(a)&&($("#pager").bootpag({total:r,page:t,maxVisible:5,href:i,wrapClass:"pagination",prevClass:"page-item previous",nextClass:"page-item next",activeClass:"page-item active"}),$("#pager a").each(function(){$(this).addClass("page-link")}))}if($("#customerLogout").on("click",function(t){$.ajax({method:"POST",url:"/customer/logout",data:{}}).done(function(t){location.reload()})}),$("#customerForgotten").validator().on("submit",function(t){t.isDefaultPrevented()||(t.preventDefault(),$.ajax({method:"POST",url:"/customer/forgotten_action",data:{email:$("#email").val()}}).done(function(t){showNotification(t.message,"success")}).fail(function(t){t.message?showNotification(t.responseJSON.message,"danger"):showNotification(t.responseText,"danger")}))}),$(document).on("click","#createAccountCheckbox",function(t){$("#newCustomerPassword").prop("required",$("#createAccountCheckbox").prop("checked"))}),$("#checkoutInformation").validator().on("click",function(t){if(t.preventDefault(),0===$("#shipping-form").validator("validate").has(".has-error").length){var a="/customer/save";$("#createAccountCheckbox").prop("checked")&&(a="/customer/create"),$.ajax({method:"POST",url:a,data:{email:$("#shipEmail").val(),firstName:$("#shipFirstname").val(),lastName:$("#shipLastname").val(),address1:$("#shipAddr1").val(),address2:$("#shipAddr2").val(),country:$("#shipCountry").val(),state:$("#shipState").val(),postcode:$("#shipPostcode").val(),phone:$("#shipPhoneNumber").val(),password:$("#newCustomerPassword").val(),orderComment:$("#orderComment").val()}}).done(function(){window.location="/checkout/shipping"}).fail(function(t){showNotification(t.responseJSON.message,"danger")})}}),$("#loginForm").on("click",function(t){t.isDefaultPrevented()||(t.preventDefault(),$.ajax({method:"POST",url:"/admin/login_action",data:{email:$("#email").val(),password:$("#password").val()}}).done(function(t){window.location="/admin"}).fail(function(t){showNotification(t.responseJSON.message,"danger")})),t.preventDefault()}),$("#customerLogin").on("click",function(t){t.isDefaultPrevented()||(t.preventDefault(),$.ajax({method:"POST",url:"/customer/login_action",data:{loginEmail:$("#customerLoginEmail").val(),loginPassword:$("#customerLoginPassword").val()}}).done(function(t){var a=t.customer;$("#shipEmail").val(a.email),$("#shipFirstname").val(a.firstName),$("#shipLastname").val(a.lastName),$("#shipAddr1").val(a.address1),$("#shipAddr2").val(a.address2),$("#shipCountry").val(a.country),$("#shipState").val(a.state),$("#shipPostcode").val(a.postcode),$("#shipPhoneNumber").val(a.phone),location.reload()}).fail(function(t){showNotification(t.responseJSON.message,"danger")})),t.preventDefault()}),$(document).on("click",".image-next",function(t){var a=$(".thumbnail-image"),e=0,n=0;$(".thumbnail-image").each(function(){$("#product-title-image").attr("src")===$(this).attr("src")&&(n=e+1===a.length||e+1<0?0:e+1),e++}),$("#product-title-image").attr("src",$(a).eq(n).attr("src"))}),$(document).on("click",".image-prev",function(t){var a=$(".thumbnail-image"),e=0,n=0;$(".thumbnail-image").each(function(){$("#product-title-image").attr("src")===$(this).attr("src")&&(n=e-1===a.length||e-1<0?a.length-1:e-1),e++}),$("#product-title-image").attr("src",$(a).eq(n).attr("src"))}),$(document).on("click",".product-add-to-cart",function(t){var a=getSelectedOptions();parseInt($("#product_quantity").val())<0&&$("#product_quantity").val(0),$.ajax({method:"POST",url:"/product/addtocart",data:{productId:$("#productId").val(),productQuantity:$("#product_quantity").val(),productOptions:JSON.stringify(a),productComment:$("#product_comment").val()}}).done(function(t){showNotification(t.message,"success"),updateCartDiv()}).fail(function(t){showNotification(t.responseJSON.message,"danger")})}),$(".cart-product-quantity").on("focusout",function(t){cartUpdate($(t.target))}),$(document).on("click",".pushy-link",function(t){$("body").removeClass("pushy-open-right")}),$(document).on("click",".add-to-cart",function(t){var a="/product/"+$(this).attr("data-id");$(this).attr("data-link")&&(a="/product/"+$(this).attr("data-link")),"true"===$(this).attr("data-has-options")?window.location=a:$.ajax({method:"POST",url:"/product/addtocart",data:{productId:$(this).attr("data-id")}}).done(function(t){showNotification(t.message,"success"),updateCartDiv()}).fail(function(t){showNotification(t.responseJSON.message,"danger")})}),$(document).on("click","#empty-cart",function(t){$.ajax({method:"POST",url:"/product/emptycart"}).done(function(t){updateCartDiv(),showNotification(t.message,"success",!0)})}),$(".qty-btn-minus").on("click",function(){var t=parseInt($("#product_quantity").val())-1;$("#product_quantity").val(t>0?t:1)}),$(".qty-btn-plus").on("click",function(){$("#product_quantity").val(parseInt($("#product_quantity").val())+1)}),$(".thumbnail-image").on("click",function(){$("#product-title-image").attr("src",$(this).attr("src"))}),$(document).on("click","#btn_search_reset",function(t){window.location.replace("/")}),$(document).on("click","#btn_search",function(t){t.preventDefault(),""===$("#frm_search").val().trim()?showNotification("Please enter a search value","danger"):window.location.href="/search/"+$("#frm_search").val()}),""!==$("#input_notify_message").val()){var s=$("#input_notify_message").val(),c=$("#input_notify_messageType").val();$("#input_notify_message").val(""),$("#input_notify_messageType").val(""),showNotification(s,c||"danger",!1)}}); \ No newline at end of file diff --git a/routes/index.js b/routes/index.js index 594d4f8..1a1095a 100644 --- a/routes/index.js +++ b/routes/index.js @@ -131,6 +131,7 @@ router.get('/checkout/shipping', async (req, res, next) => { session: req.session, cartSize: 'part', cartClose: false, + cartReadOnly: true, page: 'checkout-shipping', countryList, message: clearSessionValue(req.session, 'message'), @@ -146,7 +147,7 @@ router.get('/checkout/cart', (req, res) => { res.render(`${config.themeViews}checkout-cart`, { page: req.query.path, cartSize: 'full', - config: req.app.config, + config, session: req.session, message: clearSessionValue(req.session, 'message'), messageType: clearSessionValue(req.session, 'messageType'), @@ -156,7 +157,13 @@ router.get('/checkout/cart', (req, res) => { }); router.get('/checkout/cartdata', (req, res) => { - res.status(200).json(req.session.cart); + const config = req.app.config; + + res.status(200).json({ + cart: req.session.cart, + session: req.session, + currencySymbol: config.currencySymbol || '$' + }); }); router.get('/checkout/payment', (req, res) => { diff --git a/views/layouts/layout.hbs b/views/layouts/layout.hbs index e1b0458..c8c72da 100644 --- a/views/layouts/layout.hbs +++ b/views/layouts/layout.hbs @@ -39,6 +39,7 @@ {{/if}} + @@ -138,12 +139,10 @@
{{> (getTheme 'cart')}}
- {{#if @root.session.cart}} -
+
Checkout
- {{/if}}
diff --git a/views/themes/Cloth/cart.hbs b/views/themes/Cloth/cart.hbs index 0f918b4..b56c08e 100644 --- a/views/themes/Cloth/cart.hbs +++ b/views/themes/Cloth/cart.hbs @@ -1,16 +1,15 @@ -
{{ @root.__ "Cart contents" }}
{{#each @root.session.cart}}
-
+
{{#if productImage}} {{this.title}} product image {{else}} {{this.title}} product image {{/if}}
-
+
{{this.title}}
@@ -20,18 +19,17 @@ {{#if @last}} {{#upperFirst this.name}}{{/upperFirst}}: {{this.value}} {{else}} - {{#upperFirst this.name}}{{/upperFirst}}: {{this.value}} / + {{#upperFirst this.name}}{{/upperFirst}}: {{this.value}} / {{/if}} {{/each}}
- {{#ifCond cartReadOnly '!=' true}} + {{#ifCond @root.cartReadOnly '!=' true}}
- +
@@ -43,35 +41,35 @@ {{/ifCond}}
-
+
{{currencySymbol @root.config.currencySymbol}}{{formatAmount this.totalItemPrice}}
{{/each}}
-
+
{{#if @root.session.cart}}
{{#ifCond @root.session.shippingCostApplied '===' true}}
{{ @root.__ "Shipping" }} - {{currencySymbol @root.config.currencySymbol}}{{formatAmount @root.session.totalCartShipping}} + {{currencySymbol @root.config.currencySymbol}}{{formatAmount @root.session.totalCartShipping}}
{{else}}
{{ @root.__ "Shipping" }} - FREE + FREE
{{/ifCond}}
Total: - {{currencySymbol @root.config.currencySymbol}}{{formatAmount @root.session.totalCartAmount}} + {{currencySymbol @root.config.currencySymbol}}{{formatAmount @root.session.totalCartAmount}}
{{else}} -
+
Cart empty
diff --git a/views/themes/Cloth/checkout-cart.hbs b/views/themes/Cloth/checkout-cart.hbs index 2dc95f4..d264b87 100644 --- a/views/themes/Cloth/checkout-cart.hbs +++ b/views/themes/Cloth/checkout-cart.hbs @@ -3,12 +3,10 @@
{{> (getTheme 'cart')}}
- {{#if @root.session.cart}} -
+
Checkout
- {{/if}}
diff --git a/views/themes/Cloth/checkout-information.hbs b/views/themes/Cloth/checkout-information.hbs index 0cc72af..01ffaea 100644 --- a/views/themes/Cloth/checkout-information.hbs +++ b/views/themes/Cloth/checkout-information.hbs @@ -88,7 +88,7 @@ {{> (getTheme 'cart')}} {{#if @root.session.cart}}
-
+
{{/if}} diff --git a/views/themes/Cloth/checkout-shipping.hbs b/views/themes/Cloth/checkout-shipping.hbs index 022cd58..089c274 100644 --- a/views/themes/Cloth/checkout-shipping.hbs +++ b/views/themes/Cloth/checkout-shipping.hbs @@ -29,11 +29,9 @@
{{> (getTheme 'cart')}}
- {{#if @root.session.cart}} -
+
- {{/if}}