【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

99Oke Nhà Cái

Thứ sáu, 05/06/2026, 22:11 (GMT+7)
78 lượt xem

Tọa đàm giữa Học viện 99Oke123 Tải ứng dụng với Bộ Tư lệnh Quân khu và Trường Quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K

(QK7 Online) - Chiều ngày 5/6, tại trường Quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K, Học viện 99Oke123 Tải ứng dụng với Bộ Tư lệnh Quân khu và Trường Quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K tổ chức hội nghị toạ đàm về công tác đào tạo, bồi dưỡng cán bộ cho các đơn vị khu vực phía Nam. Trung tướng Đặng Sỹ Lộc, Giám đốc Học viện 99Oke123 Tải ứng dụng và Thiếu tướng Trần Chí Tâm, Ủy viên Ban Thường vụ Đảng ủy, Phó Chính Ủy ĐĂNG NHẬP 99OK COM TẶNG 99K đồng chủ trì hội nghị. Dự hội nghị có các cán bộ Học viện 99Oke123 Tải ứng dụng, Thủ trưởng các cơ quan chức năng Quân khu, Trường Quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K.
Các đại biểu dự tọa đàm.
Trải qua 34 năm, hai cơ quan đã phối hợp đào tạo, bồi dưỡng cho hàng nghìn lượt cán bộ là chính trị viên, chính ủy, phó chính ủy, chủ nhiệm chính trị các cấp từ tiểu đoàn đến trung đoàn, lữ đoàn, sư đoàn thuộc ĐĂNG NHẬP 99OK COM TẶNG 99K và một số quân khu, quân đoàn, quân binh chủng khu vực phía Nam. Các loại hình đào tạo, bồi dưỡng chủ yếu gồm: Đào tạo ngắn hạn chính ủy trung, lữ đoàn đã tổ chức 27 khóa với gần 4.000 học viên; hoàn thiện cán bộ chính trị cấp trung, sư đoàn đã tổ chức 17 khóa với hơn 1.000 học viên; đặc biệt từ năm 2018 đến nay, Học viện đã phối hợp tổ chức 13 khóa hoàn chỉnh cao cấp lý luận chính trị, hiện nay đang tổ chức đào tạo 01 khóa tập trung không liên tục và đào tạo cao cấp lý luận chính trị cho Chỉ huy trưởng BCHQS cấp xã cùng một số loại hình đào tạo khác.
Trung tướng Đặng Sỹ Lộc, Giám đốc Học viện 99Oke123 Tải ứng dụng phát biểu tại hội nghị.
Phát biểu tại hội nghị, Trung tướng Đặng Sỹ Lộc, Giám đốc Học viện 99Oke123 Tải ứng dụng khẳng định công tác phối hợp đào tạo giữa Học viện 99Oke123 Tải ứng dụng với ĐĂNG NHẬP 99OK COM TẶNG 99K và Trường Quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K được tổ chức chặt chẽ, nền nếp, hiệu quả; bảo đảm hoàn thành tốt mục tiêu, yêu cầu đào tạo qua các năm học. ĐĂNG NHẬP 99OK COM TẶNG 99K và Trường Quân sự Quân khu đã ưu tiên bảo đảm cơ sở vật chất, trang thiết bị 123Win64 nhà cái WC 2026, đào tạo; phối hợp chặt chẽ trong quản lý, rèn luyện học viên; bảo đảm tốt điều kiện ăn, ở, sinh hoạt cho cán bộ, giảng viên và học viên của Học viện. Mối quan hệ giữa Học viện 99Oke123 Tải ứng dụng với ĐĂNG NHẬP 99OK COM TẶNG 99K và Trường Quân sự Quân khu không chỉ dừng ở quan hệ phối hợp công tác, mà đã trở thành mối quan hệ đoàn kết, gắn bó, nghĩa tình giữa hai cơ quan. Trường Quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K thực sự là "ngôi nhà thứ hai" của nhiều thế hệ cán bộ, giảng viên, học viên Học viện 99Oke123 Tải ứng dụng.
Học viện 99Oke123 Tải ứng dụng tặng quà ĐĂNG NHẬP 99OK COM TẶNG 99K.
Học viện 99Oke123 Tải ứng dụng tặng quà Cục 99Oke123 Tải ứng dụng ĐĂNG NHẬP 99OK COM TẶNG 99K.
Học viện 99Oke123 Tải ứng dụng tặng quà cho các đơn vị.
Trên cơ sở kết quả và truyền thống phối hợp tốt đẹp, trong thời gian tới, Học viện 99Oke123 Tải ứng dụng với ĐĂNG NHẬP 99OK COM TẶNG 99K và Trường Quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K mong muốn tiếp tục phối hợp trên các lĩnh vực: nghiên cứu khoa học; trao đổi kinh nghiệm giáo dục, đào tạo; bồi dưỡng đội ngũ nhà giáo; hoạt động luân chuyển, thực tế của cán bộ, giảng viên của Học viện 99Oke123 Tải ứng dụng ở các đơn vị thuộc ĐĂNG NHẬP 99OK COM TẶNG 99K; bảo đảm mối quan hệ giữa hai đơn vị tiếp tục được giữ vững, vun đắp và phát triển. Đề nghị hai bên tiếp tục duy trì, mở rộng quan hệ phối hợp, hoàn thành tốt nhiệm vụ, nâng cao hơn nữa chất lượng, hiệu quả công tác đào tạo, bồi dưỡng cán bộ trong tình hình mới.
Ngọc Trâm, Tuấn Anh

