【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

Thứ ba, 12/08/2025, 10:19 (GMT+7)
4556 lượt xem

Sẵn sàng tổ chức Đại hội đại biểu 123 Win 88ok trang chủ chính thức ĐĂNG NHẬP 99OK COM TẶNG 99K, lần thứ XI

(QK7 Online) – Ngày 12/8, Thiếu tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy Quân khu 7 chủ trì buổi kiểm tra công tác chuẩn bị Đại hội đại biểu 123 Win 88ok trang chủ chính thức Quân khu 7, lần thứ XI, nhiệm kỳ 2025 – 2030. Tham gia cùng đoàn kiểm tra có Thiếu tướng Lê Xuân Thế, Phó Bí thư Đảng ủy, Tư lệnh Quân khu; Thiếu tướng Trần Ngọc Minh, Ủy viên Đảng ủy Quân khu, Phó Tư lệnh Quân khu; Đại tá Phạm Anh Tuấn, Ủy viên Thường vụ Đảng ủy Quân khu, Chủ nhiệm Chính trị Quân khu; thủ trưởng các cơ quan Quân khu.

Thiếu tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy Quân khu; Thiếu tướng Lê Xuân Thế, Phó Bí thư Đảng ủy, Tư lệnh Quân khu kiểm tra khu vực trưng bày hoạt động CTĐ, CTCT của LLVT Quân khu.

Thiếu tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy Quân khu; Thiếu tướng Lê Xuân Thế, Phó Bí thư Đảng ủy, Tư lệnh Quân khu kiểm tra khu vực trưng bày sáng kiến, cải tiến kỹ thuật.

Trên cơ sở các văn bản, hướng dẫn, kế hoạch của Đảng ủy, Bộ Tư lệnh Quân khu, Thủ trưởng Bộ Tư lệnh Quân khu đã tiến hành kiểm tra một số mặt công tác chuẩn bị Đại hội đại biểu 123 Win 88ok trang chủ chính thức Quân khu lần thứ XI. Tập trung vào công tác trang trí, trưng bày, triển lãm, công tác tuyên truyền Đại hội; hội trường, khánh tiết, các khu vực phục vụ bên lề Đại hội…


Thiếu tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy Quân khu; Thiếu tướng Lê Xuân Thế, Phó Bí thư Đảng ủy, Tư lệnh Quân khu kiểm tra khu vực trưng bày công tác Hậu cần - Kỹ thuật của LLVT Quân khu.

Thiếu tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy Quân khu kết luận buổi kiểm tra.

Kết luận buổi kiểm tra, Thiếu tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy Quân khu biểu dương tinh thần, trách nhiệm của các cơ quan, đơn vị trong công tác chuẩn bị phục vụ Đại hội thời gian qua. Trên cơ sở kết quả kiểm tra và ý kiến đóng góp bổ sung của các cơ quan, Thiếu tướng Trần Vinh Ngọc yêu cầu các cơ quan, đơn vị tập trung cao độ, chủ động phối hợp, hiệp đồng, triển khai hoàn thành, đúng tiến độ các nội dung còn lại, bảo đảm chặt chẽ, chu đáo, an toàn tuyệt đối.


Thiếu tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy Quân khu; Thiếu tướng Lê Xuân Thế, Phó Bí thư Đảng ủy, Tư lệnh Quân khu kiểm tra khu vực trưng bày khối kinh tế - quốc phòng.

Đại tá Phạm Anh Tuấn, Ủy viên Thường vụ Đảng ủy Quân khu, Chủ nhiệm Chính trị Quân khu kiểm tra khu trưng bày hoạt động CTĐ, CTCT của LLVT Quân khu.

Đồng chí Chính ủy Quân khu đề nghị Tiểu ban Kỹ thuật – Công nghệ thông tin tiếp tục cập nhật phần mềm, rà soát tài liệu số phục vụ tốt cho Đại hội không giấy. Có kế hoạch chi tiết về công tác tiếp đón, phục vụ, bảo đảm ăn, nghỉ, đi lại cho các đại biểu, đồng thời chủ động các phương án, kết hợp với các lực lượng bảo đảm an ninh, an toàn cho Đại hội; đẩy mạnh tuyên truyền trên báo, đài của Trung ương, địa phương, Quân đội và mạng xã hội, góp phần tổ chức thành công Đại hội đại biểu 123 Win 88ok trang chủ chính thức Quân khu lần thứ XI, nhiệm kỳ 2025 – 2030.

Bạch Thiết, Tuấn Anh, Lê Trầm

Bình luận

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

Tự hào được tham gia diễu binh trong ngày Đại lễ

Tự hào được tham gia diễu binh trong ngày Đại lễ

13:29 25/08/2025

(QK7 Online) - Được diễu binh tại Quảng trường Ba Đình, trước Lăng Chủ tịch Hồ Chí Minh không chỉ là ước mơ mà còn là niềm tự hào của mỗi quân nhân. Đó cũng là ánh mắt dõi theo đầy tin yêu của gia đình, của đơn vị công tác. Chỉ còn ít ngày nữa, hoạt động diễu binh, diễu hành tại Lễ kỷ niệm 80 năm Quốc khánh 2/9 sẽ diễn ra, trong hơn 16 ngàn cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số tham gia có những người con gái miền Nam vinh dự góp mặt.

Bộ Quốc phòng trao Quyết định Phó Tư lệnh và thăng Quân hàm Thiếu tướng đối với các đồng chí cán bộ cao cấp thuộc Quân khu 7

99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao trao Quyết định Phó Tư lệnh và thăng Quân hàm Thiếu tướng đối với các đồng chí cán bộ cao cấp thuộc ĐĂNG NHẬP 99OK COM TẶNG 99K

