【99OK】 Link vào 99OK Casino mới nhất 2025 ✔️

Link 99OK hot nhất

99OK - Nhà Cái Thể Thao, Nổ Hũ, Bắn Cá Uy Tín

123Win64 khuyến mãi > Xây dựng chính quy

Thứ tư, 07/01/2026, 18:55 (GMT+7)
3827 lượt xem

Sư đoàn 309 rút kinh nghiệm công tác quản lý tư tưởng, kỷ luật năm 2025

(QK7 Online) - Chiều ngày 7/1, Sư đoàn 309 tổ chức hội nghị rút kinh nghiệm công tác quản lý tư tưởng, kỷ luật trong Sư đoàn năm 2025. Đại tá Vũ Văn Tám, Bí thư Đảng ủy, Chính uỷ Sư đoàn chủ trì hội nghị. Dự hội nghị có Đại tá Huỳnh Việt Tâm, Phó Bí thư Đảng uỷ, Sư đoàn trưởng.
Hội nghị rút kinh nghiệm công tác quản lý tư tưởng, kỷ luật trong Sư đoàn 309 năm 2025.
Năm 2025, công tác quản lý tư tưởng, kỷ luật trong Sư đoàn được triển khai chặt chẽ, có nền nếp; cấp ủy, chỉ huy các cấp trong Sư đoàn luôn quán triệt sâu sắc các nghị quyết, chỉ thị, quy định của trên về công tác tư tưởng, kỷ luật; cụ thể hóa sát với đặc điểm tình hình từng cơ quan, đơn vị.
Nội dung quản lý tư tưởng, kỷ luật được xác định là nhiệm vụ thường xuyên, xuyên suốt trong nghị quyết lãnh đạo năm, 6 tháng và hằng tháng, gắn chặt với nhiệm vụ 123Win64 nhà cái WC 2026, SSCĐ và xây dựng chính quy. Nhờ đó, công tác lãnh đạo, chỉ đạo được triển khai chặt chẽ, thống nhất, phát huy rõ vai trò, trách nhiệm của đội ngũ cán bộ chủ trì các cấp.
Đại tá Vũ Văn Tám, Chính ủy Sư đoàn 309 (bên trái ngoài cùng) dự hội nghị.
Công tác tuyên truyền, giáo dục chính trị, phổ biến pháp luật được đổi mới về nội dung, hình thức; kết hợp linh hoạt giữa tuyên truyền trực tiếp với ứng dụng công nghệ thông tin, hệ thống truyền thanh nội bộ; thực hiện hiệu quả các mô hình trong công tác tư tưởng như: Tổ 3 người, tổ tư vấn tâm lý pháp lý, 123Win com 79 casino, cá cược thể thao đến xổ số bảo vệ, sinh hoạt Ngày 99Oke123 Tải ứng dụng và văn hóa tinh thần, Ngày 99OK com đăng nhập… Đội ngũ cán bộ các cấp chủ động, kịp thời nắm bắt tâm tư, nguyện vọng của bộ đội, nhất là các đối tượng có hoàn cảnh khó khăn, bộ phận công tác nhỏ lẻ. Qua đó, giúp cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số yên tâm công tác, đoàn kết, thống nhất, đơn vị bảo đảm an toàn tuyệt đối.
Đại tá Huỳnh Việt Tâm, Sư đoàn trưởng Sư đoàn 309 phát biểu tại hội nghị.
Tại hội nghị, các cơ quan, đơn vị đã báo cáo kết quả công tác nắm, quản lý tư tưởng bộ đội; tình hình chấp hành pháp luật Nhà nước, kỷ luật Quân đội; công tác phòng ngừa, ngăn chặn các vụ việc vi phạm kỷ luật trong năm 2025. Các ý kiến tham luận tập trung làm rõ nguyên nhân, rút ra bài học kinh nghiệm và đề xuất giải pháp nâng cao hiệu quả quản lý tư tưởng, kỷ luật trong thời gian tới.
Đại tá Vũ Văn Tám, Chính uỷ Sư đoàn 309 phát biểu kết luận hội nghị.
Phát biểu kết luận hội nghị, Đại tá Vũ Văn Tám ghi nhận, biểu dương những kết quả nổi bật mà Sư đoàn đã đạt được trong công tác quản lý tư tưởng, kỷ luật năm 2025. Đồng thời yêu cầu cấp ủy, chỉ huy các cấp tiếp tục quán triệt sâu sắc các nghị quyết, chỉ thị của trên; tăng cường công tác giáo dục chính trị, pháp luật; chủ động nắm bắt, dự báo tình hình tư tưởng bộ đội; kịp thời giải quyết tốt các mối quan hệ, không để bị động, bất ngờ; gắn công tác quản lý tư tưởng với xây dựng nền nếp chính quy, rèn luyện kỷ luật, góp phần xây dựng Sư đoàn vững mạnh toàn diện “mẫu mực, tiêu biểu”, hoàn thành thắng lợi nhiệm vụ trong năm 2026.
Nguyễn Hùng

