/* ════════════════════════════════════════════════════════════ أكواد رقمي شوب المخصصة — الملف الموحد 1) نموذج صفحة «برمجة حسب الطلب» 2) نافذة المقترحات (تفتح من البانر) 3) حاجز الدخول قبل الإضافة للسلة: معطّل منذ 2026-09-30 (CART_GATE)، وسلة تطلب الدخول عند الدفع 4) رقيم — المرشد الخبير (يحل محل ودجت واتساب القديم) 5) تعريف الزائر الجديد بأيقونة الحساب (مرة واحدة لغير المسجل) 6) زر التحميل التجريبي البارز + حدث trial_download إلى GA4 ملاحظة: ودجت «كيف نقدر نخدمك؟» القديم أزيل — رقيم يقوم بوظائفه كلها. ════════════════════════════════════════════════════════════ */ /* نموذج «برمجة حسب الطلب» — يلصق في تطبيق الأكواد المخصصة (JavaScript). يبني حقول النموذج داخل صفحة الخدمة ويشغل زر الإرسال لواتساب. لا يعمل إلا في الصفحة التي تحوي العنصر rq-slot ولا يمس غيرها. */ (function () { function init() { var slot = document.getElementById('rq-slot'); if (!slot) return; slot.style.textAlign = 'right'; slot.innerHTML = '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
اكتب وصف المهمة أولًا لنتمكن من مساعدتك
' + '

أو راسلنا مباشرة: 966597093033+

'; } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } document.addEventListener('click', function (ev) { var b = ev.target.closest && ev.target.closest('#rq-send'); if (!b) return; var v = function (id) { var el = document.getElementById(id); return el ? (el.value || '').trim() : ''; }; if (!v('rq-desc')) { var h = document.getElementById('rq-hint'); if (h) h.style.display = 'block'; var d = document.getElementById('rq-desc'); if (d) d.focus(); return; } var m = '*طلب برمجة حسب الطلب*' + '\n━━━━━━━━━━━━━━' + '\n◆ *الاسم:* ' + (v('rq-name') || 'لم يذكر') + '\n\n◆ *المهمة المطلوبة:*\n' + v('rq-desc') + '\n\n◆ *المدخلات:* ' + (v('rq-in') || 'لم تذكر') + '\n◆ *المخرجات:* ' + (v('rq-out') || 'لم تذكر') + '\n◆ *حفظ السجلات:* ' + v('rq-save') + '\n◆ *الميزانية:* ' + v('rq-budget') + '\n◆ *موعد التسليم:* ' + (v('rq-when') || 'مرن') + '\n━━━━━━━━━━━━━━'; window.open('https://wa.me/966597093033?text=' + encodeURIComponent(m), '_blank'); }); })(); // نافذة المقترحات المستقلة — تفتح من بانر المقترحات وترسل لنفس جدول Google Sheets (function () { var ENDPOINT = "https://script.google.com/macros/s/AKfycbzG8UtGilLI9v2963p0TsqGuSJfpqggG5NqXVQ2UVJ_L_yueEpCvdhdLlnanFuJJ_5NWA/exec"; var built = false; function buildModal() { if (built) return; built = true; var css = "" + "#rqb-overlay{position:fixed;inset:0;background:rgba(10,20,28,.62);z-index:99998;display:none;opacity:0;transition:opacity .25s}" + "#rqb-overlay.rqb-show{display:block;opacity:1}" + "#rqb-modal{position:fixed;left:50%;top:50%;transform:translate(-50%,-46%);width:min(430px,92vw);background:#fff;border-radius:22px;box-shadow:0 24px 70px rgba(0,0,0,.3);z-index:99999;display:none;opacity:0;transition:opacity .25s,transform .25s;direction:rtl;font-family:inherit;padding:26px 22px 22px}" + "#rqb-modal.rqb-show{display:block;opacity:1;transform:translate(-50%,-50%)}" + "#rqb-close{position:absolute;top:12px;right:14px;border:0;background:transparent;font-size:26px;line-height:1;color:#8a94a0;cursor:pointer}" + ".rqb-title{font-size:21px;font-weight:800;color:#1c2430;text-align:center;margin:2px 0 8px}" + ".rqb-desc{font-size:14px;color:#68727e;text-align:center;margin:0 0 14px;line-height:1.7}" + "#rqb-text{width:100%;box-sizing:border-box;min-height:110px;border:1.5px solid #2ecc71;border-radius:14px;padding:12px 14px;font-size:15px;font-family:inherit;resize:vertical;outline:none;color:#1c2430;background:#fff}" + "#rqb-text:focus{box-shadow:0 0 0 3px rgba(46,204,113,.18)}" + "#rqb-phone{width:100%;box-sizing:border-box;border:1.5px solid #dde3ea;border-radius:14px;padding:12px 14px;font-size:15px;font-family:inherit;margin-top:10px;outline:none;color:#1c2430;background:#fff}" + "#rqb-send{width:100%;border:0;border-radius:14px;background:#25b066;color:#fff;font-size:17px;font-weight:800;font-family:inherit;padding:14px;margin-top:12px;cursor:pointer}" + "#rqb-send:disabled{opacity:.6;cursor:default}" + "#rqb-status{font-size:13.5px;text-align:center;margin-top:10px;min-height:18px;color:#c0392b}" + "#rqb-status.rqb-ok{color:#1e8e50}" + ".rqb-done{text-align:center;padding:22px 6px}" + ".rqb-done-icon{width:64px;height:64px;border-radius:50%;background:#e6f7ee;color:#25b066;font-size:34px;line-height:64px;margin:0 auto 12px}"; var st = document.createElement("style"); st.textContent = css; document.head.appendChild(st); var ov = document.createElement("div"); ov.id = "rqb-overlay"; document.body.appendChild(ov); var m = document.createElement("div"); m.id = "rqb-modal"; m.innerHTML = "" + '' + '
وش المنتج اللي تبحث عنه؟
' + '
اكتب لنا المنتج أو الأداة اللي كنت تبحث عنها وما حصلتها في المتجر.
' + '' + '' + '' + '
'; document.body.appendChild(m); ov.addEventListener("click", closeModal); document.getElementById("rqb-close").addEventListener("click", closeModal); document.getElementById("rqb-send").addEventListener("click", send); document.addEventListener("keydown", function (e) { if (e.key === "Escape") closeModal(); }); } function openModal() { buildModal(); document.getElementById("rqb-overlay").classList.add("rqb-show"); document.getElementById("rqb-modal").classList.add("rqb-show"); setTimeout(function () { var t = document.getElementById("rqb-text"); if (t) t.focus(); }, 200); } function closeModal() { var ov = document.getElementById("rqb-overlay"); var m = document.getElementById("rqb-modal"); if (ov) ov.classList.remove("rqb-show"); if (m) m.classList.remove("rqb-show"); } function send() { var text = document.getElementById("rqb-text").value.trim(); var phone = document.getElementById("rqb-phone").value.trim(); var btn = document.getElementById("rqb-send"); var status = document.getElementById("rqb-status"); if (!text) { status.className = ""; status.textContent = "اكتب المنتج اللي تبحث عنه أولًا."; document.getElementById("rqb-text").focus(); return; } btn.disabled = true; btn.textContent = "جاري الإرسال..."; status.textContent = ""; fetch(ENDPOINT, { method: "POST", mode: "no-cors", headers: { "Content-Type": "text/plain;charset=UTF-8" }, body: JSON.stringify({ action: "request", request: text, whatsapp: phone, page_title: document.title, page_url: location.href, device: /Mobi|Android/i.test(navigator.userAgent) ? "جوال" : "كمبيوتر", source: "رقمي شوب - بانر المقترحات" }) }).then(function () { var m = document.getElementById("rqb-modal"); m.innerHTML = "" + '' + '
✔
' + '
وصلنا اقتراحك، شكرًا لك!
' + '
نراجع كل المقترحات، وإن كانت فكرتك تناسب المتجر فستجدها قريبًا.
'; document.getElementById("rqb-close").addEventListener("click", closeModal); setTimeout(closeModal, 3500); }).catch(function () { btn.disabled = false; btn.textContent = "إرسال الاقتراح"; status.className = ""; status.textContent = "تعذر الإرسال، حاول مرة أخرى."; }); } document.addEventListener("click", function (e) { var a = e.target && e.target.closest ? e.target.closest('a[href*="rq-iqtirah"]') : null; if (!a) return; e.preventDefault(); e.stopPropagation(); openModal(); }, true); // الفتح عبر الرابط من صفحة أخرى: نمسح العلامة فورًا حتى لا تعيد التحديثات فتح النافذة if (window.location.hash === "#rq-iqtirah") { try { history.replaceState(null, "", window.location.pathname + window.location.search); } catch (e) {} setTimeout(openModal, 800); } })(); // الزائر غير المسجل لا يضيف للسلة قبل تسجيل الدخول (الدفع في سلة يتطلب حسابًا): // ضغطه على «أضف إلى السلة» أو «اشترِ الآن» يُلغى وتفتح نافذة الدخول، ونحفظ المنتج وما كتبه في خانات الطلب. // بعد الدخول نعيده إلى صفحة المنتج، ونعيد الخانات ونضيف المنتج تلقائيًا، ثم ننقله إلى السلة. // وكذلك روابط تحميل البرامج (GitHub): لا تحميل قبل الدخول، وبعده يبدأ التحميل تلقائيًا. (function () { // 2026-09-30: أُوقف الحاجز بعد فحص مسار الشراء، فالزائر يضيف للسلة مباشرة وسلة تطلب الدخول عند إتمام الطلب. // لإعادته اجعل القيمة true. var CART_GATE = false; var PENDING = "rq_pending_add", GO_CART = "rq_go_cart"; var MAX_AGE = 30 * 60 * 1000; var built = false, resuming = false; function isGuest() { try { return salla.config.get("user.type") === "guest"; } catch (e) { return false; } } function url(name, fallback) { try { return salla.url.get(name) || fallback; } catch (e) { return fallback; } } function store(k, v) { try { if (v == null) sessionStorage.removeItem(k); else sessionStorage.setItem(k, v); } catch (e) {} } function read(k) { try { return sessionStorage.getItem(k); } catch (e) { return null; } } function goCart() { store(GO_CART, null); location.href = url("cart", "/cart"); } // ---- نافذة الدخول الأصلية (زر الحساب في رأس الصفحة) ---- // نموذج الدخول يُعرض داخل إطار؛ أول فتح بعد تحميل الصفحة قد يظهر فارغًا فنغلقه ونعيد الفتح مرة واحدة. function loginVisible() { var m = document.querySelector("salla-modal.s-login-modal"); if (!m || m.classList.contains("s-hidden")) return false; var f = m.querySelector("iframe"); return !!f && f.offsetHeight > 150; } function triggerLogin() { try { var b = document.querySelector(".s-user-menu-login-btn"); if (b) b.click(); else { var m = document.querySelector("salla-login-modal"); if (m && typeof m.open === "function") m.open(); } } catch (e) {} } function openLogin(kind) { showNote(false, kind); triggerLogin(); setTimeout(function () { if (loginVisible()) return; try { document.querySelector("salla-modal.s-login-modal").close(); } catch (e) {} setTimeout(function () { triggerLogin(); setTimeout(function () { if (!loginVisible()) showNote(true, kind); }, 3000); }, 700); }, 1500); } // ---- بطاقة توضح للزائر سبب ظهور نافذة الدخول (وبها رابط الدخول إن لم تُفتح النافذة) ---- function buildNote() { if (built) return; built = true; var st = document.createElement("style"); st.textContent = "" + "#rqn-toast{position:fixed;left:50%;top:-240px;transform:translateX(-50%);width:min(420px,92vw);background:#fff;border-radius:18px;box-shadow:0 18px 50px rgba(0,0,0,.28);z-index:2147483000;direction:rtl;font-family:inherit;padding:16px 18px 14px;transition:top .45s cubic-bezier(.2,.8,.25,1)}" + "#rqn-toast.rqn-show{top:14px}" + "#rqn-close{position:absolute;top:8px;left:12px;border:0;background:transparent;font-size:22px;line-height:1;color:#98a2ae;cursor:pointer}" + ".rqn-title{font-size:16px;font-weight:800;color:#1c2430;margin:0 0 4px}" + ".rqn-body{font-size:13.5px;color:#68727e;line-height:1.7;margin:0}" + "#rqn-login{display:none;margin-top:12px;border-radius:12px;background:#25b066;color:#fff;font-size:15px;font-weight:800;padding:11px;text-align:center;text-decoration:none}" + "#rqn-toast.rqn-fallback #rqn-login{display:block}"; document.head.appendChild(st); var t = document.createElement("div"); t.id = "rqn-toast"; t.innerHTML = "" + '' + '
سجّل دخولك أولًا
' + '
' + 'تسجيل الدخول'; document.body.appendChild(t); document.getElementById("rqn-close").addEventListener("click", function () { t.classList.remove("rqn-show"); }); } var NOTE = { cart: "بعد الدخول نضيف المنتج إلى سلتك تلقائيًا. الحساب يلزم للدفع، وبه يصلك مفتاح الترخيص على بريدك.", dl: "بعد الدخول يبدأ تحميل البرنامج تلقائيًا، ونراسلك على بريدك إن احتجت مساعدة في التثبيت أو التفعيل." }; function showNote(fallback, kind) { buildNote(); var t = document.getElementById("rqn-toast"); document.getElementById("rqn-body").textContent = NOTE[kind] || NOTE.cart; if (fallback) t.classList.add("rqn-fallback"); setTimeout(function () { t.classList.add("rqn-show"); }, 50); } // ---- منع الإضافة للزائر ---- function hostOf(e) { var path = e.composedPath ? e.composedPath() : []; for (var i = 0; i < path.length; i++) { var n = path[i]; if (n && n.tagName && /^(SALLA-ADD-PRODUCT-BUTTON|SALLA-QUICK-BUY)$/.test(n.tagName)) return n; } return null; } function remember(pid, form) { var opts = {}; if (form) { form.querySelectorAll("input, textarea, select").forEach(function (el) { if (el.name && el.type !== "hidden" && el.type !== "file") opts[el.name] = el.value; }); } store(PENDING, JSON.stringify({ pid: String(pid || ""), path: location.pathname, opts: opts, t: Date.now() })); } function block(e, pid, form) { e.preventDefault(); e.stopImmediatePropagation(); if (form && typeof form.reportValidity === "function" && !form.reportValidity()) return; remember(pid, form); openLogin("cart"); } function formPid(form) { var i = form && form.querySelector("input[name=id]"); return i ? i.value : ""; } // (أُزيل حاجز التحميل في 2026-09-28: روابط التحميل مفتوحة للجميع) document.addEventListener("click", function (e) { if (!CART_GATE || resuming || !isGuest()) return; var h = hostOf(e); if (!h) return; var form = h.closest("form.product-form"); block(e, h.getAttribute("product-id") || formPid(form), form); }, true); document.addEventListener("submit", function (e) { if (!CART_GATE || resuming || !isGuest()) return; var form = e.target; if (!form || !form.matches || !form.matches("form.product-form")) return; block(e, formPid(form), form); }, true); // ---- بعد تسجيل الدخول: نكمل الإضافة ثم إلى السلة ---- function resume() { var raw = read(PENDING); if (!raw || isGuest()) return; var p = null; try { p = JSON.parse(raw); } catch (e) {} if (!p || !p.pid || Date.now() - p.t > MAX_AGE) { store(PENDING, null); return; } var form = document.querySelector("form.product-form"); var onPage = !!form && String(formPid(form)) === p.pid; // الدخول أعاده إلى صفحة أخرى والمنتج له خانات: نرجع إلى صفحة المنتج أولًا if (!onPage && p.path && p.path !== location.pathname && Object.keys(p.opts || {}).length) { location.href = p.path; return; } store(PENDING, null); resuming = true; if (onPage) { Object.keys(p.opts || {}).forEach(function (name) { var el = form.querySelector('[name="' + name.replace(/"/g, '\\"') + '"]'); if (!el) return; el.value = p.opts[name]; el.dispatchEvent(new Event("input", { bubbles: true })); el.dispatchEvent(new Event("change", { bubbles: true })); }); store(GO_CART, "1"); setTimeout(function () { var btn = form.querySelector("salla-add-product-button button, button[type=submit]"); if (btn) btn.click(); else if (form.requestSubmit) form.requestSubmit(); setTimeout(function () { resuming = false; }, 3000); }, 600); } else { try { salla.cart.quickAdd(p.pid).then(goCart, function () { resuming = false; }); } catch (e) { resuming = false; } } } function onAdded() { if (read(GO_CART) && !isGuest()) setTimeout(goCart, 400); } // الملف المخصص قد يُحمّل قبل جاهزية سلة: ننتظرها حتى 20 ثانية function hook() { try { salla.event.on("cart::item.added", onAdded); } catch (e) {} // إن لم تُعِد سلة تحميل الصفحة بعد الدخول نعيده نحن حتى تُقرأ حالة العميل الجديدة try { salla.event.onAny(function (name) { if (/^auth::.*(verified|logged)/i.test(String(name)) && read(PENDING)) setTimeout(function () { location.reload(); }, 1500); }); } catch (e) {} setTimeout(function () { resume(); }, 800); } (function wait(n) { if (typeof salla !== "undefined" && salla.event && salla.config) hook(); else if (n < 80) setTimeout(function () { wait(n + 1); }, 250); })(0); })(); /* ============================================================ رقيم — المرشد الخبير لرقمي شوب شخصية حية على كل الصفحات: يعرف كل منتج بمعلومته ونصيحته، ويجيب أسئلة الزائر السريعة (تجربة/تسليم/تفعيل/أسعار) بأزرار، يرمش وتتبع عيناه المؤشر، يحتفل عند الإضافة للسلة، ويعرض «نبرمجه لك خصيصًا» لمن لم يجد طلبه. التركيب في سلة: التصميم ← الكود المخصص ← JavaScript. ============================================================ */ (function () { "use strict"; if (window.__rqmRaqeem) return; window.__rqmRaqeem = true; /* ---------------- الإعدادات ---------------- */ var WA_NUMBER = "966597093033"; var WA_TEXT = "مرحبًا، أبحث عن برنامج غير موجود في المتجر وأود طلبه: "; var REQ_ENDPOINT = "https://script.google.com/macros/s/AKfycbzG8UtGilLI9v2963p0TsqGuSJfpqggG5NqXVQ2UVJ_L_yueEpCvdhdLlnanFuJJ_5NWA/exec"; var FREE_QR_URL = "https://raqmishop.com/%D9%85%D9%88%D9%84%D8%AF-%D8%B1%D9%85%D8%B2-qr/p425395513"; var SIDE = "left"; var FIRST_DELAY_MS = 6000; var COOLDOWN_MS = 40000; var IDLE_MS = 35000; var waLink = "https://wa.me/" + WA_NUMBER + "?text=" + encodeURIComponent(WA_TEXT); /* ---------------- قاعدة معرفة المنتجات ---------------- */ // المطابقة على رابط الصفحة أولًا (الروابط قياسية) والعنوان احتياطًا فقط — // العناوين التسويقية تحمل كلمات منتجات أخرى («أوراق تدريب الخط» أوقعتنا في // «أوراق العمل»). الشرطات تطبع مسافات فتعمل الأنماط على الرابط والعنوان معًا. var PRODUCTS = [ { re: /المفرغ الصوتي|transcriber/i, name: "المفرغ الصوتي العربي", one: "يحول تسجيلاتك ومحاضراتك إلى نص عربي — كل المعالجة على جهازك دون إنترنت.", tip: "للمحاضرات الطويلة استخدم «وضع المحاضرة»: يفرغ الكلام أولًا بأول أثناء التسجيل، وجرب نموذج «دقة عالية سريعة» فهو الموصى به." }, { re: /[أا]دوات pdf/i, name: "أدوات PDF العربية", one: "عشر أدوات في برنامج واحد: دمج وتقسيم وضغط وتحويل مع OCR عربي للملفات الممسوحة.", tip: "أقوى ما فيه أداة OCR: تحول الـPDF المصور إلى نص عربي قابل للنسخ والبحث." }, { re: /السيرة الذاتية/i, name: "مولد السيرة الذاتية العربية", one: "سير ذاتية احترافية ثنائية اللغة بمعاينة حية وقوالب متوافقة مع أنظمة التوظيف.", tip: "أنشئ نسختين عربية وإنجليزية من نفس البيانات — أنظمة التوظيف الخليجية تطلب الاثنتين غالبًا." }, { re: /ال[أا]رشيف العربي/i, name: "الأرشيف العربي الذكي", one: "أرشفة مستنداتك بفهرسة وبحث عربي فوري يفهم اللغة لا الحروف فقط.", tip: "البحث يتجاوز «ال» التعريف والتشكيل — اكتب «عقد» يجد «العقد» و«عَقد»." }, { re: /شهادات التقدير/i, name: "مولد شهادات التقدير", one: "شهادات تقدير بالجملة: الصق أسماء طلابك من إكسل واختر قالبًا واطبع الكل دفعة.", tip: "جهز عمود الأسماء في إكسل والصقه كما هو — كل سطر يصبح شهادة باسم صاحبها." }, { re: /الاختبارات و[أا]وراق|مولد الاختبارات/i, name: "مولد الاختبارات وأوراق العمل", one: "أوراق اختبارات منسقة بنماذج متعددة ومفاتيح تصحيح مطابقة.", tip: "فعل خلط الأسئلة لنموذجي أ وب — كل نموذج يخرج بمفتاح إجابته الصحيح تلقائيًا." }, { re: /الناسخ الفوري/i, name: "الناسخ الفوري", one: "اقتص أي نص يظهر على شاشتك — صورة أو فيديو أو برنامج — وينسخه لك نصًا عربيًا.", tip: "يسكن بجوار الساعة ويعمل بمفتاح اختصار — اقتصاص فنسخ في ثانيتين." }, { re: /ال[أا]سر المنتجة/i, name: "دفتر الأسر المنتجة", one: "طلباتك وأرباحك وفواتيرك في مكان واحد — مصمم لمشاريع المنزل.", tip: "سجل الطلب لحظة وصوله واطبع تقرير الربح الشهري بضغطة — ستعرف أي منتجاتك يربح فعلًا." }, { re: /محرر pdf/i, name: "محرر PDF العربي", one: "عبّئ النماذج بالعربي ووقّعها وظلّل المهم على أي PDF، وملفاتك تبقى على جهازك.", tip: "ارسم توقيعك مرة واحدة واحفظه — يبقى جاهزًا تضعه في كل ملفاتك بنقرة." }, { re: /مستخرج الجداول|الجداول [إا]لى excel/i, name: "مستخرج الجداول إلى Excel", one: "يحول جداول الصور وPDF إلى ملفات إكسل حقيقية قابلة للتحرير.", tip: "كلما كانت حدود الجدول أوضح في الصورة كان الاستخراج أدق — صور المستند عموديًا وبإضاءة جيدة." }, { re: /منشورات المتجر/i, name: "مصمم منشورات المتجر", one: "منشورات مبيعات جاهزة للنشر بقوالب وألوان متعددة — اكتب العرض واختر الشكل.", tip: "النسخة الكاملة تولد المنشورات بالجملة من ملف إكسل — حملة كاملة في دقائق." }, { re: /دفتر المواعيد/i, name: "دفتر المواعيد", one: "مواعيد عيادتك أو صالونك بشبكة يومية وباقات وتذكير واتساب وتقارير.", tip: "فعل الباقات: جلسات كل عميلة تخصم تلقائيًا ويظهر رصيدها المتبقي عند الحجز." }, { re: /كراس الخط/i, name: "كراس الخط", one: "كراسات تحسين خط بنقاط تتبع حقيقية لمسار القلم — أربعة خطوط وثلاثة أحجام.", tip: "لكل طالب كراسه باسمه دفعة واحدة، وابدأ المبتدئين بوضع «التأسيس» بمسطرة السطرين." }, { re: /حافظ الملفات/i, name: "حافظ الملفات", one: "نسخ احتياطي تزايدي لملفاتك المهمة لا يحذف شيئًا أبدًا، مع جدولة تلقائية.", tip: "دعه يكتشف مجلدات بياناتك المهمة تلقائيًا — يعرف أماكن حفظ برامجك الشائعة." }, { re: /منظم الملفات/i, name: "منظم الملفات", one: "يرتب مجلداتك الفوضوية بقواعد عربية مع معاينة قبل التنفيذ وتراجع كامل.", tip: "ابدأ بمجلد التنزيلات — الأكثر فوضى دائمًا — ثم فعل «الحارس التلقائي» ليبقى مرتبًا." }, { re: /الموقع الدفعي/i, name: "الموقع الدفعي", one: "توقيعك وتاريخ اليوم على كل صفحات PDF دفعة واحدة.", tip: "مثالي للعقود والمعاملات الطويلة — وقّع ملف خمسين صفحة في ثوانٍ." }, { re: /منظف المساحة/i, name: "منظف المساحة", one: "خريطة تفاعلية تريك أين ذهبت مساحة قرصك، وتنظيف آمن كل ما فيه يمر بحجر قابل للاسترداد.", tip: "لا تخف من التنظيف: لا حذف نهائيًا — كل شيء يبقى في الحجر قابلًا للاسترداد بضغطة." }, { re: /قارئ pdf/i, name: "قارئ PDF العربي", one: "قارئ PDF عربي كامل من اليمين لليسار — القراءة مجانية للأبد، وأدوات الصفحات عند الحاجة.", tip: "اجعله القارئ الافتراضي من إعداداته — قراءة عربية صحيحة في كل ملف تفتحه، والقراءة مجانية للأبد بلا مفتاح." }, { re: /معالج الصور|الصور الدفعي/i, name: "معالج الصور الدفعي", one: "سبع عمليات على مجلد صور كامل دفعة واحدة: تبديل الخلفية بالذكاء وقص ذكي وتصغير وضغط وكتابة — دون إنترنت.", tip: "جرب قالب «صور منتجات متجر»: خلفية بيضاء موحدة وضغط مناسب للرفع لكل صور متجرك بضغطة واحدة." }, // أنواع عامة — تُفحص أخيرًا بعد المنتجات المحددة { re: /قالب excel|قوالب excel/i, name: "قالب Excel جاهز", file: true, one: "ملف إكسل مصمم وجاهز للاستخدام — تحمله فور إتمام الطلب ويعمل على أوفيس عندك.", tip: "احفظ نسخة أصلية من الملف قبل تعبئة بياناتك — لتعود إليها متى أردت البدء من جديد." }, { re: /جاهز للطباعة/i, name: "ملف جاهز للطباعة", file: true, one: "ملف PDF مصمم بعناية — تحمله فور إتمام الطلب وتطبعه مباشرة، لا برنامج ولا تثبيت.", tip: "اطبعه بورق 80 غرامًا فأعلى تخرج الألوان بأفضل شكل، ويمكنك الطباعة بعدد ما تحتاج." } ]; /* ---------------- إجابات الأسئلة السريعة ---------------- */ var QA = { trial: { label: "كيف أجرب مجانًا؟", html: "كل برامجنا لها نسخة تجريبية مجانية 👌
في صفحة أي منتج ستجد زر تحميل النسخة التجريبية — جربها على جهازك براحتك، وإن أعجبك البرنامج اشترِ المفتاح وفعّله على نفس النسخة دون إعادة تنزيل." }, delivery: { label: "كيف يصلني البرنامج؟", html: "فور إتمام الطلب يصلك على بريدك مفتاح التفعيل مع رابط التحميل 📧
وإن تأخر تفقد مجلد الرسائل غير المرغوبة، أو راسلنا واتساب ونرسله فورًا." }, activate: { label: "طريقة التفعيل", html: "ثلاث خطوات ⚡
1) افتح البرنامج واذهب إلى الإعدادات ← الترخيص
2) الصق المفتاح
3) اضغط «تفعيل» — ويعمل فورًا دون إنترنت ولا يرتبط بجهاز محدد." }, prices: { label: "الأسعار والمدد", html: "لكل برنامج خيارات مدة: 6 أشهر / سنة / سنتان — والسنة هي الأنسب سعرًا لأغلب عملائنا.
وقاعدتنا الثابتة: لا تجديد تلقائي أبدًا — تدفع مرة وتنتهي القصة." }, privacy: { label: "هل ملفاتي آمنة؟", html: "هذا تخصصنا 🔒
كل برامجنا تعمل على جهازك بالكامل: ملفاتك وتسجيلاتك ونصوصك لا تُرفع إلى أي خادم — يشتغل أغلبها حتى دون إنترنت." }, custom: { label: "أبحث عن برنامج غير موجود", html: "هذا تخصصنا 😊 نبني البرامج حسب الطلب ونبرمجه لك خصيصًا.
اكتب ما تحتاجه هنا ويصل طلبك لفريقنا فورًا:", form: true, wa: true, waLabel: "أو راسلنا واتساب مباشرة" }, deliveryFile: { label: "كيف يصلني الملف؟", html: "فور إتمام الطلب يصلك رابط تحميل الملف مباشرة 📥
وتجده أيضًا في حسابك بالمتجر متى أردت إعادة تنزيله." } }; var MAIN_CHIPS = ["trial", "delivery", "activate", "prices", "privacy", "custom"]; var FILE_CHIPS = ["deliveryFile", "privacy", "custom"]; /* ---------------- التخزين ---------------- */ function lsGet(k) { try { return localStorage.getItem(k); } catch (e) { return null; } } function lsSet(k, v) { try { localStorage.setItem(k, v); } catch (e) {} } function ssGet(k) { try { return sessionStorage.getItem(k); } catch (e) { return null; } } function ssSet(k, v) { try { sessionStorage.setItem(k, v); } catch (e) {} } var returning = lsGet("rqmraqeem_visited") === "1"; lsSet("rqmraqeem_visited", "1"); /* ---------------- تعرف الصفحة والمنتج ---------------- */ function decodedPath() { try { return decodeURIComponent(location.pathname); } catch (e) { return location.pathname; } } function pageKind() { var p = location.pathname; if (/\/cart\b/.test(p)) return "cart"; var og = document.querySelector('meta[property="og:type"]'); if (og && /product/i.test(og.content || "")) return "product"; if (document.querySelector("salla-add-to-cart-button, form.product-form, [class*='product-single']")) return "product"; if (p === "/" || p === "" || /^\/(ar|en)\/?$/.test(p)) return "home"; return "browse"; } var kind = pageKind(); // تطبيع للمطابقة: الشرطات مسافات (روابط سلة تفصل بالشرطات والعناوين بالمسافات) function norm(s) { return String(s || "").replace(/[-_–—]/g, " ").toLowerCase(); } var hayPath = norm(decodedPath()); var hayTitle = norm(document.title); function currentProduct() { if (kind !== "product") return null; // الرابط أولًا — قياسي وموثوق؛ ثم العنوان احتياطًا للصفحات بروابط مختصرة for (var i = 0; i < PRODUCTS.length; i++) if (PRODUCTS[i].re.test(hayPath)) return PRODUCTS[i]; for (var j = 0; j < PRODUCTS.length; j++) if (PRODUCTS[j].re.test(hayTitle)) return PRODUCTS[j]; return null; } function isQrPage() { return kind === "product" && (/مولد رمز qr/.test(hayPath) || /مولد رمز qr/.test(hayTitle)); } var product = currentProduct(); function greeting() { var h = new Date().getHours(); return h >= 5 && h < 12 ? "صباح الخير" : "مساء الخير"; } /* ---------------- الأنماط ---------------- */ var alignItems = SIDE === "left" ? "flex-start" : "flex-end"; var closeSide = SIDE === "left" ? "right" : "left"; var css = "" // الحاوية LTR عمدًا: «بداية» المحاذاة تبقى حافة الشاشة فلا تقفز الشخصية عند اتساع البالون + "#rqm-raqeem{position:fixed;bottom:18px;" + SIDE + ":18px;z-index:99990;display:flex;flex-direction:column;align-items:" + alignItems + ";gap:10px;direction:ltr;font-family:inherit;-webkit-tap-highlight-color:transparent}" + "#rqm-raqeem *{box-sizing:border-box;margin:0;padding:0}" + "#rqm-rq-char{width:86px;height:100px;cursor:pointer;filter:drop-shadow(0 6px 18px rgba(58,200,176,.35));transform:translateY(150px);transition:transform .6s cubic-bezier(.34,1.56,.64,1);border:0;background:none;padding:0}" + "#rqm-raqeem.rqm-in #rqm-rq-char{transform:translateY(0)}" + ".rqm-body-bob{animation:rqmBob 3.4s ease-in-out infinite;transform-origin:50% 100%}" + "@keyframes rqmBob{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}" + ".rqm-arm-wave{transform-origin:74px 62px}" + "#rqm-raqeem.rqm-waving .rqm-arm-wave{animation:rqmWave 1.1s ease-in-out 3}" + "#rqm-rq-char:hover .rqm-arm-wave{animation:rqmWave 1.1s ease-in-out infinite}" + "@keyframes rqmWave{0%,100%{transform:rotate(0)}30%{transform:rotate(-26deg)}60%{transform:rotate(10deg)}}" + "#rqm-raqeem.rqm-cheer .rqm-arm-wave{animation:rqmCheerA .5s ease-in-out 4 alternate}" + "#rqm-raqeem.rqm-cheer .rqm-arm-side{animation:rqmCheerB .5s ease-in-out 4 alternate;transform-origin:26px 66px}" + "@keyframes rqmCheerA{0%{transform:rotate(0)}100%{transform:rotate(-38deg)}}" + "@keyframes rqmCheerB{0%{transform:rotate(0)}100%{transform:rotate(38deg)}}" + "#rqm-raqeem.rqm-cheer #rqm-rq-char{animation:rqmJump .5s ease-in-out 4 alternate}" + "@keyframes rqmJump{0%{transform:translateY(0)}100%{transform:translateY(-10px)}}" + ".rqm-antenna-dot{animation:rqmPulse 2.2s ease-in-out infinite}" + "@keyframes rqmPulse{0%,100%{opacity:1}50%{opacity:.35}}" + ".rqm-eyes{transition:transform .18s ease-out}" + ".rqm-blink{transform-origin:center;animation:rqmBlink .16s ease-in-out 1}" + "@keyframes rqmBlink{0%,100%{transform:scaleY(1)}50%{transform:scaleY(.08)}}" + ".rqm-face-happy,.rqm-face-think{display:none}" + "#rqm-raqeem.rqm-exp-happy .rqm-face-normal{display:none}" + "#rqm-raqeem.rqm-exp-happy .rqm-face-happy{display:inline}" + "#rqm-raqeem.rqm-exp-think .rqm-face-normal{display:none}" + "#rqm-raqeem.rqm-exp-think .rqm-face-think{display:inline}" + "#rqm-rq-bubble{position:relative;direction:rtl;text-align:right;max-width:320px;background:#23262e;color:#e9eaf0;border:1px solid #3c404e;border-radius:16px;border-bottom-" + SIDE + "-radius:4px;padding:14px 36px 14px 16px;line-height:1.9;font-size:13.5px;box-shadow:0 10px 30px rgba(0,0,0,.35);opacity:0;transform:translateY(14px) scale(.96);transition:opacity .35s ease,transform .35s cubic-bezier(.34,1.56,.64,1);pointer-events:none}" + "#rqm-raqeem.rqm-open #rqm-rq-bubble{opacity:1;transform:translateY(0) scale(1);pointer-events:auto}" + "#rqm-rq-bubble b{color:#3ac8b0;font-weight:700}" + "#rqm-rq-close{position:absolute;top:8px;" + closeSide + ":10px;border:0;background:none;color:#9aa0ae;font-size:15px;cursor:pointer;line-height:1;padding:4px}" + "#rqm-rq-close:hover{color:#e9eaf0}" + "#rqm-rq-wa{display:none;align-items:center;justify-content:center;gap:8px;margin-top:12px;background:#25d366;color:#0b2e1c;font-weight:700;font-size:13.5px;text-decoration:none;border-radius:12px;padding:10px 14px;transition:transform .15s ease,box-shadow .15s ease}" + "#rqm-raqeem.rqm-wa #rqm-rq-wa{display:flex}" + "#rqm-rq-wa:hover{transform:translateY(-1px);box-shadow:0 6px 16px rgba(37,211,102,.35);color:#0b2e1c;text-decoration:none}" + "#rqm-rq-link{display:none;align-items:center;justify-content:center;gap:8px;margin-top:12px;background:#3ac8b0;color:#0d1f23;font-weight:700;font-size:13.5px;text-decoration:none;border-radius:12px;padding:10px 14px;transition:transform .15s ease,box-shadow .15s ease}" + "#rqm-raqeem.rqm-link #rqm-rq-link{display:flex}" + "#rqm-rq-link:hover{transform:translateY(-1px);box-shadow:0 6px 16px rgba(58,200,176,.35);color:#0d1f23;text-decoration:none}" // أزرار الأسئلة السريعة + "#rqm-rq-chips{display:none;flex-wrap:wrap;gap:9px;margin-top:14px}" + "#rqm-raqeem.rqm-chips #rqm-rq-chips{display:flex}" + "#rqm-raqeem .rqm-chip{border:1px solid rgba(58,200,176,.55);background:rgba(58,200,176,.08);color:#8fe0d0;font-size:12px;line-height:1.8;border-radius:24px;padding:8px 17px;cursor:pointer;font-family:inherit;transition:background .15s ease}" + "#rqm-raqeem .rqm-chip:hover{background:rgba(58,200,176,.22);color:#c8f0e8}" + "#rqm-rq-form{display:none;margin-top:12px}" + "#rqm-raqeem.rqm-form #rqm-rq-form{display:block}" + "#rqm-rq-req{width:100%;min-height:74px;box-sizing:border-box;background:#1a1c22;border:1px solid #3c404e;border-radius:12px;color:#e9eaf0;font-family:inherit;font-size:13px;line-height:1.8;padding:10px 12px;resize:vertical;outline:none}" + "#rqm-rq-req:focus,#rqm-rq-phone:focus{border-color:#3ac8b0;box-shadow:0 0 0 3px rgba(58,200,176,.15)}" + "#rqm-rq-phone{width:100%;box-sizing:border-box;background:#1a1c22;border:1px solid #3c404e;border-radius:12px;color:#e9eaf0;font-family:inherit;font-size:13px;padding:10px 12px;margin-top:8px;outline:none;direction:ltr;text-align:right}" + "#rqm-rq-send{width:100%;border:0;border-radius:12px;background:#3ac8b0;color:#0d1f23;font-weight:700;font-size:13.5px;font-family:inherit;padding:11px;margin-top:10px;cursor:pointer;transition:transform .15s ease}" + "#rqm-rq-send:hover{transform:translateY(-1px)}" + "#rqm-rq-send:disabled{opacity:.6;cursor:default;transform:none}" + "#rqm-rq-formstatus{font-size:12px;margin-top:8px;min-height:16px;color:#e07a7a;text-align:center}" + "#rqm-raqeem.rqm-typing #rqm-rq-form{display:none}" + "#rqm-rq-typing{display:none;gap:5px;padding:2px 0}" + "#rqm-raqeem.rqm-typing #rqm-rq-typing{display:flex}" + "#rqm-raqeem.rqm-typing #rqm-rq-text,#rqm-raqeem.rqm-typing #rqm-rq-wa,#rqm-raqeem.rqm-typing #rqm-rq-link,#rqm-raqeem.rqm-typing #rqm-rq-chips{display:none}" + "#rqm-rq-typing span{width:8px;height:8px;border-radius:50%;background:#3ac8b0;animation:rqmDot 1s ease-in-out infinite}" + "#rqm-rq-typing span:nth-child(2){animation-delay:.15s}" + "#rqm-rq-typing span:nth-child(3){animation-delay:.3s}" + "@keyframes rqmDot{0%,100%{opacity:.25;transform:translateY(0)}50%{opacity:1;transform:translateY(-4px)}}" + "@media (max-width:480px){#rqm-rq-char{width:68px;height:80px}#rqm-rq-bubble{max-width:calc(100vw - 104px);font-size:12.5px}}" + "@media (prefers-reduced-motion:reduce){.rqm-body-bob,.rqm-antenna-dot{animation:none}}"; var style = document.createElement("style"); style.textContent = css; document.head.appendChild(style); /* ---------------- الشخصية (SVG) ---------------- */ var raqeemSvg = "" + ''; /* ---------------- البناء ---------------- */ var wrap = document.createElement("div"); wrap.id = "rqm-raqeem"; wrap.innerHTML = "" + '' + ''; document.body.appendChild(wrap); var charBtn = document.getElementById("rqm-rq-char"); var textEl = document.getElementById("rqm-rq-text"); var chipsEl = document.getElementById("rqm-rq-chips"); var eyesEl = document.getElementById("rqm-eyes"); /* ---------------- الحياة: رمش وتتبع العيون ---------------- */ (function blinkLoop() { setTimeout(function () { if (eyesEl) { eyesEl.classList.add("rqm-blink"); setTimeout(function () { eyesEl.classList.remove("rqm-blink"); }, 180); } blinkLoop(); }, 2800 + Math.random() * 3500); })(); var eyeRaf = false; document.addEventListener("mousemove", function (e) { if (eyeRaf || !eyesEl) return; eyeRaf = true; requestAnimationFrame(function () { eyeRaf = false; var r = charBtn.getBoundingClientRect(); var cx = r.left + r.width / 2, cy = r.top + r.height * 0.45; var dx = e.clientX - cx, dy = e.clientY - cy; var d = Math.max(1, Math.hypot(dx, dy)); eyesEl.style.transform = "translate(" + Math.max(-3.2, Math.min(3.2, dx / d * 3.2)).toFixed(1) + "px," + Math.max(-2.4, Math.min(2.4, dy / d * 2.4)).toFixed(1) + "px)"; }); }, { passive: true }); /* ---------------- التعابير ---------------- */ function setExpression(exp) { wrap.classList.remove("rqm-exp-happy", "rqm-exp-think"); if (exp === "happy") wrap.classList.add("rqm-exp-happy"); if (exp === "think") wrap.classList.add("rqm-exp-think"); } function wave() { wrap.classList.remove("rqm-waving"); void wrap.offsetWidth; wrap.classList.add("rqm-waving"); } function cheer() { wrap.classList.remove("rqm-cheer"); void wrap.offsetWidth; wrap.classList.add("rqm-cheer"); setTimeout(function () { wrap.classList.remove("rqm-cheer"); }, 2200); } /* ---------------- عرض الرسائل ---------------- */ var lastShown = 0; var expTimer = null; function buildChips(chipKeys) { chipsEl.innerHTML = ""; (chipKeys || []).forEach(function (item) { var chip = document.createElement("button"); chip.className = "rqm-chip"; chip.type = "button"; if (typeof item === "string") { chip.textContent = QA[item].label; chip.addEventListener("click", function () { answerChip(item); }); } else { chip.textContent = item.label; chip.addEventListener("click", item.onClick); } chipsEl.appendChild(chip); }); wrap.classList.toggle("rqm-chips", chipsEl.children.length > 0); } // opts: {exp, wa, waLabel, link:{href,label}, chips:[...], force} function say(key, html, opts) { opts = opts || {}; if (key && ssGet("rqmmsg_" + key)) return false; if (!opts.force && Date.now() - lastShown < COOLDOWN_MS) return false; if (key) ssSet("rqmmsg_" + key, "1"); lastShown = Date.now(); wrap.classList.add("rqm-open", "rqm-typing"); wrap.classList.toggle("rqm-wa", !!opts.wa); if (opts.waLabel) document.getElementById("rqm-rq-wa-label").textContent = opts.waLabel; wrap.classList.toggle("rqm-form", !!opts.form); var hasLink = !!(opts.link && opts.link.href); wrap.classList.toggle("rqm-link", hasLink); if (hasLink) { document.getElementById("rqm-rq-link").href = opts.link.href; document.getElementById("rqm-rq-link-label").textContent = opts.link.label || "افتح الصفحة"; } buildChips(opts.chips); setExpression("think"); clearTimeout(expTimer); setTimeout(function () { wrap.classList.remove("rqm-typing"); textEl.innerHTML = html; setExpression(opts.exp || ""); if (opts.exp === "happy") cheer(); else wave(); expTimer = setTimeout(function () { setExpression(""); }, 7000); }, 850 + Math.random() * 450); return true; } // إجابة سؤال سريع: تفاعل من الزائر — تتجاوز التهدئة، وتعرض «أسئلة أخرى» بعدها function answerChip(qaKey) { var qa = QA[qaKey]; var chips = MAIN_CHIPS.filter(function (k) { return k !== qaKey; }).slice(0, 4); say(null, qa.html, { force: true, wa: !!qa.wa, waLabel: qa.waLabel, form: !!qa.form, chips: qa.form ? [] : chips, exp: qaKey === "custom" ? "think" : "happy" }); } function productChips() { var base = product && product.file ? FILE_CHIPS : MAIN_CHIPS.slice(0, 3); var chips = []; if (product) { chips.push({ label: "💡 نصيحة خبير", onClick: function () { say(null, "نصيحة من رقيم:
" + product.tip, { force: true, exp: "happy", chips: base }); } }); } return chips.concat(base); } // إرسال طلب المنتج غير الموجود — نفس جدول Google Sheets ونفس الحقول document.getElementById("rqm-rq-send").addEventListener("click", function () { var reqEl = document.getElementById("rqm-rq-req"); var phoneEl = document.getElementById("rqm-rq-phone"); var btn = document.getElementById("rqm-rq-send"); var status = document.getElementById("rqm-rq-formstatus"); var text = reqEl.value.trim(); if (!text) { status.textContent = "اكتب ما تحتاجه أولًا"; reqEl.focus(); return; } btn.disabled = true; btn.textContent = "جارٍ الإرسال..."; status.textContent = ""; fetch(REQ_ENDPOINT, { method: "POST", mode: "no-cors", headers: { "Content-Type": "text/plain;charset=UTF-8" }, body: JSON.stringify({ action: "request", request: text, whatsapp: phoneEl.value.trim(), page_title: document.title, page_url: location.href, device: /Mobi|Android/i.test(navigator.userAgent) ? "جوال" : "كمبيوتر", source: "رقمي شوب - رقيم" }) }).then(function () { reqEl.value = ""; phoneEl.value = ""; btn.disabled = false; btn.textContent = "أرسل الطلب لفريقنا"; say(null, "وصلنا طلبك، شكرًا لك! 🎉
نراجع الطلبات أولًا بأول — وإن تركت رقمك فسنراسلك بما نصل إليه.", { force: true, exp: "happy", chips: ["trial", "prices"] }); }).catch(function () { btn.disabled = false; btn.textContent = "أرسل الطلب لفريقنا"; status.textContent = "تعذر الإرسال — حاول مرة أخرى أو راسلنا واتساب"; }); }); function closeBubble() { wrap.classList.remove("rqm-open"); } document.getElementById("rqm-rq-close").addEventListener("click", function (e) { e.stopPropagation(); closeBubble(); }); // النقر على رقيم يفتح قائمة المرشد دائمًا charBtn.addEventListener("click", function () { if (wrap.classList.contains("rqm-open")) { wrap.classList.remove("rqm-open"); return; } var intro = product ? "أهلًا! أنا رقيم 👋 تشاهد الآن " + product.name + ".
اسألني ما تشاء:" : "أهلًا! أنا رقيم، مرشدك في رقمي شوب 👋
اسألني ما تشاء:"; say(null, intro, { force: true, chips: product ? productChips() : MAIN_CHIPS }); }); /* ---------------- الرسائل التلقائية السياقية ---------------- */ // 1) الترحيب الأول حسب الصفحة setTimeout(function () { wrap.classList.add("rqm-in"); setTimeout(function () { if (kind === "cart") { say("cart", "خطوة أخيرة! 🎯
سلتك ليست طلبًا بعد — اضغط «إتمام الطلب» وسجل دخولك، وبعدها يصلك كل شيء.", { exp: "happy", chips: ["delivery", "activate"] }); } else if (kind === "product") { // 2026-09-30: صفحة المنتج بلا رسالة تلقائية حتى لا تغطي الحقول وأزرار الشراء، ورقيم يجيب من يضغط عليه } else if (isQrPage()) { say("qrfree:" + hayPath, "بشارة: هذا البرنامج مجاني 100% 🎁
بلا حدود وبلا اشتراك — أتم «الشراء» بصفر ريال ويصلك رابط التحميل، وهديتنا لك لتجرب جودة برامجنا.", { exp: "happy", chips: ["delivery", "privacy"] }); } else if (product) { say("product:" + hayPath, "تشاهد " + product.name + " 👌
" + product.one, { chips: productChips() }); } else if (kind === "product") { say("product:" + hayPath, greeting() + " 👋
لهذا البرنامج نسخة تجريبية مجانية — جربها قبل الشراء. وإن احترت فأنا هنا.", { chips: MAIN_CHIPS.slice(0, 3) }); } else if (returning) { say("welcome_back", "أهلًا بعودتك! 😊
اسألني عن أي شيء، وإن لم تجد منتجًا تريده — نبرمجه لك خصيصًا.", { chips: MAIN_CHIPS }); } else { say("welcome", greeting() + " 👋 أنا رقيم، مرشدك في رقمي شوب.
كل برامجنا عربية وتعمل على جهازك ولها نسخ تجريبية مجانية. اسألني ما تشاء:", { chips: MAIN_CHIPS }); } }, FIRST_DELAY_MS); }, 400); // 1ب) اللمسة الثانية في التصفح: هدية مولد رمز QR if (kind === "home" || kind === "browse") { setTimeout(function () { say("gift_qr", "عندنا لك هدية 🎁
برنامج مولد رمز QR مجاني 100% — روابط وواتساب وواي فاي وبطاقات تعريف، بلا حدود وبلا اشتراك.", FREE_QR_URL ? { link: { href: FREE_QR_URL, label: "حمله مجانًا" }, exp: "happy" } : { exp: "happy" }); }, FIRST_DELAY_MS + COOLDOWN_MS + 15000); } // 2) احتفال الإضافة للسلة — التقاط النداء الشبكي الحقيقي var ADD_RE = /\/item\/\d+\/(quick-)?add|cart\/add/i; function onAdded() { setTimeout(function () { // 2026-09-30: المطبوعات وقوالب Excel ملفات بلا مفتاح تفعيل، وتُحمَّل من صفحة الطلبات if (product && product.file) { say("added", "أضفته إلى السلة! 🎉
أكمل الطلب وحمّل الملف مباشرة من صفحة طلباتك.", { exp: "happy", force: true, chips: ["deliveryFile"] }); } else if (product) { say("added", "أضفته إلى السلة! 🎉
أكمل الطلب ويصلك مفتاح التفعيل على بريدك.", { exp: "happy", force: true, chips: ["activate", "delivery"] }); } else { // إضافة سريعة من الرئيسية أو التصنيف، ولا نعرف نوع المنتج say("added", "أضفته إلى السلة! 🎉
أكمل الطلب. البرامج يصلك مفتاح تفعيلها على بريدك، والملفات تحمّلها من صفحة طلباتك.", { exp: "happy", force: true, chips: ["delivery", "deliveryFile"] }); } }, 900); } (function hookNetwork() { var origOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function (m, u) { try { this.__rqmAdd = ADD_RE.test(String(u)); } catch (e) {} return origOpen.apply(this, arguments); }; var origSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function () { if (this.__rqmAdd) { this.addEventListener("load", function () { if (this.status >= 200 && this.status < 300) onAdded(); }); } return origSend.apply(this, arguments); }; if (window.fetch) { var origFetch = window.fetch; window.fetch = function (input) { var url = typeof input === "string" ? input : (input && input.url) || ""; var p = origFetch.apply(this, arguments); if (ADD_RE.test(url)) { p.then(function (res) { if (res && res.ok) onAdded(); }).catch(function () {}); } return p; }; } })(); // 3) سكون طويل في صفحة منتج = زائر محتار (نصيحة المنتج نفسه إن عرفناه) if (kind === "product" && false) { // 2026-09-30: أُوقفت رسالة السكون في صفحة المنتج var idleTimer = null; function resetIdle() { clearTimeout(idleTimer); idleTimer = setTimeout(function () { if (product) say("idle:" + hayPath, "محتار؟ 🤔 خذ نصيحتي في " + product.name + ":
" + product.tip, { exp: "think", chips: MAIN_CHIPS.slice(0, 3), wa: true, waLabel: "اسألنا واتساب" }); else say("idle:" + hayPath, "محتار؟ 🤔
حمل النسخة التجريبية وجرب بنفسك، أو اسألنا مباشرة ونساعدك تختار.", { wa: true, waLabel: "اسألنا واتساب", exp: "think", chips: MAIN_CHIPS.slice(0, 3) }); }, IDLE_MS); } ["scroll", "mousemove", "keydown", "touchstart"].forEach(function (ev) { window.addEventListener(ev, resetIdle, { passive: true }); }); resetIdle(); } // 4) نهاية الصفحة في التصفح = لم يجد ما يريده if (kind === "home" || kind === "browse") { window.addEventListener("scroll", function () { if (window.innerHeight + window.scrollY >= document.documentElement.scrollHeight - 120) { say("bottom", "وصلت إلى النهاية ولم تجد ما تبحث عنه؟
اكتب لنا ما تحتاجه — نبرمجه لك خصيصًا.", { wa: true, chips: ["custom", "trial"] }); } }, { passive: true }); } // 5) نية المغادرة (سطح المكتب) document.addEventListener("mouseout", function (e) { if (kind === "product") return; // 2026-09-30: لا رسالة مغادرة فوق صفحة المنتج if (e.relatedTarget || e.clientY > 24) return; say("exit", "لحظة قبل أن تذهب 🙏
إن لم تجد المنتج الذي تريده فهذا تخصصنا: اكتب لنا ونبرمجه لك خصيصًا.", { wa: true, chips: ["custom"] }); }); })(); /* ============================================================ 5) تعريف الزائر الجديد بأيقونة الحساب يظهر مرة واحدة فقط في حياة المتصفح، لغير المسجلين، بعد ترحيب رقيم بعشر ثوانٍ: هالة نابضة على أيقونة الحساب وفقاعة تعريفية تشرح فائدة الحساب دون أي إجبار على التسجيل. ============================================================ */ (function () { "use strict"; var KEY = "rqm_acct_hint"; function lsGet(k) { try { return localStorage.getItem(k); } catch (e) { return null; } } function lsSet(k, v) { try { localStorage.setItem(k, v); } catch (e) {} } if (lsGet(KEY)) return; if (/\/cart\b/.test(location.pathname)) return; var DELAY_MS = 16000; // بعد ترحيب رقيم (6 ثوانٍ) بوقت قراءة مريح var HIDE_MS = 14000; // تختفي وحدها إن لم يتفاعل var RETRY_MS = 1000, MAX_TRIES = 10; function isGuest() { try { return salla.config.get("user.type") === "guest"; } catch (e) { return false; } } // أيقونة الحساب في الترويسة: مكون سلة القياسي، ورابط الدخول احتياطًا function findIcon() { var els = document.querySelectorAll("header salla-user-menu, salla-user-menu, header a[href*='login']"); for (var i = 0; i < els.length; i++) { var r = els[i].getBoundingClientRect(); if (r.width > 10 && r.height > 10 && r.top >= 0 && r.top < window.innerHeight * 0.5) return els[i]; } return null; } var tipEl = null, haloEl = null, iconRef = null, hideTimer = null; function place() { if (!tipEl || !iconRef) return; var r = iconRef.getBoundingClientRect(); var cx = r.left + r.width / 2; // الهالة تطوق الأيقونة var d = Math.max(r.width, r.height) + 16; haloEl.style.left = (cx - d / 2) + "px"; haloEl.style.top = (r.top + r.height / 2 - d / 2) + "px"; haloEl.style.width = d + "px"; haloEl.style.height = d + "px"; // الفقاعة تحت الأيقونة مع بقاءها داخل الشاشة var w = Math.min(300, window.innerWidth - 24); var left = Math.max(12, Math.min(cx - w / 2, window.innerWidth - w - 12)); tipEl.style.width = w + "px"; tipEl.style.left = left + "px"; tipEl.style.top = (r.bottom + 14) + "px"; // السهم يشير للأيقونة أينما انزاحت الفقاعة var arrow = tipEl.querySelector(".rqa-arrow"); if (arrow) arrow.style.left = Math.max(16, Math.min(cx - left - 7, w - 30)) + "px"; } function dismiss() { clearTimeout(hideTimer); if (tipEl) { tipEl.classList.remove("rqa-show"); } if (haloEl) { haloEl.classList.remove("rqa-show"); } setTimeout(function () { if (tipEl && tipEl.parentNode) tipEl.parentNode.removeChild(tipEl); if (haloEl && haloEl.parentNode) haloEl.parentNode.removeChild(haloEl); tipEl = haloEl = null; }, 350); window.removeEventListener("scroll", place); window.removeEventListener("resize", place); } function show(icon) { lsSet(KEY, "1"); iconRef = icon; var st = document.createElement("style"); st.textContent = "" + "#rqa-halo{position:fixed;z-index:99989;border-radius:50%;pointer-events:none;opacity:0;transition:opacity .3s;box-shadow:0 0 0 0 rgba(58,200,176,.55)}" + "#rqa-halo.rqa-show{opacity:1;animation:rqaPulse 1.6s ease-out infinite}" + "@keyframes rqaPulse{0%{box-shadow:0 0 0 0 rgba(58,200,176,.55)}70%{box-shadow:0 0 0 14px rgba(58,200,176,0)}100%{box-shadow:0 0 0 0 rgba(58,200,176,0)}}" + "#rqa-tip{position:fixed;z-index:99991;direction:rtl;text-align:right;background:#23262e;color:#e9eaf0;border:1px solid #3c404e;border-radius:14px;padding:13px 34px 13px 14px;font-family:inherit;font-size:13px;line-height:1.9;box-shadow:0 12px 34px rgba(0,0,0,.35);opacity:0;transform:translateY(-8px);transition:opacity .3s,transform .3s}" + "#rqa-tip.rqa-show{opacity:1;transform:translateY(0)}" + "#rqa-tip b{color:#3ac8b0;font-weight:700}" + "#rqa-tip .rqa-arrow{position:absolute;top:-7px;width:14px;height:14px;background:#23262e;border-top:1px solid #3c404e;border-right:1px solid #3c404e;transform:rotate(-45deg)}" + "#rqa-close{position:absolute;top:7px;left:10px;border:0;background:none;color:#9aa0ae;font-size:14px;cursor:pointer;line-height:1;padding:4px}" + "#rqa-close:hover{color:#e9eaf0}" + "@media (prefers-reduced-motion:reduce){#rqa-halo.rqa-show{animation:none}}"; document.head.appendChild(st); haloEl = document.createElement("div"); haloEl.id = "rqa-halo"; document.body.appendChild(haloEl); tipEl = document.createElement("div"); tipEl.id = "rqa-tip"; tipEl.innerHTML = "" + '
' + '' + 'حسابك في المتجر من هنا 👆
' + 'تتابع فيه طلباتك بعد الشراء — والتصفح لا يحتاج تسجيلًا.'; document.body.appendChild(tipEl); place(); requestAnimationFrame(function () { haloEl.classList.add("rqa-show"); tipEl.classList.add("rqa-show"); }); window.addEventListener("scroll", place, { passive: true }); window.addEventListener("resize", place); document.getElementById("rqa-close").addEventListener("click", dismiss); // نقر الزائر على الأيقونة نفسها = وصلت الرسالة icon.addEventListener("click", dismiss, { once: true }); hideTimer = setTimeout(dismiss, HIDE_MS); } var tries = 0; function attempt() { // المسجل دخوله لا يحتاج التلميح الآن ولا مستقبلًا if (!isGuest()) { lsSet(KEY, "1"); return; } var icon = findIcon(); if (icon) { show(icon); return; } if (++tries < MAX_TRIES) setTimeout(attempt, RETRY_MS); // لم نجد الأيقونة (جوال غالبًا): لا نعلم KEY حتى تتاح فرصة على جهاز آخر } setTimeout(attempt, DELAY_MS); })(); window.__rqProductMain = function () { /* ════════════════════════════════════════════════════════════ رقمي شوب: صفحة المنتج 1) يقسّم الوصف إلى أقسام مصممة (الطريقة، المزايا، الترخيص، المتطلبات) 2) بطاقات مدة الترخيص بدل القائمة المنسدلة (تبقى القائمة الأصلية مخفية ومتزامنة) 3) زر التجربة المجانية بجوار زر السلة، من رابط التحميل في الوصف 4) شريط الثقة وأسئلة شائعة إن لم يُعرف شكل الوصف يبقى كما هو دون تقسيم. ════════════════════════════════════════════════════════════ */ (function () { "use strict"; if (window.__rqProduct) return; window.__rqProduct = true; var data = document.getElementById("rq-pd"); var src = document.getElementById("rq-desc-src"); if (!data || !src) return; var BASE_PRICE = parseFloat(data.getAttribute("data-price")) || 0; var IS_FREE = BASE_PRICE === 0; var ICON = { download: '', check: '', clock: '', mail: '', win: '', chat: '', key: '', pc: '' }; function esc(t) { return String(t).replace(/[&<>"]/g, function (c) { return { "&": "&", "<": "<", ">": ">", '"': """ }[c]; }); } function money(v) { try { if (window.salla && salla.money) return salla.money(v); } catch (e) {} return esc(v) + " ر.س"; } function isGithub(a) { return a && a.href && /github\.com\/.+\/releases/i.test(a.href); } function textOf(el) { return (el.textContent || "").replace(/\s+/g, " ").trim(); } /* ---------- 1) قراءة الوصف ---------- */ // عنوان القسم: فقرة كل محتواها نص عريض واحد function isBoldPara(el) { if (!el || el.tagName !== "P") return false; var s = el.querySelector("strong,b"); return !!s && textOf(s) === textOf(el) && textOf(el).length > 0; } // العنوان عادةً فقرة عريضة، لكن بعض الأوصاف عُدّلت في محرر سلة ففقدت التنسيق، // فنقبل أيضًا فقرة قصيرة غير عريضة تطابق اسم قسم معروف function isHeading(el) { if (isBoldPara(el) && textOf(el).length < 60) return true; var t = textOf(el); return !!el && el.tagName === "P" && t.length > 0 && t.length < 30 && !/[.:،]$/.test(t) && kindOf(t) !== "other"; } var BULLET = /^\s*[•·●▪\-–]\s*/; function isBullet(el) { return !!el && el.tagName === "P" && BULLET.test(el.textContent || ""); } var KIND = [ { k: "steps", re: /^(طريقة الاستخدام|كيف (يعمل|تستخدم))/ }, { k: "trial", re: /^جرّب|^جرب/ }, { k: "license", re: /الترخيص/ }, { k: "req", re: /^يعمل على|متطلبات/ }, { k: "features", re: /^(ما يقدمه|ما تقدمه|الأدوات|أدوات|ما الذي|ما تصنعه|المزايا|مزايا)/ } ]; function kindOf(title) { for (var i = 0; i < KIND.length; i++) if (KIND[i].re.test(title)) return KIND[i].k; return "other"; } var nodes = [].slice.call(src.children); var lead = null, intro = [], sections = [], cur = null; nodes.forEach(function (el, i) { if (i === 0 && el.tagName === "P" && !isBullet(el) && kindOf(textOf(el)) === "other" && textOf(el).length > 20 && (isBoldPara(el) || textOf(el).length < 180)) { lead = el; return; } // سطر الدعم (قد يأتي عريضًا) ليس عنوان قسم، بل يُلحق بالقسم الحالي var isSupport = /للدعم|للتواصل|@/.test(textOf(el)); if (isHeading(el) && !isSupport && (kindOf(textOf(el)) !== "other" || textOf(el).length < 40)) { cur = { title: textOf(el), kind: kindOf(textOf(el)), nodes: [] }; sections.push(cur); return; } if (cur) cur.nodes.push(el); else intro.push(el); }); var trialLinks = [].filter.call(src.querySelectorAll("a"), isGithub); var trialHref = trialLinks.length ? trialLinks[0].href : ""; var known = sections.filter(function (s) { return s.kind !== "other"; }).length; var SOFTWARE = !!trialHref || sections.some(function (s) { return s.kind === "license"; }); /* ---------- 2) جملة الوعد تحت الاسم ---------- */ if (SOFTWARE && lead) { var leadEl = document.getElementById("rq-lead"); if (leadEl) { leadEl.textContent = textOf(lead); leadEl.hidden = false; } } /* ---------- 3) بناء المحتوى ---------- */ function listItems(sec, tag) { var out = []; sec.nodes.forEach(function (n) { if (n.tagName === tag) [].forEach.call(n.children, function (li) { out.push(li.innerHTML); }); }); // أسطر تبدأ بنقطة «•» تُعامل عناصر قائمة if (!out.length) sec.nodes.forEach(function (n) { if (isBullet(n)) out.push(n.innerHTML.replace(/^(\s| )*[•·●▪\-–](\s| )*/, "")); }); return out; } function paras(sec) { return sec.nodes.filter(function (n) { return n.tagName !== "OL" && n.tagName !== "UL" && !isBullet(n); }) .filter(function (n) { return !(n.querySelector && [].some.call(n.querySelectorAll("a"), isGithub) && textOf(n).length < 40); }); } function html(nodesArr) { return nodesArr.map(function (n) { return n.outerHTML; }).join(""); } function renderSection(sec) { var h = ""; if (sec.kind === "steps") { var steps = listItems(sec, "OL"); if (!steps.length) steps = listItems(sec, "UL"); if (!steps.length) return renderGeneric(sec); h += '

