/* Add custom Js styles below */ /* ===== Berllin Size Guide (No Figure) - Fixes v5 ===== */ (function(){ if (window.__berllinSizeGuideLoadedV5__) return; window.__berllinSizeGuideLoadedV5__ = true; Salla.onReady(() => { Salla.product.event.onSizeGuideFetched((sizes, productId) => { waitForSizeGuideContainer(initSizesUI, { retries: 50, interval: 120 }, sizes, productId); }); }); function waitForSizeGuideContainer(cb, opts, sizes, productId) { const selectors = [ '.s-product-size-guide-wrapper salla-tabs', '.s-product-size-guide-wrapper .s-product-size-guide', '.s-product-size-guide', '[data-size-guide-target]', '.product-size-guide, .size-guide' ]; const wrapperSel = '.s-product-size-guide-wrapper'; function find() { const wrapper = document.querySelector(wrapperSel); for (const sel of selectors) { const el = wrapper ? wrapper.querySelector(sel) : document.querySelector(sel); if (el) return el; } return null; } let tries = 0; const timer = setInterval(() => { const host = find(); if (host) { clearInterval(timer); cb(host, sizes, productId); } else if (++tries >= (opts?.retries || 40)) { clearInterval(timer); const wrapper = document.querySelector(wrapperSel) || document.body; const fallback = document.createElement('div'); fallback.className = 's-product-size-guide-fallback'; wrapper.appendChild(fallback); cb(fallback, sizes, productId); } }, opts?.interval || 100); } function initSizesUI(sizesHost) { sizesHost.style.display = 'block'; sizesHost.style.width = '100%'; sizesHost.innerHTML = ` دليل المقاسات إنش سم غرفة القياسات الذكية ذكي الأردافالخصرالصدرالمقاسUK قد تختلف المقاسات قليلًا حسب قصة الموديل ونوع القماش. × غرفة القياس الذكية إغلاق إنش سم الصدر الخصر الأرداف تفضيل الارتداء مطابق للجدول (افتراضي) مرتخٍ (+راحة بسيطة) ضيّق (محدد) احسبي المقاس بداية جديدة حفظ مقاسي استرجاع النتيجة — المقاس الموصى به (UK / الحرفي) الصدر: — الخصر: — الأرداف: — أدخلي القياسات ثم احسبي المقاس. `; // ===== JS ===== function $s(sel){ return sizesHost.querySelector(sel); } function parseNum(x){ if (typeof x === 'string') x = x.replace(/[^\d.\-]/g,'').replace(/,/g,'.'); const n = parseFloat(x); return Number.isFinite(n) ? n : NaN; } var SIZES = [ { hip: 36, waist: 26, bust: 32, size: 'S', uk: '6' }, { hip: 38, waist: 28, bust: 34, size: 'M', uk: '8' }, { hip: 40, waist: 30, bust: 36, size: 'L', uk: '10' }, { hip: 42, waist: 32, bust: 38, size: 'XL', uk: '12' }, { hip: 44, waist: 34, bust: 40, size: 'XXL', uk: '14' }, { hip: 46, waist: 36, bust: 42, size: '3XL', uk: '16' }, { hip: 48, waist: 38, bust: 44, size: '4XL', uk: '18' }, { hip: 50, waist: 40, bust: 46, size: '5XL', uk: '20' }, { hip: 52, waist: 42, bust: 48, size: '6XL', uk: '22' }, { hip: 54, waist: 44, bust: 50, size: '7XL', uk: '24' } ]; var tbody = $s('#sizeBody'), uIn = $s('#u-in'), uCm = $s('#u-cm'); function toCm(v){ return Math.round(v * 2.54); } function fmt(v,u){ return u === 'cm' ? (toCm(v) + ' سم') : (v + ' إنش'); } function renderTable(unit){ var html = ""; for (var i=0;i' + '' + fmt(r.hip, unit) + '' + '' + fmt(r.waist, unit) + '' + '' + fmt(r.bust, unit) + '' + '' + r.size + '' + '' + r.uk + '' + ''; } tbody.innerHTML = html; } uIn.addEventListener('change', function(){ renderTable(this.value); syncModalUnit(); }); uCm.addEventListener('change', function(){ renderTable(this.value); syncModalUnit(); }); renderTable('cm'); // Modal var modal = $s('#fitModal'), openBtn = $s('#openFit'), closeBtn = $s('#closeFit'), closeFab = $s('#closeFab'); function syncModalUnit(){ const mIn = $s('#f-in'), mCm = $s('#f-cm'); if (!mIn || !mCm) return; if (uCm.checked) mCm.checked = true; else mIn.checked = true; } function syncPageUnitFromModal(){ const mCm = $s('#f-cm'); if (mCm && mCm.checked){ uCm.checked = true; renderTable('cm'); } else { uIn.checked = true; renderTable('in'); } } function show(){ modal.classList.add('show'); syncModalUnit(); } function hide(){ modal.classList.remove('show'); } openBtn.addEventListener('click', show); closeBtn.addEventListener('click', hide); if (closeFab) closeFab.addEventListener('click', hide); modal.addEventListener('click', function(e){ if(e.target === modal) hide(); }); window.addEventListener('keydown', function(e){ if(e.key === 'Escape' && modal.classList.contains('show')) hide(); }); const mIn = $s('#f-in'), mCm = $s('#f-cm'); if (mIn) mIn.addEventListener('change', syncPageUnitFromModal); if (mCm) mCm.addEventListener('change', syncPageUnitFromModal); // Recommendation var PADS = { regular: 0, relaxed: 1, snug: -0.5 }; function clampPad(x){ return Math.max(-1, Math.min(2, x)); } function pick(userIn, pref){ var pad = clampPad(PADS[pref || 'regular'] || 0); var need = { bust: Math.max(0, userIn.bust + pad), waist: Math.max(0, userIn.waist + pad), hip: Math.max(0, userIn.hip + pad) }; for (var i=0;i= need.bust && r.waist >= need.waist && r.hip >= need.hip) return r; } return SIZES[SIZES.length-1]; } var store = { set: (k,v)=>{ try{ localStorage.setItem(k, JSON.stringify(v)); }catch(e){} }, get: (k,f)=>{ try{ var s = localStorage.getItem(k); return s ? JSON.parse(s) : f; }catch(e){ return f; } } }; var form = $s('#fitForm'), outSize = $s('#recSize'), oB = $s('#outBust'), oW = $s('#outWaist'), oH = $s('#outHip'), note = $s('#fitNote'), saveBtn = $s('#saveMySize'), fillBtn = $s('#fillFromSaved'); $s('#resetForm').addEventListener('click', function(){ form.reset(); outSize.textContent = oB.textContent = oW.textContent = oH.textContent = '—'; note.textContent = 'أدخلي القياسات ثم احسبي المقاس.'; }); function getUnit(){ const modChecked = $s('[name="fitUnit"]:checked'); if (modChecked) return modChecked.value === 'cm' ? 'cm' : 'in'; return uCm && uCm.checked ? 'cm' : 'in'; } function readForm(){ const unit = getUnit(); const pref = $s('#fitPref').value; const bust = parseNum($s('#bust').value); const waist= parseNum($s('#waist').value); const hip = parseNum($s('#hip').value); if (!(bust>0) || !(waist>0) || !(hip>0)) return null; const toIn = v => unit === 'cm' ? v/2.54 : v; return { unit, pref, raw:{bust,waist,hip}, inch:{bust:toIn(bust),waist:toIn(waist),hip:toIn(hip)} }; } form.addEventListener('submit', function(e){ e.preventDefault(); const st = readForm(); if (!st){ note.textContent = 'يرجى إدخال جميع القياسات بشكل صحيح.'; return; } const rec = pick(st.inch, st.pref); outSize.textContent = 'UK ' + rec.uk + ' — ' + rec.size; const outFmt = v => st.unit === 'cm' ? Math.round(v) + ' سم' : (+v.toFixed(1)) + ' إنش'; if (oB) oB.textContent = outFmt(st.raw.bust); if (oW) oW.textContent = outFmt(st.raw.waist); if (oH) oH.textContent = outFmt(st.raw.hip); if (note) note.textContent = 'تطابق مباشر مع جدول berllin؛ قد يختلف حسب قصة الموديل والقماش.'; store.set('lastMeasures', st); }); if (saveBtn){ saveBtn.addEventListener('click', function(){ const st = readForm(); if (!st){ note.textContent = 'أدخلي القياسات أولًا قبل الحفظ.'; return; } store.set('mySize', st); note.textContent = 'تم حفظ مقاسك على هذا المتصفح.'; }); } if (fillBtn){ fillBtn.addEventListener('click', function(){ const sv = store.get('mySize') || store.get('lastMeasures'); if (!sv){ note.textContent = 'لا توجد قياسات محفوظة بعد.'; return; } (sv.unit === 'cm' ? $s('#f-cm') : $s('#f-in')).checked = true; $s('#bust').value = sv.raw?.bust ?? ''; $s('#waist').value = sv.raw?.waist ?? ''; $s('#hip').value = sv.raw?.hip ?? ''; if (sv.pref) $s('#fitPref').value = sv.pref; note.textContent = 'تم استرجاع القياسات — احسبي المقاس الآن.'; syncPageUnitFromModal(); }); } } })();
قد تختلف المقاسات قليلًا حسب قصة الموديل ونوع القماش.