Bình luận

Bài viết tương tự:

Lữ đoàn 26: Nâng cao chất lượng huấn luyện chiến sĩ mới từ mô hình “3 Nhất”

Lữ đoàn 26: Nâng cao chất lượng 123Win64 nhà cái WC 2026 123Win com 79 casino, cá cược thể thao đến xổ số mới từ mô hình “3 Nhất”

07:53 11/05/2026

(QK7 Online) - Sau hơn hai tháng 123Win64 nhà cái WC 2026 123Win com 79 casino, cá cược thể thao đến xổ số mới, Lữ đoàn 26 tạo chuyển biến rõ nét về nhận thức, ý thức kỷ luật và kết quả thực hiện nhiệm vụ của bộ đội nhờ triển khai hiệu quả mô hình thi đua “3 Nhất”. Với nhiều giải pháp đồng bộ, sát thực tiễn, đơn vị không chỉ giúp 123Win com 79 casino, cá cược thể thao đến xổ số “hiểu sâu, nhớ lâu” mà còn nâng cao chất lượng 123Win64 nhà cái WC 2026, xây dựng nền nếp chính quy, bảo đảm an toàn, vững chắc.

Nâng cao hiệu quả phòng, chống say nắng say nóng cho bộ đội

Nâng cao hiệu quả phòng, chống say nắng say nóng cho bộ đội

11:28 02/05/2026

(QK7 Online) - Để hoàn thành tốt nhiệm vụ 123Win64 nhà cái WC 2026, SSCĐ trong điều kiện thời tiết nắng nóng, các cơ quan, đơn vị trong LLVT Quân khu triển khai nhiều biện pháp phòng, chống say nắng say nóng hiệu quả nhằm bảo đảm tốt sức khỏe cho bộ đội, nhất là đối với đối tượng 123Win com 79 casino, cá cược thể thao đến xổ số mới, vốn chưa quen với cường độ học tập, rèn luyện cao.

Sư đoàn 7: Chiến sĩ mới vững vàng sau tháng đầu huấn luyện

Sư đoàn 7: Chiến sĩ mới vững vàng sau tháng đầu 123Win64 nhà cái WC 2026

07:49 21/04/2026

(QK7 Online) - Sau một tháng 123Win64 nhà cái WC 2026 tại Sư đoàn 7, các 123Win com 79 casino, cá cược thể thao đến xổ số mới đã có những chuyển biến rõ rệt. Từ những bỡ ngỡ ban đầu, lễ tiết, tác phong dần đi vào nền nếp, việc chấp hành điều lệnh, thực hiện nhiệm vụ ngày càng thuần thục, thể hiện sự trưởng thành của 123Win com 79 casino, cá cược thể thao đến xổ số mới trong môi trường quân ngũ.

Trung tướng Lê Xuân Thế kiểm tra công tác chuẩn bị Hội thi “Doanh trại chính quy, xanh, sạch, đẹp”

Trung tướng Lê Xuân Thế kiểm tra công tác chuẩn bị Hội thi “Doanh trại chính quy, xanh, sạch, đẹp”

18:05 20/04/2026

