shopping-cart.js
Home
/
sm-shop /
src /
main /
webapp /
resources /
js /
shopping-cart.js
$(function(){
initBindings();
initMiniCart();
});
function initMiniCart() {
var cartCode = getCartCode();
//console.log('Cart code ' + cartCode);
if(cartCode!=null) {
displayMiniCartSummary(cartCode);
}
}
function removeCart() {
var cartCode = getCartCode();
if(cartCode!=null) {
emptyCartLabel();
$.cookie('cart',null, { expires: 1, path:'/' });
}
}
function initBindings() {
/** add to cart **/
$(".addToCart").click(function(){
addToCart($(this).attr("productId"));
});
$("#open-cart").click(function(e) {
displayMiniCart();
});
}
/**
* Function used for adding a product to the Shopping Cart
*/
function addToCart(sku) {
$('#pageContainer').showLoading();
var qty = '#qty-productId-'+ sku;
var quantity = $(qty).val();
if(!quantity || quantity==null || quantity==0) {
quantity = 1;
}
var formId = '#input-' + sku;
//var $inputs = $(formId);
var $inputs = $(formId).find(':input');
var values = new Array();
if($inputs.length>0) {//check for attributes
i = 0;
$inputs.each(function() { //attributes
if($(this).hasClass('attribute')) {
//if($(this).hasClass('required') && !$(this).is(':checked')) {
// $(this).parent().css('border', '1px solid red');
//}
if($(this).is(':checkbox')) {
var checkboxSelected = $(this).is(':checked');
if(checkboxSelected==true) {
values[i] = $(this).val();
//console.log('checkbox ' + values[i]);
i++;
}
} else if ($(this).is(':radio')) {
var radioChecked = $(this).is(':checked');
if(radioChecked==true) {
values[i] = $(this).val();
//console.log('radio ' + values[i]);
i++;
}
} else {
if($(this).val()) {
values[i] = $(this).val();
//console.log('select ' + values[i]);
i++;
}
}
}
});
}
var cartCode = getCartCode();
/**
* shopping cart code identifier is <cart>_<storeId>
* need to check if the cookie is for the appropriate store
*/
//cart item
var prefix = "{";
var suffix = "}";
var shoppingCartItem = '';
if(cartCode!=null && cartCode != '') {
shoppingCartItem = '"code":' + '"' + cartCode + '"'+',';
}
var shoppingCartItem = shoppingCartItem + '"quantity":' + quantity + ',';
var shoppingCartItem = shoppingCartItem + '"productId":' + sku;
var attributes = null;
//cart attributes
if(values.length>0) {
attributes = '[';
for (var i = 0; i < values.length; i++) {
var shoppingAttribute= prefix + '"attributeId":' + values[i] + suffix ;
if(values.length>1 && i < values.length-1){
shoppingAttribute = shoppingAttribute + ',';
}
attributes = attributes + shoppingAttribute;
}
attributes = attributes + ']';
}
if(attributes!=null) {
shoppingCartItem = shoppingCartItem + ',"shoppingCartAttributes":' + attributes;
}
var scItem = prefix + shoppingCartItem + suffix;
/** debug add to cart **/
//console.log(scItem);
$.ajax({
type: 'POST',
url: getContextPath() + '/shop/cart/addShoppingCartItem.html',
data: scItem,
contentType: 'application/json;charset=utf-8',
dataType: 'json',
cache:false,
error: function(e) {
console.log('Error while adding to cart');
$('#pageContainer').hideLoading();
alert('failure');
},
success: function(cart) {
saveCart(cart.code);
if(cart.message!=null) {
//TODO error message
console.log('Error while adding to cart ' + cart.message);
}
displayShoppigCartItems(cart,'#shoppingcartProducts');
displayTotals(cart);
$('#pageContainer').hideLoading();
}
});
}
function removeLineItem(lineItemId){
$( "#shoppingCartRemoveLineitem_"+lineItemId).submit();
}
function updateLineItem(lineItemId,actionURL){
$("#shoppingCartLineitem_"+lineItemId).attr('action', actionURL);
$( "#shoppingCartLineitem_"+lineItemId).submit();
}
//update full cart
function updateCart(cartDiv) {
$('.alert-error').hide();
$('.quantity').removeClass('required');
$('#mainCartTable').showLoading();
var inputs = $(cartDiv).find('.quantity');
var cartCode = getCartCode();
if(inputs !=null && cartCode!=null) {
var items = new Array();
for(var i = 0; i< inputs.length; i++) {
var item = new Object();
var qty = inputs[i].value;
if(qty =='' || qty<1) {
$('#' + inputs[i].id).addClass('required');
$('#mainCartTable').hideLoading();
return;
}
var id = inputs[i].id;
item.id = id;
item.quantity = qty;
item.code=cartCode;
items[i] = item;
}
//update cart
json_data = JSON.stringify(items);
$.ajax({
type: 'POST',
url: getContextPath() + '/shop/cart/updateShoppingCartItem.html',
data: json_data,
contentType: 'application/json;charset=utf-8',
dataType: 'json',
cache:false,
error: function(e) {
console.log('error ' + e);
$('#mainCartTable').hideLoading();
},
success: function(response) {
$('#mainCartTable').hideLoading();
if(response.response.status==-1) {
$('.alert-error').show();
} else {
location.href= getContextPath() + '/shop/cart/shoppingCart.html';
}
}
});
}
}
function displayMiniCart(){
var cartCode = getCartCode();
if(cartCode==null) {
emptyCartLabel();
return;
}
$('#shoppingcartProducts').html('');
$('#cart-box').addClass('loading-indicator-overlay');/** manage manually cart loading**/
$('#cartShowLoading').show();
$.ajax({
type: 'GET',
url: getContextPath() + '/shop/cart/displayMiniCartByCode.html?shoppingCartCode='+cartCode,
cache:false,
error: function(e) {
$('#cart-box').removeClass('loading-indicator-overlay');/** manage manually cart loading**/
$('#cartShowLoading').hide();
console.log('error ' + e);
//nothing
},
success: function(miniCart) {
if($.isEmptyObject(miniCart)){
emptyCartLabel();
}
else{
displayShoppigCartItems(miniCart,'#shoppingcartProducts');//cart content
displayTotals(miniCart);//header
}
$('#cart-box').removeClass('loading-indicator-overlay');/** manage manually cart loading**/
$('#cartShowLoading').hide();
}
});
}
/**
* JS function responsible for removing give line item from
* the Cart.
* For more details see MiniCartController.
*
* Controller will return JSON as response and it will be parsed to update
* mini-cart section.
* @param lineItemId
*/
function removeItemFromMinicart(lineItemId){
shoppingCartCode = getCartCode();
$.ajax({
type: 'GET',
cache:false,
url: getContextPath() + '/shop/cart/removeMiniShoppingCartItem.html?lineItemId='+lineItemId + '&shoppingCartCode=' + shoppingCartCode,
error: function(e) {
console.log('error ' + e);
},
success: function(miniCart) {
if(miniCart==null) {
emptyCartLabel();
} else {
if(miniCart.shoppingCartItems!=null) {
displayShoppigCartItems(miniCart,'#shoppingcartProducts');
displayTotals(miniCart);
} else {
emptyCartLabel();
}
}
}
});
}
function displayMiniCartSummary(code){
$.ajax({
type: 'GET',
url: getContextPath() + '/shop/cart/displayMiniCartByCode.html?shoppingCartCode='+code,
error: function(e) {
// do nothing
console('error while getting cart');
},
success: function(cart) {
if(cart==null || cart=='') {
emptyCartLabel();
$.cookie('cart',null, { expires: 1, path:'/' });
} else {
displayTotals(cart);
}
}
});
}
function viewShoppingCartPage(){
window.location.href=getContextPath() + '/shop/cart/shoppingCart.html';
}
function displayShoppigCartItems(cart, div) {
//set cart contextPath
cart.contextPath=getContextPath();
var template = Hogan.compile(document.getElementById("miniShoppingCartTemplate").innerHTML);
$(div).html('');
if(cart.shoppingCartItems==null) {
emptyCartLabel();
return;
}
$('#cartMessage').hide();
$('#shoppingcart').show();
//call template defined in template directory
$(div).append(template.render(cart));
}
function displayTotals(cart) {
if(cart.quantity==0) {
emptyCartLabel();
} else {
cartInfoLabel(cart);
$('#total-box').html(cartSubTotal(cart));
}
}
/** returns the cart code **/
function getCartCode() {
var cart = $.cookie('cart'); //should be [storecode_cartid]
var code = new Array();
if(cart!=null) {
code = cart.split('_');
if(code[0]==getMerchantStoreCode()) {
return code[1];
}
}
}
function buildCartCode(code) {
var cartCode = getMerchantStoreCode() + '_' + code;
return cartCode;
}
function saveCart(code) {
var cartCode = buildCartCode(code);
$.cookie('cart',cartCode, { expires: 1024, path:'/' });
}