عن عائشة رضي الله عنها قالت: إن رسول الله صلى الله عليه وسلم خرج ليلةً من جوف الليل فصلَّى في المسجد، وصلَّى رجالٌ بصلاته، فأصبح الناس فتحدثوا، فاجتمع أكثر منهم، فصلَّى فصلُّوا معه، فأصبح الناس فتحدثوا فكثر أهل المسجد من الليلة الثالثة، فخرج رسول الله صلى الله عليه وسلم فصلى لصلاته، فلما كانت الليلة الرابعة عجز المسجد عن أهله حتى خرج لصلاة الصبح، فلما قضى الفجر، أقبل على الناس فتشهد ثم قال: ((أما بعد فإنه لم يخف عليَّ مكانكم، ولكني خشيت أن تفترض عليكم فتعجزوا عنها)) فتوفي رسول الله صلى الله عليه وسلم والأمر على ذلك. أخرجه البخاري في كتاب صلاة التراويح، باب فضل من قام رمضان رقم (2012) واللفظ له، ومسلم في كتاب صلاة المسافرين، باب الترغيب في قيام رمضان، رقم (761).
*********
أما عن مشروعيتها فيقول العلامة الألبناني رحمه الله : وهذه الأحاديث ظاهرة الدلالة على مشروعية صلاة التراويح جماعة؛ لاستمراره صلى الله عليه وسلم في تلك الليالي، ولا ينافيه تركه صلى الله عليه وسلم لها في الليلة الرابعة؛ لأنه صلى الله عليه وسلم علَّله بقوله: ((خشيت أن تفرض عليكم)) ولاشك أن هذه الخشية قد زالت بوفاته صلى الله عليه وسلم أن أكمل الله الشريعة، وبذلك يزول المعلول وهو ترك الجماعة ويعود الحكم السابق، وهو مشروعية الجماعة، ولهذا أحياها عمر بن الخطاب رضي الله عنه، وعليه جمهور العلماء.
*******
أما عن قيامها جماعة : عن أبي ذر رضي الله عنه قال: صمنا مع رسول الله صلى الله عليه وسلم، فلم يُصلِّ بنا حتى بقى سبعٌ من الشهر فقام بنا حتى ذهب ثلث الليل،ثم لم يقم بنا في السادسة، وقام بنا في الخامسة حتى ذهب شطر الليل، فقلنا له: يا رسول الله، لو نفلتنا بقية ليلتنا هذه؟ فقال: ((إنه من قام مع الإمام حتى ينصرف،كتب له قيام ليلةٍ)).
*******
أما عن عدد الركعات : عن أبي سلمة بن عبد الرحمن أنه سأل عائشة رضي الله عنها: كيف كانت صلاة رسول الله صلى الله عليه وسلم في رمضان؟ فقالت: ما كان يزيد في رمضان ولا في غيره على إحدى عشرة ركعةً، يصلي أربعاً فلا تسأل عن حُسنهن وطولهن، ثم يصلي أربعاً فلا تسأل عن حسنهن وطولهن، ثم يصلي ثلاثاً، فقلت: يا رسول الله أتنام قبل أن توتر؟ قال: ((يا عائشة، إن عيني تنامان، ولا ينام قلبي)) اخرجه البخاري فى كتاب التهجد وفى مسلم كتاب المسافرين وقد اختلف أهل العلم في عدد صلاة التراويح
**********
حكمها : قال النووي: "فصلاة التراويح سنة بإجماع العلماء" المجموع (2/526)، التهذيب في فقه الإمام الشافعي (2/233). وقال ابن قدامة: "وهي سنةٌ مؤكدةٌ" المغني (2/601) والإنصاف (2/180)
مشكور يا غالي صلاة التراويح لا غنى عنها واكيد الكل راح يصليها
اكيد جزاك الله خير على المرور
الف شكر اخي السلطي عالموضوع :eh_s(15):
اشكرك اخي سلطي على الطرح
بارك الله فيك
شاكر لمرورك اختي جمال أمرأه
يسلمو على الطر ح المميز
جزاك الله كل خير:adma87:
مشكوره لمرورك اختي الحب الضائع
// 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;