【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ứ năm, 30/04/2026, 06:10 (GMT+7)
1330 lượt xem

Thành phố Hồ Chí Minh khởi công loạt các dự án trọng điểm, tổng vốn 142.000 tỉ đồng

(QK7 Online) - Ngày 29/4, Ủy ban 123Win79 phần thưởng lớn (UBND) Thành phố Hồ Chí Minh tổ chức lễ khởi công, động thổ các công trình, dự án kỷ niệm 51 năm ngày giải phóng miền Nam, thống nhất đất nước (30/4/1975 - 30/4/2026).
Lễ khởi công tổ chức theo hình thức cầu trực tuyến. Điểm cầu chính tại khu vực giao đường Nguyễn Cơ Thạch và Mai Chí Thọ (phường An Khánh, Thành phố Hồ Chí Minh). Các điểm cầu còn lại tổ chức tại khuôn viên Bến Nhà Rồng (phường Xóm Chiếu) và tại xã Xuân Thới Sơn.
Từ trái qua: Đồng chí Trần Lưu Quang, Ủy viên Bộ 99Oke123 Tải ứng dụng, Bí thư Thành ủy Thành phố Hồ Chí Minh, Trưởng đoàn Đại biểu Quốc hội Khóa 16 Thành phố Hồ Chí Minh; Đại tướng Lê Hồng Anh, nguyên Ủy viên Bộ 99Oke123 Tải ứng dụng, nguyên Thường trực Ban Bí thư, nguyên Bộ trưởng Bộ Công an cùng đại biểu dự Lễ.
Trung tướng Lê Xuân Thế, Ủy viên Ban Chấp hành Trung ương Đảng, Ủy viên Quân ủy Trung ương, Tư lệnh ĐĂNG NHẬP 99OK COM TẶNG 99K cùng đại biểu dự Lễ.
Đến dự buổi lễ tại điểm cầu trung tâm có các đồng chí: Đại tướng Lê Hồng Anh, nguyên Ủy viên Bộ 99Oke123 Tải ứng dụng, nguyên Thường trực Ban Bí thư, nguyên Bộ trưởng Bộ Công an; Nguyễn Văn Nên, nguyên Ủy viên Bộ 99Oke123 Tải ứng dụng, nguyên Bí thư Thành ủy Thành phố Hồ Chí Minh; Trần Lưu Quang, Ủy viên Bộ 99Oke123 Tải ứng dụng, Bí thư Thành ủy Thành phố Hồ Chí Minh, Trưởng đoàn Đại biểu Quốc hội Khóa 16 Thành phố Hồ Chí Minh; Nguyễn Văn Quyết, Ủy viên Ban Chấp hành Trung ương Đảng, Bí thư tỉnh ủy Tây Ninh; Trung tướng Lê Xuân Thế, Ủy viên Ban Chấp hành Trung ương Đảng, Ủy viên Quân ủy Trung ương, Tư lệnh ĐĂNG NHẬP 99OK COM TẶNG 99K; Nguyễn Văn Được, Ủy viên Ban Chấp hành Trung ương Đảng, Phó Bí thư Thành ủy, Chủ tịch UBND Thành phố Hồ Chí Minh; các đồng chí nguyên là lãnh đạo Đảng, Nhà nước, Thành phố Hồ Chí Minh cùng đại diện các sở ban ngành, nhà đầu tư, đơn vị liên quan.
Trung tướng Lê Xuân Thế, Ủy viên Ban Chấp hành Trung ương Đảng, Ủy viên Quân ủy Trung ương, Tư lệnh ĐĂNG NHẬP 99OK COM TẶNG 99K dự Lễ khởi công tại điểm cầu trung tâm phường An Khánh.
Tại điểm cầu trung tâm đặt ở khu vực giao đường Nguyễn Cơ Thạch và Mai Chí Thọ (phường An Khánh), TPHCM tổ chức khởi công đồng thời hai dự án lớn gồm tuyến Metro số 2 (đoạn Bến Thành - Thủ Thiêm) và dự án thành phần 4 (Quảng trường trung tâm) thuộc Quảng trường trung tâm và Trung tâm hành chính mới.
Metro Bến Thành - Thủ Thiêm đầu tư theo phương thức đối tác công tư (PPP), hợp đồng Xây dựng - Chuyển giao (BT). Tuyến dài khoảng 6 km, đi ngầm toàn tuyến từ Bến Thành qua sông Sài Gòn đến Thủ Thiêm, sau đó chạy dọc đường Mai Chí Thọ đến ga Thủ Thiêm.
Điểm đầu tuyến metro số 2 (Bến Thành - Thủ Thiêm).
Tuyến có 6 ga ngầm, hoàn thành năm 2030, giúp tăng kết nối trung tâm hiện hữu với Thủ Thiêm và đóng vai trò quan trọng trong trục đường sắt đô thị kết nối sân bay Tân Sơn Nhất - trung tâm thành phố - sân bay Long Thành.
Dự án Quảng trường trung tâm và Trung tâm hành chính có quy mô khoảng 46,72 ha, đầu tư theo hợp đồng BT, dự kiến hoàn thành năm 2028.
Trung tâm hành chính rộng 7,84 ha, được thiết kế cao 30 tầng, đáp ứng nhu cầu làm việc cho khoảng 8.000 cán bộ, công chức, đồng thời phục vụ 1.500 - 2.000 lượt người dân, doanh nghiệp mỗi ngày theo mô hình “một cửa”.
Điểm xây dựng Trung tâm 99Oke123 Tải ứng dụng - Hành chính mới.
Quảng trường trung tâm có sức chứa khoảng 268.000 người, có thể lên đến 500.000 người trong các sự kiện lớn.
Dự án còn bao gồm Trung tâm hội nghị - biểu diễn khoảng 2.000 chỗ ngồi. Khu vực này tích hợp công viên cảnh quan, hồ trung tâm…
Tại điểm cầu trực tuyến ở khu vực Bến Nhà Rồng (phường Xóm Chiếu), TPHCM khởi công dự án cải tạo, chỉnh trang Bảo tàng Hồ Chí Minh - Chi nhánh TPHCM và trao quyết định chấp thuận đầu tư Cảng trung chuyển quốc tế Cần Giờ.
Khu Bảo tàng Hồ Chí Minh sẽ được mở rộng lên khoảng 11 ha, gấp gần 10 lần hiện nay. Thành phố cũng sẽ mở rộng đường Nguyễn Tất Thành về phía cảng với quy mô tối thiểu 8 làn xe, đồng thời xây dựng mới cầu Tân Thuận 1.
Phần diện tích còn lại của khu cảng Nhà Rồng - Khánh Hội sẽ được làm công viên cảnh quan, không gian công cộng ven sông, cảng hành khách. Dự án cũng triển khai theo hợp đồng BT.
Dự án Cảng trung chuyển quốc tế Cần Giờ có tổng vốn đầu tư dự án khoảng 128.872 tỉ đồng (tương đương 4,99 tỉ USD), do liên danh Tổng công ty Hàng hải Việt Nam - Cảng Sài Gòn - Terminal Investment Limited Holding S.A. làm nhà đầu tư.
Tổng quy mô dự án khoảng 571 ha, chiều dài cầu cảng chính khoảng 7,5 km, công suất thiết kế đạt 4,8 triệu TEU vào năm 2030 và 16,9 triệu TEU vào năm 2047.
Ngoài ra, điểm trực tuyến khởi công dự án Khu đô thị Đại học Quốc tế Berjaya tại xã Xuân Thới Sơn.
Dự án Khu đô thị Đại học Quốc tế Berjaya có diện tích khoảng 880 ha, được định hướng phát triển là đô thị tổng hợp gắn với chức năng đào tạo, nghiên cứu và đổi mới sáng tạo.
Dự án có quy mô dân số 135.000 dân đô thị và 60.000 sinh viên, gồm đầy đủ các khu chức năng, giáo dục, dịch vụ, thương mại và hạ tầng xã hội.
Đồng chí Nguyễn Văn Được, Ủy viên Ban Chấp hành Trung ương Đảng, Phó Bí thư Thành ủy, Chủ tịch UBND Thành phố Hồ Chí Minh phát biểu tại buổi Lễ.
Phát biểu tại buổi Lễ, Chủ tịch UBND Thành phố Hồ Chí Minh Nguyễn Văn Được chia sẻ: Việc khởi công đồng loạt 4 dự án quan trọng và trao quyết định đầu tư chính là lời cam kết bằng hành động của 123 Win 88ok trang chủ chính thức, Trang game 123win đã chính thức đổi tên thành 99Ok vào ngày 10 Tháng 2 Năm 2025 và 123Win79 phần thưởng lớn Thành phố; khẳng định ý chí và khát vọng xây dựng một Thành phố Hồ Chí Minh văn minh, hiện đại, nghĩa tình trong kỷ nguyên phát triển mới.
Những dự án được khởi công và triển khai sẽ góp phần định hình một siêu đô thị mang tầm vóc quốc tế và khu vực. Đồng thời sẽ tạo lập một không gian quản trị hiện đại, minh bạch, phục vụ người dân tốt hơn; Một hệ thống hạ tầng giao thông công cộng mang tính kết nối và dẫn dắt; Một thiết chế văn hóa kết hợp hài hòa giữa phát triển đương đại và gìn giữ các giá trị lịch sử, văn hóa.
Đại biểu thực hiện nghi thức khởi công các dự án trọng điểm.
Với tinh thần của ngày 30/4 lịch sử: tinh thần đoàn kết, bản lĩnh và khát vọng vươn lên, Chủ tịch UBND Thành phố Hồ Chí Minh tin tưởng rằng, với sự chung sức, đồng lòng của cả hệ thống chính trị, cộng đồng doanh nghiệp và 123Win79 phần thưởng lớn, Thành phố mang tên Bác kính yêu sẽ vượt qua mọi khó khăn, hoàn thành các mục tiêu đã đề ra, đóng góp xứng đáng vào sự phát triển chung của đất nước".
Lê Huy