' + esc(sec.title) + "

    "; steps.forEach(function (t, i) { h += '
  1. ' + (i + 1) + "

    " + t + "

  2. "; }); h += "
" + html(paras(sec)) + "
"; return h; } if (sec.kind === "features") { var feats = listItems(sec, "UL"); if (!feats.length) feats = listItems(sec, "OL"); if (!feats.length) return renderGeneric(sec); h += '

' + esc(sec.title) + '

" + html(paras(sec)) + "
"; return h; } return renderGeneric(sec); } function renderGeneric(sec) { return '

' + esc(sec.title) + "

" + html(sec.nodes) + "
"; } function card(sec, icon, extraCls) { if (!sec) return ""; return '
' + icon + '

' + esc(sec.title) + "

" + html(paras(sec)) + "
"; } var reqSec = null, licSec = null, trialSec = null; sections.forEach(function (s) { if (s.kind === "req" && !reqSec) reqSec = s; if (s.kind === "license" && !licSec) licSec = s; if (s.kind === "trial" && !trialSec) trialSec = s; }); function faq() { var reqTitle = reqSec ? reqSec.title : "يعمل على"; // إجابتا التجربة وانتهاء المدة تُؤخذان من وصف المنتج نفسه، فتبقى مطابقة لكل برنامج var trialText = ""; if (trialSec) paras(trialSec).some(function (p) { trialText = textOf(p); return !!trialText; }); var endText = ""; if (licSec) { var lt = paras(licSec).map(textOf).join(" "); var em = lt.match(/عند انتهاء[^.]*\./); if (em) endText = em[0]; } var items = [ ["هل أستطيع تجربة البرنامج قبل الشراء؟", trialText ? esc(trialText) + " تحمّل النسخة التجريبية من الزر أعلى الصفحة." : "نعم، تحمّل النسخة التجريبية من الزر أعلى الصفحة وتجرّبها على جهازك قبل الشراء."], ["متى يصلني مفتاح التفعيل؟", "يصلك على البريد الذي تكتبه في الطلب خلال ساعات العمل. تلصقه في إعدادات البرنامج فتفتح النسخة الكاملة."], ["هل يحتاج التفعيل إلى إنترنت؟", "لا، التفعيل يعمل دون إنترنت. وما يحتاجه البرنامج نفسه مذكور في قسم «" + esc(reqTitle) + "» أعلاه."], ["ماذا يحدث عند انتهاء مدة الترخيص؟", "تدفع مرة واحدة للمدة التي تختارها، والترخيص لا يتجدد تلقائيًا فلا يُخصم منك شيء بعدها." + (endText ? " " + esc(endText) : "") + " وتجدّد متى أردت بطلب مدة جديدة من هذه الصفحة."] ]; var h = '

