document.addEventListener("DOMContentLoaded", function() { const selectors = [ ".product-details__description", ".product__description", "#description", ".description-content", ".product__description article", "article", ".pro-details", "div[data-salla-product-description]", "salla-product-details" ]; function processContent(targetElement) { if (!targetElement || targetElement.dataset.processed) return; let htmlContent = targetElement.innerHTML; let isUpdated = false; // 1. معالجة الجداول (متروكة كما هي لأنها ظبطت) const tableRegex = /\|جدول\|([\s\S]*?)\|الجدول\|/g; if (tableRegex.test(htmlContent)) { htmlContent = htmlContent.replace(tableRegex, function (match, tableContent) { const cleanText = tableContent .replace(//gi, "\n") .replace(/<\/p>/gi, "\n") .replace(/<[^>]*>/g, "") .replace(/ /g, " "); const rows = cleanText.split("\n").filter(row => row.trim() !== ""); let tableHTML = ''; let isFirstRow = true; rows.forEach(function (row) { const cols = row.split("|").map(col => col.trim()); if (cols.length === 0 || (cols.length === 1 && cols[0] === "")) return; if (isFirstRow) { tableHTML += ""; cols.forEach(col => tableHTML += ""); tableHTML += ""; isFirstRow = false; } else { tableHTML += ""; cols.forEach(col => tableHTML += ""); tableHTML += ""; } }); tableHTML += "
" + col + "
" + col + "
"; isUpdated = true; return tableHTML; }); } // 2. معالجة الأسئلة الشائعة (النسخة الذكية لفصل س وج من نفس السطر) const faqRegex = /\|اسئلة\|([\s\S]*?)\|نهاية\|/g; if (faqRegex.test(htmlContent)) { const faqData = []; htmlContent = htmlContent.replace(faqRegex, function(match, faqContent) { const cleanText = faqContent .replace(//gi, "\n") .replace(/<\/p>/gi, "\n") .replace(/<[^>]*>/g, "") .replace(/ /g, " "); const lines = cleanText.split('\n').filter(line => line.trim() !== ''); let faqHTML = '
'; for (let i = 0; i < lines.length; i++) { let line = lines[i].trim(); if (!line) continue; // إزالة كلمة "س:" أو "س :" من بداية السطر إذا وُجدت line = line.replace(/^س\s*:\s*/, ''); // فصل السؤال عن الإجابة بناءً على وجود "ج:" أو "ج :" وسط السطر let parts = line.split(/ج\s*:\s*/); let question = parts[0].trim(); let answer = parts[1] ? parts[1].trim() : ''; if (question) { // إذا لم تكن هناك إجابة في نفس السطر، نبحث عنها في السطر التالي (للاحتياط) if (!answer && i + 1 < lines.length && (lines[i+1].trim().startsWith('ج:') || lines[i+1].trim().startsWith('ج :'))) { answer = lines[i+1].trim().replace(/^ج\s*:\s*/, '').trim(); i++; // تخطي السطر التالي لأنه تم استهلاكه كإجابة } faqData.push({ question: question, answer: answer }); faqHTML += '
'; faqHTML += '

' + question + '

'; faqHTML += '

' + (answer || 'لا توجد إجابة متاح حالياً.') + '

'; faqHTML += '
'; } } faqHTML += '
'; if (faqData.length > 0) { addFAQSchema(faqData); } isUpdated = true; return faqHTML; }); } if (isUpdated) { targetElement.innerHTML = htmlContent; attachAccordionEvents(targetElement); } targetElement.dataset.processed = "true"; } function attachAccordionEvents(container) { container.querySelectorAll('.salla-faq-trigger').forEach(trigger => { trigger.addEventListener('click', function() { const item = this.parentElement; container.querySelectorAll('.salla-faq-item').forEach(el => { if (el !== item) el.classList.remove('active'); }); item.classList.toggle('active'); }); }); } function addFAQSchema(faqData) { const oldSchema = document.getElementById('faq-schema'); if (oldSchema) oldSchema.remove(); const schemaData = { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [] }; for (let i = 0; i < faqData.length; i++) { if (!faqData[i].answer) continue; schemaData.mainEntity.push({ "@type": "Question", "name": faqData[i].question, "acceptedAnswer": { "@type": "Answer", "text": faqData[i].answer } }); } const script = document.createElement('script'); script.id = 'faq-schema'; script.type = 'application/ld+json'; script.text = JSON.stringify(schemaData); document.head.appendChild(script); } function initializeProcessing() { selectors.forEach(selector => { document.querySelectorAll(selector).forEach(processContent); }); } initializeProcessing(); const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { mutation.addedNodes.forEach(node => { if (node.nodeType === 1) { selectors.forEach(selector => { if (node.matches(selector)) processContent(node); node.querySelectorAll(selector).forEach(processContent); }); } }); } }); }); observer.observe(document.body, { childList: true, subtree: true }); setTimeout(initializeProcessing, 1000); setTimeout(initializeProcessing, 3000); });