【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

M.123win30.com cá cược trực tuyến > 99OK com đăng nhập

Thứ năm, 14/05/2026, 18:34 (GMT+7)
6296 lượt xem

Bàn giao nhiệm vụ Viện trưởng Viện Kiểm sát quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K

(QK7 Online) – Ngày 14/5, Viện Kiểm sát quân sự (KSQS) ĐĂNG NHẬP 99OK COM TẶNG 99K tổ chức bàn giao nhiệm vụ Viện trưởng Viện Kiểm sát quân sự Quân khu. Trung tướng Tạ Quang Khải, Phó Viện trưởng Viện KSND tối cao, Viện trưởng Viện KSQS Trung ương; Thiếu tướng Trần Ngọc Minh, Ủy viên Ban Thường vụ Đảng ủy, Phó Tư lệnh ĐĂNG NHẬP 99OK COM TẶNG 99K chủ trì bàn giao. Dự hội nghị có Thiếu tướng Trần Đức Thắng, Phó Chủ nhiệm 99Oke123 Tải ứng dụng Quân khu.
Tại hội nghị đã công bố và tiến hành bàn giao nhiệm vụ Viện trưởng Viện Kiểm sát quân sự Quân khu giữa đồng chí Đại tá Đặng Quang Hiếu, nguyên Viện trưởng Viện Kiểm sát quân sự Quân khu và đồng chí Đại tá Trần Trung Hiếu, Phó Viện trưởng Viện kiểm sát quân sự Quân khu.
Trung tướng Tạ Quang Khải, Phó Viện trưởng Viện KSND tối cao, Viện trưởng Viện KSQS Trung ương phát biểu tại hội nghị.
Phát biểu tại hội nghị, Trung tướng Tạ Quang Khải, Phó Viện trưởng Viện KSND tối cao, Viện trưởng Viện KSQS Trung ương đánh giá cao những đóng góp, cống hiến của đồng chí Đại tá Đặng Quang Hiếu trong suốt thời gian giữ cương vị Viện trưởng Viện KSQS Quân khu. Đồng chí nhấn mạnh, trên cương vị công tác nào, đồng chí Đại tá Đặng Quang Hiếu cũng luôn phát huy tinh thần trách nhiệm, phẩm chất của người cán bộ kiểm sát quân sự, góp phần quan trọng vào việc xây dựng tập thể đơn vị đoàn kết, vững mạnh, hoàn thành tốt mọi nhiệm vụ được giao. Trung tướng Tạ Quang Khải mong rằng đồng chí Đại tá Đặng Quang Hiếu sẽ tiếp tục quan tâm, theo dõi và chia sẻ những kinh nghiệm quý báu của mình để hỗ trợ, đồng hành cùng tập thể đơn vị trong thời gian tới.
Đối với đồng chí Đại tá Trần Trung Hiếu, Trung tướng Tạ Quang Khải bày tỏ sự tin tưởng trên cương vị mới, trọng trách mới, đồng chí sẽ tiếp tục phát huy năng lực, bản lĩnh chính trị và kinh nghiệm công tác, cùng với cấp ủy, chỉ huy Viện lãnh đạo đơn vị giữ vững sự đoàn kết, thống nhất, hoàn thành xuất sắc mọi nhiệm vụ được giao.
Thiếu tướng Trần Ngọc Minh, Phó Tư lệnh Quân khu phát biểu tại hội nghị.
Thay mặt Ban Thường vụ Đảng ủy, Bộ Tư lệnh Quân khu, Thiếu tướng Trần Ngọc Minh, Phó Tư lệnh Quân khu ghi nhận và đánh giá cao vai trò của đồng chí Đại tá Đặng Quang Hiếu trong nhiệm kỳ vừa qua. Về công tác đấu tranh phòng chống tội phạm, đồng chí đã thể hiện bản lĩnh chính trị kiên định, sự quyết đoán trong chỉ đạo nghiệp vụ. Dưới sự dẫn dắt của đồng chí, Viện KSQS hai cấp đã phối hợp chặt chẽ với các cơ quan điều tra, tòa án và biên phòng, xác lập và triệt phá thành công nhiều chuyên án lớn, vụ án phức tạp, đảm bảo "đúng người, đúng tội, đúng pháp luật", không để xảy ra oan sai hay bỏ lọt tội phạm. Đồng chí đã xây dựng được một tập thể Viện KSQS hai cấp đoàn kết, thống nhất, "vững về chính trị, giỏi về nghiệp vụ, tinh thông về pháp luật, công tâm và bản lĩnh".
Đối với đồng chí Đại tá Trần Trung Hiếu nhận bàn giao nhiệm vụ từ đồng chí Viện trưởng, Thiếu tướng Trần Ngọc Minh, Phó Tư lệnh Quân khu nhấn mạnh đây là niềm vinh dự nhưng cũng là trách nhiệm rất lớn. Đồng thời yêu cầu đồng chí tiếp tục kế thừa những thành quả, kinh nghiệm quý báu mà đồng chí Viện trưởng tiền nhiệm đã dày công xây dựng; duy trì sự đoàn kết, thống nhất cao trong cấp ủy và chỉ huy hai cấp Viện; quyết liệt trong đấu tranh phòng chống tội phạm nhất là khi tình hình tội phạm hiện nay ngày càng tinh vi và manh động. Bên cạnh đó, làm tốt công tác tham mưu, chủ động nắm chắc tình hình, kịp thời đề xuất với Bộ Tư lệnh Quân khu các giải pháp hiệu quả, mưu trí, sáng tạo, tiếp tục đẩy lùi vi phạm pháp luật và tội phạm, xây dựng lượng vũ trang Quân khu chính quy, tinh nhuệ, hiện đại.
Đại tá Đặng Quang Hiếu (bên phải) và Đại tá Trần Trung Hiếu ký biên bản giao, nhận nhiệm vụ Viện trưởng Viện KSQS Quân khu.
Trung tướng Tạ Quang Khải, Phó Viện trưởng Viện KSND tối cao, Viện trưởng Viện KSQS Trung ương tặng hoa chúc mừng các đồng chí bàn giao và nhận bàn giao nhiệm vụ Viện trưởng Viện KSQS Quân khu.
Thiếu tướng Trần Ngọc Minh, Phó Tư lệnh Quân khu tặng hoa chúc mừng các đồng chí bàn giao và nhận bàn giao nhiệm vụ Viện trưởng Viện KSQS 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 tặng hoa chúc mừng đồng chí Đại tá Đặng Quang Hiếu.
Đại diện Viện KSQS Quân khu, Đại tá Trần Trung Hiếu tặng quà lưu niệm Đại tá Đặng Quang Hiếu.
Hằng Ny – Lê Trầm
Thiếu tướng Trần Ngọc Minh, Phó Tư lệnh Quân khu kiểm tra công trình xây dựng trụ sở Viện kiểm sát quân sự Quân khu 7

