پرش به محتوا

کتاب مقدس آنلاین: تفاوت میان نسخه‌ها

از دانشنامه کتاب مقدس
بدون خلاصۀ ویرایش
بدون خلاصۀ ویرایش
خط ۳۰: خط ۳۰:
             padding: 0;
             padding: 0;
             margin: 0;
             margin: 0;
        }
       
        /* مخفی کردن هدرهای اضافی ویکی */
        body > header:first-child,
        .wiki-header,
        .mw-header,
        #mw-header,
        #header,
        .header {
            display: none !important;
         }
         }
          
          
خط ۱۷۳: خط ۱۸۳:
         .content-display {
         .content-display {
             width: 100%;
             width: 100%;
             min-height: 600px;
             height: 650px;
            max-height: 700px;
            overflow-y: auto;
             border: 1px solid var(--border-color);
             border: 1px solid var(--border-color);
             border-radius: 6px;
             border-radius: 6px;
             background: white;
             background: white;
            padding: 25px;
            line-height: 2;
            font-size: 1.1rem;
        }
       
        .content-display .verse {
            margin-bottom: 15px;
            padding-right: 15px;
        }
       
        .content-display .verse-number {
            background-color: var(--accent-color);
            color: white;
            padding: 2px 8px;
            border-radius: 50%;
            font-size: 0.8rem;
            margin-left: 5px;
        }
       
        .content-display a {
            color: var(--secondary-color);
            text-decoration: none;
            border-bottom: 1px dotted var(--secondary-color);
            transition: all 0.3s;
            cursor: pointer;
        }
       
        .content-display a:hover {
            color: var(--accent-color);
            border-bottom: 1px solid var(--accent-color);
        }
       
        .loading {
            text-align: center;
            padding: 40px;
            color: var(--accent-color);
        }
       
        .loading i {
            font-size: 2rem;
            margin-bottom: 15px;
         }
         }
          
          
خط ۳۵۳: خط ۳۲۰:
              
              
             .content-display {
             .content-display {
                 min-height: 400px;
                 height: 500px;
                max-height: 500px;
                padding: 15px;
             }
             }
              
              
خط ۳۶۹: خط ۳۳۴:
         }
         }


        @media (max-width: 480px) {
            .content-display {
                height: 450px;
            }
           
            .nav-btn, .wiki-link {
                padding: 10px 15px;
                font-size: 0.9rem;
            }
           
            .instructions {
                padding: 30px 15px;
                font-size: 1rem;
            }
           
            .app-header {
                padding: 10px 12px;
            }
           
            .app-header h1 {
                font-size: 1.3rem;
            }
        }
        /* استایل برای حالت انتخاب نشده */
         .placeholder {
         .placeholder {
             display: flex;
             display: flex;
خط ۳۸۵: خط ۳۷۵:
         }
         }


        /* استایل برای راست‌چین کامل */
         option {
         option {
             direction: rtl;
             direction: rtl;
خط ۴۱۷: خط ۴۰۸:
         ];
         ];


        // تابع بررسی مجاز بودن دامنه
         function isDomainAllowed() {
         function isDomainAllowed() {
             const currentDomain = window.location.hostname;
             const currentDomain = window.location.hostname;
            console.log('🔍 بررسی دامنه:', currentDomain);
           
            // اگر روی فایل محلی هستیم، اجازه بده
             if (!currentDomain || currentDomain === '' || currentDomain === 'null') {
             if (!currentDomain || currentDomain === '' || currentDomain === 'null') {
                console.log('✅ فایل محلی - مجاز');
                 return true;
                 return true;
             }
             }
             return ALLOWED_DOMAINS.some(domain => {
              
                 return currentDomain === domain || currentDomain.endsWith('.' + domain);
            const isAllowed = ALLOWED_DOMAINS.some(domain => {
                 const match = currentDomain === domain || currentDomain.endsWith('.' + domain);
                if (match) {
                    console.log(`✅ دامنه ${currentDomain} مجاز است`);
                }
                return match;
             });
             });
           
            if (!isAllowed) {
                console.log(`❌ دامنه ${currentDomain} غیرمجاز است`);
            }
           
            return isAllowed;
         }
         }


        // تابع نمایش پیام دسترسی غیرمجاز
         function showAccessDenied() {
         function showAccessDenied() {
             const wrapper = document.getElementById('content-wrapper');
             const wrapper = document.getElementById('content-wrapper');
خط ۴۳۳: خط ۴۴۱:
                     <h3><i class="fas fa-ban"></i> دسترسی محدود شده</h3>
                     <h3><i class="fas fa-ban"></i> دسترسی محدود شده</h3>
                     <p>این صفحه فقط بر روی دامنه <strong>pediabible.com</strong> قابل دسترسی است.</p>
                     <p>این صفحه فقط بر روی دامنه <strong>pediabible.com</strong> قابل دسترسی است.</p>
                    <p>دامنه فعلی: <code>${window.location.hostname}</code></p>
                     <p>لطفاً از <a href="https://www.pediabible.com" style="color: #721c24; text-decoration: underline;">سایت اصلی</a> بازدید کنید.</p>
                     <p>لطفاً از <a href="https://www.pediabible.com" style="color: #721c24; text-decoration: underline;">سایت اصلی</a> بازدید کنید.</p>
                 </div>
                 </div>
             `;
             `;
        }
        // تابع اصلی بارگذاری برنامه
        function loadApplication() {
            console.log('🚀 شروع بارگذاری با بررسی امنیتی...');
           
            if (!isDomainAllowed()) {
                console.log('❌ دسترسی غیرمجاز - نمایش پیام خطا');
                showAccessDenied();
                return;
            }
            console.log('✅ دامنه مجاز - بارگذاری برنامه اصلی');
            // اگر دامنه مجاز باشد، برنامه اصلی بارگذاری می‌شود
            initializeBibleApp();
         }
         }