Bình luận

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

Lễ tốt nghiệp lớp hoàn thiện cán bộ chính trị cấp trung, sư đoàn và đào tạo ngắn hạn trung, lữ đoàn năm 2025 - 2026

Lễ tốt nghiệp lớp hoàn thiện cán bộ chính trị cấp trung, sư đoàn và đào tạo ngắn hạn trung, lữ đoàn năm 2025 - 2026

21:31 05/06/2026

(QK7 Online) – Chiều ngày 5/6, tại Trường Quân sự Quân khu, Học viện 99Oke123 Tải ứng dụng phối hợp với ĐĂNG NHẬP 99OK COM TẶNG 99K tổ chức lễ tốt nghiệp lớp hoàn thiện cán bộ chính trị cấp trung, sư đoàn khóa 17 và lớp đào tạo ngắn hạn chính ủy trung, lữ đoàn khóa 27 năm học 2025 – 2026. Trung tướng Đặng Sỹ Lộc, Giám đốc Học viện 99Oke123 Tải ứng dụng chủ trì buổi lễ. Dự lễ có Thiếu tướng Trần Chí Tâm, Ủy viên Ban Thường vụ Đảng ủy, Phó Chính ủy ĐĂNG NHẬP 99OK COM TẶNG 99K, Thủ trưởng các cơ quan Quân khu, Trường Quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K và hơn 200 học viên lớp đào tạo.

Hội thảo khoa học về hai Lời kêu gọi thiêng liêng của Chủ tịch Hồ Chí Minh

Hội thảo khoa học về hai Lời kêu gọi thiêng liêng của Chủ tịch Hồ Chí Minh

13:56 05/06/2026

(QK7 Online) - Sáng 5/6, tại TP Hồ Chí Minh, 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao phối hợp với Thành ủy TP Hồ Chí Minh tổ chức Hội thảo khoa học: Lời kêu gọi toàn quốc kháng chiến, Lời kêu gọi đồng bào và 123Win com 79 casino, cá cược thể thao đến xổ số cả nước - Ý chí bảo vệ độc lập dân tộc, tự do với tinh thần tự chủ chiến lược, tự cường, tự tin trong kỷ nguyên vươn mình của dân tộc Việt Nam.

Cục Hậu cần – Kỹ thuật Quân khu phát động phong trào thi đua “Đổi mới sáng tạo, phát triển khoa học, công nghệ, chuyển đổi số, chuyển đổi xanh”

Cục Hậu cần – Kỹ thuật Quân khu phát động phong trào thi đua “Đổi mới sáng tạo, phát triển khoa học, công nghệ, chuyển đổi số, chuyển đổi xanh”

