Mini Shell
/*
KKART
http://kkart.com/
(c) Kkart Team
*/
// Lets start
jQuery(document).ready(function(){
// Setup any sliders
jQuery('.pagelayer-kkart_img_gallery').each(function(){
kkart_pl_product_slider(jQuery(this));
});
jQuery('.kkart-product-quantity').each(function(){
kkart_pl_product_quantity(jQuery(this));
});
jQuery('.kkart-item-remove-link').each(function(){
kkart_pl_cart_item_remove(jQuery(this));
});
jQuery('.kkart-items-update').each(function(){
kkart_pl_cart_update_quantity(jQuery(this));
});
jQuery('.pagelayer-kkart_archive_thumb').each(function(){
var jEle = jQuery(this);
if(jEle.find('.kkart-thumbnail-gallery').length > 0){
kkart_thumbnail_img_slider(jEle);
}
});
jQuery('input[name^="shipping_method"]').on('change', function(){
kkart_shipping_form(jQuery(this));
});
jQuery('.pagelayer-kkart_checkout_form').each(function(){
var jEle = jQuery(this);
jEle.find('.kkart-checkout-tab').each(function(){
kkart_checkout_tabs(jQuery(this));
});
});
jQuery('.kkart-address-holder').each(function(){
kkart_billing_form_handler(jQuery(this));
});
jQuery('.pagelayer-kkart_myaccount_tabs').each(function(){
kkart_myaccount_tabs(jQuery(this));
});
jQuery('.kkart-myaccount-address-holder').each(function(){
kkart_billing_address_reload(jQuery(this));
});
jQuery('.kkart-myaccount-order-holder').each(function(){
kkart_order_details_handler(jQuery(this));
});
jQuery('.pagelayer-kkart_archive_crt_btn').each(function(){
kkart_archive_crt_btn_holder(jQuery(this));
});
jQuery('.kkart-login-form-holder').each(function(){
kkart_login_form_handler(jQuery(this));
});
jQuery('.kkart-form-coupon-toggle').each( function() {
kkart_coupon_toggle( jQuery(this) );
});
jQuery('.pagelayer-kkart_menu_cart').each(function(){
kkart_menu_cart(jQuery(this));
});
jQuery('.pagelayer-kkart_products').each(function(){
kkart_products_handler(jQuery(this));
});
jQuery('.kkart-cart-item-price').each(function(){
kkart_cart_shipping_handling(jQuery(this));
});
});
function kkart_cart_shipping_handling(jEle){
// TODO: load this on open modal
var cartModal =jEle.find('.kkart-cart-modal');
var addressHolder = cartModal.find('.kkart-address-holder');
var addressesHolder = addressHolder.find('.kkart-addresses-holder');
jEle.on('click', '.kkart-address-selection',function(){
if(addressHolder.attr('address-loaded') != '1'){
kkart_billing_address_reload(jEle);
}
addressHolder.attr('address-loaded', 1);
cartModal.parent().addClass('kkart-show');
addressesHolder.css('display', '');
})
cartModal.on('click', '.kkart-address-form-adder', function(e){
cartModal.find('.kkart-address-holder').removeClass('kkart-address-done');
addressesHolder.hide();
});
cartModal.on('click','.kkart-close-address', function(){
cartModal.parent().removeClass('kkart-show');
addressHolder.addClass('kkart-address-done');
})
jEle.on('click', '.kkart-address-form-headding',function(){
if(addressHolder.attr('address-loaded') != '1'){
kkart_billing_address_reload(jEle);
}
addressHolder.removeClass('kkart-address-done');
cartModal.parent().addClass('kkart-show');
addressesHolder.hide();
})
}
// products handler
function kkart_products_handler(jEle){
var ul = jEle.find('.pagelayer-products-container');
if (!ul.hasClass('pagelayer-owl-holder')) {
return;
}
// Build the options
var options = pagelayer_fetch_dataAttrs(ul, 'data-slides-');
pagelayer_owl_init(jEle, ul, options);
}
function kkart_pl_product_slider(jEle){
var gallerycontainer = jEle.find('.kkart-product-gallery-container');
var galleryHolder = jEle.find('.kkart-image-gallery-holder');
var ul = jEle.find('.kkart-product-gallery-ul');
var thumbnails = jEle.find('.kkart-product-gallery-ul li');
var thumbLength = thumbnails.length;
var colcnt = ul.attr('data-slides-count');
var sliderThumbnailAction = function(){
var hoverSlider = jEle.find('.kkart-product-gallery-ul').attr('data-slides-hover');
var sliderAction = "click";
if(hoverSlider){
sliderAction = "hover";
}
for (var i=0; i < thumbLength; i++){
jQuery(thumbnails[i]).unbind(sliderAction);
jQuery(thumbnails[i]).on(sliderAction, function(){
var activeimage = thumbnails.find('.kkart-product-active');
activeimage.removeClass('kkart-product-active');
sliderImageChange(this);
});
}
}
var sliderPrevAction = function(){
//on click prev button show Image
var prevButton = jEle.find('.primary-slider-controls .primary-image-prev');
prevButton.unbind('click');
prevButton.on('click' , function(){
var activeimage = thumbnails.find('.kkart-product-active');
jQuery(activeimage).removeClass('kkart-product-active');
var activeli = jQuery(activeimage).parentsUntil("ul")[1];
if(jQuery(activeli).prev().length != 0){
var prevli = jQuery(activeli).prev();
sliderImageChange(prevli);
}else{
var lastli = jQuery(activeli).siblings("li:last");
sliderImageChange(lastli);
}
});
}
var sliderNextAction = function(){
//on click next button show Image
var nextButton = jEle.find('.primary-slider-controls .primary-image-next');
nextButton.unbind('click');
nextButton.on('click' , function(){
var activeimage = thumbnails.find('.kkart-product-active');
jQuery(activeimage).removeClass('kkart-product-active');
var activeli = jQuery(activeimage).parentsUntil("ul")[1];
if(jQuery(activeli).next().length != 0){
var nextli = jQuery(activeli).next();
sliderImageChange(nextli);
}else{
var firstli = jQuery(activeli).siblings("li:first");
sliderImageChange(firstli);
}
});
}
var sliderImageChange = function(elementli){
var clickimg = jQuery(elementli).find('.kkart-product-gimage ').addClass('kkart-product-active');
var imgsrc = jQuery(elementli).find('a').attr('data-href');
var changeimg = jEle.find('.kkart-primary-image-container img');
changeimg.fadeOut('fast', function(){
jQuery(changeimg).fadeIn('fast');
jQuery(changeimg).attr('src', imgsrc);
});
}
var sliderHorizontal = function(){
if(colcnt < thumbLength){
var thumbWidth = jQuery(thumbnails[0]).outerWidth(true);
var holderWidth = galleryHolder.outerWidth(true);
var totalWidth = thumbWidth * thumbLength;
var ulWidth = thumbWidth * colcnt;
var nc = 0;
var pc = 0;
var click = thumbLength - colcnt;
ul.width(totalWidth);
if(holderWidth >= ulWidth){
gallerycontainer.width(ulWidth);
}else{
gallerycontainer.width(holderWidth);
}
gallerycontainer.append('<div class="gallery-slider-controls"><button type="button" class="gallery-image-prev"><i class="fas fa-chevron-left"></i></button><button type="button" class="gallery-image-next"><i class="fas fa-chevron-right"></i></button></div>');
var nextButton = jEle.find('.gallery-slider-controls .gallery-image-next');
nextButton.unbind('click');
nextButton.on('click' , function(){
if(nc < click){
nc++;
pc++;
ul.animate({marginLeft: '-'+(jQuery(thumbnails[0]).outerWidth(true)*nc)});
}
});
var prevButton = jEle.find('.gallery-slider-controls .gallery-image-prev');
prevButton.unbind('click');
prevButton.on('click' , function(){
if(pc > 0){
nc--;
pc--;
ul.animate({marginLeft: '-'+(jQuery(thumbnails[0]).outerWidth(true)*nc)});
}
});
}
}
var sliderVertical = function(){
if(colcnt < thumbLength){
var thumbHeight = jQuery(thumbnails[0]).outerHeight(true);
var holderHeight = galleryHolder.outerHeight(true);
var totalHeight = thumbHeight * thumbLength;
var ulHeight = thumbHeight * colcnt;
var nc = 0;
var pc = 0;
var click = thumbLength - colcnt;
ul.height(totalHeight);
if(holderHeight >= ulHeight){
gallerycontainer.height(ulHeight);
}else{
gallerycontainer.height(holderHeight);
}
gallerycontainer.append('<div class="gallery-slider-controls"><button type="button" class="gallery-image-prev"><i class="fas fa-chevron-up"></i></button><button type="button" class="gallery-image-next"><i class="fas fa-chevron-down"></i></button></div>');
var nextButton = jEle.find('.gallery-slider-controls .gallery-image-next');
nextButton.unbind('click');
nextButton.on('click' , function(){
if(nc < click){
nc++;
pc++;
ul.animate({marginTop: '-'+(jQuery(thumbnails[0]).outerHeight(true)*nc)});
}
});
var prevButton = jEle.find('.gallery-slider-controls .gallery-image-prev');
prevButton.unbind('click');
prevButton.on('click' , function(){
if(pc > 0){
nc--;
pc--;
ul.animate({marginTop: '-'+(jQuery(thumbnails[0]).outerHeight(true)*nc)});
}
});
}
}
var zoomImage = function(jELe){
var defaultParas = {
layerW: 100, // Mask Width
layerH: 100, // Mask Height
layerOpacity: 0.2, // Mask Transperency
layerBgc: '#000', // Mask Background Color
showPanelW: 500, // Wide Display Area
showPanelH: 500, // Display magnified area high
marginL: 50, // The distance from the zoomed area to the right of the thumbnail
marginT: 10 // The distance between the enlarged area and the upper side of the thumbnail
};
var self = jEle.find('.kkart-primary-image-container');
var selfOffset = self.offset();
var imageW = self.width();
var imageH = self.height();
var boxHeight = boxWidth = self.parent().outerWidth(true);
var wTimes = 3;
var hTimes = 3;
var layer = jQuery('<div>').css({
display: 'none',
position: 'absolute',
left: '0',
top: '0',
backgroundColor: defaultParas.layerBgc,
width: defaultParas.layerW,
height: defaultParas.layerH,
opacity: defaultParas.layerOpacity,
border: '1px solid #ccc',
cursor: 'crosshair'
});
self.append(layer);
var img = jQuery('<img>').attr('src', jQuery('.kkart-product-pimage')).css({
position: 'relative',
left: '0',
top: '0',
zIndex: '999',
width: imageW * wTimes,
height: imageH * hTimes,maxWidth: 'initial',
maxHeight: 'initial',
}).attr('id', 'big-img');
var showPanel = jQuery('<div>').css({
display: 'none',
position: 'absolute',
overflow: 'hidden',
left: boxWidth + defaultParas.marginL,
top: defaultParas.marginT,
width: defaultParas.showPanelW,
height: defaultParas.showPanelH,
}).append(img);
self.after(showPanel);
self.on('mousemove', function(e) {
var width_limit = layer.width() / 2;
var max_X = imageW - width_limit;
var max_Y = imageH - width_limit;
var current_X = e.pageX - selfOffset.left;
var current_Y = e.pageY - selfOffset.top;
var move_X = current_X - width_limit;
var move_Y = current_Y - width_limit;
if(current_X <= width_limit) {
move_X = 0;
}
if (current_X >= max_X) {
move_X = max_X - width_limit;
}
if (current_Y <= width_limit) {
move_Y = 0;
}
if (current_Y >= max_Y) {
move_Y = max_Y - width_limit;
}
layer.css({
left: move_X,
top: move_Y
});
img.attr('src', jQuery('.kkart-product-pimage').attr('src')).css({
left: -move_X * wTimes,
top: -move_Y * hTimes
});
}).on('mouseenter', function() {
layer.show();
showPanel.show();
}).on('mouseleave', function() {
layer.hide();
showPanel.hide();
});
}
sliderThumbnailAction();
sliderPrevAction();
sliderNextAction();
if(galleryHolder.hasClass('kkart-gallery-position-top') || galleryHolder.hasClass('kkart-gallery-position-bottom')){
sliderHorizontal();
}else{
sliderVertical();
}
var pImg = jQuery(jEle.find('.kkart-primary-image-container'));
if(!pagelayer_empty(pImg.attr('data-zoom')) && !pImg.find('.kkart-product-pimage').hasClass('kkart-upload-gallery-handler')){
zoomImage(jEle);
}
}
function kkart_pl_product_quantity(jEle){
var minus = jEle.find(".kkart-minus");
var plus = jEle.find(".kkart-plus");
var quantity = jEle.find(".kkart-quantity-input");
minus.click(function(){
var qval = quantity.val();
// TODO change 1 to min val of input
if(qval > 1){
quantity.val(--qval);
}
});
plus.click(function(){
var qval = quantity.val();
var max = parseInt(quantity.attr('max'));
if(!max || qval < max){
quantity.val(++qval);
}
});
}
function kkart_thumbnail_img_slider(jEle){
var Interval = setInterval(function(){
var closestOwl = jEle.closest('.pagelayer-owl-holder');
if (closestOwl.length > 0 && closestOwl.children('.pagelayer-owl-stage-outer').length < 1) {
return;
}
clearInterval(Interval);
var parentWidth = jEle.parent().width();
jEle.width(parentWidth);
var ul = jEle.find('.kkart-thumbnail-gallery');
var options = pagelayer_fetch_dataAttrs(ul, 'data-slides-');
pagelayer_owl_init(jEle, ul, options);
}, 500);
jEle.on('click', '.pagelayer-owl-nav, .pagelayer-owl-dots', function(e){
e.preventDefault();
});
}
function kkart_price_update(data){
jQuery('.kkart-cart-item-price-holder').each(function(){
var cpEle = jQuery(this),
pricetype = cpEle.find('.kkart-cart-item-price').data('pricetype'),
priceHtml = cpEle.find('.kkart-cart-item-price'),
pricetypeArr = [ 'sub_total', 'grand_total', 'all_items_total', 'tax', 'delivery_charges', 'discount' ];
if( pricetypeArr.indexOf( pricetype ) > -1 && data[pricetype] ) {
priceHtml.empty();
priceHtml.html( data[pricetype] );
}
});
}
//handles removal of item from the cart
function kkart_pl_cart_item_remove(jEle){
jQuery(".kkart-item-remove-link").click(function(e){
e.preventDefault();
var cart_item_key = jQuery(this).data('cart-key');
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl+'action=kkart_remove_from_cart',
data:{
cart_item_key:cart_item_key,
kkart_nonce: kkart_ajax_nonce
},
success: function (data){
jQuery('[data-cart-key="'+cart_item_key+'"]').closest('.pagelayer-inner_row').animate({
height: "toggle",
opacity:"0"
},
{
duration: 2000,
complete: function(){
jQuery('[data-cart-key="'+cart_item_key+'"]').closest('.pagelayer-inner_row').remove();
}
}
);
kkart_price_update(data);
kkart_update_cart_data();
}
});
});
}
//Cart update button
function kkart_pl_cart_update_quantity(jEle){
jEle.on('click', function(e){
e.preventDefault();
var quantity = jEle.parent('.pagelayer-kkart_cart_update').siblings('.pagelayer-kkart_cart_item_quantity').find('input').val();
var cart_item_key = jEle.data('cart-key');
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl+'action=kkart_cart_update_quantity',
data: {
quantity : quantity,
kkart_nonce: kkart_ajax_nonce,
cart_item_key: cart_item_key
},
success: function(data){
kkart_update_cart_data();
kkart_price_update(data);
jEle.parent('.pagelayer-kkart_cart_update').siblings('.pagelayer-kkart_cart_price').find('[data-pricetype="product_sub_total"]').html(data.product_subtotal);
}
});
});
}
// Update mini cart and quentity
function kkart_update_cart_data(){
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl+'action=kkart_get_cart_data',
data:{
kkart_nonce: kkart_ajax_nonce
},
success: function(response){
if(pagelayer_empty(response.data)){
return;
}
// Update cart quantity
if(response.data.quantity != undefined){
var cartIcon = jQuery('body').find('.pagelayer-cart-button-icon');
if(cartIcon.length > 0){
cartIcon.attr('data-counter', response.data.quantity);
}
}
// Update mini cart
if ( response.data.fragments != undefined ) {
var miniCartForm = jQuery('body').find('.kkart-cart-form');
if(miniCartForm.length > 0){
miniCartForm.find('.product_list_widget,.kkart-mini-cart__total,.kkart-mini-cart__buttons,.kkart-mini-cart__empty-message').remove();
miniCartForm.find('.pagelayer-menu-cart-close').after(response.data.fragments);
}
}
// Update cart button price
if ( response.data.price != undefined ) {
var cartBtnTxt = jQuery('body').find('.pagelayer-cart-button-text');
if(cartBtnTxt.length > 0){
cartBtnTxt.html(response.data.price);
}
}
},
error: function(){
console.log('error while retriving cart information');
}
});
}
// Checkout handler
function kkart_checkout_tabs(jEle){
var present_tab = jEle.find('.kkart-checkout-tab-holder');
var button = jEle.find('button.checkout-tabs-proceed');
var checkoutHolder = jEle.closest('.kkart-checkout-holder');
var tab_type = jEle.data('checkout-tab');
var nextEle = jEle.next();
/* doneisTrue is used bcoz .data() wasnt able to assign value to the attribute, so vanilla js was used and it was outputting a
string, rather than a boolean value so the doneisTrue variable is used to convert that string to boolean */
var doneisTrue = '';
button.on('click', function(e){
e.preventDefault();
// Disable Currebt button
button.prop('disabled', true);
var post_data = {};
if(tab_type == 'shipping' || tab_type == 'payment'){
if(checkoutHolder.find('[name="ship_to_billing_address"]').is(":checked")){
post_data = {
ship_to_billing_address: 1,
}
}
}
if(checkoutHolder.find('[name="payment_method"]').val() && tab_type == 'payment'){
varData = Object.assign(post_data, {
'kkart-process-checkout-nonce': kkart_checkout_nonce,
'payment_method': checkoutHolder.find('[name="payment_method"]:checked').val(),
});
}
var varData = {
kkart_nonce: kkart_ajax_nonce,
tab_type: tab_type,
};
varData = Object.assign(post_data, varData);
jQuery.ajax({
type: 'post',
url: kkart_ajaxurl+'action=kkart_checkout_tabs_procceed',
data: varData,
success: function(data){
if(typeof data != 'object'){
data = jQuery.parseJSON(data);
}
if(data['error']){
alert(data['error']);
return;
}
if(data['logged_out']){
alert(data['logged_out']);
return;
}
if(tab_type == 'payment' && 'result' in data){
if( data['result'] == 'success') {
window.location.href = data['redirect'];
} else if('messages' in data){
var selected_method = present_tab.find('input[name="payment_method"]:checked').closest('.kkart-payment-method');
if( selected_method.find('.kkart-error').length ) {
selected_method.find('.kkart-error').remove();
}
selected_method.append( data['messages'] );
}
}
//if(present_tab.has('.kkart-payment-method').length > 0 && present_tab.has('.kkart-payment-method .radioActive').length == 0){
// present_tab.find('.kkart-payments-method-holder').prepend('<div class="payment_method_error" style="background-color:red; color:white;padding:5px 5px;">Select a Payment Method to Proceed</div>');
// error_count += 1;
// }
if(nextEle.length > 0 ){ //&& doneisTrue
if( nextEle.data('checkout-tab') == 'cart' ){
kkart_reload_cart_tab( jEle );
kkart_shipping_form( jQuery(this) );
}
present_tab[0]['dataset']['done'] = true;
jEle.removeClass('kkart-checkout-active-tab');
jEle.find('button.checkout_edit_button').css('display', 'inline-block');
jEle.find('i').css('display', 'inline-block');
//doneisTrue conversion is done here
//doneisTrue = (present_tab[0]['dataset']['done'] == 'true');
present_tab[0]['dataset']['touched'] = false;
nextEle.find('.kkart-checkout-tab-holder')[0]['dataset']['touched'] = true;
nextEle.addClass('kkart-checkout-active-tab');
location.hash = nextEle.data('checkout-tab');
var billingAddre = nextEle;
if(billingAddre.length > 0){
kkart_billing_address_reload(billingAddre);
}
}
},
complete: function(){
// Enable Currebt button
button.prop('disabled', false);
}
});
});
var add_data_to_header = function(data){
var header_text = jEle.find('.kkart-checkout-tab-header .kkart-checkout-tab-header-text');
if(header_text.length > 0){
header_text.text(data.display_name+' '+data.user_email);
return;
}
jEle.find('.kkart-checkout-tab-header').append('<span class="kkart-checkout-tab-header-text">'+data.display_name+' '+data.user_email+'</span>');
}
if(jEle.prev().length == 0 && !present_tab.data('done')){
jEle.addClass('kkart-checkout-active-tab');
present_tab[0]['dataset']['touched'] = true;
jQuery.ajax({
url: kkart_ajaxurl+'action=kkart_user_auth',
data: {
kkart_nonce: kkart_ajax_nonce
},
success: function(data){
if(!data.isLoggedIn){
return;
}
button.click();
add_data_to_header(data);
}
});
}else{
// Remove class
jEle.removeClass('kkart-checkout-active-tab');
}
var edit_button = jEle.find('button.checkout_edit_button');
edit_button.on('click',function(e){
e.preventDefault();
var billingAddre = present_tab;
if(billingAddre.length > 0){
kkart_billing_address_reload(billingAddre);
}
jEle.addClass('kkart-checkout-active-tab');
present_tab[0]['dataset']['touched']= true;
// Hide All edit buttons from all next tabs
edit_button.hide();
jEle.nextAll().find('button.checkout_edit_button').hide();
jEle.nextAll().find('.kkart-checkout-tab-holder').each(function(){
jEle.nextAll().removeClass('kkart-checkout-active-tab');
jEle.nextAll().find('i').hide();
jEle.nextAll().find('.kkart-checkout-tab-holder')[0]['dataset']['touched'] = false;
});
});
var $payment_method = jEle.find('.kkart-payment-method');
$payment_method.on('change',function(){
jQuery(present_tab).find('.kkart-payments-method-holder .payment_method_error').fadeOut("slow",function(){
jQuery(this).remove();
});
var $payment_method_desc = jQuery(this).find('.kkart-payment-method-desc');
if(jQuery(this).prop("checked",true)){
if($payment_method.siblings().has('.radioActive').length > 0){
$payment_method.siblings().each(function(){
jQuery(this).find('.radioActive').slideUp("slow",function(){
jQuery(this).hide().removeClass('radioActive');
});
$payment_method_desc.slideDown("slow",function(){
jQuery(this).show();
jQuery(this).addClass('radioActive');
});
});
}else{
$payment_method_desc.slideDown("slow",function(){
jQuery(this).show();
jQuery(this).addClass('radioActive');
});
}
}
});
// Add signup button
jEle.find('.kkart-checkout-login-holder .signup').on('click', function(e){
e.preventDefault();
jEle.find('.kkart-checkout-login-holder').hide();
jEle.find('.kkart-checkout-register-holder').show();
});
jEle.find('.kkart-login-form-show').click(function(e){
e.preventDefault();
jEle.find('.kkart-checkout-login-holder').show();
jEle.find('.kkart-checkout-register-holder').hide();
});
}
function kkart_reload_cart_tab( jEle ) {
var cartTab = jEle,
nextEle = jEle.next(),
tab_type = cartTab.data('checkout-tab');
if( tab_type == 'shipping' ){
cartTab = nextEle;
}
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl+'action=kkart_reload_cart_tab',
data: {
kkart_nonce: kkart_ajax_nonce
},
success: function(res) {
cartTab.find('.kkart-checkout-tab-holder :first-child').remove();
cartTab.find('.kkart-checkout-tab-holder :first-child').before(res);
jQuery('input[name^="shipping_method"]').off().on('change', function(){
kkart_shipping_form( jQuery(this) );
});
}
});
}
//handles validation of form
function kkart_validateForm(jEle, error_count){
var nameReg = /^[A-Za-z ]+$/;
var numberReg = /^(\+\d{1,3}[- ]?)?\d{10}$/;
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
var urlReg = 'https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)';
if(jEle.val() == '' ){
error_count +=1;
if(jEle.next('span.form-error').length > 0){
jEle.next('span.form-error').remove();
jEle.removeClass('empty-field');
}
jEle.after('<span class="form-error" style="color:red;display:block">Enter Some Value in this Field</span>');
jEle.addClass('empty-field');
return error_count;
}
if(jEle.next('span.form-error').length > 0){
jEle.next('span.form-error').remove();
jEle.removeClass('empty-field');
}
if(jEle.attr('type') == 'country' || jEle.attr('type') == 'state' || jEle.attr('name').includes('name')){
if(!nameReg.test(jEle.val())){
error_count += 1;
if(jEle.next('span.form-error').length > 0){
jEle.next('span.form-error').remove();
jEle.removeClass('empty-field');
}
jEle.after('<span class="form-error" style="color:red;display:block">Enter a Valid Value</span>');
jEle.addClass('empty-field');
}else{
if(jEle.next('span.form-error').length > 0){
jEle.next('span.form-error').remove();
jEle.removeClass('empty-field');
}
}
}
if(jEle.attr('type') == 'email'){
if(!emailReg.test(jEle.val())){
error_count += 1;
if(jEle.next('span.form-error').length > 0){
jEle.next('span.form-error').remove();
jEle.removeClass('empty-field');
}
jEle.after('<span class="form-error" style="color:red;display:block">Enter a Valid Email</span>');
jEle.addClass('empty-field');
}else{
if(jEle.next('span.form-error').length > 0){
jEle.next('span.form-error').remove();
jEle.removeClass('empty-field');
}
}
}
if(jEle.attr('type') == 'number'){
if(!numberReg.test(jEle.val())){
error_count +=1;
if(jEle.next('span.form-error').length > 0){
jEle.next('span.form-error').remove();
jEle.removeClass('empty-field');
}
jEle.after('<span class="form-error" style="color:red;display:block">Enter a Valid Number</span>');
jEle.addClass('empty-field');
}else{
if(jEle.next('span.form-error').length > 0){
jEle.next('span.form-error').remove();
jEle.removeClass('empty-field');
}
}
}
if(jEle.attr('type') == 'url'){
if(!urlReg.test(jEle.val())){
error_count +=1;
if(jEle.next('span.form-error').length > 0){
jEle.next('span.form-error').remove();
jEle.removeClass('empty-field');
}
jEle.after('<span class="form-error" style="color:red;display:block">Enter a Valid URL</span>');
jEle.addClass('empty-field');
}else{
if(jEle.next('span.form-error').length > 0){
jEle.next('span.form-error').remove();
jEle.removeClass('empty-field');
}
}
}
return error_count;
}
// Save Checkout address
function kkart_save_checkout_address(jEle, e){
e.preventDefault();
jEle = jQuery(jEle);
var addressHolder = jEle.closest('.kkart-address-holder');
var holder = jEle.closest('.kkart-address-form-container');
var data = holder.find('select, textarea, input').serialize();
var error_count = 0;
var postalInput = holder.find('#billing_postcode');
// validate the Filelds
holder.find('input, select').each(function(e){
if(jQuery(this).closest('.validate-required').length > 0){
error_count = kkart_validateForm(jQuery(this), error_count);
}
});
if(error_count > 0){
return;
}
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl+'action=kkart_save_billing_address&kkart_nonce='+kkart_ajax_nonce,
data:data,
success: function (data){
data = jQuery.parseJSON(data);
//to handle postal code error
if(data['postal_error']){
if(postalInput.next('span.form-error').length > 0){
postalInput.next('span.form-error').remove();
postalInput.removeClass('empty-field');
}
postalInput.after('<span class="form-error" style="color:red;display:block">Enter a Valid Postal Code</span>');
postalInput.addClass('empty-field');
return;
}
if(data['error']){
return;
}
addressHolder.addClass('kkart-address-done');
kkart_billing_add_address(addressHolder, data['address_data']);
// To remove the address_id value so that new form can be open
jEle.siblings('[name="address_id"]').removeAttr('value');
}
});
}
// Edit checkout address
function kkart_billing_address_reload(jEle){
var addressHolder = jEle.find('.kkart-address-holder');
var addressesHolder = addressHolder.find('.kkart-addresses-holder');
if(addressHolder.length < 1){
return;
}
var is_shipping = false;
if(addressHolder.attr('data-form-type') == 'shipping' || addressHolder.attr('data-form-type') == 'shipping_cart'){
is_shipping = true;
}
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl+'action=kkart_get_address_details',
data:{
kkart_nonce: kkart_ajax_nonce,
is_shipping: is_shipping,
},
success: function (data){
data = jQuery.parseJSON(data);
addressHolder.unbind('change');
addressHolder.on('change', '.country_to_state', function( e ) {
kkart_update_state(jQuery(this), data);
});
if(data['error']){
return;
}
addressesHolder.empty();
for(var key in data['address_data']){
data['address_data'][key]['address_id'] = key;
kkart_billing_add_address(addressHolder, data['address_data'][key]);
}
addressHolder.find('.kkart-active-address-details').removeClass('kkart-active-address-details');
addressHolder.find('[data-address-key="'+data['active_addr_id']+'"]').addClass('kkart-active-address-details');
}
});
}
// Add checkout address
function kkart_billing_add_address(jEle, data){
var addressesHolder = jEle.find('.kkart-addresses-holder');
var addr_content = '';//addressesHolder.attr('data-formate');
var hereText = addressesHolder.attr('data-here-text') || 'Use This';
var editText = addressesHolder.attr('data-edit-text') || 'Edit';
var deleteText = addressesHolder.attr('data-delete-text') || 'Delete';
// Default show grid view
addressesHolder.css('display', '');
if(!addr_content){
addr_content = '$billing_first_name $billing_last_name <br/>$billing_email <br/>$billing_address_1 <br/>$billing_address_2';
}
for(var field in data){
addr_content = addr_content.replace('$'+field, data[field]);
}
var detailEle = addressesHolder.find('.kkart-address-details[data-address-key="'+ data['address_id'] +'"]');
if(detailEle.length > 0){
detailEle.find('.kkart-billing-detail').html(addr_content);
}else{
addressesHolder.append('<div class="kkart-address-details" data-address-key="'+ data['address_id'] +'">'+
'<div class="kkart-billing-detail">'+addr_content+'</div>'+
'<button class="kkart-billing-here" >'+hereText+'</button>'+
'<button class="kkart-billing-edit">'+editText+'</button>'+
'<button class="kkart-billing-delete">'+deleteText+'</button>'+
'</div>');
}
}
// Edit checkout address
function kkart_billing_form_handler(jEle){
var is_shipping = false;
var is_cart = false;
if(jEle.attr('data-form-type') == 'shipping'){
is_shipping = true;
}
if(jEle.attr('data-form-type') == 'shipping_cart'){
is_cart = true;
is_shipping = true;
}
// Set billing address
jEle.on('click', '.kkart-billing-here', function(e){
var curEle = jQuery(this);
var addressDiv = curEle.closest('.kkart-address-details');
var addressID = addressDiv.data('address-key');
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl+'action=kkart_set_billing_address',
data:{
kkart_nonce: kkart_ajax_nonce,
address_id: addressID,
is_shipping: is_shipping,
},
success: function (data){
data = jQuery.parseJSON(data);
if(data['error']){
return;
}
if(is_cart){
location.reload(true);
}else{
curEle.closest('.kkart-addresses-holder').find('.kkart-address-details').removeClass('kkart-active-address-details');
curEle.closest('.kkart-address-details').addClass('kkart-active-address-details');
var proceed_button = jEle.parents('.kkart-checkout-tab').find('.checkout-tabs-proceed');
proceed_button.click();
}
}
});
});
// Edit address
jEle.on('click', '.kkart-billing-edit', function(e){
var curEle = jQuery(this);
var addressDiv = curEle.closest('.kkart-address-details');
var addressID = addressDiv.data('address-key');
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl+'action=kkart_get_address_details',
data:{
kkart_nonce: kkart_ajax_nonce,
address_id: addressID,
},
success: function (data){
data = jQuery.parseJSON(data);
if(data['error']){
return;
}
var form_container = jEle.find('.kkart-address-form-container');
// To identify which address is being edited
jQuery( form_container ).data( 'addr-id', addressID );
// Add address ID
data['address_data']['address_id'] = addressID;
for(var key in data['address_data']){
var field = form_container.find('[name="'+key+'"]');
if(field.length < 1){
continue;
}
var value = data['address_data'][key];
// Set value
field.val(value);
var tagName = field.prop("tagName");
if(tagName == 'SELECT'){
// TODO fix for state chenge
field.trigger('change');
}
// TODO for checkbox
// Show form
curEle.closest('.kkart-address-holder').removeClass('kkart-address-done');
// Hide address list on edit address
if(is_cart){
curEle.closest('.kkart-addresses-holder').hide();
}
}
}
});
});
// Delete address
jEle.on('click', '.kkart-billing-delete', function(e){
var curEle = jQuery(this);
var addressDiv = curEle.closest('.kkart-address-details');
var addressID = addressDiv.data('address-key');
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl+'action=kkart_delete_address',
data:{
kkart_nonce: kkart_ajax_nonce,
address_id: addressID,
},
success: function (data){
data = jQuery.parseJSON(data);
if(data['error']){
return;
}
addressDiv.remove();
// To reload when the addressDiv is empty
if(jEle.find('.kkart-address-details').length < 1){
jQuery('.kkart-cart-modal-wrapper').removeClass('kkart-show');
location.reload(true);
}
}
});
});
// Show address form
jEle.on('click', '.kkart-address-form-headding', function(e){
var curEle = jQuery(this);
curEle.closest('.kkart-address-holder').removeClass('kkart-address-done');
});
// Save address form
jEle.on('click', '.kkart-save-address-form', function(e){
kkart_save_checkout_address(this, e);
});
// Cancel address form
jEle.on('click', '.kkart-cancel-address-form', function(e){
var curEle = jQuery(this);
var addressHolderDiv = jQuery('.kkart-cart-modal').find('.kkart-addresses-holder');
//TODO reset form
curEle.closest('.kkart-address-holder').addClass('kkart-address-done');
// Close modal if addresses empty
if(addressHolderDiv.children().length < 1){
addressHolderDiv.closest('.kkart-cart-modal-wrapper').removeClass('kkart-show');
}else{
addressHolderDiv.css('display', '');
}
});
// Shipping address checkbox handler
if(is_shipping){
//set initial state.
var shipEle = jEle.find('input[name="ship_to_billing_address"]');
var shipEleToggle = function(){
if(!shipEle.is(':checked')){
jEle.find('.kkart-addresses-container').show();
}else{
jEle.find('.kkart-addresses-container').hide();
}
}
//shipEleToggle();
// Checkbox on change
shipEle.on('change', function(){
shipEleToggle();
});
}
}
function kkart_myaccount_tabs(jEle){
var holder = jEle.find('.kkart-myaccount-tabholder');
var tabs = holder.find('.kkart-tablinks');
var hash = location.hash;
tabs.on('click', function(e){
var tEle = jQuery(this);
var id = tEle.data('target');
//Tab Content active
jEle.find('.kkart-tab-content-holder').removeClass('kkart-active-tabcontent');
jEle.find('.kkart-tab-content-holder[data-tabholder="'+id+'"]').addClass('kkart-active-tabcontent');
holder.find('.kkart-tablinks').removeClass('kkart-active-tab');
tEle.addClass('kkart-active-tab');
});
if(!pagelayer_empty(hash)){
var id = hash.substring(1);
var tab = holder.find('.kkart-tablinks[data-target="'+id+'"]');
if(tab.length > 0){
tab.click();
return;
}
}
tabs.first().click();
}
function kkart_order_details_handler(jEle){
// View Order Details
jEle.on('click', '.kkart-order-view', function(e){
var curEle = jQuery(this);
var orderID = curEle.data('order-key');
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl+'action=kkart_account_order_details',
data:{
kkart_nonce: kkart_ajax_nonce,
order_id: orderID,
},
success: function (result){
//console.log(result);
jEle.find('.kkart-myaccount-orderdetails').append(result);
}
});
jEle.find('.kkart-myaccount-orders').css({'display':'none'});
jEle.find('.kkart-myaccount-orderdetails').css({'display':'block'});
});
jEle.on('click', '.kkart-close-orderdetails', function(e){
jEle.find('.kkart-myaccount-orderdetails').empty();
jEle.find('.kkart-myaccount-orderdetails').css({'display':'none'});
jEle.find('.kkart-myaccount-orders').css({'display':'table'});
});
}
function kkart_archive_crt_btn_holder(jEle){
var addtocartHandler = function(jELe){
jELe.on('click', '.kkart-archive-crt-btn, .kkart-plus, .kkart-minus, .kkart-close', function(e){
if(pagelayer_empty(pagelayer_is_live)){
if(jQuery(this).hasClass('kkart-minus')){
removefromCart(jQuery(this), e);
}else if(jQuery(this).hasClass('kkart-close')){
deletefromCart(jQuery(this), e);
}else if(jQuery(this).hasClass('kkart-archive-crt-btn') || jQuery(this).hasClass('kkart-plus')){
addtoCart(jQuery(this), e);
}
}else{
updateButton(this);
}
});
jELe.on('change', '.kkart-quantity-input', function(e){
e.preventDefault();
var thisparent = jQuery(this).parents('.kkart-quantity-holder');
var data_cart_key = jQuery(thisparent).attr('data-cart-key');
var quantity = jQuery(this).val();
setquantity(data_cart_key, quantity);
if(quantity == 0){
hidequantityHolder(jQuery(this));
}
});
}
var fetchCart = function(jELe){
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl+'action=kkart_get_cart_items',
data:{
kkart_nonce: kkart_ajax_nonce
},
success: function(result){
var cartbutton = jQuery(jELe).find('.kkart-archive-crt-btn');
var product_id = jQuery(cartbutton).attr('data-product_id');
if(typeof (result['data']) == 'object'){
var fetchcartdata = {};
jQuery.each(result['data'], function(index, val){
if(val['product_id'] == product_id){
fetchcartdata = result['data'][index];
}
});
var quantityHolder = jQuery(jELe).find('.kkart-quantity-holder');
if(quantityHolder.length > 0){
var kkartquantity = jQuery(quantityHolder).find('.kkart-quantity-input');
jQuery(kkartquantity).val(fetchcartdata.quantity);
jQuery(quantityHolder).attr('data-cart-key',fetchcartdata.key);
}
}
},
error: function(){
console.log('there is some issue while fetching cart data!');
}
});
}
var addtoCart = function(thisbutton, e){
if(thisbutton.is('.ajax_add_to_cart') || thisbutton.hasClass('kkart-plus')){
var thisbtn = thisbutton;
if(thisbutton.hasClass('kkart-plus')){
thisparent = thisbutton.parents('.kkart-quantity-holder');
thisbtn = jQuery(thisparent);
}
if (!thisbtn.attr( 'data-product_id')){
return true;
}
e.preventDefault();
var data = {};
jQuery.each(thisbtn[0].dataset, function( key, value ) {
if(key != 'data-cart-key'){
data[ key ] = value;
}
});
jQuery.ajax({
type: 'POST',
url: kkart_add_to_cart_params.kkart_ajax_url.toString().replace( '%%endpoint%%', 'add_to_cart' ),
data: data,
dataType: 'json',
success: function( response ) {
if ( ! response ) {
return;
}
if ( response.error && response.product_url ) {
window.location = response.product_url;
return;
}
//Redirect to cart option
if ( kkart_add_to_cart_params.cart_redirect_after_add === 'yes' ) {
window.location = kkart_add_to_cart_params.cart_url;
return;
}
//Trigger event so themes can refresh other areas.
// View cart text.
if ( !pagelayer_empty(response.fragments) ) {
kkart_update_cart_data();
updateButton(thisbutton);
}
},
error: function(){
console.log('error while adding product');
}
});
}
}
var removefromCart = function(thisbutton, e){
thisparent = thisbutton.parents('.kkart-quantity-holder');
if (!thisparent.attr('data-cart-key')) {
return true;
}
e.preventDefault();
quantityinput = jQuery(thisparent).find('.kkart-quantity-input');
var data_cart_key = jQuery(thisparent).attr( 'data-cart-key' );
var quantity = jQuery(quantityinput).val();
if(quantity > 0){
var quantity = --quantity;
setquantity(data_cart_key, quantity);
updateButton(thisbutton);
}
}
var setquantity = function(data_cart_key, qty){
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl+'action=kkart_set_cart_quantity',
data:{
cart_item_key: data_cart_key,
quantity: qty,
kkart_nonce: kkart_ajax_nonce
},
success: function(data){
if(!pagelayer_empty(data.success)){
kkart_update_cart_data();
return true;
}
},
error: function(){
console.log('error while removing from cart');
}
});
}
var deletefromCart = function(thisbutton, e){
thisparent = thisbutton.parents('.kkart-quantity-holder');
if (!thisparent.attr('data-cart-key')){
return true;
}
e.preventDefault();
var data_cart_key = thisparent.attr( 'data-cart-key' );
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl+'action=kkart_remove_from_cart',
data:{
cart_item_key:data_cart_key,
kkart_nonce: kkart_ajax_nonce
},
success: function(data){
if(pagelayer_empty(data)){
return;
}else{
kkart_update_cart_data();
hidequantityHolder(thisbutton);
}
},
error: function(){
console.log('error while delete from cart');
}
});
}
var updateButton = function(thisbutton){
var thisbutton = jQuery(thisbutton);
var thisparent = thisbutton.parents('.kkart-crt-btn-holder');
if ( thisbutton.hasClass( 'kkart-minus' ) ) {
var inputquantity = thisparent.find('.kkart-quantity-input');
var qval = jQuery(inputquantity).val();
qval = --qval;
if(qval > 0){
jQuery(inputquantity).val(qval);
}else{
if(pagelayer_empty(pagelayer_is_live)){
hidequantityHolder(thisbutton);
}
}
}else if(thisbutton.hasClass('kkart-plus')){
var inputquantity = thisparent.find('.kkart-quantity-input');
var qval = jQuery(inputquantity).val();
jQuery(inputquantity).val(++qval);
}else if(thisbutton.hasClass( 'kkart-archive-crt-btn' )){
if(pagelayer_empty(pagelayer_is_live)){
if(!kkart_add_to_cart_params.is_cart){
var data_attribute = {};
jQuery.each( thisbutton[0].dataset, function( key, value ) {
data_attribute[key] = value;
});
thisbutton.hide();
var quantityHolder = jQuery(thisparent).find('.kkart-quantity-holder');
if(quantityHolder.length == 0){
thisparent.append('<div class="kkart-quantity-holder" data-quantity="'+data_attribute['quantity']+'" data-product_id="'+data_attribute['product_id']+'" data-product_sku="'+data_attribute['product_sku']+'"><div class="kkart-quantity"><i class="fas fa-minus kkart-minus"></i><input type="number" min="1" class="kkart-quantity-input" name="quantity" value=""><i class="fas fa-plus kkart-plus"></i></div><div class="kkart-quantity-close"><i class="fas fa-times kkart-close"></i></div></div>');
}
var viewbtnHolder = jQuery(thisparent).find('.kkart-view-btn-holder');
if(viewbtnHolder.length == 0){
var view_btn_text = kkart_add_to_cart_params.i18n_view_cart;
if(!pagelayer_empty(jQuery(thisparent).data('view-btn-text'))){
view_btn_text = jQuery(thisparent).data('view-btn-text');
}
thisparent.append('<div class="kkart-view-btn-holder"><a href="' + kkart_add_to_cart_params.cart_url + '" class="kkart-view-btn" title="'+view_btn_text+'">'+view_btn_text+'</a></div>' );
}
fetchCart(jEle);
}
}
}
}
var hidequantityHolder = function(thiselement){
var thisparent = thiselement.parents('.kkart-crt-btn-holder');
var quantityHolder = jQuery(thisparent).find('.kkart-quantity-holder');
var cartbtn = jQuery(thisparent).find('.kkart-archive-crt-btn');
var viewbtn = jQuery(thisparent).find('.kkart-view-btn-holder')
jQuery(quantityHolder).remove();
jQuery(viewbtn).remove();
jQuery(cartbtn).show();
}
addtocartHandler(jEle);
var quantityHolder = jQuery(jEle).find('.kkart-quantity-holder');
var view_btn = jQuery(jEle).find('.kkart-view-btn-holder');
var thisbutton = jQuery(jEle).find('.kkart-archive-crt-btn');
if(quantityHolder.length > 0 || view_btn.length > 0){
thisbutton.hide();
}
}
function kkart_shipping_form(jELe){
var shipping_methods = "",
is_cart_tab = false,
is_cart_tab = jELe.closest('.kkart-checkout-tab-holder').length ? true : false;
// eslint-disable-next-line max-len
var cart = $("#shipping_method").attr('cart');
$( 'select.shipping_method, input[name^="shipping_method"][type="radio"]:checked, input[name^="shipping_method"][type="hidden"]' ).each( function() {
shipping_methods = $(this).val();
} );
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl+'action=kkart_update_shipping_method',
data:{
shipping_method:shipping_methods,
cart:cart,
kkart_nonce: kkart_ajax_nonce
},
success: function (data){
kkart_price_update(data);
var cartTab = jELe.closest('.kkart-checkout-tab');
if( is_cart_tab ) {
kkart_reload_cart_tab( cartTab );
}
}
});
}
// Login form handler
function kkart_login_form_handler(jEle){
var login = jEle.find('.kkart-login-form');
var registration = jEle.find('.kkart-registration-form');
if(registration.length < 1){
login.find('.signup').remove();
return;
}
login.find('.signup').click(function(e){
e.preventDefault();
login.hide();
registration.show();
});
registration.find('.kkart-login-form-show').click(function(e){
e.preventDefault();
login.show();
registration.hide();
});
}
function kkart_coupon_toggle( jEle ) {
// Show coupon
jQuery(jEle).unbind( 'click.showcoupon');
jQuery(jEle).on( 'click.showcoupon', 'a.showcoupon', function(e){
e.preventDefault();
var checkout_coupon = jQuery( '.checkout_coupon' );
checkout_coupon.slideToggle( 400, function() {
checkout_coupon.find( ':input:eq(0)' ).focus();
});
});
jQuery( 'form.checkout_coupon' ).hide().submit( kkart_submit_coupon );
jQuery( document.body ).on( 'click', '.kkart-remove-coupon', kkart_remove_coupon );
}
function kkart_remove_coupon(e) {
e.preventDefault();
var coupon = jQuery( this ).data( 'coupon' ),
container = jQuery( '.kkart_cart_price_holder' );
container.addClass( 'processing' ).block({
message: null,
overlayCSS: {
background: '#fff',
opacity: 0.6
}
});
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl + 'action=kkart_remove_coupon',
data: {
security: kkart_ajax_nonce,
coupon: coupon
},
success: function( code ) {
jQuery( '.kkart-error, .kkart-message' ).remove();
container.removeClass( 'processing' ).unblock();
if ( code ) {
jQuery( '.kkart-form-coupon-toggle' ).after( code );
setTimeout(()=>{
jQuery( '.kkart-form-coupon-toggle' ).parent().find('.kkart-error, .kkart-message' ).remove();
}, 4000);
kkart_shipping_form( jQuery(this) );
var tabs = jQuery('.kkart-checkout-tab');
jQuery( tabs ).each(function() {
if( 'cart' == jQuery(this).data('checkout-tab') ) {
kkart_reload_cart_tab( jQuery(this) );
}
});
// Remove coupon code from coupon field
jQuery( 'body' ).find( 'input[name="coupon_code"]' ).val( '' );
}
},
error: function ( jqXHR ) {
console.log( jqXHR.responseText );
},
dataType: 'html'
});
}
function kkart_submit_coupon() {
var $form = jQuery( this );
if ( $form.is( '.processing' ) ) {
return false;
}
$form.addClass( 'processing' ).block({
message: null,
overlayCSS: {
background: '#fff',
opacity: 0.6
}
});
jQuery.ajax({
type: 'POST',
url: kkart_ajaxurl + 'action=kkart_apply_coupon',
data: {
security: kkart_ajax_nonce,
coupon_code: $form.find( 'input[name="coupon_code"]' ).val()
},
success: function( code ){
jQuery( '.kkart-error, .kkart-message' ).remove();
$form.removeClass( 'processing' ).unblock();
if ( code ) {
$form.before( code );
setTimeout(()=>{
$form.parent().find('.kkart-error, .kkart-message' ).remove();
}, 4000);
$form.slideUp();
kkart_shipping_form( jQuery(this) );
var tabs = jQuery('.kkart-checkout-tab');
jQuery( tabs ).each(function() {
if( 'cart' == jQuery(this).data('checkout-tab') ) {
kkart_reload_cart_tab( jQuery(this) );
}
});
}
},
dataType: 'html'
});
return false;
}
// Updates the select option of state on country change
function kkart_update_state(jEle, addrData){
addrData = addrData || {};
var country = jEle.val(),
addrHolder = jEle.closest('.kkart-address-form-container'),
stateBox = addrHolder.find('#billing_state, #shipping_state'),
parent = stateBox.closest('.form-row'),
input_name = stateBox.attr('name'),
input_classes = stateBox.attr('data-input-classes'),
label = parent.children('label'),
input_id = stateBox.attr('id'),
placeholder = stateBox.attr( 'placeholder' ) || stateBox.attr( 'data-placeholder' ) || '',
addressID = addrHolder.data('addr-id'),
oldStateSel = '',
newStateBox;
if( !pagelayer_empty(addrData) && !pagelayer_empty(addrData['address_data'])) {
if( addrData['address_data'][addressID] ) {
oldStateSel = addrData['address_data'][addressID]['billing_state'];
} else{
oldStateSel = addrData['address_data']['billing_state'];
}
}
jQuery.ajax({
method : 'POST',
url : kkart_ajaxurl+'action=kkart_get_states',
data : {
kkart_nonce : kkart_ajax_nonce,
country_name : country
},
success: function(res) {
kkart_get_country_local(country, label);
// Make input box for states
if(typeof(res) === 'boolean' || res.length < 1){
newStateBox = jQuery('<input type="text" />')
.prop( 'id', input_id )
.prop( 'name', input_name )
.attr('data-input-classes', input_classes )
.addClass( 'input-text ' + input_classes );
parent.show();
stateBox.replaceWith( newStateBox );
return;
}else{
// Make select box for states
if( stateBox.is( 'input' ) ){
newStateBox = jQuery('<select></select>')
.prop( 'id', input_id )
.prop( 'name', input_name )
.data( 'placeholder', placeholder )
.attr( 'data-input-classes', input_classes )
.addClass( 'state_select ' + input_classes );
parent.show();
stateBox.replaceWith( newStateBox );
stateBox = addrHolder.find( '#billing_state, #shipping_state');
}
var state_options = '<option value>Select an option...</option>';
for(var state in res){
if(!pagelayer_empty(oldStateSel) && oldStateSel == state){
state_options += '<option value="'+state+'" selected>'+res[state]+'</option>';
continue;
}
state_options += '<option value="'+state+'">'+res[state]+'</option>';
}
stateBox.empty();
stateBox.append(state_options);
}
}
});
}
// KKart cart
function kkart_menu_cart(jEle){
// On click menu cart
jEle.find('.pagelayer-menu-cart-toggle').click(function(e){
e.preventDefault();
jEle.find('.pagelayer-menu-cart-container').toggle();
});
// On click menu cart close
jEle.find('.pagelayer-menu-cart-close').click(function(){
jEle.find('.pagelayer-menu-cart-container').hide();
});
}
// Handle locale
function kkart_get_country_local(country, label){
let countryObj;
var parent = label.parent();
jQuery.ajax({
method : 'POST',
url : kkart_ajaxurl+'action=kkart_get_country_locale',
data : {
kkart_nonce : kkart_ajax_nonce,
},
success: function(res) {
for(let key in res){
if(key === country){
countryObj = res[key];
}
}
label.contents().filter(function() {
return this.nodeType === 3;
}).replaceWith(countryObj['state']['label']);
if(countryObj['state'] && 'required' in countryObj['state']){
parent.removeClass( 'validate-required' );
label.find('abbr').replaceWith('<span class="optional"> (Optional) </span>')
}
else{
parent.addClass('validate-required' );
label.find('span').replaceWith('<abbr class="required"> * </abbr>')
}
}
});
}
Zerion Mini Shell 1.0