أسئلة شائعة

'; items.forEach(function (it) { h += '
' + it[0] + "

" + it[1] + "

"; }); return h + "
"; } function build() { if (!SOFTWARE || known < 2) { src.classList.add("rq-pd-src--plain"); return; } var out = ""; if (intro.length) out += '
' + html(intro) + "
"; sections.forEach(function (s) { if (s.kind === "steps" || s.kind === "features" || s.kind === "other") out += renderSection(s); }); if (licSec || reqSec) { out += '
' + card(licSec, ICON.key, "rq-card--lic") + card(reqSec, ICON.pc, "rq-card--req") + "
"; } if (!IS_FREE) out += faq(); if (trialHref) { out += '
' + (IS_FREE ? "الأداة مجانية بالكامل" : "جرّبه على جهازك قبل أن تدفع") + "" + (IS_FREE ? "حمّلها واستخدمها متى شئت." : "جرّب البرنامج على ملفاتك، ثم اختر مدة الترخيص التي تناسبك.") + '
' + ICON.download + (IS_FREE ? "حمّل الأداة مجانًا" : "حمّل النسخة التجريبية") + "" + (IS_FREE ? "" : 'اختر مدة الترخيص') + "
"; } var wrap = document.createElement("div"); wrap.className = "rq-pd-built"; wrap.innerHTML = out; src.parentNode.insertBefore(wrap, src); src.hidden = true; // يبقى في الصفحة لمحركات البحث } /* ---------- 4) زر التجربة بجوار السلة ---------- */ function trialButton() { var slot = document.getElementById("rq-trial-slot"); if (!slot || !trialHref) return; slot.innerHTML = '' + ICON.download + "" + (IS_FREE ? "حمّل الأداة مجانًا" : "حمّل النسخة التجريبية مجانًا") + ""; slot.hidden = false; document.body.classList.add("rq-has-trial"); } /* ---------- 5) شريط الثقة ---------- */ function trust() { var ul = document.getElementById("rq-trust"); if (!ul || !SOFTWARE) return; var items = []; if (!IS_FREE && trialHref) items.push([ICON.clock, "تجربة مجانية قبل الشراء"]); if (!IS_FREE) items.push([ICON.mail, "مفتاح التفعيل يصل على بريدك"]); if (reqSec) { var first = ""; paras(reqSec).some(function (p) { first = textOf(p); return !!first; }); var m = first.match(/^[^.،]+/); if (m && /ويندوز|windows/i.test(m[0]) && m[0].length < 40) items.push([ICON.win, m[0].trim()]); } items.push([ICON.chat, "دعم على واتساب"]); ul.innerHTML = items.map(function (it) { return "
  • " + it[0] + "" + esc(it[1]) + "
  • "; }).join(""); ul.hidden = false; } /* ---------- 6) بطاقات مدة الترخيص ---------- */ function licenseCards() { var comp = document.querySelector("salla-product-options"); if (!comp) return true; var opts; try { opts = JSON.parse(comp.getAttribute("options") || "[]"); } catch (e) { return true; } var opt = null; opts.forEach(function (o) { if (opt || !o.details || o.details.length < 2) return; if (o.type === "single-option" && /مدة|ترخيص|الترخيص/.test(o.name || "")) opt = o; }); if (!opt) return true; var sel = comp.querySelector('select[name="options[' + opt.id + ']"]'); if (!sel) return false; // لم تُرسم بعد if (document.getElementById("rq-lic-cards")) return true; var field = sel.closest(".s-product-options-option-container") || sel.parentNode; var box = document.createElement("div"); box.className = "rq-lic"; box.id = "rq-lic-cards"; var h = '
    ' + esc(opt.name) + '
    '; var recommended = null, totals = {}; opt.details.forEach(function (d) { var name = String(d.name || ""); var rec = /موصى به/.test(name); var clean = name.replace(/\(\s*موصى به\s*\)/, "").trim(); if (rec && !recommended) recommended = d.id; var total = BASE_PRICE + (parseFloat(d.additional_price) || 0); totals[String(d.id)] = total; h += '"; }); h += "
    "; box.innerHTML = h; field.parentNode.insertBefore(box, field); field.classList.add("rq-native-hidden"); // السعر الظاهر في النموذج يتبع المدة المختارة (بعض إصدارات رائد لا تحدّثه وحدها) function showPrice(id) { if (totals[String(id)] == null) return; [].forEach.call(document.querySelectorAll("form.product-form .total-price, .sticky-product-bar .total-price"), function (el) { el.innerHTML = money(totals[String(id)]); }); } function pick(id, silent) { showPrice(id); [].forEach.call(box.querySelectorAll(".rq-lic__card"), function (c) { var on = c.getAttribute("data-id") === String(id); c.classList.toggle("is-on", on); c.setAttribute("aria-checked", on ? "true" : "false"); }); if (String(sel.value) !== String(id)) { sel.value = String(id); sel.dispatchEvent(new Event("change", { bubbles: true })); sel.dispatchEvent(new Event("input", { bubbles: true })); } else if (!silent) { sel.dispatchEvent(new Event("change", { bubbles: true })); } } box.addEventListener("click", function (e) { var c = e.target.closest ? e.target.closest(".rq-lic__card") : null; if (c && !c.disabled) pick(c.getAttribute("data-id")); }); sel.addEventListener("change", function () { showPrice(sel.value); [].forEach.call(box.querySelectorAll(".rq-lic__card"), function (c) { var on = c.getAttribute("data-id") === String(sel.value); c.classList.toggle("is-on", on); c.setAttribute("aria-checked", on ? "true" : "false"); }); }); // اختيار مبدئي: القيمة المختارة مسبقًا، أو الموصى به، أو الأول var initial = sel.value || recommended || (opt.details[0] && opt.details[0].id); if (initial) pick(initial, true); return true; } /* ---------- 7) إرشاد الحقول المطلوبة: الاسم والبريد ومدة الترخيص ---------- */ function requiredGuide() { var comp = document.querySelector("salla-product-options"); var form = comp && comp.closest("form.product-form"); if (!comp || !form) return true; if (document.getElementById("rq-need")) return true; var opts; try { opts = JSON.parse(comp.getAttribute("options") || "[]"); } catch (e) { return true; } var nameOpt = null, mailOpt = null, licOpt = null; opts.forEach(function (o) { var n = o.name || ""; if (!nameOpt && o.type === "text" && /الاسم/.test(n)) nameOpt = o; if (!mailOpt && o.type === "text" && /البريد|الإيميل|email/i.test(n)) mailOpt = o; if (!licOpt && o.type === "single-option" && /مدة|ترخيص/.test(n)) licOpt = o; }); if (!nameOpt && !mailOpt) return true; function field(o) { return o ? comp.querySelector('[name="options[' + o.id + ']"]') : null; } var nameIn = field(nameOpt), mailIn = field(mailOpt), licIn = field(licOpt); if ((nameOpt && !nameIn) || (mailOpt && !mailIn)) return false; // لم تُرسم بعد // تحسين الحقول نفسها if (nameIn) { nameIn.setAttribute("autocomplete", "name"); if (!nameIn.placeholder) nameIn.placeholder = "اسمك كما تريده في الترخيص"; } if (mailIn) { try { mailIn.type = "email"; } catch (e) {} mailIn.setAttribute("autocomplete", "email"); mailIn.setAttribute("inputmode", "email"); mailIn.setAttribute("dir", "ltr"); if (!mailIn.placeholder) mailIn.placeholder = "name@example.com"; } var steps = []; if (nameIn) steps.push({ el: nameIn, txt: "اكتب اسمك، ويُسجَّل الترخيص به" }); if (mailIn) steps.push({ el: mailIn, txt: "اكتب بريدك، ويصلك عليه مفتاح التفعيل" }); if (licIn) steps.push({ el: licIn, txt: "اختر مدة الترخيص" }); var box = document.createElement("div"); box.className = "rq-need"; box.id = "rq-need"; box.setAttribute("aria-live", "polite"); box.innerHTML = '
    قبل الإضافة إلى السلة
      ' + steps.map(function (st, i) { return '
    1. ' + ICON.check + "" + st.txt + "
    2. "; }).join("") + "
    "; comp.parentNode.insertBefore(box, comp); function wrapOf(el) { return el.closest(".s-product-options-option-container") || el.parentNode; } function msgFor(el) { if (el.validity && el.validity.typeMismatch) return "اكتب بريدًا صحيحًا مثل name@example.com"; if (el === licIn) return "اختر مدة الترخيص"; return "هذا الحقل مطلوب"; } function setErr(el, on) { var w = (el === licIn && document.getElementById("rq-lic-cards")) || wrapOf(el); if (!w) return; w.classList.toggle("rq-invalid", on); var m = w.querySelector(".rq-err"); if (on) { if (!m) { m = document.createElement("div"); m.className = "rq-err"; w.appendChild(m); } m.textContent = msgFor(el); } else if (m) { m.remove(); } } function refresh() { var all = true; steps.forEach(function (st, i) { var ok = st.el.value && String(st.el.value).trim() !== "" && (!st.el.checkValidity || st.el.checkValidity()); var li = box.querySelector('li[data-i="' + i + '"]'); if (li) li.classList.toggle("is-done", !!ok); if (ok) setErr(st.el, false); if (!ok) all = false; }); box.classList.toggle("is-complete", all); if (all) box.classList.remove("is-alert"); } steps.forEach(function (st) { st.el.addEventListener("input", refresh); st.el.addEventListener("change", refresh); }); // عند محاولة الإضافة والحقول ناقصة: إبراز الحقل ورسالة تحته var jumped = 0; form.addEventListener("invalid", function (e) { var el = e.target; setErr(el, true); box.classList.add("is-alert"); var now = Date.now(); if (now - jumped > 800) { jumped = now; var target = el === licIn ? (document.getElementById("rq-lic-cards") || el) : el; try { target.scrollIntoView({ behavior: "smooth", block: "center" }); } catch (x) {} } }, true); // للمسجلين (حارس الدخول لا يعمل لهم): لا إضافة قبل اكتمال الحقول document.addEventListener("click", function (e) { var path = e.composedPath ? e.composedPath() : []; var host = null; for (var i = 0; i < path.length; i++) { var t = path[i]; if (t && t.tagName && /^(SALLA-ADD-PRODUCT-BUTTON|SALLA-QUICK-BUY)$/.test(t.tagName)) { host = t; break; } } if (!host || !form.contains(host) && host.closest("form") !== form) return; if (form.checkValidity()) return; e.preventDefault(); e.stopImmediatePropagation(); form.reportValidity(); }, true); refresh(); return true; } function start() { build(); trialButton(); trust(); // مكوّن الخيارات يُرسم متأخرًا (وقد لا يُرسم إلا والصفحة ظاهرة)، فنراقبه دون مهلة var licDone = false, needDone = false; function tick() { if (!licDone) licDone = licenseCards(); if (!needDone) needDone = requiredGuide(); return licDone && needDone; } if (tick()) return; var mo = new MutationObserver(function () { if (tick()) mo.disconnect(); }); mo.observe(document.body, { childList: true, subtree: true }); } if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", start); else start(); })(); }; /* ============================================================ 7) صفحة المنتج الجديدة على ثيم رائد (2026-09-28) مهيّئ يبني العناصر التي يحتاجها كود صفحة المنتج داخل صفحة رائد، ثم يشغّل الكود نفسه المستخدم في ثيم «واجهة رقمي شوب». ============================================================ */ (function () { "use strict"; function adapt() { if (document.getElementById("rq-pd")) return true; var descWrap = document.querySelector('.product__description'); var h1 = document.querySelector('[data-testid="store-product-title"]') || document.querySelector('.main-content h1'); var btn = document.querySelector('salla-add-product-button'); var form = document.querySelector('form.product-form'); var details = document.querySelector('.container--product-details'); if (!descWrap || !h1 || !btn || !form || !details) return false; window.__rqProductActive = true; var art = descWrap.querySelector('#more-content') || descWrap.querySelector('article') || descWrap; var lead = document.createElement("p"); lead.className = "rq-lead"; lead.id = "rq-lead"; lead.hidden = true; h1.insertAdjacentElement("afterend", lead); var data = document.createElement("div"); data.id = "rq-pd"; data.hidden = true; data.setAttribute("data-price", btn.getAttribute("amount") || "0"); document.body.appendChild(data); var slot = document.createElement("div"); slot.className = "rq-trial-slot"; slot.id = "rq-trial-slot"; slot.hidden = true; btn.insertAdjacentElement("afterend", slot); var trust = document.createElement("ul"); trust.className = "rq-trust"; trust.id = "rq-trust"; trust.hidden = true; form.insertAdjacentElement("afterend", trust); var sec = document.createElement("section"); sec.className = "rq-pd-body"; sec.id = "rq-pd-body"; sec.innerHTML = '
    '; details.insertAdjacentElement("afterend", sec); var src = sec.querySelector("#rq-desc-src"); while (art.firstChild) src.appendChild(art.firstChild); descWrap.style.display = "none"; return true; } function run() { if (adapt() && window.__rqProductMain) window.__rqProductMain(); } if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", run); else run(); })(); /* ============================================================ 8) تشغيل سكربت الصفحة الرئيسية داخل عنصر «محتوى HTML» سلة تُدرج محتوى العنصر دون تنفيذ وسوم