خط ۴۸۶: خط ۵۱۰:
                 { name: "لوقا", chapters: 24, displayName: "انجیل به قلم لوقا" },
                 { name: "لوقا", chapters: 24, displayName: "انجیل به قلم لوقا" },
                 { name: "یوحنا", chapters: 21, displayName: "انجیل به قلم یوحنا" },
                 { name: "یوحنا", chapters: 21, displayName: "انجیل به قلم یوحنا" },
                 { name: "اعمال", chapters: 28, displayName: "اعمال" },
                 { name: "اعمال ", chapters: 28, displayName: "اعمال " },
                 { name: "رومیان", chapters: 16, displayName: "رساله به رومیان" },
                 { name: "رومیان", chapters: 16, displayName: "رساله به رومیان" },
                 { name: "اول قرنتیان", chapters: 16, displayName: "رساله اول به قرنتیان" },
                 { name: "اول قرنتیان", chapters: 16, displayName: "رساله اول به قرنتیان" },
خط ۵۰۸: خط ۵۳۲:
                 { name: "سوم یوحنا", chapters: 1, displayName: "رساله سوم یوحنا" },
                 { name: "سوم یوحنا", chapters: 1, displayName: "رساله سوم یوحنا" },
                 { name: "یهودا", chapters: 1, displayName: "رساله یهودا" },
                 { name: "یهودا", chapters: 1, displayName: "رساله یهودا" },
                 { name: "کتاب مکاشفه", chapters: 22, displayName: "کتاب مکاشفه" }
                 { name: "کتاب مکاشفه", chapters: 22, displayName: "کتاب مکاشفه " }
             ]
             ]
         };
         };
خط ۵۱۶: خط ۵۴۰:
             const wrapper = document.getElementById('content-wrapper');
             const wrapper = document.getElementById('content-wrapper');
              
              
            // ایجاد ساختار HTML برنامه
             wrapper.innerHTML = `
             wrapper.innerHTML = `
                 <div class="selector-container">
                 <div class="selector-container">
