حرف الألف
حرف الباء
للتحميل
من المرفقات
نرجو منكم الرد الجميل والدعاء
طرح جميل لابل جميل جدآ
بارك الله في جهودك
وربي يعطيك العافيه
طرح جميل لابل جميل جدآ
بارك الله في جهودك
وربي يعطيك العافيه
منور يا غالي اشكرك على مرورك الكريم
احسنتم الطريقة جميلة جدا و غريبة
الفائدة للجميع ان شاء الله
مشكورين وابارك مجهودكم الذي يحفزنا للافضل دائما:2 (122):
الفائدة للجميع ان شاء الله
شكر جزيل
برامج للاطفال قيمة بارك الله فيكم وجزاكم الله خيرا
موضوع جميل ومفيد
تسلم يدك
نشكر جهودكم المثمرة والى الامام :7 (140):
واله التدريس معكم صار متعة
جد لا اعلق بل اسفق رووووووووووعة بل ارووع من الرااائع
رووووووووووووووووووووووووووووووووووووووووعة
مشكورييييين ويعطيكم العافية
ما طلع معي شي
ممكن حدا يفيدني
مشكوووووور والله يعطيك الف عافيه
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
});