/* ════════════════════════════════════════════════════════════
أكواد رقمي شوب المخصصة — الملف الموحد
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 =
''
+ ''
+ ''
+ ''
+ ''
+ ''
+ ''
+ ''
+ ''
+ ''
+ ''
+ ''
+ ''
+ ''
+ ''
+ '
';
}
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 = ""
+ '
" + 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 = '
";
});
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 ? "حمّلها واستخدمها متى شئت." : "جرّب البرنامج على ملفاتك، ثم اختر مدة الترخيص التي تناسبك.")
+ '
";
}
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 '
' + ICON.check + "" + st.txt + "
";
}).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»
سلة تُدرج محتوى العنصر دون تنفيذ وسوم