/* domucgiare - Muc luc bai viet tu dong (v1, 12/10/2026) Tren trang bai viet: doc cac the H2/H3 trong noi dung, tao khung "Mục lục bài viết" co link nhay toi tung phan. Dat sau doan mo dau. Chi JS giao dien, khong can may chu. */ (function () { if (document.querySelector('.product-essential')) return; var art = document.querySelector('article.box_content.read') || document.querySelector('article.box_content'); if (!art) return; var body = art.querySelector('.des') || art; if (!body || body.getAttribute('data-tvtoc')) return; var heads = [].slice.call(body.querySelectorAll('h2, h3')); var STOP = /bài viết (cùng|liên quan)|bài cùng chuyên|tin (cùng|liên quan)|sản phẩm (cùng|liên quan|tương tự)|cùng chuyên mục/i; var items = []; for (var i = 0; i < heads.length; i++) { var h = heads[i]; var tx = (h.textContent || '').trim().replace(/\s+/g, ' '); if (!tx || tx.length < 3) continue; if (STOP.test(tx)) break; items.push(h); } var h2n = items.filter(function (h) { return h.tagName === 'H2'; }).length; if (h2n < 3) return; body.setAttribute('data-tvtoc', '1'); function slugify(s) { s = s.toLowerCase(); var map = { 'à':'a','á':'a','ạ':'a','ả':'a','ã':'a','â':'a','ầ':'a','ấ':'a','ậ':'a','ẩ':'a','ẫ':'a','ă':'a','ằ':'a','ắ':'a','ặ':'a','ẳ':'a','ẵ':'a','è':'e','é':'e','ẹ':'e','ẻ':'e','ẽ':'e','ê':'e','ề':'e','ế':'e','ệ':'e','ể':'e','ễ':'e','ì':'i','í':'i','ị':'i','ỉ':'i','ĩ':'i','ò':'o','ó':'o','ọ':'o','ỏ':'o','õ':'o','ô':'o','ồ':'o','ố':'o','ộ':'o','ổ':'o','ỗ':'o','ơ':'o','ờ':'o','ớ':'o','ợ':'o','ở':'o','ỡ':'o','ù':'u','ú':'u','ụ':'u','ủ':'u','ũ':'u','ư':'u','ừ':'u','ứ':'u','ự':'u','ử':'u','ữ':'u','ỳ':'y','ý':'y','ỵ':'y','ỷ':'y','ỹ':'y','đ':'d' }; s = s.replace(/[À-ỹ]/g, function (c) { return map[c] || c; }); s = s.replace(/[^a-z0-9\s-]/g, '').trim().replace(/\s+/g, '-').replace(/-+/g, '-'); return s.slice(0, 60); } var used = {}; items.forEach(function (h, k) { var id = h.id || 'muc-' + slugify(h.textContent); if (!id || used[id]) id = 'muc-' + (k + 1); used[id] = 1; h.id = id; h.setAttribute('data-tvms', '1'); }); var css = [ '#tvtoc{font-family:Arial,Helvetica,sans-serif;border:1px solid #e3e8f0;border-radius:10px;background:#fbfcfe;margin:0 0 22px;overflow:hidden;box-shadow:0 1px 3px rgba(20,40,75,.05)}', '#tvtoc .tvtoc-h{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 16px;background:#14284b;cursor:pointer;user-select:none}', '#tvtoc .tvtoc-h b{color:#fff;font-size:15.5px;font-weight:700;display:flex;align-items:center;gap:8px}', '#tvtoc .tvtoc-h b svg{flex:0 0 auto}', '#tvtoc .tvtoc-tg{color:#fff;font-size:13px;font-weight:400;opacity:.9;white-space:nowrap}', '#tvtoc .tvtoc-tg .ar{display:inline-block;margin-left:6px;transition:transform .25s;font-size:11px}', '#tvtoc.tvclosed .tvtoc-tg .ar{transform:rotate(-90deg)}', '#tvtoc ol{list-style:none;counter-reset:tv;margin:0;padding:12px 18px 14px;max-height:2000px;transition:max-height .3s ease,padding .3s ease,opacity .25s}', '#tvtoc.tvclosed ol{max-height:0;padding-top:0;padding-bottom:0;opacity:0;overflow:hidden}', '#tvtoc ol li{margin:0;padding:0}', '#tvtoc ol > li{counter-increment:tv}', '#tvtoc ol > li > a{display:block;padding:7px 0 7px 30px;position:relative;color:#14284b;font-size:14.5px;line-height:1.45;text-decoration:none;font-weight:600;border-top:1px solid #eef1f6}', '#tvtoc ol > li:first-child > a{border-top:0}', '#tvtoc ol > li > a:before{content:counter(tv);position:absolute;left:0;top:6px;width:22px;height:22px;line-height:22px;text-align:center;background:#e9eefb;color:#14284b;border-radius:50%;font-size:12.5px;font-weight:700}', '#tvtoc ol .tvsub{list-style:none;margin:2px 0 4px;padding:0}', '#tvtoc ol .tvsub li a{display:block;padding:5px 0 5px 30px;position:relative;color:#3d4a61;font-size:13.5px;line-height:1.4;text-decoration:none;font-weight:400}', '#tvtoc ol .tvsub li a:before{content:"";position:absolute;left:9px;top:12px;width:6px;height:6px;border-radius:50%;background:#c3ccdb}', '#tvtoc a:hover{color:#d62828!important;text-decoration:underline}', 'h2[data-tvms],h3[data-tvms]{scroll-margin-top:90px}', '@media (max-width:767px){#tvtoc .tvtoc-h b{font-size:14.5px}#tvtoc ol > li > a{font-size:14px}}' ].join(''); var st = document.createElement('style'); st.id = 'tvtoc-css'; st.textContent = css; document.head.appendChild(st); var box = document.createElement('div'); box.id = 'tvtoc'; var esc = function (t) { return String(t).replace(/&/g, '&').replace(/\x3c/g, '<'); }; var ic = '\x3csvg width="18" height="18" viewBox="0 0 24 24" aria-hidden="true">\x3cpath fill="#ffd45e" d="M4 5h11v2H4V5zm0 4h11v2H4V9zm0 4h8v2H4v-2zm0 4h11v2H4v-2zM18 9l3 3-3 3v-2h-2v-2h2V9z"/>\x3c/svg>'; var h = '\x3cdiv class="tvtoc-h">\x3cb>' + ic + 'Mục lục bài viết\x3c/b>\x3cspan class="tvtoc-tg">Thu gọn\x3cspan class="ar">▼\x3c/span>\x3c/span>\x3c/div>\x3col>'; for (var j = 0; j < items.length; j++) { var it = items[j]; if (it.tagName === 'H2') { if (j > 0 && items[j - 1].tagName === 'H3') h += '\x3c/ul>\x3c/li>'; else if (j > 0) h += '\x3c/li>'; h += '\x3cli>\x3ca href="#' + it.id + '">' + esc(it.textContent.trim()) + '\x3c/a>'; } else { if (j > 0 && items[j - 1].tagName === 'H2') h += '\x3cul class="tvsub">'; else if (j === 0) h += '\x3cli>\x3cul class="tvsub">'; h += '\x3cli>\x3ca href="#' + it.id + '">' + esc(it.textContent.trim()) + '\x3c/a>\x3c/li>'; } } if (items[items.length - 1].tagName === 'H3') h += '\x3c/ul>\x3c/li>'; else h += '\x3c/li>'; h += '\x3c/ol>'; box.innerHTML = h; var firstH2 = items[0]; firstH2.parentNode.insertBefore(box, firstH2); box.querySelector('.tvtoc-h').addEventListener('click', function () { var closed = box.classList.toggle('tvclosed'); box.querySelector('.tvtoc-tg').firstChild.textContent = closed ? 'Mở rộng' : 'Thu gọn'; }); box.addEventListener('click', function (e) { var a = e.target.closest('a[href^="#"]'); if (!a) return; var id = a.getAttribute('href').slice(1); var t = document.getElementById(id); if (!t) return; e.preventDefault(); var y = t.getBoundingClientRect().top + window.pageYOffset - 84; window.scrollTo({ top: y, behavior: 'smooth' }); if (history.replaceState) history.replaceState(null, '', '#' + id); }); try { var ld = { '@context': 'https://schema.org', '@type': 'ItemList', name: 'Mục lục bài viết', itemListElement: items.filter(function (x) { return x.tagName === 'H2'; }).map(function (x, k) { return { '@type': 'ListItem', position: k + 1, name: x.textContent.trim(), url: location.origin + location.pathname + '#' + x.id }; }) }; var sc = document.createElement('script'); sc.type = 'application/ld+json'; sc.textContent = JSON.stringify(ld); document.head.appendChild(sc); } catch (e) {} })();