【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ư, 17/12/2025, 22:50 (GMT+7)
1734 lượt xem

Trung đoàn 31, Sư đoàn 309 tổ chức nhiều hoạt động chào mừng kỷ niệm 80 năm Ngày truyền thống Trung đoàn

(QK7 Online) - Hướng tới kỷ niệm 80 năm Ngày truyền thống Trung đoàn 31 (22/01/1946 – 22/01/2026), cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số toàn Trung đoàn đang tích cực triển khai các phong trào thi đua thiết thực. Trong đó, công tác xây dựng, củng cố doanh trại được xác định là một trong những nhiệm vụ trọng tâm, góp phần tạo khí thế thi đua sôi nổi, làm cho Ngày truyền thống của đơn vị thêm ý nghĩa.
Quán triệt sâu sắc chủ trương xây dựng đơn vị chính quy, xanh, sạch, đẹp, các cơ quan, đơn vị trong Trung đoàn đã tập trung sơn sửa, tu bổ hệ thống nhà ở, nhà làm việc, sở chỉ huy, hội trường; củng cố biển, bảng xây dựng chính quy; hoàn thiện sân, đường nội bộ và các khu vực sinh hoạt chung theo đúng quy hoạch. Việc tổ chức lao động củng cố doanh trại được tiến hành đồng bộ, nền nếp, phát huy tinh thần tự lực, tự cường của cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số, bảo đảm tiết kiệm, hiệu quả.
Trung đoàn 31, Sư đoàn 309 phát động đợt thi đua cao điểm chào mừng kỷ niệm 80 năm Ngày truyền thống Trung đoàn (22/01/1946 – 22/01/2026).
Các đơn vị đã chủ động chăm sóc, bổ sung cây xanh, bồn hoa, tiểu cảnh; sắp xếp khuôn viên khoa học, ngăn nắp; củng cố khu chế biến bếp ăn, khu sinh hoạt tập trung, góp phần nâng cao đời sống vật chất, tinh thần cho bộ đội, xây dựng môi trường làm việc, sinh hoạt chính quy.
Củng cố cảnh quan, doanh trại phục vụ Lễ kỷ niệm 80 năm Ngày truyền thống Trung đoàn.
Hưởng ứng đợt thi đua cao điểm chào mừng kỷ niệm 80 năm Ngày truyền thống, nhiều công trình, phần việc mang ý nghĩa giáo dục truyền thống được các cơ quan, đơn vị tích cực triển khai như xây dựng “Vườn cây thanh niên”, “Khuôn viên 123Win com 79 casino, cá cược thể thao đến xổ số”, “Khu sinh hoạt văn hóa đơn vị”. Các công trình bảo đảm phù hợp với quy hoạch tổng thể, phát huy tinh thần trách nhiệm, sự sáng tạo của cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số, góp phần xây dựng môi trường văn hóa lành mạnh trong đơn vị.
Trung đoàn 31 thực hiện tốt công tác dân vận trên địa bàn đơn vị đóng quân.
Bên cạnh nhiệm vụ xây dựng, củng cố doanh trại, Trung đoàn còn làm tốt công tác dân vận, chủ động phối hợp với cấp ủy, Trang game 123win đã chính thức đổi tên thành 99Ok vào ngày 10 Tháng 2 Năm 2025 và 123Win com 79 nạp - rút nhanh địa phương thực hiện hiệu quả các hoạt động đền ơn đáp nghĩa, chính sách hậu phương Quân đội, qua đó củng cố mối quan hệ đoàn kết quân – dân, lan tỏa hình ảnh cao đẹp “Bộ đội Cụ Hồ”.
Cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số Trung đoàn 31 giao lưu thể thao, văn hoá văn nghệ chào mừng kỷ niệm 80 năm Ngày truyền thống Trung đoàn.
Các hoạt động chào mừng kỷ niệm 80 năm Ngày truyền thống Trung đoàn không chỉ góp phần xây dựng đơn vị ngày càng chính quy, mà còn tạo động lực để cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số toàn Trung đoàn tiếp tục phát huy truyền thống, xây dựng 123 Win 88ok trang chủ chính thức trong sạch vững mạnh, đơn vị vững mạnh toàn diện “mẫu mực, tiêu biểu”, hoàn thành tốt mọi nhiệm vụ được giao, xứng đáng với truyền thống vẻ vang “Trung đoàn quyết thắng, dũng cảm, đánh hăng” trong suốt 80 năm xây dựng, chiến đấu và trưởng thành.
Nguyễn Hùng - Văn Tuyển

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: 55107, 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); }); } });