// Layout and player controls retained from the HTML reference. Business data is loaded by the Next.js application.
/* ---- unified-empty-states-script ---- */
const emptyStateImages={"write":"/assets/ce2f84f155d32b0b.png","planet":"/assets/a6ba4b9749786513.png","records":"/assets/51e809aac4f1e40a.png","error":"/assets/2d8f1898b668e45e.png","purchased":"/assets/b57b58bd55aeee91.png","profile":"/assets/1f0d06c643b6660a.png","content":"/assets/55f4c0c888a3cee3.png","data":"/assets/a0cb8cb4c545a0bc.png","search":"/assets/c568d83ba6e559ac.png","network":"/assets/47632de987649cda.png","messages":"/assets/9bb14f2dd28ab426.png","calendar":"/assets/eb4bee364040817e.png"};
function emptyStateMarkup(kind,options={}){
const defaults={search:['搜索无结果','换个关键词试试,也许下一部好剧就在这里。','查看全部短剧'],data:['暂无数据','这里还没有记录,去发现一些喜欢的短剧吧。','去发现好剧'],error:['加载失败','内容暂时未能加载,请稍后重试。','重新加载'],content:['暂无内容','精彩内容正在准备中,先去看看其他好剧吧。','随便逛逛']};
const config=defaults[kind]||defaults.content,escape=value=>String(value).replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));
const title=options.title||config[0],description=options.description||config[1],label=options.action===false?'':(options.label||config[2]);
const action=label?(kind==='error'?''+escape(label)+' ':''+escape(label)+' '):'';
return '
'+escape(title)+' '+escape(description)+'
'+action+'
';
}
;
/* ---- sidebar-initial-state ---- */
try{if(localStorage.getItem('huangguo-sidebar-collapsed')==='true')document.documentElement.classList.add('sidebar-collapsed')}catch{}
;
/* ---- collapsible-sidebar-script ---- */
(() => {
const root=document.documentElement;
const toggle=document.getElementById('sidebar-toggle');
const key='huangguo-sidebar-collapsed';
function update(){const collapsed=root.classList.contains('sidebar-collapsed');toggle.setAttribute('aria-expanded',String(!collapsed));toggle.setAttribute('aria-label',collapsed?'展开侧边栏':'收起侧边栏');toggle.title=collapsed?'展开侧边栏':'收起侧边栏'}
const header=toggle.closest('.sidebar-header');
toggle.addEventListener('click',()=>{const collapsed=root.classList.toggle('sidebar-collapsed');header.classList.toggle('just-collapsed',collapsed);try{localStorage.setItem(key,String(collapsed))}catch{}update()});
header.addEventListener('mouseleave',()=>header.classList.remove('just-collapsed'));
header.addEventListener('focusout',()=>header.classList.remove('just-collapsed'));
toggle.addEventListener('keydown',()=>header.classList.remove('just-collapsed'));
update();
})();
;
/* ---- custom-player-controls-script ---- */
function installPlayerControls(screen,currentEpisode=1,actions={}){
const video=screen.querySelector('video'),bar=screen.querySelector('.play-screen-controls'),overlay=screen.querySelector('.play-screen-overlay'),status=screen.querySelector('.play-source-status');
const paths={play:' ',pause:' ',next:' ',volume:' ',mute:' ',full:' ',exit:' '};
Object.assign(paths,{"play": "", "centerPlay": "", "previous": "\n", "next": "\n", "pause": "\n"});
const icon=name=>''+paths[name]+' ';
const last=bar.querySelector('[data-play-action="next"]')?.disabled;
bar.innerHTML=` `;
screen.tabIndex=0;screen.setAttribute('aria-label','视频播放器');
const seek=bar.querySelector('.player-seek'),volume=bar.querySelector('.player-volume input'),toggle=bar.querySelector('[data-media="toggle"]'),mute=bar.querySelector('[data-media="mute"]'),full=bar.querySelector('[data-media="fullscreen"]');
const center=overlay.querySelector('button');center.innerHTML=icon('centerPlay');center.removeAttribute('data-play-action');center.dataset.media='toggle';
const time=t=>{t=Number.isFinite(t)?Math.max(0,Math.floor(t)):0;return (t>=3600?Math.floor(t/3600)+':':'')+String(Math.floor(t/60)%60).padStart(2,'0')+':'+String(t%60).padStart(2,'0')};
function sync(){const duration=Number.isFinite(video.duration)?video.duration:0;seek.disabled=!duration;seek.max=duration||100;seek.value=video.currentTime||0;seek.style.setProperty('--fill',(duration?video.currentTime/duration*100:0)+'%');seek.setAttribute('aria-valuetext',time(video.currentTime)+' / '+time(duration));bar.querySelector('.player-time').textContent=time(video.currentTime)+' / '+time(duration);toggle.innerHTML=icon(video.paused?'play':'pause');toggle.setAttribute('aria-label',video.paused?'播放':'暂停');overlay.hidden=!video.paused;volume.value=video.muted?0:video.volume;volume.style.setProperty('--fill',Number(volume.value)*100+'%');mute.innerHTML=icon(video.muted||!video.volume?'mute':'volume');mute.setAttribute('aria-label',video.muted||!video.volume?'取消静音':'静音')}
async function play(){if(actions.toggle){try{await actions.toggle()}catch{status.textContent='播放失败,请重试';overlay.hidden=false}return}if(!video.currentSrc&&!video.getAttribute('src')&&!video.querySelector('source[src]')){status.textContent='本剧尚未提供视频源,接入视频后即可播放';return}if(video.paused){try{await video.play()}catch{status.textContent='暂时无法播放,请检查视频源后重试';overlay.hidden=false}}else video.pause()}
async function retry(){overlay.querySelector('.ui-empty-state')?.remove();center.hidden=false;status.hidden=false;status.textContent='正在重新加载…';try{if(actions.retry)await actions.retry();else{video.load();await play()}}catch{status.textContent='视频加载失败,请重试';overlay.hidden=false}}
async function fullscreen(){try{if(document.fullscreenElement)await document.exitFullscreen();else if(screen.requestFullscreen)await screen.requestFullscreen();else if(video.webkitEnterFullscreen)video.webkitEnterFullscreen();else throw Error()}catch{status.textContent='当前浏览器暂不支持全屏';overlay.hidden=false}}
function closeMenus(){bar.querySelectorAll('[data-options]').forEach(e=>e.hidden=true);bar.querySelectorAll('[data-menu]').forEach(e=>e.setAttribute('aria-expanded','false'))}
screen.addEventListener('click',e=>{const b=e.target.closest('button');if(!b){if(e.target===video){closeMenus();play()}return}if(['previous','next'].includes(b.dataset.playAction))return;e.stopPropagation();if(b.dataset.media==='retry')void retry();if(b.dataset.media==='toggle')play();if(b.dataset.media==='mute'){if(video.muted||!video.volume){video.muted=false;if(!video.volume)video.volume=.5}else video.muted=true;sync()}if(b.dataset.media==='fullscreen')fullscreen();if(b.dataset.menu){const menu=bar.querySelector('[data-options="'+b.dataset.menu+'"]'),open=menu.hidden;closeMenus();menu.hidden=!open;b.setAttribute('aria-expanded',String(open))}else if(b.dataset.speed){video.playbackRate=Number(b.dataset.speed);bar.querySelector('[data-menu="speed"]').textContent=b.dataset.speed==='1'?'倍速':b.dataset.speed+'×';bar.querySelectorAll('[data-speed]').forEach(e=>e.setAttribute('aria-checked',String(e===b)));closeMenus()}else closeMenus()});
seek.addEventListener('input',()=>{if(Number.isFinite(video.duration)&&video.duration>0){video.currentTime=Math.min(video.duration,Math.max(0,Number(seek.value)));sync()}});
volume.addEventListener('input',()=>{video.volume=Number(volume.value);video.muted=video.volume===0;sync()});
screen.addEventListener('keydown',e=>{if(e.target.matches('input,button'))return;if(e.code==='Space'){e.preventDefault();play()}else if(e.key.toLowerCase()==='m'){mute.click()}else if(e.key.toLowerCase()==='f')fullscreen();else if(['ArrowLeft','ArrowRight'].includes(e.key)&&Number.isFinite(video.duration)){e.preventDefault();video.currentTime=Math.min(video.duration,Math.max(0,video.currentTime+(e.key==='ArrowRight'?5:-5)));sync()}else if(e.key==='Escape')closeMenus()});
screen.addEventListener('focusout',e=>{if(!screen.contains(e.relatedTarget))closeMenus()});
screen.addEventListener('fullscreenchange',()=>{const active=document.fullscreenElement===screen;full.innerHTML=icon(active?'exit':'full');full.setAttribute('aria-label',active?'退出全屏':'进入全屏')});
['loadedmetadata','durationchange','timeupdate','play','pause','ended','volumechange','emptied'].forEach(event=>video.addEventListener(event,sync));function failed(event){if(event.type==='error')status.textContent='视频加载失败,请重试';overlay.querySelector('.ui-empty-state')?.remove();center.hidden=true;status.hidden=true;overlay.insertAdjacentHTML('beforeend',emptyStateMarkup('error',{description:status.textContent}));overlay.hidden=false}video.addEventListener('error',failed);screen.addEventListener('playback:error',failed);
screen._disposePlayer=()=>video.pause();sync();
}
;
/* ---- sticky-search-header-script ---- */
(()=>{
const siteHeader=document.getElementById('global-site-header');if(!siteHeader)return;
let scheduled=false;
function update(){siteHeader.classList.toggle('is-scrolled',window.scrollY>8);scheduled=false}
function measure(){document.documentElement.style.setProperty('--global-header-height',siteHeader.getBoundingClientRect().height+'px')}
new ResizeObserver(measure).observe(siteHeader);measure();
window.addEventListener('scroll',()=>{if(!scheduled){scheduled=true;requestAnimationFrame(update)}},{passive:true});
window.addEventListener('site:route',update);update();
})();
;
/* ---- mobile-slide-navigation-script ---- */
(()=>{
const header=document.querySelector('#global-site-header .top'),sidebar=document.getElementById('site-sidebar');if(!header||!sidebar)return;
const mobile=matchMedia('(max-width:760px)'),trigger=document.createElement('button');trigger.type='button';trigger.className='mobile-menu-trigger';trigger.setAttribute('aria-label','打开导航菜单');trigger.setAttribute('aria-controls','mobile-navigation-drawer');trigger.setAttribute('aria-expanded','false');trigger.innerHTML=' ';header.prepend(trigger);
const drawer=document.createElement('dialog');drawer.id='mobile-navigation-drawer';drawer.setAttribute('aria-label','网站导航');
drawer.innerHTML='
';
const brand=sidebar.querySelector('.sidebar-brand').cloneNode(true);brand.removeAttribute('class');drawer.querySelector('.mobile-drawer-brand').append(brand);
const nav=drawer.querySelector('.mobile-drawer-links');
const sourceNavigation=sidebar.querySelector('[data-site-navigation="sidebar"]');
if(sourceNavigation)nav.innerHTML=sourceNavigation.innerHTML;
nav.querySelectorAll('a[data-page]').forEach(link=>{link.dataset.mobileRoute=link.dataset.page;link.dataset.siteNav='sidebar';});
const pcInfo=sidebar.querySelector('.side-info');if(pcInfo)drawer.querySelector('.mobile-drawer-info').innerHTML=pcInfo.innerHTML;
const footerLogo=drawer.querySelector('.mobile-drawer-info .side-info-wordmark');if(footerLogo){const brandText=document.createElement('span');brandText.className='mobile-drawer-brand-text';brandText.textContent='黄果吃瓜';footerLogo.replaceWith(brandText);}
sidebar.querySelectorAll('.sidebar-social a').forEach(link=>drawer.querySelector('.mobile-drawer-social').append(link.cloneNode(true)));
document.body.append(drawer);let timer=null,start=null;
function finishClose(){clearTimeout(timer);timer=null;drawer.classList.remove('is-closing');if(drawer.open)drawer.close();document.body.classList.remove('mobile-drawer-open');trigger.setAttribute('aria-expanded','false')}
function close(animated=true){if(!drawer.open)return;if(!animated||matchMedia('(prefers-reduced-motion:reduce)').matches){finishClose();return}if(timer)return;drawer.classList.add('is-closing');timer=setTimeout(finishClose,180)}
trigger.addEventListener('click',()=>{if(!mobile.matches)return;clearTimeout(timer);timer=null;drawer.classList.remove('is-closing');drawer.showModal();document.body.classList.add('mobile-drawer-open');trigger.setAttribute('aria-expanded','true')});
drawer.querySelector('.mobile-drawer-close').addEventListener('click',()=>close());
drawer.addEventListener('cancel',e=>{e.preventDefault();close()});drawer.addEventListener('close',finishClose);
drawer.addEventListener('click',e=>{if(e.target.closest('a')){close();return}if(e.target!==drawer)return;const r=drawer.getBoundingClientRect();if(e.clientXr.right||e.clientYr.bottom)close()});
drawer.addEventListener('touchstart',e=>{start=e.touches.length===1?{x:e.touches[0].clientX,y:e.touches[0].clientY}:null},{passive:true});
drawer.addEventListener('touchend',e=>{if(!start)return;const t=e.changedTouches[0],dx=t.clientX-start.x,dy=t.clientY-start.y;start=null;if(dx < -60&&Math.abs(dx)>Math.abs(dy)*1.5)close()},{passive:true});
drawer.addEventListener('touchcancel',()=>{start=null},{passive:true});
window.addEventListener('site:route',()=>close());mobile.addEventListener('change',()=>{if(!mobile.matches)close(false)});
})();
;
/* ---- huangguo-figma-refresh-script ---- */
(()=>{
const header=document.querySelector('#global-site-header .top');
if(!header)return;
const query=document.getElementById('query');if(query)query.placeholder='搜索你感兴趣的内容';
const searchButton=header.querySelector('.search button[type=submit]');if(searchButton)searchButton.innerHTML=" ";
const coin=header.querySelector('.coin-symbol img');if(coin)coin.src="/assets/8eb3c37a26ca792b.svg";
const account=header.querySelector('.account-avatar .guest-avatar-image');if(account)account.src="/assets/b90a9ab6918d47c7.svg";
})();
;