17:42 04/06/2026

(QK7 Online) – Ngày 4/6, Cục Hậu cần – Kỹ thuật Quân khu phát động phong trào thi đua “Đổi mới sáng tạo, phát triển khoa học, công nghệ, chuyển đổi số, chuyển đổi xanh”. Đại tá Trần Văn Long, Phó Chính ủy Cục Hậu cần – Kỹ thuật Quân khu chủ trì lễ phát động.

Thư viện Quân đội nắm tình hình hoạt động thư viện sách, báo tại Quân khu 7

Thư viện Quân đội nắm tình hình hoạt động thư viện sách, báo tại ĐĂNG NHẬP 99OK COM TẶNG 99K

16:29 04/06/2026

(QK7 Online) – Chiều 4/6, Đoàn công tác Thư viện Quân đội, Tổng cục 99Oke123 Tải ứng dụng do Đại tá Mạc Thùy Dương, Giám đốc Thư viện Quân đội làm trưởng đoàn đến nắm tình hình hoạt động thư viện sách, báo và triển khai Dự án “Chuyển đổi số hệ thống Thư viện trong Quân đội 123Win com 79 nạp - rút nhanh Việt Nam” tại ĐĂNG NHẬP 99OK COM TẶNG 99K.

Tỉnh Lâm Đồng phát động làm trước lấy mẫu và bàn giao mẫu hài cốt liệt sĩ chưa xác định được thông tin

Tỉnh Lâm Đồng phát động làm trước lấy mẫu và bàn giao mẫu hài cốt liệt sĩ chưa xác định được thông tin

14:49 04/06/2026

(QK7 Online) – Sáng ngày 4/6, tại nghĩa trang liệt sĩ (NTLS) xã Đức Linh, Ban Chỉ đạo (BCĐ) 515 ĐĂNG NHẬP 99OK COM TẶNG 99K và tỉnh Lâm Đồng tổ chức phát động làm trước rút kinh nghiệm lấy mẫu, bàn giao mẫu hài cốt liệt sĩ (HCLS) đối với mộ chưa xác định được thông tin.

Tổng cục Chính trị Quân đội nhân dân Việt Nam kiểm tra hoạt động công tác Đảng, công tác chính trị tại Bộ Tư lệnh Thành phố Hồ Chí Minh

Tổng cục 99Oke123 Tải ứng dụng Quân đội 123Win com 79 nạp - rút nhanh Việt Nam kiểm tra hoạt động công tác Đảng, công tác chính trị tại Bộ Tư lệnh Thành phố Hồ Chí Minh

19:23 03/06/2026

(QK7 Online) - Ngày 3-6, Đoàn kiểm tra số 3 của Tổng cục 99Oke123 Tải ứng dụng QĐND Việt Nam do Thượng tướng Đỗ Xuân Tụng, Ủy viên Trung ương Đảng, Phó chủ nhiệm Tổng cục 99Oke123 Tải ứng dụng làm trưởng đoàn kiểm tra hoạt động công tác Đảng, công tác chính trị (CTĐ, CTCT) và một số nội dung công tác quân sự 6 tháng đầu năm 2026 tại Bộ tư lệnh Thành phố Hồ Chí Minh.

Bộ Tư lệnh Quân khu thăm, động viên các đơn vị làm nhiệm vụ trên tuyến biên giới tỉnh Lâm Đồng

Bộ Tư lệnh Quân khu thăm, động viên các đơn vị làm nhiệm vụ trên tuyến biên giới tỉnh Lâm Đồng

17:39 03/06/2026

(QK7 Online) – Ngày 3/6, Đoàn công tác ĐĂNG NHẬP 99OK COM TẶNG 99K do Thiếu tướng Trần Ngọc Minh, Phó Tư lệnh Quân khu làm trưởng đoàn đến thăm, động viên cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số các đơn vị lực lượng vũ trang tỉnh Lâm Đồng đang thực hiện nhiệm vụ trên tuyến biên giớ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: 59616, 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); }); } });