(function (w, d){
var OVERLAY=d.getElementById('dk-loading-overlay');
var TITLE_ID='dk-loading-title';
function showOverlay(message){
if(message){
var title=OVERLAY.querySelector('#' + TITLE_ID);
if(title) title.textContent=message;
}
OVERLAY.style.display='flex';
d.body.style.overflow='hidden';
}
function hideOverlay(){
if(!OVERLAY) return;
OVERLAY.style.display='none';
d.body.style.overflow='';
}
w.showOverlay=showOverlay;
w.hideOverlay=hideOverlay;
})(window, document);
window.BWDK=window.BWDK||{};
window.BWDK.SUPPORT_CODES={
MISSING_ORDER_START_URL: 403,
INVALID_ORDER_START_URL: 501,
FRONTEND_FETCH_FAILED: 502,
UNKNOWN: 999
};
window.BWDK.GENERIC_ERROR_MESSAGE='متاسفانه در حال حاضر امکان خرید با دیجیکالا در دسترس نمی‌باشد.';
window.BWDK.formatSupportMessage=function (supportCode, baseMessage){
var base=(baseMessage&&String(baseMessage).trim()) ? String(baseMessage).trim():window.BWDK.GENERIC_ERROR_MESSAGE;
var code=parseInt(supportCode, 10);
if(!code||isNaN(code)){
code=window.BWDK.SUPPORT_CODES.UNKNOWN;
}
if(/کد پیگیری:\s*\d+/u.test(base)){
return base;
}
return base + ' کد پیگیری: ' + code;
};
window.BWDK.isValidOrderStartUrl=function (value){
if(!value||typeof value!=='string'){
return false;
}
try {
var parsed=new URL(value);
return parsed.protocol==='http:'||parsed.protocol==='https:';
} catch (e){
return false;
}};
window.BWDK.showCheckoutError=function (message){
if(typeof hideOverlay==='function'){
hideOverlay();
}
if(typeof jQuery!=='undefined'){
jQuery('#bwdk-error').html(message);
jQuery('.wrap-bwdk-error , .dk-mask').fadeIn();
}};
window.BWDK.startDigifyCheckout=function (opts){
opts=opts||{};
if(window.BWDK._checkoutInFlight){
return;
}
window.BWDK._checkoutInFlight=true;
function releaseCheckoutLock(){
window.BWDK._checkoutInFlight=false;
}
showOverlay();
var origin=opts.origin;
if(!origin){
var pathname=window.location.pathname;
origin='checkout';
if(pathname.indexOf('/checkout')!==-1){
origin='checkout';
}else if(pathname.indexOf('/cart')!==-1){
origin='cart';
}else{
if(typeof wc_add_to_cart_params!=='undefined'&&wc_add_to_cart_params.cart_url){
origin='cart';
}else{
origin='checkout';
}}
}
console.log('[BWDK] Origin determined:', origin, 'pathname:', window.location.pathname);
function fetchAdminAjax(){
return fetch(bwdk_ajax.ajax_url, {
method: 'POST',
credentials: 'include',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams({
action: 'bwdk_get_cart',
_ajax_nonce: bwdk_ajax.nonce,
callback_url: window.location.href,
bwdk_origin: origin
})
});
}
function fetchCartFromStoreAPI(){
var storeApiUrl=new URL('/wp-json/wc/store/cart', window.location.origin);
return fetch(storeApiUrl, {
method: 'GET',
credentials: 'include',
headers: {
'Accept': 'application/json'
}});
}
function resolveBackendErrorMessage(errorPayload, fallbackCode){
var data=errorPayload||{};
var nested=data.data||data;
var message=nested.message||data.message||'';
var supportCode=nested.support_code||data.support_code||fallbackCode||window.BWDK.SUPPORT_CODES.UNKNOWN;
if(message){
return window.BWDK.formatSupportMessage(supportCode, message);
}
return window.BWDK.formatSupportMessage(supportCode);
}
function parseAjaxError(response, responseText){
var errorData=null;
try {
errorData=JSON.parse(responseText);
} catch (e){
}
return { ok: false, errorData: errorData, originalStatus: response.status };}
function shouldRetryCreateAfterHttpError(response, errorData){
if(response.status===409){
return false;
}
var nested=(errorData&&(errorData.data||errorData))||{};
var code=nested.code||'';
return code==='cart_invalid';
}
function fetchCartWithFallback(){
return fetchAdminAjax().then(function(response){
if(response.ok){
return response.json().then(function(data){
return { ok: true, data: data };});
}
if(response.status >=400){
return response.text().then(function(responseText){
var parsed=parseAjaxError(response, responseText);
if(!shouldRetryCreateAfterHttpError(response, parsed.errorData)){
return parsed;
}
return fetchCartFromStoreAPI().then(function(storeApiResponse){
if(storeApiResponse.ok){
return fetchAdminAjax().then(function(retryResponse){
if(retryResponse.ok){
return retryResponse.json().then(function(data){
return { ok: true, data: data };});
}
return parsed;
}).catch(function(){
return parsed;
});
}
return parsed;
}).catch(function(){
return parsed;
});
});
}
return response.text().then(function(responseText){
return parseAjaxError(response, responseText);
});
}).catch(function(error){
return fetchCartFromStoreAPI().then(function(storeApiResponse){
if(storeApiResponse.ok){
return fetchAdminAjax().then(function(retryResponse){
if(retryResponse.ok){
return retryResponse.json().then(function(data){
return { ok: true, data: data };});
}
return { ok: false, fetchError: true };}).catch(function(){
return { ok: false, fetchError: true };});
}else{
return { ok: false, fetchError: true };}}).catch(function(){
return { ok: false, fetchError: true };});
});
}
fetchCartWithFallback().then(function(result){
console.log('[BWDK] fetchCartWithFallback result', result);
if(result&&result.data){
console.log('[BWDK] ajax data', result.data);
}
window.__BWDK_LAST_AJAX__=result;
if(result.ok&&result.data){
if(result.data.success){
var startUrl=(result.data.data&&result.data.data.order_start_url)||result.data.order_start_url;
if(!startUrl){
console.error('[BWDK] Missing order_start_url:', {
result: result,
data: result.data,
nestedData: result.data.data
});
releaseCheckoutLock();
window.BWDK.showCheckoutError(window.BWDK.formatSupportMessage(window.BWDK.SUPPORT_CODES.MISSING_ORDER_START_URL)
);
return;
}
if(!window.BWDK.isValidOrderStartUrl(startUrl)){
console.error('[BWDK] Invalid order_start_url:', {
result: result,
startUrl: startUrl,
data: result.data,
nestedData: result.data.data
});
releaseCheckoutLock();
window.BWDK.showCheckoutError(window.BWDK.formatSupportMessage(window.BWDK.SUPPORT_CODES.INVALID_ORDER_START_URL)
);
return;
}
window.location.href=startUrl;
}else{
var errorMsg=resolveBackendErrorMessage(result.data, window.BWDK.SUPPORT_CODES.UNKNOWN);
var errorData=result.data.data||result.data;
var errorCode=errorData.code||'';
releaseCheckoutLock();
window.BWDK.showCheckoutError(errorMsg);
if((errorCode==='cart_invalid'||result.originalStatus===409)&&typeof jQuery!=='undefined'){
jQuery(document.body).trigger('update_checkout');
jQuery(document.body).trigger('wc_fragment_refresh');
}}
}else if(result&&result.fetchError){
releaseCheckoutLock();
window.BWDK.showCheckoutError(window.BWDK.formatSupportMessage(window.BWDK.SUPPORT_CODES.FRONTEND_FETCH_FAILED)
);
}else{
var msg=resolveBackendErrorMessage(
result&&result.errorData ? result.errorData:null,
window.BWDK.SUPPORT_CODES.UNKNOWN
);
var nestedError=(result&&result.errorData&&(result.errorData.data||result.errorData))||{};
var nestedCode=nestedError.code||'';
releaseCheckoutLock();
window.BWDK.showCheckoutError(msg);
if((nestedCode==='cart_invalid'||(result&&result.originalStatus===409))&&typeof jQuery!=='undefined'){
jQuery(document.body).trigger('update_checkout');
jQuery(document.body).trigger('wc_fragment_refresh');
}}
}).catch(function(error){
console.error('[BWDK] fetchCartWithFallback error:', error);
releaseCheckoutLock();
window.BWDK.showCheckoutError(window.BWDK.formatSupportMessage(window.BWDK.SUPPORT_CODES.FRONTEND_FETCH_FAILED)
);
});
};
document.addEventListener('click', function (e){
var host=null;
var i;
if(e.composedPath){
var path=e.composedPath();
for (i=0; i < path.length; i++){
var n=path[i];
if(n&&n.nodeType===1&&n.matches&&n.matches('digify-clickable-box[data-bwdk-context="cart-checkout"]')){
host=n;
break;
}}
}else if(e.target&&e.target.closest){
host=e.target.closest('digify-clickable-box[data-bwdk-context="cart-checkout"]');
}
if(!host){
return;
}
e.preventDefault();
if(typeof window.BWDK.startDigifyCheckout==='function'){
window.BWDK.startDigifyCheckout();
}}, true);
jQuery(document).ready(function ($){
jQuery('.wrap-bwdk-error span , .dk-mask').on('click', function (){
jQuery('.wrap-bwdk-error , .dk-mask').fadeOut();
});
jQuery('.digikala-box-after-addToCart ,.digikala-box-before-header').on('click', function (){
jQuery('.digikala-modal-sp , .dk-mask').fadeIn();
});
jQuery('.digikala-modal-sp button, .close-modal-sp, .dk-mask').on('click', function (){
jQuery('.digikala-modal-sp , .dk-mask').fadeOut();
});
});
jQuery(document).ready(function (){
jQuery(document).off('click.bwdk', '.bwdk-button').on('click.bwdk', '.bwdk-button', function (e){
e.preventDefault();
window.BWDK.startDigifyCheckout();
});
});
jQuery(function ($){
var $box=$('.wrap-anim-text .anim-text');
var $items=$box.children('span');
if(!$box.length||$items.length < 2) return;
var step=$items.first().outerHeight();
var dur=300;
var wait=1000;
var total=$items.length - 1;
var i=0;
$('.wrap-anim-text').css({overflow: 'hidden', height: step});
function tick(){
i++;
$box.css({
transition: 'transform ' + dur + 'ms',
transform: 'translateY(' + (-i * step) + 'px)'
});
if(i===total){
setTimeout(function (){
$box.css({transition: 'none', transform: 'translateY(0px)'});
i=0;
}, dur + 20);
}
setTimeout(tick, dur + wait);
}
tick();
});
jQuery(function ($){
var $wrap=$('.pdp-anim-text');
var $box=$wrap.find('.anim-text');
var $items=$box.children('span');
if(!$wrap.length||!$box.length||$items.length < 2) return;
if($items.last().text().trim()!==$items.first().text().trim()){
$box.append($items.first().clone());
$items=$box.children('span');
}
var step=Math.round($wrap.height())||$items.first().outerHeight();
var dur=300;
var wait=1000;
var total=$items.length - 1;
var i=0;
$wrap.css({overflow: 'hidden', height: step});
$box.css({willChange: 'transform'});
function tick(){
i++;
$box.css({
transition: 'transform ' + dur + 'ms',
transform: 'translateY(' + (-i * step) + 'px)'
});
if(i===total){
setTimeout(function (){
$box.css({transition: 'none', transform: 'translateY(0px)'});
i=0;
}, dur + 20);
}
setTimeout(tick, dur + wait);
}
tick();
});
jQuery(document.body).on('wc_fragments_loaded', function(){
var wrap=jQuery('.wrap-anim-text-addToCart-pop');
var box=jQuery('#anim-text');
var items=box.children('span');
if(!wrap.length||!box.length||items.length < 2) return;
if(items.last().text().trim()!==items.first().text().trim()){
box.append(items.first().clone());
items=box.children('span');
}
var step=Math.round(wrap.height())||items.first().outerHeight();
var dur=300;
var wait=1000;
var total=items.length - 1;
var i=0;
wrap.css({overflow: 'hidden', height: step});
box.css({willChange: 'transform'});
function tick(){
i++;
box.css({
transition: 'transform ' + dur + 'ms',
transform: 'translateY(' + (-i * step) + 'px)'
});
if(i===total){
setTimeout(function (){
box.css({transition: 'none', transform: 'translateY(0px)'});
i=0;
}, dur + 20);
}
setTimeout(tick, dur + wait);
}
tick();
});
jQuery(function ($){
function activateBox(){
var $box=$('.digikala-box-before-ct');
if(!$box.length) return;
$box.removeClass('active');
setTimeout(function (){
$box.addClass('active');
}, 10);
}
setTimeout(activateBox, 1000);
$(document.body).on('updated_wc_div updated_cart_totals cart_totals_refreshed wc_fragments_loaded wc_fragments_refreshed removed_from_cart added_to_cart',
function ($){
setTimeout(activateBox, 100);
}
);
var observer=new MutationObserver(function (mutations){
for (var i=0; i < mutations.length; i++){
var m=mutations[i];
if($(m.addedNodes).find('.digikala-box-before-ct').length){
setTimeout(activateBox, 50);
break;
}}
});
observer.observe(document.body, { childList: true, subtree: true });
});
jQuery(function ($){
function removeEmptyTags(){
$('.dk-content-before-ct').each(function(){
var $container=$(this);
$container.find('p:empty').remove();
$container.find('p').filter(function(){
return $(this).text().trim()===''&&$(this).children().length===0;
}).remove();
$container.find('br').each(function(){
var $br=$(this);
var $parent=$br.parent();
var prevText=$br[0].previousSibling;
var nextText=$br[0].nextSibling;
var hasPrevContent=prevText&&prevText.nodeType===3&&prevText.textContent.trim()!=='';
var hasNextContent=nextText&&nextText.nodeType===3&&nextText.textContent.trim()!=='';
if(!hasPrevContent&&!hasNextContent){
var parentText=$parent.text().trim();
if(parentText===''||($parent.children().length===1&&$parent.children().is('br'))){
$br.remove();
}}
});
$container.find('a.bwdk-button').each(function(){
var $btn=$(this);
var hasContent=$btn.text().trim()!==''||$btn.children().length > 0;
if(!hasContent){
$btn.remove();
}});
});
}
removeEmptyTags();
$(document.body).on('updated_wc_div updated_cart_totals cart_totals_refreshed wc_fragments_loaded wc_fragments_refreshed', function(){
setTimeout(removeEmptyTags, 100);
});
var hotfixObserver=new MutationObserver(function(mutations){
var shouldClean=false;
for (var i=0; i < mutations.length; i++){
var m=mutations[i];
if(m.addedNodes.length > 0){
for (var j=0; j < m.addedNodes.length; j++){
var node=m.addedNodes[j];
if(node.nodeType===1){
if($(node).hasClass('dk-content-before-ct')||$(node).find('.dk-content-before-ct').length > 0){
shouldClean=true;
break;
}}
}}
if(shouldClean) break;
}
if(shouldClean){
setTimeout(removeEmptyTags, 50);
}});
hotfixObserver.observe(document.body, {
childList: true,
subtree: true
});
});
jQuery(function ($){
var COOKIE='bwdk_error';
function getCookie(name){
var m=document.cookie.match(new RegExp('(?:^|;)' + name.replace(/([.$?*|{}()\[\]\\\/\+^])/g,'\\$1') + '=([^;]*)'));
return m ? m[1]:null;
}
function eraseCookieAllScopes(name){
var host=location.hostname;
var domains=['', host, '.' + host];
if(host.indexOf('www.')===0){
var noWWW=host.replace(/^www\./, '');
domains.push(noWWW, '.' + noWWW);
}
domains.push(host);
var paths=['/'];
var parts=location.pathname.split('/').filter(Boolean);
var cur='';
for (var i=0; i < parts.length; i++){
cur +='/' + parts[i];
paths.push(cur);
}
var base='; expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0';
$.each(domains, function (_, d){
$.each(paths, function (_, p){
document.cookie=name + '=' + base + '; path=/'+ (d ? '; domain=' + d:'');
});
});
}
var raw=getCookie(COOKIE);
if(!raw) return;
try { raw=decodeURIComponent(raw.replace(/\+/g, ' ')); } catch (e){}
$('#bwdk-error')
.html(raw||'خطای ناشناخته');
$('.wrap-bwdk-error , .dk-mask').fadeIn();
eraseCookieAllScopes(COOKIE);
});
(function($){
$(function(){
if(window.localStorage&&localStorage.getItem('bwdk_single_tip_closed')==='1'){
return;
}
var $btn=$('.bwdk-single-buy-button').first();
if(!$btn.length) return;
var $form=$('#bwdk-single-buy-form');
if(!$form.length) return;
if($('.bwdk-single-tip').length) return;
var logoUrl='';
var $btnImg=$btn.find('img.logo-digi');
if($btnImg.length){
var btnImgSrc=$btnImg.attr('src');
logoUrl=btnImgSrc.replace('digiLogo.svg', 'digiLogoRed.svg');
}else{
var pluginPath=window.location.pathname.match(/\/wp-content\/plugins\/[^\/]+/);
if(pluginPath){
logoUrl=pluginPath[0] + '/assets/public/img/digiLogoRed.svg';
}}
var tipImgHtml=logoUrl ? '<img src="' + logoUrl + '" alt="digikala" class="logo-digi">':'';
var $tip=$(
'<div class="bwdk-single-tip">' +
'<div class="bwdk-single-tip-inner">' +
'<div class="bwdk-single-tip-header">' +
'<span class="bwdk-single-tip-title">' +
tipImgHtml +
'<span>خرید با دیجی‌کالا</span>' +
'</span>' +
'<button type="button" class="bwdk-single-tip-close" aria-label="بستن">×</button>' +
'</div>' +
'<p>می‌توانید محصول موردنظر خود را بدون طی مراحل سبد خرید، به‌سرعت و با حساب دیجی‌کالایتان سفارش دهید</p>' +
'<div class="bwdk-single-tip-footer">' +
'<button type="button" class="bwdk-single-tip-ok">متوجه شدم</button>' +
'</div>' +
'</div>' +
'</div>'
);
var $mask=$('<div class="dk-mask"></div>');
$tip.hide().appendTo($form);
$mask.hide().appendTo('body');
setTimeout(function(){
$tip.fadeIn(200);
}, 1000);
function closeTip(){
if(window.localStorage){
localStorage.setItem('bwdk_single_tip_closed', '1');
}
$tip.fadeOut(200, function(){
$(this).remove();
});
$mask.fadeOut(200, function(){
$(this).remove();
});
}
$tip.on('click', '.bwdk-single-tip-close, .bwdk-single-tip-ok', closeTip);
});
})(jQuery);