/* Add custom Js styles below */ /* ===== Rozana (Rwzana) Size Guide (No Figure) - Based on Berllin v7 ===== */ (function () { if (window.__berllinSizeGuideLoadedV7__) return; window.__berllinSizeGuideLoadedV7__ = true; if (!window.Salla || !Salla.onReady) return; Salla.onReady(function () { if (!Salla.product || !Salla.product.event || !Salla.product.event.onSizeGuideFetched) return; Salla.product.event.onSizeGuideFetched(function (sizes, productId) { waitForSizeGuideContainer(initSizesUI, { retries: 50, interval: 120 }, sizes, productId); }); }); function waitForSizeGuideContainer(cb, opts, sizes, productId) { var 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' ]; var wrapperSel = '.s-product-size-guide-wrapper'; function find() { var wrapper = document.querySelector(wrapperSel); for (var i = 0; i < selectors.length; i++) { var sel = selectors[i]; var el = wrapper ? wrapper.querySelector(sel) : document.querySelector(sel); if (el) return el; } return null; } var tries = 0; var timer = setInterval(function () { var host = find(); if (host) { clearInterval(timer); cb(host, sizes, productId); } else if (++tries >= (opts && opts.retries ? opts.retries : 40)) { clearInterval(timer); var wrapper = document.querySelector(wrapperSel) || document.body; var fallback = document.createElement('div'); fallback.className = 's-product-size-guide-fallback'; wrapper.appendChild(fallback); cb(fallback, sizes, productId); } }, (opts && opts.interval) || 100); } function initSizesUI(sizesHost) { if (!sizesHost) return; sizesHost.style.display = 'block'; sizesHost.style.width = '100%'; sizesHost.innerHTML = `

دليل المقاسات

UK المقاس الصدر الخصر الأرداف

قد تختلف المقاسات قليلًا حسب قصة الموديل ونوع القماش.

`; /* ====================== JS Logic ====================== */ function $s(sel) { return sizesHost.querySelector(sel); } function parseNum(x) { if (typeof x === 'string') { x = x.replace(/[^\d.\-]/g, '').replace(/,/g, '.'); } var n = parseFloat(x); return 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'); var uIn = $s('#u-in'); var uCm = $s('#u-cm'); function toCm(v) { return Math.round(v * 2.54); } function fmt(v, u) { return u === 'cm' ? (toCm(v) + ' سم') : (v + ' إنش'); } // ترتيب الأعمدة من اليمين: UK – المقاس – الصدر – الخصر – الأرداف function renderTable(unit) { if (!tbody) return; var html = ''; for (var i = 0; i < SIZES.length; i++) { var r = SIZES[i]; html += '' + '' + r.uk + '' // UK + '' + r.size + '' // المقاس + '' + fmt(r.bust, unit) + '' // الصدر + '' + fmt(r.waist, unit) + '' // الخصر + '' + fmt(r.hip, unit) + '' // الأرداف + ''; } tbody.innerHTML = html; } if (uIn) { uIn.addEventListener('change', function () { renderTable(this.value); syncModalUnit(); }); } if (uCm) { uCm.addEventListener('change', function () { renderTable(this.value); syncModalUnit(); }); } renderTable('cm'); // Modal handling var modal = $s('#fitModal'); var openBtn = $s('#openFit'); var closeBtn = $s('#closeFit'); var closeFab = $s('#closeFab'); function syncModalUnit() { var mIn = $s('#f-in'); var mCm = $s('#f-cm'); if (!mIn || !mCm) return; if (uCm && uCm.checked) { mCm.checked = true; } else { mIn.checked = true; } } function syncPageUnitFromModal() { var mCm = $s('#f-cm'); if (mCm && mCm.checked) { if (uCm) uCm.checked = true; renderTable('cm'); } else { if (uIn) uIn.checked = true; renderTable('in'); } } function showModal() { if (!modal) return; modal.classList.add('show'); syncModalUnit(); // منع تمرير الصفحة في الخلفية document.documentElement.style.overflow = 'hidden'; document.body.style.overflow = 'hidden'; } function hideModal() { if (!modal) return; modal.classList.remove('show'); document.documentElement.style.overflow = ''; document.body.style.overflow = ''; } if (openBtn) { openBtn.addEventListener('click', showModal); } if (closeBtn) { closeBtn.addEventListener('click', hideModal); } if (closeFab) { closeFab.addEventListener('click', hideModal); } if (modal) { modal.addEventListener('click', function (e) { if (e.target === modal) hideModal(); }); } window.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal && modal.classList.contains('show')) { hideModal(); } }); var mIn = $s('#f-in'); var mCm = $s('#f-cm'); if (mIn) mIn.addEventListener('change', syncPageUnitFromModal); if (mCm) mCm.addEventListener('change', syncPageUnitFromModal); // Recommendation logic var PADS = { regular: 0, relaxed: 1, snug: -0.5 }; function clampPad(x) { if (x < -1) return -1; if (x > 2) return 2; return 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 < SIZES.length; i++) { var r = SIZES[i]; if (r.bust >= need.bust && r.waist >= need.waist && r.hip >= need.hip) return r; } return SIZES[SIZES.length - 1]; } var store = { set: function (k, v) { try { localStorage.setItem(k, JSON.stringify(v)); } catch (e) {} }, get: function (k, f) { try { var s = localStorage.getItem(k); return s ? JSON.parse(s) : f; } catch (e) { return f; } } }; var form = $s('#fitForm'); var outSize = $s('#recSize'); var oB = $s('#outBust'); var oW = $s('#outWaist'); var oH = $s('#outHip'); var note = $s('#fitNote'); var saveBtn = $s('#saveMySize'); var fillBtn = $s('#fillFromSaved'); var resetBtn = $s('#resetForm'); if (resetBtn) { resetBtn.addEventListener('click', function () { if (form) form.reset(); if (outSize) outSize.textContent = '—'; if (oB) oB.textContent = '—'; if (oW) oW.textContent = '—'; if (oH) oH.textContent = '—'; if (note) note.textContent = 'أدخلي القياسات ثم احسبي المقاس.'; }); } function getUnit() { var modChecked = $s('[name="fitUnit"]:checked'); if (modChecked) return modChecked.value === 'cm' ? 'cm' : 'in'; if (uCm && uCm.checked) return 'cm'; return 'in'; } function readForm() { var unit = getUnit(); var prefSel = $s('#fitPref'); var pref = prefSel ? prefSel.value : 'regular'; var bustInput = $s('#bust'); var waistInput = $s('#waist'); var hipInput = $s('#hip'); var bust = bustInput ? parseNum(bustInput.value) : NaN; var waist = waistInput ? parseNum(waistInput.value) : NaN; var hip = hipInput ? parseNum(hipInput.value) : NaN; if (!(bust > 0) || !(waist > 0) || !(hip > 0)) return null; var toIn = function (v) { return unit === 'cm' ? v / 2.54 : v; }; return { unit: unit, pref: pref, raw: { bust: bust, waist: waist, hip: hip }, inch: { bust: toIn(bust), waist: toIn(waist), hip: toIn(hip) } }; } if (form) { form.addEventListener('submit', function (e) { e.preventDefault(); var st = readForm(); if (!st) { if (note) note.textContent = 'يرجى إدخال جميع القياسات بشكل صحيح.'; return; } var rec = pick(st.inch, st.pref); if (outSize) outSize.textContent = 'UK ' + rec.uk + ' — ' + rec.size; var outFmt = function (v) { if (st.unit === 'cm') return Math.round(v) + ' سم'; return (+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 = 'تطابق مباشر مع جدول Rozana (Rwzana)؛ قد يختلف حسب قصة الموديل والقماش.'; store.set('lastMeasures', st); }); } if (saveBtn) { saveBtn.addEventListener('click', function () { var st = readForm(); if (!st) { if (note) note.textContent = 'أدخلي القياسات أولًا قبل الحفظ.'; return; } store.set('mySize', st); if (note) note.textContent = 'تم حفظ مقاسك على هذا المتصفح.'; }); } if (fillBtn) { fillBtn.addEventListener('click', function () { var sv = store.get('mySize') || store.get('lastMeasures'); if (!sv) { if (note) note.textContent = 'لا توجد قياسات محفوظة بعد.'; return; } var fitCm = $s('#f-cm'); var fitIn = $s('#f-in'); if (sv.unit === 'cm' && fitCm) fitCm.checked = true; else if (fitIn) fitIn.checked = true; var bustInput = $s('#bust'); var waistInput = $s('#waist'); var hipInput = $s('#hip'); var prefSel = $s('#fitPref'); if (bustInput) bustInput.value = (sv.raw && sv.raw.bust) != null ? sv.raw.bust : ''; if (waistInput) waistInput.value = (sv.raw && sv.raw.waist) != null ? sv.raw.waist : ''; if (hipInput) hipInput.value = (sv.raw && sv.raw.hip) != null ? sv.raw.hip : ''; if (prefSel && sv.pref) prefSel.value = sv.pref; if (note) note.textContent = 'تم استرجاع القياسات — احسبي المقاس الآن.'; syncPageUnitFromModal(); }); } } })();