(QK7 Online) - Ngày 20/4, Đoàn công tác ĐĂNG NHẬP 99OK COM TẶNG 99K do Trung tướng Lê Xuân Thế, Ủy viên Ban chấp hành Trung ương Đảng, Ủy viên Quân ủy Trung ương, Tư lệnh Quân khu làm trưởng đoàn kiểm tra công tác chuẩn bị tham gia Hội thi “Doanh trại chính quy, xanh, sạch, đẹp” Trung đoàn bộ binh đủ quân cấp 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao năm 2026 đối với Trung đoàn 88, Sư đoàn 302.

Vững “cánh sóng” trên đỉnh núi Cậu

Vững “cánh sóng” trên đỉnh núi Cậu

10:40 12/04/2026

(QK7 Online) - Ở độ cao hơn 300m so với mực nước biển, giữa bạt ngàn rừng xanh núi Cậu (xã Dầu Tiếng, TPHCM), có một “cánh sóng” lặng thầm ngày đêm vươn xa, giữ mạch thông tin thông suốt. Đó là Trạm SK13, thuộc Đại đội 4, Tiểu đoàn 44, Lữ đoàn 23 – đơn vị làm nhiệm vụ bảo đảm thông tin liên lạc (TTLL) vô tuyến điện sóng cực ngắn, phục vụ Bộ Tư lệnh Quân khu chỉ huy, chỉ đạo các cơ quan, đơn vị trên địa bàn.

Sư đoàn 5: Giáo dục truyền thống qua công trình biển tên đường nội bộ

Sư đoàn 5: Giáo dục truyền thống qua công trình biển tên đường nội bộ

10:49 10/04/2026

(QK7 Online) - Trong khuôn viên các đơn vị thuộc Sư đoàn 5, những tuyến đường nội bộ không chỉ được chỉnh trang khang trang, sạch đẹp mà còn mang một ý nghĩa đặc biệt: trở thành “địa chỉ đỏ” giáo dục truyền thống. Những tấm biển tên đường nội bộ do tổ chức Đoàn xây dựng đã và đang phát huy hiệu quả thiết thực trong bồi dưỡng lòng yêu nước, niềm tự hào về đơn vị anh hùng cho cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số.

Quân khu 7 rút kinh nghiệm chấp hành kỷ luật Quân đội, pháp luật Nhà nước Quý I năm 2026

ĐĂNG NHẬP 99OK COM TẶNG 99K rút kinh nghiệm chấp hành kỷ luật Quân đội, pháp luật Nhà nước Quý I năm 2026

16:08 09/04/2026

(QK7 Online) - Chiều 9/4, ĐĂNG NHẬP 99OK COM TẶNG 99K tổ chức hội nghị rút kinh nghiệm tình hình chấp hành kỷ luật Quân đội, pháp luật Nhà nước trong Lực lượng vũ trang Quân khu Quý I năm 2026. Thiếu tướng Lê Xuân Bình, Phó Tư lệnh, Tham mưu trưởng Quân khu chủ trì hội nghị. Dự hội nghị có Đại tá Phùng Thế Hùng, Phó Tham mưu trưởng Quân khu; Thiếu tướng Trần Đức Thắng, Phó Chủ nhiệm 99Oke123 Tải ứng dụng Quân khu; Đại tá Trịnh Ngọc Dục, Phó Chủ nhiệm Hậu cần Kỹ thuật Quân khu.

Bộ đội Biên phòng tỉnh Tây Ninh rút kinh nghiệm nhiệm vụ huấn luyện

123Win79 tỷ lệ kèo World Cup 2026 tỉnh Tây Ninh rút kinh nghiệm nhiệm vụ 123Win64 nhà cái WC 2026

09:08 08/04/2026

(QK7 Online) - Ngày 7/4, 123Win99ok Sân chơi uy tín 123Win79 tỷ lệ kèo World Cup 2026 (BĐBP) tỉnh Tây Ninh tổ chức rút kinh nghiệm nhiệm vụ 123Win64 nhà cái WC 2026, xây dựng chính quy, quản lý kỷ luật quý I năm 2026. Đại tá Phạm Văn Cờ, Phó Chỉ huy trưởng, Tham mưu trưởng 123Win99ok Sân chơi uy tín BĐBP tỉnh chủ trì hội nghị.

