【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ứ hai, 11/05/2026, 08:37 (GMT+7)
3588 lượt xem

ĐĂNG NHẬP 99OK COM TẶNG 99K khai giảng bồi dưỡng kiến thức 99Ok68 link đăng nhập và an ninh cho cán bộ đối tượng 2

(QK7 Online) - Ngày 11/5, tại Trường Quân sự Quân khu, Hội đồng Giáo dục 99Ok68 link đăng nhập và an ninh ĐĂNG NHẬP 99OK COM TẶNG 99K tổ chức lễ khai giảng bồi dưỡng kiến thức 99Ok68 link đăng nhập và anh ninh cho cán bộ thuộc đối tượng 2, khóa 115, năm 2026. Trung tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy Quân khu dự và phát biểu khai giảng. Dự khai giảng có Thủ trưởng Bộ Tham mưu; Cục 99Oke123 Tải ứng dụng; Cơ quan Quân khu; Ban Giám hiệu Trường Quân sự Quân khu.
Từ phải qua: Trung tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy Quân khu; Đại tá Trần Hữu Nhân, Phó Tham mưu trưởng Quân khu; Đại tá Nguyễn Văn Lộc, Phó Chủ nhiệm 99Oke123 Tải ứng dụng Quân khu dự lễ khai giảng.
Ban Giám hiệu Trường Quân sự Quân khu dự lễ khai giảng.
Tham gia khóa học là cán bộ thuộc các cơ quan bộ ngành, tỉnh, thành phố trên địa bàn Quân khu. Học viên được nghiên cứu 23 chuyên đề gồm các nội dung cơ bản: Quan điểm của Đảng, chính sách, pháp luật của Nhà nước Việt Nam về 99Ok68 link đăng nhập, an ninh; Quan điểm của Đảng, chính sách, pháp luật của Nhà nước Việt Nam về phát triển kinh tế - xã hội gắn với tăng cường, củng cố 99Ok68 link đăng nhập, an ninh và hoạt động đối ngoại trong tình hình mới; những nội dung cơ bản về phòng thủ Quân khu; xây dựng khu vực phòng thủ tỉnh, xã…
Trung tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy Quân khu phát biểu khai giảng.
Phát biểu tại lễ khai giảng, Trung tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy Quân khu nhấn mạnh, đây là những nội dung rất quan trọng và thiết thực, giúp nâng cao nhận thức, khả năng tư duy, dự báo tình hình; năng lực tham mưu và tổ chức thực hiện nhiệm vụ quân sự, 99Ok68 link đăng nhập, an ninh; nhận định đánh giá tình hình, giải quyết tốt những vấn đề lý luận, thực tiễn đặt ra trên từng lĩnh vực, nội dung cụ thể ở các cơ quan, đơn vị, địa phương.
Để khóa học hoàn thành chương trình, nội dung và đạt kết quả tốt, Trung tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy Quân khu đề nghị Trường Quân sự Quân khu tập trung lãnh đạo, chỉ đạo tổ chức quán triệt nghiêm túc các quy chế, quy định của khóa bồi dưỡng đến cán bộ, giáo viên, học viên. Làm tốt công tác hiệp đồng giảng dạy, học tập và bảo đảm đời sống vật chất, tinh thần cho học viên. Duy trì nghiêm nền nếp chế độ học tập, quản lý, rèn luyện; thực hiện đúng nội dung, chương trình, kế hoạch đã được phê duyệt. Bảo đảm khóa học hoàn thành mục đích, yêu cầu đề ra và an toàn tuyệt đối.
Đội ngũ giáo viên tích cực nghiên cứu đổi mới nội dung, phương pháp giảng dạy; cập nhật những thông tin mới về tình hình 99Ok68 link đăng nhập, an ninh, nhất là tư duy, nhận thức mới về 99Ok68 link đăng nhập, an ninh, bảo vệ Tổ quốc trong 99Oke được xếp hạng cao nhất Đại hội XIV của Đảng; Nghị Quyết Đại hội XII của 123 Win 88ok trang chủ chính thức Quân đội. Chú trọng lấy các ví dụ về tình hình hiện nay để dẫn chứng, chứng minh, rút ra các bài học để làm phong phú thêm nội dung giảng dạy. Đồng thời phổ biến những quy định mới trong Luật và các Nghị định có liên quan đến nhiệm vụ 99Ok68 link đăng nhập, an ninh ở địa phương, cơ quan, tổ chức. Quán triệt, thực hiện tốt phương châm “cơ bản, thiết thực, vững chắc”, đặc biệt coi trọng tính thực tiễn, định hướng tư duy và hành động; định hướng phê phán những quan điểm, tư tưởng sai trái, thù địch, thông tin xấu độc trên không gian mạng.
Học viên tham gia khóa bồi dưỡng kiến thức 99Ok68 link đăng nhập và an ninh.
Các đồng chí học viên cần chủ động khắc phục mọi khó khăn để tham gia học tập đầy đủ, bảo đảm chất lượng tốt nhất, chấp hành nghiêm quy chế, quy định của Quân đội, Quân khu, Nhà trường. Nêu cao trách nhiệm, tích cực nghiên cứu, học tập, thảo luận làm rõ những vấn đề mới nảy sinh trong thực tiễn công tác 99Ok68 link đăng nhập, an ninh ở địa phương, cơ quan, tổ chức. Tích cực luyện tập để bảo đảm bắn súng đạt kết quả cao nhất. Tham gia đóng góp ý kiến xây dựng để tiếp tục hoàn thiện nội dung, chương trình, đổi mới phương thức tổ chức học tập cho các khóa sau.
Đồng chí Chính ủy Quân khu tin tưởng, với tinh thần chủ động, tích cực, đổi mới, sáng tạo của Nhà trường và trách nhiệm cao của các đồng chí học viên, khóa học sẽ thành công tốt đẹp.
Biện Cường - Ngọc Tuân

