Xem Phim
(Truyện dành cho lứa tuổi 16+)
"Mình sẽ làm gì để trở thành người lớn?"
Akane Amou, lớn lên trong sự bảo bọc nghiêm khắc của cha mẹ mà không tiếp xúc với phương tiện giải trí, bước qua tuổi 15, trước những thứ "tình cảm", thậm chí là một nụ hôn cũng không thể xem được.
Giờ đã vào trường cấp ba, cùng với cậu bạn Fuyumine, Amou sẽ bước qua những rào cản ấy. Liệu cô bé có thể xem được một phim nhán mác "cấm trẻ em"?
javascript:(async function(){ const box=document.querySelector('.image-section'); if(!box){ alert('Không tìm thấy TAG'); return; } const sleep=ms=>new Promise(r=>setTimeout(r,ms)); function show(msg,bg='#333'){ let m=document.getElementById('__copy_status__'); if(!m){ m=document.createElement('div'); m.id='__copy_status__'; m.style= 'position:fixed;' + 'top:20px;' + 'right:20px;' + 'background:'+bg+';' + 'color:white;' + 'padding:10px 18px;' + 'z-index:999999;' + 'border-radius:5px;' + 'font-family:sans-serif;' + 'font-weight:bold;' + 'box-shadow:0 2px 10px rgba(0,0,0,.25)'; document.body.appendChild(m); } m.innerText=msg; m.style.background=bg; } function count(){ return box.querySelectorAll('.img-block').length; } async function scrollLast(){ const items=box.querySelectorAll('.img-block'); if(items.length){ items[items.length-1].scrollIntoView({ block:'end', behavior:'auto' }); } window.scrollTo(0,document.documentElement.scrollHeight); } /* Chờ xem số item có tăng không. Cho tối đa 3 giây / batch. */ async function waitForMore(oldCount){ for(let i=0;i<30;i++){ await sleep(100); const n=count(); if(n>oldCount){ return true; } } return false; } let noMore=0; while(noMore<3){ let before=count(); show('⏳ Đang load: '+before+' item'); await scrollLast(); /* Đá nhẹ scroll để kích hoạt IntersectionObserver trên một số browser */ await sleep(150); window.scrollBy(0,-150); await sleep(100); window.scrollTo(0,document.documentElement.scrollHeight); const added=await waitForMore(before); if(added){ noMore=0; show('⏳ Đã load: '+count()+' item'); await sleep(200); }else{ noMore++; /* Chưa kết luận ngay. Kích lại scroll rồi thử thêm. */ window.scrollBy(0,-500); await sleep(250); window.scrollTo(0,document.documentElement.scrollHeight); } } /* Mac: kéo ngược lại một chút để browser flush DOM/layout */ window.scrollBy(0,-800); await sleep(300); void box.offsetHeight; const total=count(); show('📋 Đang copy '+total+' item...'); let html=box.innerHTML; html=html.replace( /<span class="zw">.*?<\/span>/g, '' ); html=html.replace( /[\u200B-\u200D\uFEFF]/g, '' ); /* Copy bằng textarea trước. Cách này ổn định hơn với bookmarklet chạy async trên Mac Chrome. */ let ta=document.createElement('textarea'); ta.value=html; ta.style= 'position:fixed;' + 'left:-999999px;' + 'top:0'; document.body.appendChild(ta); ta.focus(); ta.select(); let ok=false; try{ ok=document.execCommand('copy'); }catch(e){} ta.remove(); /* Nếu execCommand không được, thử Clipboard API. */ if(!ok){ try{ await navigator.clipboard.writeText(html); ok=true; }catch(e){} } if(ok){ show( '✅ Copy '+total+' item OK', '#28a745' ); setTimeout(function(){ const m=document.getElementById('__copy_status__'); if(m)m.remove(); },2500); }else{ show( '❌ Không copy được Clipboard', '#dc3545' ); }})();
