الهدف من هذا الكتاب :
أكثر الناس قد تجهل بعض الأحكام والمسائل المتعلقة بالصيام في شهـر رمــــــضان
الفضيل ، فجاءت الفكرة بتصميم هذا الكتاب ليكــون كالمرجع وذلك لما فيه من فائدة
كبيرة للناس مـن شرح وتوضيح لأحكام ومســائل في الصيام .
أتمنى التوفيق من الله عـــز وجل وأن يكون مـا قدمت خـالصاً لوجهه
وأن ينال رضى الله ثم رضى الجميع .. فلاتنسوني من صالح الدعاء ..
صورة الكتاب :
اسم الكتاب : سبعون مسألة في الصيام
رابط تحميل الكتاب والشرح المبسط لطريقة استخدامه
الحجم : ملف مضغوط بصيغة WINRAR ـ 1.63 ميجا (خفيف جداً)
رابط الكتاب
والشرح المبسط لطريقة استخدامه من خلال الإنترنت اون لاين
بارك الله فيك اخي الغالي
احمد الصرايرة
عغلى ما تقدمة من جديد ومميز
منور الموضوع يا غالي بتواجدك الجميل
const config = {
siteUrl: 'https://www.jnob-jo.com',
whitelist: [
'youtube.com',
'youtu.be',
'facebook.com',
'twitter.com',
'iinkor.com',
'forum.iinkor.com',
'instagram.com',
'up.jnob-jo.com',
'drive.google.com',
'docs.google.com',
'apps.moe.gov.jo',
'nccd.gov.jo''instagram.com'
]
};
function isWhitelisted(url) {
return config.whitelist.some(domain => url.includes(domain));
}
function isExternalLink(url) {
try {
const urlObj = new URL(url);
const siteUrlObj = new URL(config.siteUrl);
return urlObj.hostname !== siteUrlObj.hostname;
} catch (e) {
return false;
}
}
function convertExternalLink(url, replaceWithStars = false) {
if (!url) return url;
// تجاهل الروابط الداخلية والمستثناة
if (!isExternalLink(url) || isWhitelisted(url)) {
return url;
}
if (replaceWithStars) {
return '****';
}
return config.siteUrl;
}
function processBBCodeLinks() {
const textNodes = document.evaluate(
"//text()[contains(., '[URL')]",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null
);
for (let i = 0; i < textNodes.snapshotLength; i++) {
const node = textNodes.snapshotItem(i);
let text = node.textContent;
text = text.replace(
/\[URL[^\]]*\](https?:\/\/[^\[]+)\[\/URL\]/g,
(match, url) => {
const isUrlAlone = text.trim() === match;
const newUrl = convertExternalLink(url.trim(), isUrlAlone);
return `[URL]${newUrl}[/URL]`;
}
);
if (text !== node.textContent) {
node.textContent = text;
}
}
}
function processPlainTextLinks() {
const textNodes = document.evaluate(
"//text()[contains(., 'http://') or contains(., 'https://')]",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null
);
for (let i = 0; i < textNodes.snapshotLength; i++) {
const node = textNodes.snapshotItem(i);
let text = node.textContent;
text = text.replace(
/(https?:\/\/[^\s\[\]<>"']+)/g,
(match) => {
// تحقق مما إذا كان الرابط وحده في النص
const isUrlAlone = text.trim() === match;
return convertExternalLink(match, isUrlAlone);
}
);
if (text !== node.textContent) {
node.textContent = text;
}
}
}
function processPageLinks() {
const links = document.querySelectorAll('.message-body a, .p-body-pageContent a');
links.forEach(link => {
const href = link.getAttribute('href');
if (href) {
const isUrlAlone = link.textContent.trim() === href;
const newHref = convertExternalLink(href, isUrlAlone);
if (newHref !== href) {
link.setAttribute('href', newHref);
if (isUrlAlone) {
link.textContent = '****';
}
link.classList.add('external-redirect');
}
}
});
processBBCodeLinks();
processPlainTextLinks();
}
document.addEventListener('DOMContentLoaded', processPageLinks);
document.addEventListener('XFContentLoaded', processPageLinks);
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.addedNodes && mutation.addedNodes.length > 0) {
processPageLinks();
}
});
});
observer.observe(document.body, {
childList: true,
subtree: true
});