/* Add custom Js styles below */
// ===================== اضافة فيديو للصفحة =====================
const VIDEO_SRC = "https://files.catbox.moe/tprsp8.mp4"; // رابط الفيديو
const VIDEO_LINK = "#"; // رابط عند الضغط
// ====================================================
(function() {
if (!document.body.classList.contains("index")) return;
const style = document.createElement("style");
style.textContent = `
.custom-video-banner {
font-size: 16px;
margin: 30px 0;
}
.custom-video-banner .container {
font-size: 16px;
max-width: 1200px;
margin: 0 auto;
}
.custom-video-banner .banner {
display: block;
overflow: hidden;
border-radius: 0px;
box-shadow: none;
}
.custom-video-banner video {
width: auto;
height: auto;
display: block;
border-radius: 0px;
object-fit: cover;
margin: 0 auto;
}
@media (max-width: 768px) {
.custom-video-banner {
font-size: 14px;
margin: 20px 0;
}
.custom-video-banner .container {
padding: 0 10px;
}
.custom-video-banner video {
width: 100%;
height: auto;
}
}
`;
document.head.appendChild(style);
const section = document.createElement("section");
section.className = "custom-video-banner s-block s-block--fixed-banner wide-placeholder appear";
section.innerHTML = `
`;
const sections = document.querySelectorAll("section");
const firstSection = sections[0];
if (firstSection) {
firstSection.insertAdjacentElement("beforebegin", section);
} else {
// fallback -> لو مافيه أقسام، نحطه بداية الصفحة
document.body.insertBefore(section, document.body.firstChild);
}
const video = section.querySelector("video");
if (video) {
video.muted = true;
video.setAttribute("playsinline", "");
video.setAttribute("webkit-playsinline", "");
video.play().catch(err => {
console.log("Autoplay blocked:", err);
});
}
})();
/* Add custom Js styles below */
/* Add custom Js styles below */
document.addEventListener("DOMContentLoaded", function () {
// ✅ 1. ستايل عام + ظهور سلس + حركة الإيموجي
const styleTag = document.createElement("style");
styleTag.innerHTML = `
.enhanced-card {
opacity: 0;
transform: translateY(50px);
transition: all 0.6s ease;
}
.enhanced-card.visible {
opacity: 1 !important;
transform: translateY(0) !important;
}
/* حركة الإيموجي */
.badge-emoji {
display: inline-block;
animation: pulse 1.5s infinite ease-in-out, swing 2.5s infinite ease-in-out;
}
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.2); }
}
@keyframes swing {
0%, 100% { transform: rotate(0deg); }
25% { transform: rotate(8deg); }
75% { transform: rotate(-8deg); }
}
`;
document.head.appendChild(styleTag);
// ✅ 2. إظهار الكروت عند التمرير
function checkVisibility() {
const products = document.querySelectorAll(".s-product-card-entry");
products.forEach((product) => {
if (!product) return;
const position = product.getBoundingClientRect();
if (position.top < window.innerHeight * 0.9 && position.bottom >= 0) {
product.classList.add("visible");
} else {
product.classList.remove("visible");
}
});
}
function observeElements() {
const observer = new MutationObserver(() => {
checkVisibility();
});
observer.observe(document.body, { childList: true, subtree: true });
window.addEventListener("scroll", checkVisibility);
}
setTimeout(() => {
checkVisibility();
observeElements();
}, 500);
// ✅ 3. تحسين كروت المنتجات (نجوم + شارة عشوائية لبعض المنتجات فقط)
function enhanceCards() {
const cards = document.querySelectorAll('.s-product-card-entry');
if (cards.length === 0) return;
cards.forEach((card) => {
const content = card.querySelector('.s-product-card-content-main');
if (!content) return;
// ⭐ تقييم النجوم
if (!card.querySelector('.product-rating')) {
const stars = document.createElement('div');
stars.className = 'product-rating';
const rating = Math.floor(Math.random() * 2) + 4;
for (let i = 0; i < 5; i++) {
const star = document.createElement('span');
star.innerHTML = i < rating ? '★' : '☆';
stars.appendChild(star);
}
stars.style.color = '#FFD700';
stars.style.fontSize = '18px';
stars.style.margin = '6px 0';
stars.style.display = 'flex';
stars.style.justifyContent = 'center';
stars.style.gap = '2px';
content.appendChild(stars);
}
// 🏷️ شارات عشوائية لبعض المنتجات فقط
});
}
let tryCount = 0;
const interval = setInterval(() => {
enhanceCards();
tryCount++;
if (tryCount > 10) clearInterval(interval);
}, 1000);
window.addEventListener("scroll", checkVisibility);
});
// ✅ منع الروابط الفارغة من التنقل
document.querySelectorAll('a[href=""], a[href="#"]').forEach(link => {
link.addEventListener('click', event => {
event.preventDefault();
});
});
/* ✅ ظهور السكاشن عند التمرير */
document.addEventListener("DOMContentLoaded", function () {
const sections = document.querySelectorAll("section");
function checkVisibilitySections() {
sections.forEach((section) => {
const position = section.getBoundingClientRect();
if (position.top < window.innerHeight && position.bottom >= 0) {
section.classList.add("visible");
} else {
section.classList.remove("visible");
}
});
}
window.addEventListener("scroll", checkVisibilitySections);
checkVisibilitySections(); // Check on load
});
/* ✅ باقي الكود زي ما هو (Spinner + Scroll icon + حفظ البوزيشن) */
// Spinner overlay
const overlay = document.createElement("div");
overlay.className = "spinner-overlay";
overlay.innerHTML = `
`;
document.body.appendChild(overlay);
window.addEventListener("load", () => {
setTimeout(() => {
overlay.remove();
}, 1000);
});
// Scroll icon with progress circle
const scrollIcon = document.createElement("div");
scrollIcon.id = "scroll-icon";
scrollIcon.style.cssText = `
position: fixed; bottom: 20px; right: 20px; width: 50px; height: 50px;
display: none; align-items: center; justify-content: center;
cursor: pointer; z-index: 1000;`;
const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svg.setAttribute("class", "progress-circle");
svg.setAttribute("viewBox", "0 0 36 36");
svg.style.cssText = "width: 100%; height: 100%; transform: rotate(-90deg);";
const circleBg = document.createElementNS("http://www.w3.org/2000/svg", "path");
circleBg.setAttribute("class", "circle-bg");
circleBg.setAttribute("d", "M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831");
circleBg.setAttribute("fill", "none");
circleBg.setAttribute("stroke", "#0000002a");
circleBg.setAttribute("stroke-width", "3.8");
const circle = document.createElementNS("http://www.w3.org/2000/svg", "path");
circle.setAttribute("class", "circle");
circle.setAttribute("d", "M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831");
circle.setAttribute("fill", "none");
circle.setAttribute("stroke", "var(--main-color)");
circle.setAttribute("stroke-width", "3.8");
circle.setAttribute("stroke-linecap", "round");
circle.style.transition = "stroke-dasharray 0.3s ease";
svg.appendChild(circleBg);
svg.appendChild(circle);
const arrow = document.createElement("div");
arrow.textContent = "↑";
arrow.style.cssText = `
position: absolute; font-size:33px; font-weight: bold;
color:var(--main-color); pointer-events: none;`;
scrollIcon.appendChild(svg);
scrollIcon.appendChild(arrow);
document.body.appendChild(scrollIcon);
window.addEventListener("scroll", () => {
const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
const scrollHeight =
document.documentElement.scrollHeight -
document.documentElement.clientHeight;
const scrollPercentage = (scrollTop / scrollHeight) * 100;
circle.style.strokeDasharray = `${scrollPercentage}, 100`;
if (scrollTop > 300) {
scrollIcon.style.display = "flex";
} else {
scrollIcon.style.display = "none";
}
});
scrollIcon.addEventListener("click", () => {
window.scrollTo({ top: 0, behavior: "smooth" });
});
// Save scroll position
window.addEventListener("beforeunload", function () {
const currentPage = window.location.pathname;
localStorage.setItem(`scrollPosition-${currentPage}`, window.scrollY);
});
// Restore scroll position
window.addEventListener("load", function () {
setTimeout(() => {
const currentPage = window.location.pathname;
const scrollPosition = localStorage.getItem(`scrollPosition-${currentPage}`);
if (scrollPosition) {
window.scrollTo(0, scrollPosition);
}
}, 500);
});
// امنع الكليك اليمين
document.addEventListener('contextmenu', e => e.preventDefault());
// امنع شوية اختصارات معروفة
document.addEventListener('keydown', e => {
const k = e.key.toUpperCase();
if (k === 'F12') e.preventDefault();
if (e.ctrlKey && e.shiftKey && ['I','C','J'].includes(k)) e.preventDefault();
if (e.ctrlKey && k === 'U') e.preventDefault();
});
document.addEventListener("DOMContentLoaded", () => {
const navButtons = document.querySelectorAll("#main-links-2 .s-slider-block__title-nav button");
navButtons.forEach(btn => {
btn.removeAttribute("disabled"); // نشيل disabled
btn.setAttribute("aria-disabled", "false");
btn.style.visibility = "visible";
btn.style.opacity = "1";
btn.style.pointerEvents = "auto"; // نخليها تشتغل
});
});
document.addEventListener("DOMContentLoaded", function () {
// ✅ تحديد السيكشن اللي عايزين نبدله
// ✅ حقن الستايل
// ✅ تقسيم العنوان إلى كلمات لكل كلمة span
const title = document.querySelector(".gaming-title");
if (title) {
const words = title.textContent.trim().split(" ");
title.innerHTML = words.map((word, i) => `${word}`).join(" ");
}
// ✅ مراقبة ظهور العناصر
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
// العنوان
if (entry.target.classList.contains("gaming-title")) {
const spans = entry.target.querySelectorAll("span");
spans.forEach((span) => {
span.classList.remove("drop");
void span.offsetWidth;
span.classList.add("drop");
});
}
// البراجرافات
if (entry.target.tagName === "P") {
entry.target.classList.add("typing");
}
}
});
}, { threshold: 0.3 });
if (title) observer.observe(title);
// ✅ راقب كل البراجرافات النصية
document.querySelectorAll(".grid-item.text-item p").forEach(p => {
observer.observe(p);
});
});
// واتساب
var whatsappFloat = document.createElement('div');
whatsappFloat.className = 'whatsapp-float';
var whatsappLink = document.createElement('a');
whatsappLink.href = 'https://wa.me/+966554209183';
whatsappLink.target = '_blank';
var whatsappIcon = document.createElement('img');
whatsappIcon.src = 'https://upload.wikimedia.org/wikipedia/commons/6/6b/WhatsApp.svg';
whatsappIcon.alt = 'WhatsApp';
whatsappIcon.className = 'whatsapp-icon';
whatsappLink.appendChild(whatsappIcon);
whatsappFloat.appendChild(whatsappLink);
document.body.appendChild(whatsappFloat);
var style = document.createElement('style');
style.innerHTML = `
.whatsapp-float {
position: fixed;
bottom: 20px;
left: 20px;
z-index: 100;
}
.whatsapp-icon {
width: 60px;
height: 60px;
border-radius: 50%;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
cursor: pointer;
transition: transform 0.3s ease-in-out;
}
.whatsapp-icon:hover {
transform: scale(1.1);
}
`;
document.head.appendChild(style);
document.addEventListener("DOMContentLoaded", function () {
const text = "حطب أول ود الأمريكي 🔥 نار قوية وحرارة ثابتة | جودة عالية ودخان أقل، مثالي للكشتات والشوي";
const header = document.querySelector("header") || document.body;
const bar = document.createElement("div");
bar.className = "marquee-bar";
const track = document.createElement("div");
track.className = "marquee-track";
// نص مكرر مرتين كبداية
track.innerHTML = `${text}
${text}
`;
bar.appendChild(track);
header.parentNode.insertBefore(bar, header);
// ضمان ملء الشريط بتكرارات كافية
function ensureFill() {
const viewportWidth = window.innerWidth;
let contentWidth = track.scrollWidth;
while (contentWidth < viewportWidth * 2) {
const clone = track.children[0].cloneNode(true);
track.appendChild(clone);
contentWidth = track.scrollWidth;
}
}
ensureFill();
window.addEventListener("resize", () => setTimeout(ensureFill, 120));
// إعدادات الحركة
let useRAF = true; // استخدم requestAnimationFrame لما الصفحة مرئية
let speedPxPerSec = 60; // سرعة الحركة (بيكسل في الثانية) — غيّر لو تحب
let rafId = null;
let lastTime = null;
let translateX = 0;
// طولة المحتوى (نحتاجها لإعادة التدوير)
function getTotalWidth(){
return track.scrollWidth;
}
// رندر بدالة RAF
function stepRaf(now) {
if (!lastTime) lastTime = now;
const dt = (now - lastTime) / 1000;
lastTime = now;
// تحريك لليسار (غير الاتجاه لو عايزة بالعكس)
translateX -= speedPxPerSec * dt;
const totalW = getTotalWidth();
// إعادة التدوير لتجنب فراغات
if (Math.abs(translateX) >= totalW / 2) {
translateX += totalW / 2;
}
track.style.transform = `translateX(${translateX}px)`;
rafId = requestAnimationFrame(stepRaf);
}
// بدء RAF
function startRAF() {
cancelRAF();
// تأكد من قيم أولية مناسبة
translateX = 0;
lastTime = null;
rafId = requestAnimationFrame(stepRaf);
// مسح أي CSS animation لو موجودة
track.style.animation = "none";
}
function cancelRAF() {
if (rafId) {
cancelAnimationFrame(rafId);
rafId = null;
}
}
// بديل: تشغيل يعتمد على CSS animation (خفيف)، نُسند له طول متغير اعتمادًا على المحتوى وسرعة
function startCSSAnimation() {
cancelRAF();
const totalW = getTotalWidth();
// نحسب المدة بحيث تكون السرعة تقريبًا speedPxPerSec
const durationSec = (totalW / speedPxPerSec);
track.style.animation = `marqueeCSS ${durationSec}s linear infinite`;
// نستخدم keyframes افتراضية عبر CSS المضافة ديناميكياً
}
// نضيف قواعد @keyframes ديناميكيًا (مرة واحدة)
(function injectCSSKeyframes(){
const id = "marquee-css-keyframes";
if (!document.getElementById(id)) {
const style = document.createElement("style");
style.id = id;
style.innerHTML = `
@keyframes marqueeCSS {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); }
}
`;
document.head.appendChild(style);
}
})();
// إعادة تشغيل الأنيميشن — يختار RAF لو الصفحة مرئية، وإلا CSS ثم يحاول إعادة تشغيل لاحقًا
function restartAnimation() {
// لو الصفحة ظاهرًة نستخدم RAF لأفضل سلاسة
if (!document.hidden && document.hasFocus()) {
startRAF();
} else {
startCSSAnimation();
}
}
// على رجوع التبويب أو التركيز نعيد التشغيل فورًا
document.addEventListener("visibilitychange", () => {
if (!document.hidden) {
restartAnimation();
} else {
// لو أخفينا الصفحة ننتقل لـ CSS كخيار أخف (وإعادة تشغيل عند الرجوع)
startCSSAnimation();
}
});
window.addEventListener("focus", restartAnimation);
window.addEventListener("blur", () => {
// لو الصفحة فقدت التركيز نخلي CSS (أخف)
startCSSAnimation();
});
// لو حصل تفاعل بالماوس/لمس نضمن التشغيل
bar.addEventListener("mouseenter", restartAnimation);
bar.addEventListener("touchstart", restartAnimation);
// watchdog: يتفقد كل فترة لو الحركة توقفت ويعيد التشغيل
setInterval(() => {
// لو العنصر غير مرئي للـ DOM أو مفقود نتوقف
if (!document.body.contains(track)) return;
const computed = window.getComputedStyle(track);
const transform = computed.transform || "";
const anim = computed.animationName || computed.getPropertyValue('animation-name');
// قواعد بسيطة للكشف عن التوقف: لو لا يوجد transform ولا يوجد animation لكن يجب أن يكون موجود
if (!document.hidden && (!rafId)) {
// نحاول تشغيل RAF إن كانت الصفحة مرئية
restartAnimation();
} else if (document.hidden && (!anim || anim === 'none')) {
// لو الصفحة مخفيه نعيد CSS
startCSSAnimation();
}
}, 1500);
// ابدأ للمرة الأولى
restartAnimation();
});
//itrioo
// تحديد الفوتر
const footer = document.querySelector('.store-footer');
// إنشاء رابط
const link = document.createElement('a');
link.href = 'https://itrioo.com';
link.target = '_blank';
link.style.display = 'block';
link.style.width = '180px'; // العرض
link.style.height = '50px'; // الارتفاع
link.style.margin = '20px auto'; // لتوسيط الرابط داخل الفوتر
link.style.borderRadius = '15px'; // زوايا منحنية
link.style.boxShadow = '0 0 10px rgba(0,0,0,0.1)';
link.style.cursor = 'pointer';
link.style.display = 'flex';
link.style.alignItems = 'center';
link.style.justifyContent = 'center';
link.style.fontSize = '16px';
link.style.fontWeight = '600';
link.style.color = '#2e4f20';
link.style.textDecoration = 'none';
// النص داخل الرابط
link.textContent = 'برمجـة وتطويـر iTrioo';
// إضافة الرابط إلى الفوتر
footer.appendChild(link);
//تعديل
document.addEventListener("DOMContentLoaded", function() {
const footer = document.querySelector(".store-footer");
if (!footer) return;
const faqSection = document.createElement("div");
faqSection.id = "faq-section";
faqSection.innerHTML = `
الأسئلة الشائعة
+
ما أنواع الحطب المتوفرة لديكم؟
نوفر مجموعة مختارة من أفضل أنواع الحطب الأمريكي:
- التوت
- البلوط
- الجوز
- الأشجار المتنوعة
كل نوع يتميز بحرارة ثابتة ورائحة نقية وتجربة مثالية للشوي والتدفئة.
+
هل الحطب طبيعي؟ وما نسبة الرطوبة؟
نعم، جميع منتجات All Wood طبيعية 100% ومجففة بعناية بنسبة 5–8% فقط لضمان:
• اشتعال سريع
• احتراق أطول
• دخان أقل
• حرارة مستقرة
+
هل الحطب مناسب للشوي؟ وما الفرق بين الأنواع؟
حطب الجوز: حرارة قوية، نكهة دخان فاخرة، مثالي لشوي اللحوم والدجاج والأسماك والتدفئة.
حطب البلوط: احتراق طويل جداً وحرارة عالية، مناسب للتدفئة والشوي بدون نكهة دخان قوية.
حطب التوت: دخان خفيف ونكهة فاكهية متوسطة، ممتاز لشوي الدجاج والأسماك.
أشجار متنوعة: خيار متنوع للاستخدام العام، مناسب للتدفئة والكشتات والشوي الخفيف.
+
كيف يمكنني طلب الحطب؟
يمكنك الطلب مباشرة عبر متجرنا الإلكتروني خلال ثوانٍ،
+
ما طرق الدفع المتاحة؟
نوفر جميع الطرق:
• الدفع الإلكتروني
• Apple Pay
• بطاقات مدى
+
ما مدة توصيل الطلبات؟
عادة يصل الطلب خلال 2–3 أيام عمل حسب المدينة.
داخل الرياض يتم التوصيل غالبًا في نفس اليوم أو اليوم التالي.
+
هل توفرون توصيل خارج الرياض؟
نعم، نوفر توصيل لجميع مدن المملكة عبر شركات شحن معتمدة وبسرعة ممتازة.
+
هل يوجد تتبع للشحنات؟
نعم، بمجرد شحن طلبك تستلم رقم تتبع لتحديثات حالة الشحنة مباشرة.
+
هل تقدمون خدمات للشركات؟
نعم، نقدم باقات خاصة للمؤسسات والمطاعم والفود ترك، مع:
• أسعار خاصة للكميات الكبيرة
• عقود توريد شهرية
• توصيل مستمر حسب احتياج العميل
+
هل يوجد ضمان على المنتجات؟
نعم، ضمان استبدال في حال وجود أي ملاحظة على جودة الحطب أو الوزن وتغليف المنتج .
+
هل خدمة العملاء متاحة دائمًا؟
فريق All Wood متواجد لخدمتك 24/7 عبر الواتساب .
`;
footer.parentNode.insertBefore(faqSection, footer);
const questions = faqSection.querySelectorAll(".faq-question");
questions.forEach(q => {
q.addEventListener("click", () => {
const answer = q.parentNode.querySelector(".faq-answer");
const icon = q.querySelector(".faq-icon");
if (answer.style.display === "block") {
answer.style.display = "none";
icon.textContent = "+";
} else {
answer.style.display = "block";
icon.textContent = "-";
}
});
});
// CSS – إجبار استخدام خطوط آبل وتحسين عرض الخطوط
const style = document.createElement("style");
style.innerHTML = `
/* Force Apple system font when available and improve smoothing */
#faq-section,
#faq-section * {
font-family: "Apple", "SF Pro Text", "SF Pro Display", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif !important;
-webkit-font-smoothing: antialiased !important;
-moz-osx-font-smoothing: grayscale !important;
font-synthesis: none !important;
}
#faq-section {
text-align: center;
margin: 50px 0;
color: white !important;
}
.faq-title {
font-size: 22px;
margin-bottom: 30px;
font-weight: bold;
}
.faq-item {
background-color: #2e4f20;
margin: 10px auto;
padding: 15px 20px;
width: 85%;
border-radius: 12px;
cursor: pointer;
transition: background-color 0.3s;
color: white !important;
}
.faq-item:hover {
background-color: #436335;
}
.faq-question {
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
width: 100%;
font-weight: bold;
font-size: 12px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
direction: rtl;
color: white !important;
}
.faq-icon {
font-size: 26px;
font-weight: bold;
width: 30px;
text-align: center;
color: white !important;
flex-shrink: 0;
}
.faq-text {
flex-grow: 1;
text-align: center;
color: white !important;
}
.faq-answer {
display: none;
margin-top: 12px;
color: white !important;
font-size: 16px;
line-height: 1.6;
text-align: right;
}
`;
document.head.appendChild(style);
});
// تعديييييييييييييييييييييييل
(function(){
console.log("[Debug] تشغيل سكربت زر شرح الاستخدام — البداية");
// محاولات لإيجاد عنصر الوصف بأكثر من selector محتمل
const selectors = [
'.product-description',
'.product-description-wrapper',
'.description',
'.product-content',
'.product__description',
'#description',
'.tab-content',
'.product-details',
'.product-info'
];
// دالة للبحث عن العنصر
function findDescElement() {
for (let s of selectors) {
let el = document.querySelector(s);
if (el) {
console.log(`[Debug] وجد عنصر الوصف بواسطة selector: ${s}`);
return el;
}
}
// حاول إيجاد أي عنصر يحتوي نص "طريقة الإستخدام" أو "شرح" كتلميح
const all = Array.from(document.querySelectorAll('div,section,article'));
for (let el of all) {
const text = (el.innerText || '').slice(0,200).toLowerCase();
if (text.includes('طريقة الاستخدام') || text.includes('شرح:') || text.includes('شرح الاستخدام')) {
console.log("[Debug] وجد عنصر محتمل يحتوي نص شرح");
return el;
}
}
return null;
}
// تعيين regex للروابط جوجل درايف
const driveRegex = /(https?:\/\/(?:drive\.google\.com|docs\.google\.com)[^\s'"]+)/i;
// إنشاء الزر
function makeButton(link) {
const a = document.createElement('a');
a.href = link;
a.target = '_blank';
a.rel = 'noopener';
a.innerText = '🎥 مشاهدة طريقة الاستخدام';
a.style.display = 'block';
a.style.padding = '12px 16px';
a.style.background = '#28a745';
a.style.color = '#fff';
a.style.textAlign = 'center';
a.style.borderRadius = '8px';
a.style.marginTop = '16px';
a.style.fontWeight = '700';
a.style.textDecoration = 'none';
return a;
}
// دالة رئيسية
function process() {
const desc = findDescElement();
if (!desc) {
console.log("[Debug] لم أجد عنصر الوصف بعد — سأبقى أحاول لمدة قصيرة");
return false;
}
// حاول إيجاد رابط داخل anchor tags أولاً
const anchors = Array.from(desc.querySelectorAll('a[href]'));
for (let an of anchors) {
if (driveRegex.test(an.href)) {
const link = an.href.match(driveRegex)[0];
console.log("[Debug] وجد رابط درايف داخل : ", link);
// إزالة العنصر الرابط أو إخفاؤه
an.remove();
// إضافة الزر
desc.appendChild(makeButton(link));
return true;
}
}
// لو مافيه anchors، ابحث داخل النص (قد يكون الرابط نص عادي)
const html = desc.innerHTML;
const textMatch = html.match(driveRegex);
if (textMatch) {
const link = textMatch[0];
console.log("[Debug] وجد رابط درايف داخل النص: ", link);
// حذف كل تكرارات الرابط من الـ HTML
desc.innerHTML = html.split(link).join('');
desc.appendChild(makeButton(link));
return true;
}
console.log("[Debug] العنصر موجود لكن لم أجد رابط درايف داخله");
return false;
}
// نجرب عدة مرات لأن بعض القوالب تحمل المحتوى بشكل ديناميكي
let attempts = 0;
const maxAttempts = 12; // ~ 12 * 500ms = 6 ثواني
const interval = setInterval(() => {
attempts++;
const done = process();
if (done) {
console.log("[Debug] تم إضافة زر شرح الاستخدام بنجاح ✓");
clearInterval(interval);
} else if (attempts >= maxAttempts) {
console.log("[Debug] انتهت محاولات البحث ("+attempts+") ولم يتم العثور على الرابط تلقائياً.");
// نضع مراقب تغيّر DOM كحل أخير
clearInterval(interval);
observeDomForDesc();
}
}, 500);
// مراقب DOM يحاول مرة أخرى لو ظهر الوصف لاحقاً (مثلاً قالب SPA)
function observeDomForDesc(){
console.log("[Debug] تفعيل مراقب DOM للبحث لاحقاً");
const observer = new MutationObserver((mutations, obs) => {
const did = process();
if (did) {
console.log("[Debug] المراقب وجد الرابط وأضاف الزر ✓");
obs.disconnect();
}
});
observer.observe(document.body, { childList: true, subtree: true });
// افصل المراقب بعد 20 ثانية للسلامة
setTimeout(()=>{ observer.disconnect(); console.log("[Debug] فصلت مراقب DOM بعد 20 ث"); }, 20000);
}
})();