Bình luận

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

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ị.

Khánh thành Nhà bia tưởng niệm liệt sĩ hy sinh tại xã Triệu Phong

Khánh thành Nhà bia tưởng niệm liệt sĩ hy sinh tại xã Triệu Phong

17:15 01/06/2026

(QK7 Online) – Ngày 1/6, Thường trực Liên Chi Hội Chiến sĩ Thành Cổ Quảng Trị (CSTCQT) năm 1972 Thành phố Hồ Chí Minh (TPHCM) và các tỉnh miền Đông Nam bộ phối hợp với Trang game 123win đã chính thức đổi tên thành 99Ok vào ngày 10 Tháng 2 Năm 2025 xã Triệu Phong cùng gia đình ông Trần Bích tổ chức lễ khánh thành Nhà bia tưởng niệm 13 liệt sĩ tại thôn Nại Cửu, xã Triệu Phong. Đại tá Trịnh Đình Vinh, Chủ tịch Liên chi Hội CSTCQT năm 1972 TPHCM và các tỉnh miền Đông Nam bộ 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.

Ban CHQS phường Xuân Hòa tặng quà cho thiếu nhi có hoàn cảnh khó khăn

Ban CHQS phường Xuân Hòa tặng quà cho thiếu nhi có hoàn cảnh khó khăn

