livecode-static/livecodes/broadcast.ba83e21901407826671f6776b101007d.js
2025-06-12 09:37:26 +08:00

2 lines
3.8 KiB
JavaScript

var L={APP_VERSION:"46",SDK_VERSION:"0.11.1",COMMIT_SHA:"328cc81",REPO_URL:"https://github.com/live-codes/livecodes",DOCS_BASE_URL:"/docs/"};var S='<div id="broadcast-container" class="modal-container"><div class="modal-title" data-i18n="broadcast.heading">Broadcast</div><div id="broadcast-screen-container" class="modal-screen-container"><div id="broadcast-status" class="modal-status"></div><div class="modal-screen"><div class="description help" data-i18n="broadcast.desc" data-i18n-prop="innerHTML">Broadcast the result page to other browsers/devices in real time. Please visit the <a href="{{DOCS_BASE_URL}}features/broadcast" target="_blank" rel="noopener">documentations</a> for details.</div><form id="broadcast-form"><div><label for="broadcast-server-url" data-i18n="broadcast.serverURL.heading">Server URL</label><br><input type="text" dir="ltr" id="broadcast-server-url" placeholder="Required" data-i18n="generic.required" data-i18n-prop="placeholder"></div><div class="padded"><input type="checkbox" id="broadcast-source"> <label for="broadcast-source" data-i18n="broadcast.includeSourceCode">Include source code</label></div><button id="broadcast-btn" class="wide-button" type="submit" data-i18n="broadcast.broadcastBtn.start">Broadcast</button><div id="broadcast-channel-url-section"><label for="broadcast-channel-url" data-i18n="broadcast.channelURL">Channel URL</label> <a id="broadcast-channel-url" href="#" target="_blank"></a></div></form></div></div></div>';var A=e=>Object.entries(L).reduce((r,[i,o])=>r.replace(new RegExp(`{{${i}}}`,"g"),o),e);var E=A(S);var x={getUrl:()=>"https://livecodes-broadcast.onrender.com/"};var M=e=>e.querySelector("#broadcast-status"),H=e=>e.querySelector("#broadcast-form"),b=e=>e.querySelector("#broadcast-server-url"),f=e=>e.querySelector("#broadcast-source"),h=e=>e.querySelector("#broadcast-btn"),q=e=>e.querySelector("#broadcast-channel-url-section"),k=e=>e.querySelector("#broadcast-channel-url");var W=async({modal:e,notifications:r,eventsManager:i,deps:o})=>{let p=document.createElement("div");p.innerHTML=E;let n=p.firstChild;e.show(n);let d=M(n),w=H(n),s=b(n),c=f(n),a=h(n),g=q(n),T=k(n),t=o.getBroadcastData(),u=()=>{a.disabled=!1,t=o.getBroadcastData(),t?.isBroadcasting?(d.innerText=window.deps.translateString("broadcast.broadcasting","Broadcasting..."),s.disabled=!0,c.disabled=!0,a.innerText=window.deps.translateString("broadcast.broadcastBtn.stop","Stop broadcast"),c.checked=t?.broadcastSource===!0,t?.channelUrl&&(g.style.display="unset",T.innerText=t.channelUrl,T.href=t.channelUrl)):(d.innerText="",s.disabled=!1,c.disabled=!1,a.innerText=window.deps.translateString("broadcast.broadcastBtn.start","Broadcast"),g.style.display="none"),s.value=s.value.trim()||t?.serverUrl||x.getUrl()};u(),i.addEventListener(w,"submit",async v=>{if(v.preventDefault(),t=o.getBroadcastData(),t?.isBroadcasting){let y=t.serverUrl;fetch(y,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({channel:t.channel,channelToken:t.channelToken,stop:!0})}).catch(()=>{}),o.setBroadcastData({isBroadcasting:!1,channel:"",channelUrl:"",channelToken:"",broadcastSource:!1,serverUrl:y}),u();return}let m=s.value.trim();if(!m){r.error(window.deps.translateString("broadcast.error.serverURLRequired","Server URL is required!"));return}a.disabled=!0,a.innerText=window.deps.translateString("broadcast.connecting","Connecting...");let l=await o.broadcast({serverUrl:m,channel:"",channelToken:"",broadcastSource:c.checked});if(!l||"error"in l){r.error(window.deps.translateString("broadcast.error.generic","Broadcast failed!")),u();return}o.setBroadcastData({isBroadcasting:!0,serverUrl:m,channel:l.channel,channelUrl:l.channelUrl,channelToken:l.channelToken||"",broadcastSource:c.checked}),u(),r.success(window.deps.translateString("broadcast.broadcasting","Broadcasting..."))})};export{W as createBroadcastUI};