const tabConfig = { 'featured-products-style2-2-vrrnqE_1': { name: 'سلاســـــل', url: 'https://rovingsa.com/%D8%B3%D9%84%D8%A7%D8%B3%D9%80%D9%80%D9%80%D9%84/c2090172475', buttonText: 'تسوق السلاسل', }, 'featured-products-style2-2-vrrnqE_2': { name: 'أســـاور نسائيــة', url: 'https://rovingsa.com/%D8%A3%D8%B3%D9%80%D9%80%D9%80%D8%A7%D9%88%D8%B1/c1461052100', buttonText: 'تسوق الأساور', }, 'featured-products-style2-2-vrrnqE_3': { name: 'خواتـــــم', url: 'https://rovingsa.com/%D8%AE%D9%88%D8%A7%D8%AA%D9%80%D9%80%D9%80%D9%85/c126492112', buttonText: 'تسوق الخواتم', }, 'featured-products-style2-2-vrrnqE_4': { name: 'حلـــــق', url: 'https://rovingsa.com/%D8%AD%D9%84%D9%80%D9%80%D9%80%D9%82/c1481032764', buttonText: 'تسوق حلـق', }, }; let processedTabs = new Set(); let observer = null; let retryCount = 0; const maxRetries = 50; function createReadMoreCard(tabId, config) { return `
`; } function updateSlider(tabElement) { try { const swiperContainer = tabElement.querySelector( '.swiper-container, .swiper', ); if (swiperContainer && swiperContainer.swiper) { swiperContainer.swiper.update(); swiperContainer.swiper.updateSlides(); console.log('Swiper updated successfully'); } else { if (window.Swiper) { setTimeout(() => { const newSwiper = swiperContainer.querySelector('.swiper'); if (newSwiper && !newSwiper.swiper) { new Swiper(newSwiper, { slidesPerView: 'auto', spaceBetween: 16, freeMode: true, watchSlidesProgress: true, }); } }, 100); } } } catch (error) { console.warn('Slider update failed:', error); } } function addReadMoreCard(tabId) { const tabItem = document.getElementById(tabId); if (!tabItem) return false; const swiperWrapper = tabItem.querySelector('.swiper-wrapper'); if (!swiperWrapper) return false; if (swiperWrapper.querySelector(`.read-more-card[data-tab-id="${tabId}"]`)) { return true; } try { const cardHTML = createReadMoreCard(tabId, tabConfig[tabId]); swiperWrapper.insertAdjacentHTML('beforeend', cardHTML); processedTabs.add(tabId); setTimeout(() => updateSlider(tabItem), 50); console.log(`Added read more card to tab: ${tabId}`); return true; } catch (error) { console.error(`Failed to add card to ${tabId}:`, error); return false; } } function processAllTabs() { let addedCount = 0; Object.keys(tabConfig).forEach(tabId => { if (!processedTabs.has(tabId)) { if (addReadMoreCard(tabId)) { addedCount++; } } }); return addedCount; } function checkTabsReady() { const totalTabs = Object.keys(tabConfig).length; const processedCount = processedTabs.size; if (processedCount === totalTabs) { console.log('All tabs processed successfully'); if (observer) { observer.disconnect(); observer = null; } return true; } return false; } function scheduleRetry() { if (retryCount >= maxRetries) { console.warn('Max retry attempts reached'); return; } retryCount++; const delay = Math.min(1000, 100 * retryCount); setTimeout(() => { processAllTabs(); if (!checkTabsReady()) { scheduleRetry(); } }, delay); } function handleMutations(mutations) { let shouldProcess = false; mutations.forEach(mutation => { if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { mutation.addedNodes.forEach(node => { if (node.nodeType === Node.ELEMENT_NODE) { if (node.id && Object.keys(tabConfig).includes(node.id)) { shouldProcess = true; } else if (node.querySelector) { Object.keys(tabConfig).forEach(tabId => { if (node.querySelector(`#${tabId}`)) { shouldProcess = true; } }); } } }); } }); if (shouldProcess) { setTimeout(() => { processAllTabs(); if (!checkTabsReady()) { scheduleRetry(); } }, 100); } } function initializeObserver() { if (observer) return; observer = new MutationObserver(handleMutations); observer.observe(document.body, { childList: true, subtree: true, attributes: false, }); console.log('MutationObserver initialized'); } function initialize() { console.log('Initializing Read More Cards system...'); processedTabs.clear(); retryCount = 0; const addedCount = processAllTabs(); console.log(`Initially processed ${addedCount} tabs`); if (!checkTabsReady()) { initializeObserver(); scheduleRetry(); } } function handleDOMState() { if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initialize); } else { initialize(); } } const styles = ` `; document.head.insertAdjacentHTML('beforeend', styles); handleDOMState(); window.readMoreCards = { processedTabs, retryCount, reinitialize: initialize, processAllTabs, tabConfig, };