Thiếu tướng Trần Ngọc Minh, Phó Tư lệnh Quân khu kiểm tra công trình xây dựng trụ sở Viện kiểm sát quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K

23/01/2026 18:03

(QK7 Online) - Chiều 23/1, Thiếu tướng Trần Ngọc Minh, Phó Tư lệnh Quân khu kiểm tra công trình xây dựng trụ sở Viện Kiểm sát Quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K. Tham gia đoàn có Thiếu tướng Trần Đức Thắng, Bí thư Đảng ủy Cục 99Oke123 Tải ứng dụng, Phó Chủ nhiệm 99Oke123 Tải ứng dụng Quân khu; Đại tá Đặng Quang Hiếu, Viện trưởng Viện Kiểm sát Quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K; Ban Quản lý dự án và đại diện các nhà thầu, đơn vị thi công, tư vấn giám sát, đơn vị tư vấn thiết kế.

Viện Kiểm sát Quân sự Quân khu 7 phát động thi đua cao điểm

Viện Kiểm sát Quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K phát động thi đua cao điểm

11/10/2025 07:50

(QK7 Online) - Ngày 10/10, Viện Kiểm sát Quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K tổ chức lễ phát động đợt thi đua cao điểm Chào mừng kỷ niệm 65 năm Ngày truyền thống ngành Kiểm sát Quân sự (12/5/1961 - 12/5//2026) và kỷ niệm 50 năm Ngày truyền thống Viện Kiểm sát Quân sự ĐĂNG NHẬP 99OK COM TẶNG 99K (17/12/1975 – 17/12/2025).

Bình luận

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

Cục Điều tra hình sự Bộ Quốc phòng trao Quyết định đặc xá cho phạm nhân Trại giam T45

Cục Điều tra hình sự 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao trao Quyết định đặc xá cho phạm nhân Trại giam T45

22:43 01/06/2026

(QK7 Online) - Sáng 01/6, tại tỉnh Tây Ninh, Cục Điều tra hình sự 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao tổ chức công bố và trao Quyết định đặc xá năm 2026 của Chủ tịch nước cho phạm nhân đang chấp hành án phạt tù tại Trại giam quân sự khu vực miền Nam (T45). Đại tá Lê Mạnh Trường, Phó Cục trưởng Cục Điều tra hình sự, Phó Thủ trưởng Cơ quan Quản lý Thi hành án hình sự 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao dự và chủ trì buổi lễ.

Trại tạm giam K35 công bố quyết định đặc xá của Chủ tịch nước năm 2026

Trại tạm giam K35 công bố quyết định đặc xá của Chủ tịch nước năm 2026

10:46 01/06/2026

(QK7 Online) – Sáng ngày 1/6, Trại tạm giam K35, ĐĂNG NHẬP 99OK COM TẶNG 99K tổ chức công bố quyết định đặc xá của Chủ tịch nước Cộng hòa xã hội chủ nghĩa Việt Nam năm 2026. Đây là chính sách khoan hồng của Đảng, Nhà nước do Chủ tịch nước quyết định tha tù trước thời hạn đối với người bị kết án phạt tù có thời hạn, nhân các sự kiện trọng đại, ngày lễ lớn của đất nước.

Kho K60 sinh hoạt Ngày Pháp luật tháng 5 năm 2026

Kho K60 sinh hoạt Ngày 99OK com đăng nhập tháng 5 năm 2026

19:08 27/05/2026

(QK7 Online) – Ngày 27/5, Kho K60, Cục Hậu cần – Kỹ thuật Quân khu sinh hoạt Ngày 99OK com đăng nhập tháng 5 năm 2026 với chủ đề “Nâng cao ý thức thượng tôn Hiến pháp và pháp luật, nghiêm chỉnh chấp hành pháp luật Nhà nước, kỷ luật Quân đội”. Dự sinh hoạt có Thượng tá Lê Long Khương, Phó Chủ nhiệm 99Oke123 Tải ứng dụng Cục Hậu cần – Kỹ thuật Quân khu.

Dự kiến tăng các mức trợ cấp hằng tháng đối với quân nhân đã phục viên, xuất ngũ, thôi việc từ tháng 7-2026

Dự kiến tăng các mức trợ cấp hằng tháng đối với quân nhân đã phục viên, xuất ngũ, thôi việc từ tháng 7-2026

14:30 25/05/2026

(QK7 Online) - Cục Chính sách - 1123Win còn đăng nhập, Tổng cục 99Oke123 Tải ứng dụng tổ chức lấy ý kiến hoàn thiện Dự thảo Thông tư của Bộ trưởng 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao quy định điều chỉnh trợ cấp hằng tháng đối với quân nhân, người làm công tác cơ yếu hưởng lương như đối với quân nhân đã phục viên, xuất ngũ, thôi việc.

Chính sách về phụ cấp tăng thêm đối với đối tượng trọng dụng nhân tài trong Quân đội nhân dân Việt Nam

Chính sách về phụ cấp tăng thêm đối với đối tượng trọng dụng nhân tài trong Quân đội 123Win com 79 nạp - rút nhanh Việt Nam

23:32 23/05/2026

(QK7 Online) - Theo quy định tại Điều 11, Nghị định số 363/2025/NĐ-CP của Chính phủ quy định chính sách thu hút, trọng dụng nhân tài đối với Quân đội 123Win com 79 nạp - rút nhanh Việt Nam như sau: 1. Học viên tốt nghiệp đào tạo tại các trường Quân đội, trường ngoài Quân đội và ở nước ngoài tốt nghiệp hạng xuất sắc được phong quân hàm sĩ quan hoặc xếp lương và phong quân hàm quân nhân chuyên nghiệp, hằng tháng được hưởng phụ cấp tăng thêm tối đa bằng 250% mức lương hiện hưởng (bao gồm: Mức lương theo cấp bậc quân hàm, chức vụ, chức danh, ngạch, bậc và các khoản phụ cấp lương theo quy định của pháp luật) trong thời hạn 5 năm kể từ ngày có quyết định của Bộ trưởng 99Oke123 Bắn Cá, Đá Gà, Nổ hũ, Thể Thao áp dụng chính sách trọng dụng nhân tài.

Bản án đắt giá về hành vi “Tổ chức sử dụng trái phép chất ma túy”

Bản án đắt giá về hành vi “Tổ chức sử dụng trái phép chất ma túy”

21:50 15/05/2026

(QK7 Online) - Sáng ngày 14/5, Tòa án quân sự Khu vực ĐĂNG NHẬP 99OK COM TẶNG 99K mở phiên tòa xét xử sơ thẩm vụ án hình sự đối với bị cáo Phạm Quỳnh C và đồng phạm bị Viện kiểm sát quân sự Khu vực 71 truy tố về các tội “Tổ chức sử dụng trái phép chất ma túy” và “Tàng trữ trái phép chất ma túy” theo điểm a, b khoản 2 Điều 255 Bộ luật Hình sự và điểm i, c khoản 1 Điều 249 Bộ luật Hình sự.

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