کتاب مقدس آنلاین: تفاوت میان نسخهها
ظاهر
بدون خلاصۀ ویرایش برچسب: برگرداندهشده |
بدون خلاصۀ ویرایش برچسب: برگرداندهشده |
||
خط ۳: | خط ۳: | ||
<head> | <head> | ||
<meta charset="UTF-8"> | <meta charset="UTF-8"> | ||
<title> | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
<title>کتاب مقدس - مطالعه آنلاین</title> | |||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |||
<style> | <style> | ||
body { font-family: | :root { | ||
--primary-color: #2c3e50; | |||
--secondary-color: #8B4513; | |||
--accent-color: #A52A2A; | |||
--light-color: #f8f5f2; | |||
--dark-color: #3E2723; | |||
--border-color: #D2B48C; | |||
--font-family: 'Times New Roman', serif; | |||
} | |||
* { | |||
margin: 0; | |||
padding: 0; | |||
box-sizing: border-box; | |||
} | |||
body { | |||
font-family: var(--font-family); | |||
background-color: #f5f1eb; | |||
color: var(--dark-color); | |||
line-height: 1.6; | |||
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" opacity="0.05"><path fill="%238B4513" d="M20,20 L80,20 L80,80 L20,80 Z" stroke="%238B4513" stroke-width="2"/></svg>'); | |||
padding: 0; | |||
margin: 0; | |||
} | |||
/* مخفی کردن هدرهای اضافی ویکی */ | |||
body > header:first-child, | |||
.wiki-header, | |||
.mw-header, | |||
#mw-header, | |||
#header, | |||
.header { | |||
display: none !important; | |||
} | |||
.container { | |||
max-width: 1200px; | |||
margin: 0 auto; | |||
padding: 5px 15px; | |||
} | |||
.app-header { | |||
text-align: center; | |||
margin-bottom: 20px; | |||
padding: 15px 20px; | |||
border-bottom: 2px solid var(--border-color); | |||
background: linear-gradient(to bottom, #f9f6f2, #f0e6d6); | |||
border-radius: 8px; | |||
box-shadow: 0 2px 8px rgba(0,0,0,0.1); | |||
position: relative; | |||
} | |||
.breadcrumb { | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
gap: 8px; | |||
margin-bottom: 12px; | |||
font-size: 0.9rem; | |||
color: var(--dark-color); | |||
direction: rtl; | |||
} | |||
.breadcrumb-home { | |||
color: var(--accent-color); | |||
text-decoration: none; | |||
transition: color 0.3s; | |||
font-weight: 500; | |||
} | |||
.breadcrumb-home:hover { | |||
color: var(--primary-color); | |||
text-decoration: underline; | |||
} | |||
.breadcrumb-separator { | |||
color: var(--border-color); | |||
font-weight: 300; | |||
} | |||
.breadcrumb-current { | |||
color: var(--primary-color); | |||
font-weight: bold; | |||
} | |||
.app-header h1 { | |||
color: var(--primary-color); | |||
margin-bottom: 8px; | |||
font-size: 1.8rem; | |||
text-shadow: 1px 1px 2px rgba(0,0,0,0.1); | |||
font-weight: 700; | |||
text-align: center; | |||
} | |||
.description { | |||
color: var(--accent-color); | |||
font-size: 1rem; | |||
font-style: italic; | |||
margin-top: 5px; | |||
text-align: center; | |||
} | |||
.selector-container { | |||
display: grid; | |||
grid-template-columns: 1fr 1fr; | |||
gap: 15px; | |||
margin-bottom: 20px; | |||
background: white; | |||
padding: 15px; | |||
border-radius: 8px; | |||
box-shadow: 0 4px 8px rgba(0,0,0,0.08); | |||
border: 1px solid var(--border-color); | |||
direction: rtl; | |||
text-align: right; | |||
} | |||
.selector-box { | |||
background: white; | |||
border-radius: 6px; | |||
padding: 12px; | |||
border: 1px solid var(--border-color); | |||
} | |||
.selector-title { | |||
font-size: 1rem; | |||
margin-bottom: 8px; | |||
color: var(--primary-color); | |||
border-bottom: 1px solid var(--border-color); | |||
padding-bottom: 5px; | |||
text-align: center; | |||
} | |||
select { | |||
width: 100%; | |||
padding: 10px 12px; | |||
border: 1px solid var(--border-color); | |||
border-radius: 4px; | |||
background-color: white; | |||
font-size: 0.95rem; | |||
color: var(--dark-color); | |||
cursor: pointer; | |||
transition: all 0.3s; | |||
font-family: var(--font-family); | |||
text-align: right; | |||
direction: rtl; | |||
} | |||
select:focus { | |||
outline: none; | |||
border-color: var(--accent-color); | |||
box-shadow: 0 0 0 2px rgba(165, 42, 42, 0.2); | |||
} | |||
.bible-content { | |||
background: white; | |||
border-radius: 8px; | |||
box-shadow: 0 4px 12px rgba(0,0,0,0.1); | |||
padding: 25px; | |||
min-height: 500px; | |||
border: 1px solid var(--border-color); | |||
margin-bottom: 20px; | |||
direction: rtl; | |||
text-align: right; | |||
} | |||
.chapter-title { | |||
text-align: center; | |||
margin-bottom: 20px; | |||
color: var(--primary-color); | |||
font-size: 1.5rem; | |||
padding-bottom: 10px; | |||
border-bottom: 2px solid var(--border-color); | |||
} | |||
.content-display { | |||
width: 100%; | |||
height: 650px; | |||
border: 1px solid var(--border-color); | |||
border-radius: 6px; | |||
background: white; | |||
} | |||
/* استایلهای جدید برای Overlay */ | |||
.iframe-wrapper { | |||
position: relative; | |||
width: 100%; | |||
height: 650px; | |||
} | |||
.iframe-overlay { | |||
position: absolute; | |||
top: 0; | |||
left: 0; | |||
width: 100%; | |||
height: 100%; | |||
cursor: pointer; | |||
z-index: 10; | |||
background: transparent; | |||
transition: background-color 0.3s; | |||
} | |||
.iframe-overlay:hover { | |||
background: rgba(52, 152, 219, 0.1); | |||
} | |||
.overlay-message { | |||
position: absolute; | |||
bottom: 10px; | |||
right: 10px; | |||
background: rgba(0, 0, 0, 0.7); | |||
color: white; | |||
padding: 5px 10px; | |||
border-radius: 4px; | |||
font-size: 0.8rem; | |||
opacity: 0; | |||
transition: opacity 0.3s; | |||
} | |||
.iframe-overlay:hover .overlay-message { | |||
opacity: 1; | |||
} | |||
.navigation { | |||
display: flex; | |||
justify-content: space-between; | |||
align-items: center; | |||
margin-top: 25px; | |||
flex-wrap: wrap; | |||
gap: 10px; | |||
direction: rtl; | |||
} | |||
.nav-btn { | |||
padding: 12px 20px; | |||
background-color: var(--secondary-color); | |||
color: white; | |||
border: none; | |||
border-radius: 6px; | |||
cursor: pointer; | |||
transition: all 0.3s; | |||
font-size: 1rem; | |||
display: flex; | |||
align-items: center; | |||
gap: 8px; | |||
font-family: var(--font-family); | |||
box-shadow: 0 2px 4px rgba(0,0,0,0.2); | |||
} | |||
.nav-btn:hover { | |||
background-color: var(--accent-color); | |||
transform: translateY(-2px); | |||
box-shadow: 0 4px 8px rgba(0,0,0,0.2); | |||
} | |||
.nav-btn:disabled { | |||
background-color: #b0a090; | |||
cursor: not-allowed; | |||
transform: none; | |||
box-shadow: none; | |||
} | |||
.wiki-link { | |||
display: inline-flex; | |||
align-items: center; | |||
justify-content: center; | |||
gap: 8px; | |||
padding: 12px 20px; | |||
background-color: var(--accent-color); | |||
color: white; | |||
text-decoration: none; | |||
border-radius: 6px; | |||
transition: all 0.3s; | |||
font-size: 1rem; | |||
font-family: var(--font-family); | |||
box-shadow: 0 2px 4px rgba(0,0,0,0.2); | |||
} | |||
.wiki-link:hover { | |||
background-color: #8B0000; | |||
transform: translateY(-2px); | |||
box-shadow: 0 4px 8px rgba(0,0,0,0.2); | |||
} | |||
.instructions { | |||
text-align: center; | |||
color: #7f8c8d; | |||
padding: 40px 20px; | |||
border: 2px dashed var(--border-color); | |||
border-radius: 8px; | |||
margin-top: 20px; | |||
font-size: 1.1rem; | |||
background-color: var(--light-color); | |||
} | |||
.access-denied { | |||
text-align: center; | |||
padding: 40px; | |||
background: #fee; | |||
border-radius: 8px; | |||
border: 2px solid #f5c6cb; | |||
color: #721c24; | |||
margin-top: 20px; | |||
} | |||
.access-denied h3 { | |||
color: #721c24; | |||
margin-bottom: 15px; | |||
font-size: 1.5rem; | |||
} | |||
/* استایلهای مخصوص موبایل */ | |||
@media (max-width: 768px) { | |||
.container { | |||
padding: 8px 10px; | |||
} | |||
.app-header { | |||
margin-bottom: 15px; | |||
padding: 12px 15px; | |||
} | |||
.breadcrumb { | |||
font-size: 0.85rem; | |||
margin-bottom: 10px; | |||
} | |||
.app-header h1 { | |||
font-size: 1.5rem; | |||
margin-bottom: 6px; | |||
} | |||
.description { | |||
font-size: 0.9rem; | |||
} | |||
.selector-container { | |||
grid-template-columns: 1fr; | |||
gap: 10px; | |||
margin-bottom: 20px; | |||
padding: 15px; | |||
} | |||
.bible-content { | |||
padding: 15px; | |||
min-height: 450px; | |||
} | |||
.chapter-title { | |||
font-size: 1.3rem; | |||
margin-bottom: 15px; | |||
} | |||
.content-display, .iframe-wrapper { | |||
height: 500px; | |||
} | |||
.navigation { | |||
flex-direction: column; | |||
gap: 10px; | |||
} | |||
.nav-btn, .wiki-link { | |||
width: 100%; | |||
justify-content: center; | |||
} | |||
} | |||
@media (max-width: 480px) { | |||
.content-display, .iframe-wrapper { | |||
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 { | |||
display: flex; | |||
flex-direction: column; | |||
align-items: center; | |||
justify-content: center; | |||
height: 100%; | |||
color: #7f8c8d; | |||
text-align: center; | |||
} | |||
.placeholder i { | |||
font-size: 3rem; | |||
margin-bottom: 15px; | |||
color: var(--border-color); | |||
} | |||
/* استایل برای راستچین کامل */ | |||
option { | |||
direction: rtl; | |||
text-align: right; | |||
} | |||
</style> | </style> | ||
</head> | </head> | ||
<body> | <body> | ||
<h1> | <div class="container"> | ||
<div class="app-header"> | |||
<nav class="breadcrumb"> | |||
<a href="https://www.pediabible.com" class="breadcrumb-home">خانه</a> | |||
<span class="breadcrumb-separator">/</span> | |||
<span class="breadcrumb-current">کتاب مقدس</span> | |||
</nav> | |||
<h1>کتاب مقدس</h1> | |||
<p class="description">مطالعه کتاب مقدس با ترجمههای مختلف</p> | |||
</div> | |||
<div id="content-wrapper"> | |||
<!-- محتوا توسط JavaScript پر میشود --> | |||
</div> | |||
</div> | |||
<script> | <script> | ||
function | // 🔒 سیستم حفاظتی - بررسی دامنه مجاز | ||
const | const ALLOWED_DOMAINS = [ | ||
'pediabible.com', | |||
'www.pediabible.com', | |||
'localhost', | |||
'127.0.0.1' | |||
]; | |||
// تابع بررسی مجاز بودن دامنه | |||
function isDomainAllowed() { | |||
const currentDomain = window.location.hostname; | |||
console.log('🔍 بررسی دامنه:', currentDomain); | |||
// اگر روی فایل محلی هستیم، اجازه بده | |||
if (!currentDomain || currentDomain === '' || currentDomain === 'null') { | |||
console.log('✅ فایل محلی - مجاز'); | |||
return true; | |||
} | |||
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; | ||
const | } | ||
// تابع نمایش پیام دسترسی غیرمجاز | |||
function showAccessDenied() { | |||
const wrapper = document.getElementById('content-wrapper'); | |||
wrapper.innerHTML = ` | |||
<div class="access-denied"> | |||
<h3><i class="fas fa-ban"></i> دسترسی محدود شده</h3> | |||
<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> | |||
</div> | |||
`; | |||
} | |||
// تابع اصلی بارگذاری برنامه | |||
function loadApplication() { | |||
console.log('🚀 شروع بارگذاری با بررسی امنیتی...'); | |||
if (!isDomainAllowed()) { | |||
console.log('❌ دسترسی غیرمجاز - نمایش پیام خطا'); | |||
showAccessDenied(); | |||
return; | |||
} | |||
console.log('✅ دامنه مجاز - بارگذاری برنامه اصلی'); | |||
// اگر دامنه مجاز باشد، برنامه اصلی بارگذاری میشود | |||
initializeBibleApp(); | |||
} | |||
// دادههای کامل کتابهای مقدس | |||
const bibleBooks = { | |||
old: [ | |||
{ name: "پیدایش", chapters: 50, displayName: "پیدایش" }, | |||
{ name: "خروج", chapters: 40, displayName: "خروج" }, | |||
{ name: "لاویان", chapters: 27, displayName: "لاویان" }, | |||
{ name: "اعداد", chapters: 36, displayName: "اعداد" }, | |||
{ name: "تثنیه", chapters: 34, displayName: "تثنیه" }, | |||
{ name: "یوشع", chapters: 24, displayName: "یوشع" }, | |||
{ name: "داوران", chapters: 21, displayName: "داوران" }, | |||
{ name: "روت", chapters: 4, displayName: "روت" }, | |||
{ name: "اول سموئیل", chapters: 31, displayName: "اول سموئیل" }, | |||
{ name: "دوم سموئیل", chapters: 24, displayName: "دوم سموئیل" }, | |||
{ name: "اول پادشاهان", chapters: 22, displayName: "اول پادشاهان" }, | |||
{ name: "دوم پادشاهان", chapters: 25, displayName: "دوم پادشاهان" }, | |||
{ name: "اول تواریخ", chapters: 29, displayName: "اول تواریخ" }, | |||
{ name: "دوم تواریخ", chapters: 36, displayName: "دوم تواریخ" }, | |||
{ name: "عزرا", chapters: 10, displayName: "عزرا" }, | |||
{ name: "نحمیا", chapters: 13, displayName: "نحمیا" }, | |||
{ name: "استر", chapters: 10, displayName: "استر" }, | |||
{ name: "ایوب", chapters: 42, displayName: "ایوب" }, | |||
{ name: "مزامیر", chapters: 150, displayName: "مزامیر" }, | |||
{ name: "امثال سلیمان", chapters: 31, displayName: "امثال سلیمان" }, | |||
{ name: "جامعه", chapters: 12, displayName: "جامعه" }, | |||
{ name: "غزل غزلهای سلیمان", chapters: 8, displayName: "غزل غزلهای سلیمان" }, | |||
{ name: "اشعیا", chapters: 66, displayName: "اشعیا" }, | |||
{ name: "ارمیا", chapters: 52, displayName: "ارمیا" }, | |||
{ name: "مراثی ارمیا", chapters: 5, displayName: "مراثی ارمیا" }, | |||
{ name: "حزقیال", chapters: 48, displayName: "حزقیال" }, | |||
{ name: "دانیال", chapters: 12, displayName: "دانیال" }, | |||
{ name: "هوشع", chapters: 14, displayName: "هوشع" }, | |||
{ name: "یوئیل", chapters: 3, displayName: "یوئیل" }, | |||
{ name: "عاموس", chapters: 9, displayName: "عاموس" }, | |||
{ name: "عوبدیا", chapters: 1, displayName: "عوبدیا" }, | |||
{ name: "یونس", chapters: 4, displayName: "یونس" }, | |||
{ name: "میکاه", chapters: 7, displayName: "میکاه" }, | |||
{ name: "ناحوم", chapters: 3, displayName: "ناحوم" }, | |||
{ name: "حبقوق", chapters: 3, displayName: "حبقوق" }, | |||
{ name: "صفنیا", chapters: 3, displayName: "صفنیا" }, | |||
{ name: "حجی", chapters: 2, displayName: "حجی" }, | |||
{ name: "زکریا", chapters: 14, displayName: "زکریا" }, | |||
{ name: "ملاکی", chapters: 4, displayName: "ملاکی" } | |||
], | |||
new: [ | |||
{ name: "متی", chapters: 28, displayName: "انجیل به قلم متی" }, | |||
{ name: "مرقس", chapters: 16, displayName: "انجیل به قلم مرقس" }, | |||
{ name: "لوقا", chapters: 24, displayName: "انجیل به قلم لوقا" }, | |||
{ name: "یوحنا", chapters: 21, displayName: "انجیل به قلم یوحنا" }, | |||
{ name: "اعمال ", chapters: 28, displayName: "اعمال " }, | |||
{ name: "رومیان", chapters: 16, displayName: "رساله به رومیان" }, | |||
{ name: "اول قرنتیان", chapters: 16, displayName: "رساله اول به قرنتیان" }, | |||
{ name: "دوم قرنتیان", chapters: 13, displayName: "رساله دوم به قرنتیان" }, | |||
{ name: "غلاطیان", chapters: 6, displayName: "رساله به غلاطیان" }, | |||
{ name: "افسسیان", chapters: 6, displayName: "رساله به افسسیان" }, | |||
{ name: "فیلیپیان", chapters: 4, displayName: "رساله به فیلیپیان" }, | |||
{ name: "کولسیان", chapters: 4, displayName: "رساله به کولسیان" }, | |||
{ name: "اول تسالونیکیان", chapters: 5, displayName: "رساله اول به تسالونیکیان" }, | |||
{ name: "دوم تسالونیکیان", chapters: 3, displayName: "رساله دوم به تسالونیکیان" }, | |||
{ name: "اول تیموتائوس", chapters: 6, displayName: "رساله اول به تیموتائوس" }, | |||
{ name: "دوم تیموتائوس", chapters: 4, displayName: "رساله دوم به تیموتائوس" }, | |||
{ name: "تیتوس", chapters: 3, displayName: "رساله به تیتوس" }, | |||
{ name: "فیلیمون", chapters: 1, displayName: "رساله به فیلیمون" }, | |||
{ name: "عبرانیان", chapters: 13, displayName: "رساله به عبرانیان" }, | |||
{ name: "یعقوب", chapters: 5, displayName: "رساله یعقوب" }, | |||
{ name: "اول پطرس", chapters: 5, displayName: "رساله اول پطرس" }, | |||
{ name: "دوم پطرس", chapters: 3, displayName: "رساله دوم پطرس" }, | |||
{ name: "اول یوحنا", chapters: 5, displayName: "رساله اول یوحنا" }, | |||
{ name: "دوم یوحنا", chapters: 1, displayName: "رساله دوم یوحنا" }, | |||
{ name: "سوم یوحنا", chapters: 1, displayName: "رساله سوم یوحنا" }, | |||
{ name: "یهودا", chapters: 1, displayName: "رساله یهودا" }, | |||
{ name: "کتاب مکاشفه", chapters: 22, displayName: "کتاب مکاشفه " } | |||
] | |||
}; | |||
// 🔧 برنامه اصلی کتاب مقدس | |||
function initializeBibleApp() { | |||
const wrapper = document.getElementById('content-wrapper'); | |||
// | // ایجاد ساختار HTML برنامه | ||
wrapper.innerHTML = ` | |||
<div class="selector-container"> | |||
<div class="selector-box"> | |||
<h3 class="selector-title">ترجمه</h3> | |||
<select id="translation-select"> | |||
<option value="">انتخاب ترجمه</option> | |||
<option value="old">ترجمه قدیم</option> | |||
<option value="hejre_nou">هزاره نو</option> | |||
<option value="mozde">مژده</option> | |||
<option value="daneshname">دانشنامه</option> | |||
</select> | |||
</div> | |||
<div class="selector-box"> | |||
<h3 class="selector-title">عهد</h3> | |||
<select id="testament-select" disabled> | |||
<option value="">انتخاب عهد</option> | |||
<option value="old">عهد قدیم</option> | |||
<option value="new">عهد جدید</option> | |||
</select> | |||
</div> | |||
<div class="selector-box"> | |||
<h3 class="selector-title">کتاب</h3> | |||
<select id="book-select" disabled> | |||
<option value="">انتخاب کتاب</option> | |||
</select> | |||
</div> | |||
<div class="selector-box"> | |||
<h3 class="selector-title">فصل</h3> | |||
<select id="chapter-select" disabled> | |||
<option value="">انتخاب فصل</option> | |||
</select> | |||
</div> | |||
</div> | |||
<div class="bible-content"> | |||
<h2 class="chapter-title" id="chapter-title">لطفاً ترجمه، کتاب و فصل مورد نظر را انتخاب کنید</h2> | |||
<div id="verses-container"> | |||
<div class="instructions"> | |||
<div class="placeholder"> | |||
<i class="fas fa-book-open"></i> | |||
<p>برای مطالعه کتاب مقدس، لطفاً ابتدا ترجمه، سپس عهد، کتاب و فصل مورد نظر خود را انتخاب کنید.</p> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="navigation"> | |||
<button class="nav-btn" id="prev-chapter" disabled> | |||
<i class="fas fa-arrow-right"></i> | |||
فصل قبلی | |||
</button> | |||
<a href="#" class="wiki-link" id="wiki-page-link" target="_blank" style="display: none;"> | |||
<i class="fas fa-external-link-alt"></i> | |||
صفحه کامل | |||
</a> | |||
<button class="nav-btn" id="next-chapter" disabled> | |||
فصل بعدی | |||
<i class="fas fa-arrow-left"></i> | |||
</button> | |||
</div> | |||
</div> | |||
`; | |||
// دادههای ترجمههای مختلف | |||
const translations = { | |||
'old': { | |||
name: 'ترجمه قدیم', | |||
baseUrl: 'https://www.pediabible.com/index.php?title=', | |||
getPageTitle: function(bookDisplayName, chapter) { | |||
return `${bookDisplayName} فصل ${chapter}`; | |||
} | |||
}, | |||
'hejre_nou': { | |||
name: 'هزاره نو', | |||
baseUrl: 'https://www.pediabible.com/index.php?title=', | |||
getPageTitle: function(bookDisplayName, chapter) { | |||
return `${bookDisplayName} هزاره نو فصل ${chapter}`; | |||
} | |||
}, | |||
'mozde': { | |||
name: 'مژده', | |||
baseUrl: 'https://www.pediabible.com/index.php?title=', | |||
getPageTitle: function(bookDisplayName, chapter) { | |||
return `${bookDisplayName} مژده فصل ${chapter}`; | |||
} | |||
}, | |||
'daneshname': { | |||
name: 'دانشنامه', | |||
baseUrl: 'https://www.pediabible.com/index.php?title=', | |||
getPageTitle: function(bookDisplayName, chapter) { | |||
return `${bookDisplayName} دانشنامه فصل ${chapter}`; | |||
} | |||
} | |||
}; | }; | ||
// عناصر DOM | |||
const translationSelect = document.getElementById('translation-select'); | |||
const testamentSelect = document.getElementById('testament-select'); | |||
const bookSelect = document.getElementById('book-select'); | |||
const chapterSelect = document.getElementById('chapter-select'); | |||
const chapterTitle = document.getElementById('chapter-title'); | |||
const versesContainer = document.getElementById('verses-container'); | |||
const prevChapterBtn = document.getElementById('prev-chapter'); | |||
const nextChapterBtn = document.getElementById('next-chapter'); | |||
const wikiPageLink = document.getElementById('wiki-page-link'); | |||
// متغیرهای وضعیت فعلی | |||
let currentTranslation = ''; | |||
let currentTestament = ''; | |||
let currentBook = ''; | |||
let currentChapter = 1; | |||
// رویداد تغییر ترجمه | |||
translationSelect.addEventListener('change', function() { | |||
currentTranslation = this.value; | |||
if (currentTranslation) { | |||
testamentSelect.disabled = false; | |||
testamentSelect.value = ''; | |||
bookSelect.disabled = true; | |||
bookSelect.innerHTML = '<option value="">انتخاب کتاب</option>'; | |||
chapterSelect.disabled = true; | |||
chapterSelect.innerHTML = '<option value="">انتخاب فصل</option>'; | |||
resetContent(); | |||
} else { | |||
resetAll(); | |||
} | |||
}); | |||
// رویداد تغییر عهد | |||
testamentSelect.addEventListener('change', function() { | |||
currentTestament = this.value; | |||
if (currentTestament) { | |||
bookSelect.disabled = false; | |||
bookSelect.innerHTML = '<option value="">انتخاب کتاب</option>'; | |||
bibleBooks[currentTestament].forEach((book, index) => { | |||
const option = document.createElement('option'); | |||
option.value = index; | |||
option.textContent = book.name; | |||
bookSelect.appendChild(option); | |||
}); | |||
chapterSelect.disabled = true; | |||
chapterSelect.innerHTML = '<option value="">انتخاب فصل</option>'; | |||
resetContent(); | |||
} else { | |||
bookSelect.disabled = true; | |||
bookSelect.innerHTML = '<option value="">انتخاب کتاب</option>'; | |||
chapterSelect.disabled = true; | |||
chapterSelect.innerHTML = '<option value="">انتخاب فصل</option>'; | |||
resetContent(); | |||
} | |||
}); | |||
// رویداد تغییر کتاب | |||
bookSelect.addEventListener('change', function() { | |||
currentBook = this.value; | |||
if (currentBook !== '') { | |||
chapterSelect.disabled = false; | |||
chapterSelect.innerHTML = '<option value="">انتخاب فصل</option>'; | |||
const bookIndex = parseInt(currentBook); | |||
const chaptersCount = bibleBooks[currentTestament][bookIndex].chapters; | |||
for (let i = 1; i <= chaptersCount; i++) { | |||
const option = document.createElement('option'); | |||
option.value = i; | |||
option.textContent = `فصل ${i}`; | |||
chapterSelect.appendChild(option); | |||
} | |||
prevChapterBtn.disabled = true; | |||
nextChapterBtn.disabled = true; | |||
wikiPageLink.style.display = 'none'; | |||
} else { | |||
chapterSelect.disabled = true; | |||
chapterSelect.innerHTML = '<option value="">انتخاب فصل</option>'; | |||
resetContent(); | |||
} | |||
}); | |||
// رویداد تغییر فصل | |||
chapterSelect.addEventListener('change', function() { | |||
currentChapter = parseInt(this.value); | |||
if (currentChapter) { | |||
displayChapterWithIframe(); | |||
} else { | |||
resetContent(); | |||
} | |||
}); | |||
// نمایش فصل با iframe و Overlay | |||
function displayChapterWithIframe() { | |||
const bookIndex = parseInt(currentBook); | |||
const bookData = bibleBooks[currentTestament][bookIndex]; | |||
const bookName = bookData.name; | |||
const bookDisplayName = bookData.displayName; | |||
const translationName = translations[currentTranslation].name; | |||
chapterTitle.textContent = `${translationName} - ${bookName} - فصل ${currentChapter}`; | |||
// استفاده از الگوی مناسب برای هر ترجمه | |||
const pageTitle = translations[currentTranslation].getPageTitle(bookDisplayName, currentChapter); | |||
// استفاده از action=render برای نمایش فقط محتوای اصلی | |||
const contentUrl = `${translations[currentTranslation].baseUrl}${encodeURIComponent(pageTitle)}&action=render`; | |||
const fullPageUrl = `${translations[currentTranslation].baseUrl}${encodeURIComponent(pageTitle)}`; | |||
// ایجاد iframe با overlay | |||
versesContainer.innerHTML = ` | |||
<div class="iframe-wrapper"> | |||
<iframe | |||
id="content-iframe" | |||
src="${contentUrl}" | |||
class="content-display" | |||
frameborder="0" | |||
loading="lazy" | |||
sandbox="allow-scripts allow-same-origin allow-popups" | |||
allowfullscreen> | |||
</iframe> | |||
<div class="iframe-overlay" id="iframe-overlay"> | |||
<div class="overlay-message">برای باز کردن صفحه کامل کلیک کنید</div> | |||
</div> | |||
</div> | |||
`; | |||
// اضافه کردن event listener برای overlay | |||
const overlay = document.getElementById('iframe-overlay'); | |||
overlay.addEventListener('click', function() { | |||
window.open(fullPageUrl, '_blank'); | |||
}); | |||
// لینک صفحه کامل برای باز کردن در تب جدید | |||
wikiPageLink.href = fullPageUrl; | |||
wikiPageLink.style.display = 'flex'; | |||
updateNavigationButtons(); | |||
} | |||
function updateNavigationButtons() { | |||
const bookIndex = parseInt(currentBook); | |||
const chaptersCount = bibleBooks[currentTestament][bookIndex].chapters; | |||
prevChapterBtn.disabled = currentChapter <= 1; | |||
nextChapterBtn.disabled = currentChapter >= chaptersCount; | |||
} | |||
prevChapterBtn.addEventListener('click', function() { | |||
if (currentChapter > 1) { | |||
currentChapter--; | |||
chapterSelect.value = currentChapter; | |||
displayChapterWithIframe(); | |||
} | |||
}); | |||
nextChapterBtn.addEventListener('click', function() { | |||
const bookIndex = parseInt(currentBook); | |||
const chaptersCount = bibleBooks[currentTestament][bookIndex].chapters; | |||
if (currentChapter < chaptersCount) { | |||
currentChapter++; | |||
< | chapterSelect.value = currentChapter; | ||
displayChapterWithIframe(); | |||
} | |||
}); | |||
function resetContent() { | |||
chapterTitle.textContent = 'لطفاً ترجمه، کتاب و فصل مورد نظر را انتخاب کنید'; | |||
versesContainer.innerHTML = ` | |||
<div class="instructions"> | |||
<div class="placeholder"> | |||
<i class="fas fa-book-open"></i> | |||
<p>برای مطالعه کتاب مقدس، لطفاً ابتدا ترجمه، سپس عهد، کتاب و فصل مورد نظر خود را انتخاب کنید.</p> | |||
</div> | |||
</div> | |||
`; | |||
prevChapterBtn.disabled = true; | |||
nextChapterBtn.disabled = true; | |||
wikiPageLink.style.display = 'none'; | |||
} | |||
function resetAll() { | |||
testamentSelect.disabled = true; | |||
testamentSelect.innerHTML = '<option value="">انتخاب عهد</option>'; | |||
bookSelect.disabled = true; | |||
bookSelect.innerHTML = '<option value="">انتخاب کتاب</option>'; | |||
chapterSelect.disabled = true; | |||
chapterSelect.innerHTML = '<option value="">انتخاب فصل</option>'; | |||
resetContent(); | |||
} | |||
console.log('✅ برنامه کتاب مقدس روی دامنه مجاز بارگذاری شد'); | |||
} | } | ||
// 🔒 شروع برنامه با بررسی امنیتی | |||
function | document.addEventListener('DOMContentLoaded', function() { | ||
console.log('🚀 شروع بارگذاری با بررسی امنیتی...'); | |||
loadApplication(); | |||
} | }); | ||
// | // 🔒 جلوگیری از دسترسی به توابع از کنسول | ||
Object.defineProperty(window, 'translations', { | |||
value: null, | |||
writable: false, | |||
configurable: false | |||
}); | }); | ||
</script> | </script> | ||
</body> | </body> | ||
</html> | </html> |