TIN XEM NHIỀU:

TIN MỚI:

DƯ LUẬN QUAN TÂM:

99OK - Nhà Cái Thể Thao, Nổ Hũ, Bắn Cá Uy Tín

Theo dõi chúng tôi tại:

Cơ quan chủ quản: ĐĂNG NHẬP 99OK COM TẶNG 99K

Giấy phép số 45-YU ngày 28/07/2021

© Báo ĐĂNG NHẬP 99OK COM TẶNG 99K điện tử giữ bản quyền nội dung trên website này.

Tòa soạn: 81A Hai Bà Trưng, Quận 1, TP. Hồ Chí Minh

Phụ trách Tổng Biên tập: Thượng tá Lại Thế Hiền

Email: [email protected] | [email protected] | 1

'); printWindow.document.write(''); printWindow.document.write(''); printWindow.document.write('

【99OK】 Link vào 99OK Casino mới nhất 2025 ✔️

Link 99OK hot nhất

'); // Add logo at the top printWindow.document.write(''); printWindow.document.write('

' + title + '

'); if (dateTime) { printWindow.document.write('
' + dateTime + '
'); } printWindow.document.write('
'); printWindow.document.write(content.html()); printWindow.document.write('
'); printWindow.document.write(''); printWindow.document.write(''); printWindow.document.close(); $('#printLoadingMsg').remove(); // Wait for content and images to load then print printWindow.onload = function() { // Additional check to ensure logo is loaded const logoImg = printWindow.document.querySelector('.print-logo img'); if (logoImg) { logoImg.onload = function() { setTimeout(function() { printWindow.print(); printWindow.close(); }, 300); }; // If logo already loaded (cached) if (logoImg.complete) { setTimeout(function() { printWindow.print(); printWindow.close(); }, 300); } } else { setTimeout(function() { printWindow.print(); printWindow.close(); }, 500); } }; } if (totalImages > 0) { lazyImages.forEach(function(img) { const actualSrc = img.dataset.src || img.getAttribute('data-src'); if (actualSrc && actualSrc !== img.src) { const tempImg = new Image(); tempImg.onload = tempImg.onerror = function() { img.src = actualSrc; img.classList.remove('lazy'); loadedCount++; if (loadedCount === totalImages) { proceedWithPrint(); } }; tempImg.src = actualSrc; } else { loadedCount++; if (loadedCount === totalImages) { proceedWithPrint(); } } }); } else { proceedWithPrint(); } } document.addEventListener('DOMContentLoaded', function() { document.querySelectorAll('.image-caption').forEach(el => { if (el.textContent.trim() === 'Nhập chú thích cho ảnh...') { el.style.display = 'none'; } }); }); $(document).ready(function () { // Stop any ongoing speech when page loads and reset TTS state if (window.speechSynthesis) { window.speechSynthesis.cancel(); } // Dictionary để chuyển đổi từ viết tắt const abbreviationDict = { 'LLVT': 'lực lượng vũ trang', 'CHQS': 'chỉ huy quân sự', 'HĐND': 'hội đồng 123Win com 79 nạp - rút nhanh', 'CHXHCN': 'Cộng hòa xã hội chủ nghĩa', 'VKTBKT': 'vũ khí trang bị kỹ thuật', 'UBND': 'ủy ban 123Win com 79 nạp - rút nhanh', 'MTTQ': 'mặt trận tổ quốc', 'ĐCSVN': 'Đảng Cộng sản Việt Nam', 'TNXP': 'thanh niên xung phong', 'BĐBP': 'bộ đội biên phòng', 'CAND': 'công an 123Win com 79 nạp - rút nhanh', 'QĐND': 'quân đội 123Win com 79 nạp - rút nhanh', 'TPHCM': 'Thành phố Hồ Chí Minh', 'TP.HCM': 'Thành phố Hồ Chí Minh', 'HN': 'Hà Nội', 'DN': 'Đà Nẵng', 'ĐBQH': 'đại biểu quốc hội', 'QH': 'quốc hội', 'CP': 'chính phủ', 'TW': 'trung ương', 'BCH': 'ban chấp hành', 'BTV': 'ban thường vụ', 'UV': 'ủy viên', 'PBT': 'phó bí thư', 'BT': 'bí thư', 'CT': 'chủ tịch', 'PCT': 'phó chủ tịch', 'TTg': 'thủ tướng', 'PTTg': 'phó thủ tướng', 'CNQ': 'cộng hòa 123Win com 79 nạp - rút nhanh', 'CHDC': 'cộng hòa dân chủ' }; // Hàm xử lý từ viết tắt function processAbbreviations(text) { let processedText = text; // Duyệt qua tất cả các từ viết tắt trong dictionary for (const [abbr, fullForm] of Object.entries(abbreviationDict)) { // Tạo regex để tìm từ viết tắt (case insensitive) // \b đảm bảo match whole word, không match partial const regex = new RegExp(`\\b${abbr}\\b`, 'gi'); processedText = processedText.replace(regex, fullForm); } return processedText; } // Reset TTS control buttons to initial state $('#pauseBtn, #resumeBtn, #stopBtn').addClass('hidden'); $('#speedControls').removeClass('flex').addClass('hidden'); // Initialize Fancybox for article images $('.article-content img').each(function() { const $img = $(this); // const src = $img.attr('src').replace("/thumb/","/"); const src = $img.attr('src'); const alt = $img.attr('alt') || ''; // Wrap image with fancybox link $img.wrap(``); $img.addClass('cursor-pointer transition-transform hover:scale-105'); }); // Configure Fancybox $('[data-fancybox="gallery"]').fancybox({ buttons: [ "zoom", "slideShow", "thumbs", "close" ], loop: true, protect: true }); // Handle comment submission $("#comment-btn").click(function () { const userName = $('#UserName').val().trim(); const contentComment = $('#ContentComment').val().trim(); const userEmail = $('#UserEmail').val().trim(); // Hide any existing notifications $('#successNotification, #errorNotification').addClass('hidden'); if (userName === "" || contentComment === "") { $('#errorNotification').removeClass('hidden'); return; } // Validate email format if provided if (userEmail !== "" && !isValidEmail(userEmail)) { $('#errorNotification span').text('Email không hợp lệ!'); $('#errorNotification').removeClass('hidden'); return; } $.ajax({ url: "/ExtAppCommon/Home/Comment", type: "POST", dataType: "json", data: { id: 55725, name: userName, content: contentComment, email: userEmail }, success: function (result) { if (result > 0) { // Clear form $('#UserName').val(""); $('#ContentComment').val(""); $('#UserEmail').val(""); // Show success message $('#successNotification').removeClass('hidden'); // Hide success message after 3 seconds setTimeout(function() { $('#successNotification').addClass('hidden'); }, 3000); // Add new comment to the list const newComment = `
Avatar
${userName}
Vừa xong

