(function($){
"use strict";
function parseJSON(node){ try{ return JSON.parse(node.textContent||"{}"); }catch(e){ return {}; } }
function normalizeAttrKey(k){ if(!k) return ''; k = String(k); return k.replace(/^attribute_/, '').toLowerCase(); }
function slugify(s){ return (s==null?'' : String(s)).trim().toLowerCase().replace(/\s+/g,'-').replace(/[^a-z0-9\-_]+/g,''); }
function eqVal(a,b){ return slugify(a) === slugify(b); }
function findFormByProductId(productId){
var $forms = $('form.variations_form');
var $byId = $forms.filter(function(){
var pid = $(this).find('input[name=product_id], input[name="add-to-cart"]').val();
return String(pid) === String(productId);
}).first();
return $byId.length ? $byId : $forms.first();
}
function buildAttrMap($form, attrs){
var map = {}, used = {};
var $sels = $form.find('select[name^="attribute_"]');
$sels.each(function(){
var nm = this.getAttribute('name')||'';
var dataNm = this.getAttribute('data-attribute_name')||'';
var key = normalizeAttrKey(dataNm||nm);
this.dataset._wcvps_norm = key;
});
attrs.forEach(function(a){
var targetKey = normalizeAttrKey(a);
var $cand = $sels.filter(function(){ return this.dataset._wcvps_norm === targetKey && !used[this.name]; });
if ($cand.length){ map[a] = $cand.first().attr('name'); used[$cand.first().attr('name')] = true; return; }
$cand = $sels.filter('[name="'+a+'"]');
if ($cand.length){ map[a] = a; used[a] = true; return; }
$cand = $sels.filter(function(){ return !used[this.name]; }).first();
if ($cand.length){ map[a] = $cand.attr('name'); used[$cand.attr('name')] = true; }
});
return map;
}
function setSelect($form, map, attr, value){
var name = map[attr]||attr;
var $sel = $form.find('select[name="'+name+'"]');
if (!$sel.length) return;
var v = value || '';
if (v && !$sel.find('option[value="'+v+'"]').length){
var found = '';
$sel.find('option').each(function(){ if (slugify(this.value) === slugify(v)) { found = this.value; return false; } });
if (found) v = found;
}
$sel.val(v).trigger('change');
$form.trigger('woocommerce_variation_has_changed').trigger('check_variations');
}
function isAvailable(v){ if (v.in_stock === false) return false; if (v.active === false) return false; if (v.purchasable === false) return false; return true; }
function computeAttrOptions($wrap){
var out = {};
($wrap.data('attrs')||[]).forEach(function(attr){
out[attr] = [];
$wrap.find('.wc-vps-attribute[data-attribute-name="'+attr+'"] .wc-vps-option').each(function(){
out[attr].push(this.getAttribute('data-value'));
});
});
return out;
}
function computeAllowed(variations, current, attrs, attrOptions){
var allowed = {}; attrs.forEach(function(a){ allowed[a] = new Set(); });
if (!variations || !variations.length) return allowed;
variations.forEach(function(v){
if(!isAvailable(v)) return;
// باید با انتخابهای فعلی (به جز خالیها) سازگار باشد
for (var k in current){
if (!current[k]) continue;
var vv = ((v.attributes||{}))[k] || '';
if (vv && !eqVal(vv, current[k])) return;
}
// برای هر ویژگی، گزینههای مجاز را جمع کن
attrs.forEach(function(a){
var vv = ((v.attributes||{}))[a] || '';
if (!vv){ // wildcard => همهٔ گزینههای آن ویژگی مجازند
(attrOptions[a]||[]).forEach(function(opt){ allowed[a].add(opt); });
} else {
allowed[a].add(vv);
}
});
});
return allowed;
}
function recomputeStates($wrap, variations, current, attrOptions){
var attrs = $wrap.data('attrs') || [];
var allowed = computeAllowed(variations, current, attrs, attrOptions);
attrs.forEach(function(attr){
var set = allowed[attr];
var hasAny = set && set.size>0;
$wrap.find('.wc-vps-attribute[data-attribute-name="'+attr+'"] .wc-vps-option').each(function(){
var val = this.getAttribute('data-value');
var disable = false;
if (hasAny){
disable = true;
set.forEach(function(v){ if (eqVal(v, val)) disable = false; });
} else {
disable = false; // اگر چیزی محاسبه نشد، کل UI رو قفل نکن
}
this.classList.toggle('wc-vps-option--disabled', disable);
this.setAttribute('aria-disabled', disable ? 'true' : 'false');
});
});
}
function upgradeSwatchesWithImages($wrap, variations){
var attrs = $wrap.data('attrs') || [];
attrs.forEach(function(attr){
$wrap.find('.wc-vps-attribute[data-attribute-name="'+attr+'"] .wc-vps-option').each(function(){
if ($(this).find('.wc-vps-swatch').length) return;
var val = this.getAttribute('data-value');
var v = variations.find(function(x){ return x && x.image && isAvailable(x) && x.attributes && eqVal(x.attributes[attr], val); });
if (v && v.image){
$(this).addClass('wc-vps-option--as-swatch')
.prepend(' ');
}
});
});
}
function initPicker($wrap){
var dataNode = $wrap.find('script.wc-vps-data').get(0);
var data = dataNode ? parseJSON(dataNode) : {};
var productId = data.product_id;
var variations= data.variations || [];
var $form = findFormByProductId(productId);
if(!$form.length) return;
$wrap.data('attrs', data.attributes || []);
var attrMap = buildAttrMap($form, $wrap.data('attrs'));
var attrOptions = computeAttrOptions($wrap);
function readSel(){
var sel = {};
($wrap.data('attrs')||[]).forEach(function(a){
var $btn = $wrap.find('.wc-vps-attribute[data-attribute-name="'+a+'"] .wc-vps-option.wc-vps-option--selected');
sel[a] = $btn.length ? $btn.attr('data-value') : '';
});
return sel;
}
function resetAll(){
$wrap.find('.wc-vps-option.wc-vps-option--selected').removeClass('wc-vps-option--selected');
($wrap.data('attrs')||[]).forEach(function(a){ setSelect($form, attrMap, a, ''); });
$form.find('.reset_variations').trigger('click');
$form.trigger('woocommerce_variation_has_changed').trigger('check_variations');
recomputeStates($wrap, variations, readSel(), attrOptions);
}
upgradeSwatchesWithImages($wrap, variations);
recomputeStates($wrap, variations, readSel(), attrOptions);
$wrap.off('.wcvps').on('click.wcvps', '.wc-vps-option', function(){
if(this.classList.contains('wc-vps-option--disabled')) return;
var already = this.classList.contains('wc-vps-option--selected');
$(this).siblings().removeClass('wc-vps-option--selected');
if(!already) this.classList.add('wc-vps-option--selected'); else this.classList.remove('wc-vps-option--selected');
var cur = readSel();
recomputeStates($wrap, variations, cur, attrOptions);
Object.keys(cur).forEach(function(k){ setSelect($form, attrMap, k, cur[k]); });
});
$wrap.on('click.wcvps', '.wc-vps-reset', resetAll);
$form.on('click.wcvps', '.reset_variations', function(){ setTimeout(resetAll, 0); });
$form.on('found_variation.wcvps', function(){ recomputeStates($wrap, variations, readSel(), attrOptions); });
}
function boot(){ $('.wc-vps').each(function(){ initPicker($(this)); }); }
$(boot);
$(document).on('wdShopPageInit wdUpdate', function(){ setTimeout(boot, 0); });
})(jQuery);
لپ تاپ 15.6 اینچی اچ پی مدل DY2091WM I3-1115G4 256 8 - پردیس پازار
لپ تاپ 15.6 اینچی اچ پی مدل DY2091WM i3-1115G4 256 8
دیدگاهها
هیچ دیدگاهی برای این محصول نوشته نشده است.