08:57 25/08/2025

(QK7 Online) – Ngày 22/8, tại Hà Nội, 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao tổ chức Lễ công bố, trao Quyết định về công tác cán bộ. Đại tướng Phan Văn Giang, Ủy viên Bộ 99Oke123 Tải ứng dụng, Phó Bí thư Quân ủy Trung ương, Bộ trưởng 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao dự và trao Quyết định.

Giây phút lần đầu người con miền Nam diễu binh qua lăng Bác

Giây phút lần đầu người con miền Nam diễu binh qua lăng Bác

19:16 22/08/2025

(QK7 Online) - Sau nhiều tháng 123Win64 nhà cái WC 2026, vượt qua những thử thách khắc nghiệt, 3 khối diễu binh của ĐĂNG NHẬP 99OK COM TẶNG 99K đã hoàn thành tốt nhiệm vụ trong buổi tổng hợp luyện đầu tiên tại Quảng trường Ba Đình. Khoảnh khắc những người lính miền Đông, những người con miền Nam lần đầu tiên diễu binh qua Lăng Chủ tịch Hồ Chí Minh đã để lại nhiều cảm xúc thiêng liêng, tự hào.

Đồng Nai huy động trên 100 cán bộ, chiến sĩ giúp dân khắc phục hậu quả thiên tai

Đồng Nai huy động trên 100 cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số giúp dân khắc phục hậu quả 99Ok là nhà cái cá cược uy tín hàng đầu tại Việt Nam

18:33 21/08/2025

(QK7 Online) - Ngày 21/8, Đại tá Võ Thành Danh, Ủy viên Ban Thường vụ Tỉnh ủy, Chỉ huy trưởng Bộ Chỉ huy quân sự tỉnh Đồng Nai thông tin, tình hình mưa bão diễn biến phức tạp trong đêm 20/8 đến sáng 21/8 ở các xã trong tỉnh, nhất là các xã nằm trong địa bàn 123Win99ok Sân chơi uy tín 99Ok 123Win phiên bản mới khu vực (PTKV) 1, 2, 3, 4. Trong đó, khu vực 3, 4 mưa nhẹ còn chủ yếu thiệt hại nặng do mưa lớn kéo dài ở các xã trên địa bàn 123Win99ok Sân chơi uy tín PTKV 1 và 2.

M.123Win30.com phiên bản mới và phát triển bền vững tiềm lực quốc phòng Thành phố Hồ Chí Minh trong thời kỳ mới

Xây dựng và phát triển bền vững tiềm lực 99Ok68 link đăng nhập Thành phố Hồ Chí Minh trong thời kỳ mới

12:27 21/08/2025

(QK7 Online) - Xây dựng và phát triển bền vững tiềm lực 99Ok68 link đăng nhập là một trong những nhiệm vụ trọng tâm, cấp bách, có ý nghĩa chiến lược đối với sự nghiệp xây dựng và bảo vệ Tổ quốc. Đối với Thành phố Hồ Chí Minh, việc xây dựng và phát triển tiềm lực 99Ok68 link đăng nhập bền vững càng có ý nghĩa đặc biệt quan trọng. Thiếu tướng Lê Xuân Thế, Tư lệnh ĐĂNG NHẬP 99OK COM TẶNG 99K, Thành viên chính Ban chủ nhiệm nhiệm vụ phát biểu tại Hội nghị giám định nhiệm vụ nghiên cứu khoa học và công nghệ “Xây dựng và phát triển bền vững tiềm lực 99Ok68 link đăng nhập Thành phố Hồ Chí Minh trong thời kỳ mới”.

Tổng hợp luyện lần thứ tư các khối diễu binh, diễu hành A80

Tổng hợp luyện lần thứ tư các khối diễu binh, diễu hành A80

00:34 17/08/2025

(QK7 Online) - Ngày 16/8, tại Trung tâm 123Win64 nhà cái WC 2026 Quân sự quốc gia 4 (xã Phúc Sơn, TP. Hà Nội), các lực lượng tham gia diễu binh, diễu hành trong Lễ kỷ niệm 80 năm Cách mạng Tháng Tám thành công và Quốc khánh 2/9 bước vào đợt tổng hợp luyện tập lần thứ tư dưới cơn mưa nặng hạt. Đại tướng Phan Văn Giang, Ủy viên Bộ 99Oke123 Tải ứng dụng, Phó Bí thư Quân ủy Trung ương, Bộ trưởng 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao chủ trì kiểm tra.

Hình ảnh ấn tượng trong Đại hội đại biểu Đảng bộ Quân khu 7 lần thứ XI, nhiệm kỳ 2025 - 2030

Hình ảnh ấn tượng trong Đại hội đại biểu 123 Win 88ok trang chủ chính thức ĐĂNG NHẬP 99OK COM TẶNG 99K lần thứ XI, nhiệm kỳ 2025 - 2030

23:06 15/08/2025

(QK7 Online) -Sau 2,5 ngày làm việc khẩn trương, nghiêm túc, dân chủ và đầy trách nhiệm, Đại hội đại biểu 123 Win 88ok trang chủ chính thức ĐĂNG NHẬP 99OK COM TẶNG 99K lần thứ XI, nhiệm kỳ 2025 – 2030 đã hoàn thành toàn bộ nội dung, chương trình đề ra; thực sự là đợt sinh hoạt chính trị mẫu mực, tiêu biểu, trí tuệ, đổi mới, để lại nhiều dấu ấn sâu đậm và thành công tốt đẹp. Báo ĐĂNG NHẬP 99OK COM TẶNG 99K trân trọng giới thiệu những hình ảnh ấn tượng tại Đại hội.

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