خط ۵۸۴: خط ۶۰۹:
             `;
             `;


            // داده‌های ترجمه‌های مختلف
             const translations = {
             const translations = {
                 'old': {
                 'old': {
                     name: 'ترجمه قدیم',
                     name: 'ترجمه قدیم',
                     baseUrl: 'https://www.pediabible.com/index.php?title=',
                     baseUrl: 'https://www.pediabible.com/index.php?title=',
                    // برای ترجمه قدیم از الگوی ساده با displayName استفاده می‌کنیم
                     getPageTitle: function(bookDisplayName, chapter) {
                     getPageTitle: function(bookDisplayName, chapter) {
                         return `${bookDisplayName} فصل ${chapter}`;
                         return `${bookDisplayName} فصل ${chapter}`;
خط ۵۹۵: خط ۶۲۲:
                     name: 'هزاره نو',
                     name: 'هزاره نو',
                     baseUrl: 'https://www.pediabible.com/index.php?title=',
                     baseUrl: 'https://www.pediabible.com/index.php?title=',
                    // برای ترجمه‌های جدید از displayName + نام ترجمه استفاده می‌کنیم
                     getPageTitle: function(bookDisplayName, chapter) {
                     getPageTitle: function(bookDisplayName, chapter) {
                         return `${bookDisplayName} هزاره نو فصل ${chapter}`;
                         return `${bookDisplayName} هزاره نو فصل ${chapter}`;
خط ۶۱۵: خط ۶۴۳:
             };
             };


            // عناصر DOM
             const translationSelect = document.getElementById('translation-select');
             const translationSelect = document.getElementById('translation-select');
             const testamentSelect = document.getElementById('testament-select');
             const testamentSelect = document.getElementById('testament-select');
خط ۶۲۵: خط ۶۵۴:
             const wikiPageLink = document.getElementById('wiki-page-link');
             const wikiPageLink = document.getElementById('wiki-page-link');


            // متغیرهای وضعیت فعلی
             let currentTranslation = '';
             let currentTranslation = '';
             let currentTestament = '';
             let currentTestament = '';
خط ۶۳۰: خط ۶۶۰:
             let currentChapter = 1;
             let currentChapter = 1;


            // رویداد تغییر ترجمه
             translationSelect.addEventListener('change', function() {
             translationSelect.addEventListener('change', function() {
                 currentTranslation = this.value;
                 currentTranslation = this.value;
خط ۶۴۶: خط ۶۷۷:
             });
             });


            // رویداد تغییر عهد
             testamentSelect.addEventListener('change', function() {
             testamentSelect.addEventListener('change', function() {
                 currentTestament = this.value;
                 currentTestament = this.value;
خط ۶۷۲: خط ۷۰۴:
             });
             });


            // رویداد تغییر کتاب
             bookSelect.addEventListener('change', function() {
             bookSelect.addEventListener('change', function() {
                 currentBook = this.value;
                 currentBook = this.value;
خط ۶۹۹: خط ۷۳۲:
             });
             });


            // رویداد تغییر فصل
             chapterSelect.addEventListener('change', function() {
             chapterSelect.addEventListener('change', function() {
                 currentChapter = parseInt(this.value);
                 currentChapter = parseInt(this.value);
                  
                  
                 if (currentChapter) {
                 if (currentChapter) {
                     loadContent();
                     displayChapterWithIframe();
                 } else {
                 } else {
                     resetContent();
                     resetContent();
خط ۷۰۹: خط ۷۴۳:
             });
             });


             // تابع اصلی برای بارگذاری محتوا
             // نمایش فصل با iframe - فقط محتوای اصلی
             async function loadContent(pageTitle = null) {
             function displayChapterWithIframe() {
                let title;
                 const bookIndex = parseInt(currentBook);
                let displayTitle;
                const bookData = bibleBooks[currentTestament][bookIndex];
 
                const bookName = bookData.name;
                if (pageTitle) {
                const bookDisplayName = bookData.displayName;
                    // اگر صفحه خاصی درخواست شده (مثل ابراهیم)
                const translationName = translations[currentTranslation].name;
                    title = pageTitle;
               
                    displayTitle = decodeURIComponent(pageTitle);
                chapterTitle.textContent = `${translationName} - ${bookName} - فصل ${currentChapter}`;
                 } else {
                  
                    // اگر فصل کتاب درخواست شده
                // استفاده از الگوی مناسب برای هر ترجمه
                    const bookIndex = parseInt(currentBook);
                 const pageTitle = translations[currentTranslation].getPageTitle(bookDisplayName, currentChapter);
                    const bookData = bibleBooks[currentTestament][bookIndex];
               
                    const bookName = bookData.name;
                 // استفاده از action=render برای نمایش فقط محتوای اصلی
                    const bookDisplayName = bookData.displayName;
                const contentUrl = `${translations[currentTranslation].baseUrl}${encodeURIComponent(pageTitle)}&action=render`;
                    const translationName = translations[currentTranslation].name;
               
                   
                    title = translations[currentTranslation].getPageTitle(bookDisplayName, currentChapter);
                    displayTitle = `${translationName} - ${bookName} - فصل ${currentChapter}`;
                 }
 
                 chapterTitle.textContent = displayTitle;
 
                 // نمایش loading
                 versesContainer.innerHTML = `
                 versesContainer.innerHTML = `
                     <div class="loading">
                     <iframe
                         <i class="fas fa-spinner fa-spin"></i>
                        id="content-iframe"
                         <p>در حال بارگذاری محتوا...</p>
                        src="${contentUrl}"  
                     </div>
                         class="content-display"
                        frameborder="0"
                        loading="lazy"
                         allowfullscreen>
                     </iframe>
                 `;
                 `;
 
                  
                 // استفاده از action=render برای دریافت فقط محتوای اصلی
                 // لینک صفحه کامل برای باز کردن در تب جدید
                const contentUrl = `https://www.pediabible.com/index.php?title=${encodeURIComponent(title)}&action=render`;
                 wikiPageLink.href = `${translations[currentTranslation].baseUrl}${encodeURIComponent(pageTitle)}`;
 
                try {
                    const response = await fetch(contentUrl);
                    if (!response.ok) {
                        throw new Error('خطا در دریافت محتوا');
                    }
                    const html = await response.text();
                   
                    // پردازش HTML و استخراج فقط محتوای اصلی
                    const processedContent = processContent(html);
                   
                    // نمایش محتوا در container
                    versesContainer.innerHTML = `
                        <div class="content-display">
                            ${processedContent}
                        </div>
                    `;
 
                    // تنظیم event listener برای تمام لینک‌های داخلی
                    setupInternalLinks();
 
                } catch (error) {
                    console.error('خطا در بارگذاری:', error);
                    versesContainer.innerHTML = `
                        <div class="access-denied">
                            <h3><i class="fas fa-exclamation-triangle"></i> خطا در بارگذاری</h3>
                            <p>مشکلی در بارگذاری محتوا پیش آمده است.</p>
                            <p>لطفاً دوباره تلاش کنید.</p>
                        </div>
                    `;
                }
 
                 // لینک صفحه کامل
                 wikiPageLink.href = `https://www.pediabible.com/index.php?title=${encodeURIComponent(title)}`;
                 wikiPageLink.style.display = 'flex';
                 wikiPageLink.style.display = 'flex';
                  
                 updateNavigationButtons();
                if (!pageTitle) {
                    updateNavigationButtons();
                }
            }
 
            // پردازش محتوا و حذف المان‌های اضافی
            function processContent(html) {
                const tempDiv = document.createElement('div');
                tempDiv.innerHTML = html;
 
                // حذف تمام المان‌های اضافی
                const elementsToRemove = tempDiv.querySelectorAll(
                    'header, nav, .mw-header, .wiki-header, .header, #header, .navigation, .nav, .mw-nav, #mw-navigation, script, style, link, meta, .mw-editsection, .reference, .references, .mw-cite-backlink, .printfooter, .catlinks, .visualClear'
                );
                elementsToRemove.forEach(el => el.remove());
 
                // پردازش تمام لینک‌ها
                const links = tempDiv.querySelectorAll('a');
                links.forEach(link => {
                    const href = link.getAttribute('href');
                   
                    if (href && href.includes('pediabible.com')) {
                        // استخراج عنوان از URL
                        let title = null;
                       
                        if (href.includes('index.php?title=')) {
                            // لینک‌های فرمت: index.php?title=ابراهیم
                            const urlParams = new URLSearchParams(href.split('?')[1]);
                            title = urlParams.get('title');
                        } else if (href.includes('/index.php/')) {
                            // لینک‌های فرمت: /index.php/ابراهیم
                            const parts = href.split('/');
                            title = parts[parts.length - 1];
                        } else if (href.includes('pediabible.com/') && !href.includes('index.php')) {
                            // لینک‌های فرمت: pediabible.com/ابراهیم
                            const domainParts = href.split('pediabible.com/');
                            if (domainParts[1]) {
                                title = domainParts[1].split('?')[0].split('#')[0];
                            }
                        }
                       
                        if (title) {
                            // تبدیل لینک به لینک داخلی برنامه
                            link.href = 'javascript:void(0)';
                            link.setAttribute('data-wiki-title', title);
                            link.classList.add('internal-link');
                        }
                    }
                });
 
                return tempDiv.innerHTML;
            }
 
            // تنظیم event listener برای لینک‌های داخلی
            function setupInternalLinks() {
                const links = versesContainer.querySelectorAll('.internal-link');
               
                links.forEach(link => {
                    link.addEventListener('click', function(e) {
                        e.preventDefault();
                        const title = this.getAttribute('data-wiki-title');
                       
                        if (title) {
                            // بارگذاری صفحه جدید با همان روش
                            loadContent(title);
                        }
                    });
                });
             }
             }


خط ۸۶۰: خط ۷۸۸:
                     currentChapter--;
                     currentChapter--;
                     chapterSelect.value = currentChapter;
                     chapterSelect.value = currentChapter;
                     loadContent();
                     displayChapterWithIframe();
                 }
                 }
             });
             });
خط ۸۷۱: خط ۷۹۹:
                     currentChapter++;
                     currentChapter++;
                     chapterSelect.value = currentChapter;
                     chapterSelect.value = currentChapter;
                     loadContent();
                     displayChapterWithIframe();
                 }
                 }
             });
             });