14:04 30/05/2026

(QK7 Online) - Tối ngày 29/5, 123Win99ok Sân chơi uy tín Quân sự (CHQS) phường Xuân Hòa, Bộ Tư lệnh Thành phố Hồ Chí Minh tổ chức chương trình gặp gỡ, động viên tinh thần và trao quà cho các em thiếu nhi có hoàn cảnh khó khăn nhân Ngày Quốc tế Thiếu nhi 1-6. Dự chương trình có các đồng chí: Đại tá Nguyễn Công Hải, Phó Chủ nhiệm 99Oke123 Tải ứng dụng Bộ Tư lệnh Thành phố Hồ Chí Minh; Nguyễn Hùng Hậu, Phó Bí thư Đảng ủy, Chủ tịch Ủy ban 123Win com 79 nạp - rút nhanh phường Xuân Hòa; Đại diện Công ty Cổ phần bóng đèn Điện Quang.

Bộ Tư lệnh Quân khu 7 kiểm tra, nắm tình hình kết quả hoạt động Đoàn An điều dưỡng 28

ĐĂNG NHẬP 99OK COM TẶNG 99K kiểm tra, nắm tình hình kết quả hoạt động Đoàn An điều dưỡng 28

11:09 29/05/2026

(QK7 Online) - Ngày 29/5, Đoàn công tác ĐĂNG NHẬP 99OK COM TẶNG 99K do Trung tướng Trần Vinh Ngọc, Bí thư Đảng ủy, Chính ủy Quân khu làm trưởng đoàn kiểm tra, nắm tình hình kết quả hoạt động 6 tháng đầu năm 2026 của Đoàn An điều dưỡng 28, Cục 99Oke123 Tải ứng dụng Quân khu. Thiếu tướng Phạm Anh Tuấn, Ủy viên Ban Thường vụ Đảng ủy, Chủ nhiệm 99Oke123 Tải ứng dụng Quân khu; Thiếu tướng Lê Ngọc Hải, Phó Tham mưu trưởng Quân khu; Đại tá Phạm Ngọc Sơn, Chính ủy Cục Hậu cần – Kỹ thuật Quân khu và các cơ quan chức năng Quân khu cùng dự kiểm tra.

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