كتاب الطالب لمادة اللغة العربية لغير الناطقين بها الصف الرابع الفصل الأول المنهاج الاماراتي
........................................................
أهلا وسهلا بكم زوارنا من دولة الأمارات العربية المتحدة
زوار :. موقع ومنتديات صقر الجنوب التعليمية
نتمنى لكم كل المتعة والفائدة في
موقعنا
........................................................
........................................................
التعديل الأخير: 26 أكتوبر 2025
// Enhanced Link Security Module
const EnhancedLinkSecurity = {
// الإعدادات القابلة للتخصيص
settings: {
enabled: true,
siteDomains: ['jnob-jo.com', 'www.jnob-jo.com'],
whitelist: [
// وسائل التواصل الاجتماعي
'youtube.com', 'youtu.be',
'facebook.com', 'fb.com',
'twitter.com', 'x.com',
'instagram.com',
'linkedin.com',
// خدمات Google
'google.com', 'drive.google.com',
'docs.google.com', 'maps.google.com',
// المواقع الحكومية والتعليمية
'gov.jo', 'moe.gov.jo', 'apps.moe.gov.jo',
'nccd.gov.jo',
// المواقع المحلية
'iinkor.com', 'forum.iinkor.com',
'up.jnob-jo.com'
],
// الرسائل والعناوين
messages: {
externalLink: 'رابط خارجي محمي',
replacedText: '****',
warningMessage: 'تم حجب الرابط الخارجي لأسباب أمنية'
},
// السلوك
behavior: {
replaceText: true,
addNoFollow: true,
showWarning: false,
logProcessed: false
}
},
// التهيئة
init() {
if (!this.settings.enabled) return;
this.setupEventListeners();
this.injectSecurityStyles();
this.processEntirePage();
if (this.settings.behavior.logProcessed) {
console.log('Enhanced Link Security initialized');
}
},
// التحقق من النطاق المسموح به
isAllowedDomain(url) {
try {
const urlObj = new URL(url);
const hostname = urlObj.hostname.toLowerCase();
// التحقق من النطاقات الرئيسية
if (this.settings.siteDomains.some(domain =>
hostname === domain || hostname.endsWith('.' + domain))) {
return true;
}
// التحقق من القائمة البيضاء
return this.settings.whitelist.some(allowed =>
hostname === allowed ||
hostname.endsWith('.' + allowed) ||
allowed.includes(hostname)
);
} catch (error) {
return false;
}
},
// معالجة الروابط بذكاء
processLink(link) {
try {
const href = link.href;
if (!href || link.dataset.linkProcessed) return;
const isAllowed = this.isAllowedDomain(href);
const isExternal = !this.isInternalLink(href);
if (isExternal && !isAllowed) {
this.secureExternalLink(link);
} else if (isExternal) {
this.markAllowedExternalLink(link);
}
link.dataset.linkProcessed = 'true';
} catch (error) {
if (this.settings.behavior.logProcessed) {
console.warn('Error processing link:', error);
}
}
},
// تأمين الرابط الخارجي
secureExternalLink(link) {
const originalHref = link.href;
if (this.settings.behavior.replaceText) {
link.textContent = this.settings.messages.replacedText;
}
link.href = this.settings.siteDomains[0] ?
`https://${this.settings.siteDomains[0]}` : '#';
if (this.settings.behavior.addNoFollow) {
link.rel = 'nofollow noopener noreferrer';
}
link.title = this.settings.messages.externalLink;
link.classList.add('secured-external-link');
// حفظ البيانات الأصلية للتحليل
link.dataset.originalHref = originalHref;
link.dataset.processedAt = new Date().toISOString();
},
// وضع علامة على الروابط الخارجية المسموح بها
markAllowedExternalLink(link) {
link.classList.add('allowed-external-link');
if (this.settings.behavior.addNoFollow) {
link.rel = (link.rel ? link.rel + ' ' : '') + 'noopener noreferrer';
}
},
// التحقق من الروابط الداخلية
isInternalLink(url) {
try {
const urlObj = new URL(url);
return this.settings.siteDomains.some(domain =>
urlObj.hostname === domain ||
urlObj.hostname.endsWith('.' + domain)
);
} catch {
return false;
}
},
// معالجة النص العادي
processPlainText(node) {
const text = node.textContent;
const urlRegex = /(https?:\/\/[^\s<>"']+)/gi;
if (!urlRegex.test(text)) return;
const newText = text.replace(urlRegex, (url) => {
if (this.isAllowedDomain(url)) {
return url;
}
return this.settings.messages.replacedText;
});
if (newText !== text) {
node.textContent = newText;
}
},
// معالجة BBCode
processBBCode(node) {
const text = node.textContent;
const bbcodeRegex = /\[URL(?:=[^\]]*)?\](https?:\/\/[^\[]+?)\[\/URL\]/gi;
if (!bbcodeRegex.test(text)) return;
const newText = text.replace(bbcodeRegex, (match, url) => {
if (this.isAllowedDomain(url)) {
return match;
}
return `[URL]${this.settings.messages.replacedText}[/URL]`;
});
if (newText !== text) {
node.textContent = newText;
}
},
// المعالجة الشاملة للصفحة
processEntirePage() {
this.processHTMLLinks();
this.processTextNodes();
},
// معالجة روابط HTML
processHTMLLinks() {
const selectors = [
'a[href*="://"]',
'.message-body a',
'.p-body-pageContent a',
'.bbWrapper a',
'.js-post a'
];
selectors.forEach(selector => {
document.querySelectorAll(selector).forEach(link => {
this.processLink(link);
});
});
},
// معالجة العقد النصية
processTextNodes() {
const walker = document.createTreeWalker(
document.body,
NodeFilter.SHOW_TEXT,
null,
false
);
let node;
while (node = walker.nextNode()) {
this.processPlainText(node);
this.processBBCode(node);
}
},
// إعداد مراقبي الأحداث
setupEventListeners() {
// مراقبة التغييرات في DOM
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.addedNodes.length > 0) {
setTimeout(() => this.processEntirePage(), 100);
}
});
});
observer.observe(document.body, {
childList: true,
subtree: true
});
// أحداث XenForo
document.addEventListener('XFContentLoaded', () => {
setTimeout(() => this.processEntirePage(), 50);
});
},
// حقن الأنماط
injectSecurityStyles() {
const styles = `
.secured-external-link {
color: #dc3545 !important;
opacity: 0.8;
border-bottom: 1px dashed #dc3545;
cursor: not-allowed;
}
.allowed-external-link {
border-bottom: 1px dashed #28a745;
}
.secured-external-link:hover {
opacity: 1;
}
.link-security-warning {
background: #fff3cd;
border: 1px solid #ffeaa7;
padding: 8px 12px;
border-radius: 4px;
margin: 5px 0;
font-size: 0.9em;
color: #856404;
}
`;
if (!document.getElementById('link-security-styles')) {
const styleSheet = document.createElement('style');
styleSheet.id = 'link-security-styles';
styleSheet.textContent = styles;
document.head.appendChild(styleSheet);
}
},
// طرق مساعدة
addToWhitelist(domains) {
this.settings.whitelist.push(...domains);
this.processEntirePage();
},
removeFromWhitelist(domain) {
this.settings.whitelist = this.settings.whitelist.filter(d => d !== domain);
this.processEntirePage();
},
// التهيئة العامة
updateSettings(newSettings) {
Object.assign(this.settings, newSettings);
this.processEntirePage();
}
};
// التهيئة التلقائية
document.addEventListener('DOMContentLoaded', () => EnhancedLinkSecurity.init());
// لجعل الكود متاحاً globally
window.LinkSecurity = EnhancedLinkSecurity;