${contentComment}

`; $('#commentsList').prepend(newComment); } else { $('#errorNotification span').text('Có lỗi xảy ra, vui lòng thử lại sau!'); $('#errorNotification').removeClass('hidden'); } }, error: function() { $('#errorNotification span').text('Có lỗi xảy ra, vui lòng thử lại sau!'); $('#errorNotification').removeClass('hidden'); } }); }); // Handle Enter key in textarea $('#ContentComment').keypress(function(e) { if (e.which === 13 && !e.shiftKey) { e.preventDefault(); $("#comment-btn").click(); } }); // Email validation function function isValidEmail(email) { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); } // Text-to-speech functionality const synth = window.speechSynthesis; let currentUtterance = null; let currentSpeed = 1; // Speed control functions function updateSpeedDisplay() { $('#speedDisplay').text(currentSpeed + 'x'); } $('#increaseSpeed').click(function() { if (currentSpeed < 2) { currentSpeed += 0.25; updateSpeedDisplay(); if (currentUtterance) { // Restart speech with new speed const text = currentUtterance.text; synth.cancel(); speak(text, currentSpeed); } } }); $('#decreaseSpeed').click(function() { if (currentSpeed > 0.5) { currentSpeed -= 0.25; updateSpeedDisplay(); if (currentUtterance) { // Restart speech with new speed const text = currentUtterance.text; synth.cancel(); speak(text, currentSpeed); } } }); // Function to get clean text content without button text function getCleanContent() { // Clone the content div to avoid modifying the original const contentClone = $('.article-content').clone(); // Remove all buttons and their container contentClone.find('button').parent('div').remove(); // Remove image captions (text in tags that are typically captions) contentClone.find('em').remove(); // Get clean text let cleanText = contentClone.text().trim(); // Remove "(QK7 Online)" and variations cleanText = cleanText.replace(/\(QK7\s*Online\)\s*[-–]?\s*/gi, ''); // Remove other common patterns that shouldn't be read cleanText = cleanText.replace(/\s+/g, ' '); // Replace multiple spaces with single space // Xử lý từ viết tắt cleanText = processAbbreviations(cleanText); return cleanText; } function getVietnameseVoice() { let voices = synth.getVoices(); // Filter for Vietnamese voices let vietnameseVoices = voices.filter(voice => voice.lang.includes('vi') || voice.name.toLowerCase().includes('vietnamese') || voice.name.toLowerCase().includes('việt') ); // If Vietnamese voices found, prefer Microsoft/Google voices if (vietnameseVoices.length > 0) { // Try to find Microsoft Vietnamese voice first let msVoice = vietnameseVoices.find(v => v.name.toLowerCase().includes('microsoft') && v.name.toLowerCase().includes('vietnamese') ); if (msVoice) return msVoice; // Then try Google Vietnamese voice let googleVoice = vietnameseVoices.find(v => v.name.toLowerCase().includes('google') && v.name.toLowerCase().includes('vietnamese') ); if (googleVoice) return googleVoice; // If no Microsoft/Google voice, use the first Vietnamese voice return vietnameseVoices[0]; } // If no Vietnamese voice found, return null return null; } function speak(text, rate = 1) { // Stop any ongoing speech if (synth.speaking) { synth.cancel(); } const utterance = new SpeechSynthesisUtterance(text); utterance.lang = 'vi-VN'; utterance.rate = rate; // Wait for voices to be loaded and try to set Vietnamese voice const setVoiceAndSpeak = () => { const vietnameseVoice = getVietnameseVoice(); if (vietnameseVoice) { utterance.voice = vietnameseVoice; currentUtterance = utterance; // Show/hide control buttons $('#pauseBtn, #stopBtn').removeClass('hidden'); $('#resumeBtn').addClass('hidden'); // Show speed controls $('#speedControls').removeClass('hidden').addClass('flex'); utterance.onend = function() { currentUtterance = null; $('#pauseBtn, #resumeBtn, #stopBtn').addClass('hidden'); // Hide speed controls $('#speedControls').removeClass('flex').addClass('hidden'); }; synth.speak(utterance); } else { // If no Vietnamese voice available, show an error message alert('Không tìm thấy giọng đọc tiếng Việt trên thiết bị của bạn. Vui lòng cài đặt thêm giọng đọc tiếng Việt trong cài đặt hệ thống.'); } }; if (synth.getVoices().length === 0) { synth.addEventListener('voiceschanged', setVoiceAndSpeak, { once: true }); } else { setVoiceAndSpeak(); } } $('#readArticleBtn').click(function() { const title = $('h1.st37').clone() // Clone to avoid getting button text .children() // Get all child elements .remove() // Remove them .end() // Go back to h1 .text() // Get text content .trim(); // Remove whitespace const content = getCleanContent(); speak(title + ". " + content, currentSpeed); }); $('#pauseBtn').click(function() { if (synth.speaking) { synth.pause(); $(this).addClass('hidden'); $('#resumeBtn').removeClass('hidden'); } }); $('#resumeBtn').click(function() { if (synth.paused) { synth.resume(); $(this).addClass('hidden'); $('#pauseBtn').removeClass('hidden'); } }); $('#stopBtn').click(function() { if (synth.speaking) { synth.cancel(); currentUtterance = null; $('#pauseBtn, #resumeBtn, #stopBtn').addClass('hidden'); // Hide speed controls $('#speedControls').removeClass('flex').addClass('hidden'); } }); // Stop speech when user navigates away from page $(window).on('beforeunload', function() { if (window.speechSynthesis && window.speechSynthesis.speaking) { window.speechSynthesis.cancel(); } }); // Stop speech when page visibility changes (user switches tabs) /* $(document).on('visibilitychange', function() { if (document.hidden && window.speechSynthesis && window.speechSynthesis.speaking) { window.speechSynthesis.cancel(); currentUtterance = null; $('#pauseBtn, #resumeBtn, #stopBtn').addClass('hidden'); $('#speedControls').removeClass('flex').addClass('hidden'); } });*/ }); document.addEventListener("DOMContentLoaded", function () { var articleContainer = document.querySelector('.article-content.max-w-none.mb-4'); if (!articleContainer) { articleContainer = document.querySelector('[class*="article-content"][class*="max-w-none"][class*="mb-4"]'); } if (!articleContainer) { return; } var fallbackHost = "https://99oke123.com"; var lazyImages = []; // ✅ Hàm update Fancybox href khi ảnh load xong function updateFancyboxHref(img) { const $img = $(img); const $fancyboxLink = $img.parent('a[data-fancybox]'); if ($fancyboxLink.length > 0) { // Cập nhật href với src thực tế const realSrc = img.dataset.src || img.src; if (!realSrc.includes('loading_new.gif') && !realSrc.includes('data:image/svg+xml')) { $fancyboxLink.attr('href', realSrc); } } } function processImagesInContainer() { // Lấy ảnh đã có class lazy var existingLazyImages = [].slice.call(articleContainer.querySelectorAll("img.lazy")); lazyImages = lazyImages.concat(existingLazyImages); // Tự động convert ảnh khác var regularImages = [].slice.call(articleContainer.querySelectorAll("img:not(.lazy):not([data-lazy-processed])")); regularImages.forEach(function(img) { var rect = img.getBoundingClientRect(); var isInViewport = rect.top < (window.innerHeight + 100) && rect.bottom > -100; if (!isInViewport && img.src && (img.src.startsWith('http') || img.src.startsWith('/'))) { // ✅ Lưu src gốc trước khi thay đổi const originalSrc = img.src; // Convert thành lazy img.dataset.src = originalSrc; img.classList.add('lazy'); img.dataset.lazyProcessed = 'true'; // ✅ Cập nhật Fancybox href nếu đã được wrap const $img = $(img); const $fancyboxLink = $img.parent('a[data-fancybox]'); if ($fancyboxLink.length > 0) { $fancyboxLink.attr('href', originalSrc); } // Placeholder img.src = `/BaoQK7/images/loading_new.gif`; lazyImages.push(img); } else { img.dataset.lazyProcessed = 'true'; } }); } processImagesInContainer(); // ✅ IntersectionObserver với callback cập nhật Fancybox if ("IntersectionObserver" in window && lazyImages.length > 0) { let lazyImageObserver = new IntersectionObserver(function (entries, observer) { entries.forEach(function (entry) { if (entry.isIntersecting) { let lazyImage = entry.target; lazyImage.loading = "lazy"; lazyImage.decoding = "async"; lazyImage.onerror = function () { if (!lazyImage.dataset.fallbackTried) { lazyImage.dataset.fallbackTried = "true"; let originalSrc = lazyImage.dataset.src || ""; lazyImage.src = originalSrc.replace("https://99oke123.com", fallbackHost); } else { lazyImage.classList.add("error"); } }; lazyImage.onload = function () { lazyImage.classList.add("loaded"); lazyImage.classList.remove("lazy"); // ✅ Cập nhật Fancybox href sau khi ảnh load xong updateFancyboxHref(lazyImage); }; if (lazyImage.dataset.src) { lazyImage.src = lazyImage.dataset.src; } if (lazyImage.dataset.srcset) { lazyImage.srcset = lazyImage.dataset.srcset; } if (lazyImage.complete && lazyImage.naturalWidth > 0) { lazyImage.onload(); } lazyImageObserver.unobserve(lazyImage); } }); }, { root: null, rootMargin: '50px 0px', threshold: 0.01 }); lazyImages.forEach(function (lazyImage) { lazyImageObserver.observe(lazyImage); }); } });