/* Complete-scene playback; no alpha, person mask, or cutout overlay. */ (function(){ 'use strict'; const stage=document.querySelector('#stage'),figure=document.querySelector('#figure'); if(!stage||!figure)return; const base=new URL('../',document.currentScript.src).pathname; const scene=document.createElement('div');scene.className='news-broadcast-scene';scene.setAttribute('aria-hidden','true');stage.prepend(scene); const controls=document.createElement('div');controls.className='news-broadcast-controls';controls.hidden=true;controls.setAttribute('aria-label','新闻数字人播报'); const label=document.createElement('span');label.className='news-broadcast-label';label.textContent='AI 播报'; function button(text,fn){const b=document.createElement('button');b.type='button';b.textContent=text;b.addEventListener('click',fn);return b} let version=0,video=null,item=null,enabled=true; try{enabled=localStorage.getItem('zhiwei-news-broadcast')!=='off'}catch{} const play=button('播放',()=>{if(!video)return;if(video.paused)start();else video.pause()}); const replay=button('重播',()=>{if(video){video.currentTime=0;start()}}); const fullscreen=button('全屏',async()=>{ const current=video;if(!current||!enabled)return; try{ if(current.requestFullscreen)await current.requestFullscreen(); else if(current.webkitEnterFullscreen)current.webkitEnterFullscreen(); current.controls=true;start(); }catch{label.textContent='可在后台查看完整视频'} }); const toggle=button('',()=>{ enabled=!enabled;try{localStorage.setItem('zhiwei-news-broadcast',enabled?'on':'off')}catch{} if(!enabled){video?.pause();stage.classList.remove('broadcast-scene-visible')}else if(item)start();sync(); }); controls.append(label,play,replay,fullscreen,toggle);stage.append(controls); function sync(){ toggle.textContent='播报:'+(enabled?'开':'关');toggle.setAttribute('aria-pressed',String(enabled)); play.disabled=replay.disabled=fullscreen.disabled=!enabled; play.textContent=video&&!video.paused?'暂停':video?.ended?'重播':'播放'; } function stop(){ version++; if(video){video.pause();video.removeAttribute('src');video.load();video.remove();video=null} item=null;scene.replaceChildren();controls.hidden=true;stage.classList.remove('has-news-broadcast','broadcast-scene-visible');sync();return version; } async function start(){ const current=video,token=version;if(!current||!enabled)return; try{await current.play();if(token!==version){current.pause();return}label.textContent='AI 播报';sync()} catch(e){if(token===version){stage.classList.remove('broadcast-scene-visible');label.textContent=e.name==='NotAllowedError'?'点击播放播报':'播报暂不可用';sync()}} } function select(content,{autoplay=false,token=version}={}){ const descriptor=content.broadcast; if(token!==version||!descriptor||content.kind!=='news'||descriptor.render_profile!=='scene-16x9-v1')return; if(!descriptor.width||descriptor.width*9!==descriptor.height*16)return; item=descriptor;const current=document.createElement('video');video=current; current.className='news-broadcast-video';current.playsInline=true;current.preload='metadata'; current.setAttribute('aria-label','知微完整场景播报:'+content.title);current.src=base+item.url; controls.title=item.script||'';controls.setAttribute('aria-description',item.script||''); current.addEventListener('playing',()=>{ if(token!==version||!enabled){current.pause();return} stage.classList.add('broadcast-scene-visible'); document.querySelectorAll('#right-windows video,#right-windows audio').forEach(m=>m.pause()); document.querySelectorAll('.html-publication-frame').forEach(f=>f.contentWindow?.postMessage({type:'zhiwei-pause-publication-media'},'*')); label.textContent='AI 播报';sync(); }); current.addEventListener('pause',()=>{if(token===version)sync()}); current.addEventListener('ended',()=>{if(token===version){stage.classList.remove('broadcast-scene-visible');label.textContent='播报完毕';sync()}}); current.addEventListener('error',()=>{if(token===version){stage.classList.remove('broadcast-scene-visible');label.textContent='播报暂不可用';sync()}}); current.addEventListener('fullscreenchange',()=>{current.controls=document.fullscreenElement===current}); scene.append(current);controls.hidden=false;stage.classList.add('has-news-broadcast');label.textContent='AI 播报';sync(); if(autoplay&&enabled)start(); } document.addEventListener('play',e=>{if(e.target!==video&&e.target.closest?.('#right-windows'))video?.pause()},true); window.addEventListener('message',e=>{ if(e.data?.type==='zhiwei-publication-media-playing'&&[...document.querySelectorAll('.html-publication-frame')].some(f=>f.contentWindow===e.source))video?.pause(); }); document.addEventListener('visibilitychange',()=>{if(document.hidden)video?.pause()}); window.addEventListener('pagehide',()=>video?.pause()); window.NewsBroadcast={stop,select}; })();