خط ۸۹۲: خط ۸۲۰:
             function resetAll() {
             function resetAll() {
                 testamentSelect.disabled = true;
                 testamentSelect.disabled = true;
                 testamentSelect.value = '';
                 testamentSelect.innerHTML = '<option value="">انتخاب عهد</option>';
                 bookSelect.disabled = true;
                 bookSelect.disabled = true;
                 bookSelect.innerHTML = '<option value="">انتخاب کتاب</option>';
                 bookSelect.innerHTML = '<option value="">انتخاب کتاب</option>';
خط ۸۹۹: خط ۸۲۷:
                 resetContent();
                 resetContent();
             }
             }
            console.log('✅ برنامه کتاب مقدس روی دامنه مجاز بارگذاری شد');
         }
         }


         // شروع برنامه
         // 🔒 شروع برنامه با بررسی امنیتی
         document.addEventListener('DOMContentLoaded', function() {
         document.addEventListener('DOMContentLoaded', function() {
             if (!isDomainAllowed()) {
             console.log('🚀 شروع بارگذاری با بررسی امنیتی...');
                showAccessDenied();
            loadApplication();
                return;
        });
             }
 
             initializeBibleApp();
        // 🔒 جلوگیری از دسترسی به توابع از کنسول
        Object.defineProperty(window, 'translations', {
             value: null,
            writable: false,
             configurable: false
         });
         });
     </script>
     </script>
</body>
</body>
</html>
</html>

نسخهٔ ‏۹ اکتبر ۲۰۲۵، ساعت ۲۱:۲۴

کتاب مقدس - مطالعه آنلاین

کتاب مقدس

مطالعه کتاب مقدس با ترجمه‌های مختلف