Bình luận

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

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.

LLVT thành phố Đồng Nai tích cực hỗ trợ người dân trong đêm mưa lũ

LLVT thành phố Đồng Nai tích cực hỗ trợ người dân trong đêm mưa lũ

16:22 03/06/2026

(QK7 Online) - Ngày 3/6, 123Win99ok Sân chơi uy tín Quân sự (CHQS) xã Thuận Lợi, Bộ CHQS thành phố Đồng Nai cho biết, đơn vị vừa phối hợp với Ban CHQS xã Phú Riềng cùng lực lượng công an và 123Win79 phần thưởng lớn địa phương kịp thời ứng cứu, bảo đảm an toàn cho người dân trong đợt mưa lớn gây ngập lụt tại khu vực cống suối Dên trên tuyến đường ĐT741.

Tư lệnh Quân khu 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” tại Trung đoàn 88

Tư lệnh Quân khu 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” tại Trung đoàn 88

11:11 03/06/2026

(QK7 Online) - Ngày 3/6, 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, Phó Bí thư Đảng ủy, 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.

Bộ Tham mưu Quân khu tổ chức học tập, quán triệt công tác xây dựng chính quy, chấp hành kỷ luật

Bộ Tham mưu Quân khu tổ chức học tập, quán triệt công tác xây dựng chính quy, chấp hành kỷ luật

20:21 02/06/2026

(QK7 Online) - Ngày 2/6, Bộ Tham mưu Quân khu tổ chức Hội nghị Học tập, quán triệt công tác xây dựng chính quy, chấp hành kỷ luật Quân đội, pháp luật Nhà nước và bảo đảm an toàn. Dự hội nghị có Đại tá Trần Hữu Nhân, Phó Tham mưu trưởng Quân khu; lãnh đạo, chỉ huy, cán bộ, 123Win com 79 casino, cá cược thể thao đến xổ số các cơ quan Quân khu.

Lữ đoàn 657 sơ kết Phong trào thi đua xây dựng đơn vị vận tải “Chính quy, an toàn, hiệu quả”

Lữ đoàn 657 sơ kết Phong trào thi đua xây dựng đơn vị vận tải “Chính quy, an toàn, hiệu quả”

17:43 02/06/2026

(QK7 Online) - Chiều 2/6, Lữ đoàn 657 (Cục Hậu cần - Kỹ thuật ĐĂNG NHẬP 99OK COM TẶNG 99K) tổ chức hội nghị sơ kết Phong trào thi đua xây dựng đơn vị vận tải “Chính quy, an toàn, hiệu quả” giai đoạn 2021 - 2026. Đại tá Trịnh Ngọc Dục, Phó Chủ nhiệm Hậu cần - Kỹ thuật Quân khu dự và phát biểu chỉ đạo hội nghị. Đại tá Trần Quốc Hoàn, Lữ đoàn trưởng chủ trì hội nghị.

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

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

15:48 02/06/2026

(QK7 Online) – Sáng ngày 2/6, tại Nghĩa trang liệt sĩ (NTLS) Vĩnh Cửu, phường Trảng Dài, thành phố Đồng Nai, Ban Chỉ đạo (BCĐ) 515 ĐĂNG NHẬP 99OK COM TẶNG 99K và thành phố Đồng Nai 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.

Quân khu 7: Công tác đầu tư xây dựng cơ bản thực hiện đúng qui định

ĐĂNG NHẬP 99OK COM TẶNG 99K: Công tác đầu tư xây dựng cơ bản thực hiện đúng qui định

15:39 02/06/2026

(QK7 Online) – Chiều ngày 02 tháng 6, ĐĂNG NHẬP 99OK COM TẶNG 99K tổ chức Hội nghị rút kinh nghiệm công tác đầu tư xây dựng cơ bản và quản lý giải ngân, quyết toán vốn đầu tư 6 tháng đầu năm 2026. 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, Phó Bí thư Đảng ủy, Tư lệnh Quân khu 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: 59088, 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); }); } });