The schedule showed a lecturer only where the session notes named one (Globalizacja), so the student plan had nobody under the other courses. The session JSON now carries the course lecturer in its course ref and an optional per-session lecturer (new nullable column, admin field, seed key) for courses shared between two people. The student app shows the session's own lecturer or, failing that, the course's.
2 lines
16 KiB
JavaScript
2 lines
16 KiB
JavaScript
/* empty css */import{d as oe,A as G,c as n,a,e as k,t as p,F as T,y as X,h as se,i as Ue,x as C,s as u,r as m,k as Fe,o as t,m as xe,K as Re,B as fe,_ as Te,q as Ge,U as Xe,S as ne,V as Je,W as Qe,l as et}from"./index-C9sCss04.js";import{p as me}from"./presentations-Bl3tHhv5.js";import{s as pe,f as je,g as ke,h as tt,i as at,j as nt,k as st,l as Ce,m as ot,q as lt,u as it,v as rt,o as ct,D as ut,d as dt,R as vt}from"./realtime-Yj7FcC9z.js";import{_ as le}from"./_plugin-vue_export-helper-DlAUqK2U.js";const mt={class:"drawer"},ft=["id","aria-label"],pt={class:"sheet-head"},kt=["disabled"],yt={class:"sheet-title"},bt={class:"title"},wt={key:0,class:"subtitle"},ht=["disabled"],gt=["innerHTML"],zt={key:1,class:"empty"},_t=["innerHTML"],$t={key:1,class:"empty"},Tt=["data-current","aria-current","onClick"],jt={class:"num"},Ct={class:"row-title"},St={key:0,class:"tag"},xt={key:1,class:"now"},Rt={class:"list-foot"},Bt={key:0,class:"hint"},Et={class:"bar","aria-label":"Szuflady na telefonie"},Lt=["disabled","aria-expanded","aria-controls","onClick"],Pt=oe({__name:"RemoteDrawer",props:{deck:{},state:{},live:{type:Boolean},cursor:{},open:{},disabled:{type:Boolean},wakeLockMissing:{type:Boolean}},emits:["goto","cursor","open","close"],setup(l,{emit:S}){const s=l,r=S,i=[{kind:"say",label:"Powiedz"},{kind:"notes",label:"Notatki"},{kind:"slides",label:"Slajdy"}],_=u(()=>s.deck.slides.length),j=u(()=>tt(s.deck,s.state,s.live,s.cursor)),$=u(()=>s.live&&s.state?s.state.number:s.deck.slides[pe(s.deck.slides,s.cursor)]?.number??0),z=u(()=>pe(s.deck.slides,s.cursor)),w=u(()=>s.live&&s.state?s.state.number:s.deck.slides[z.value]?.number??s.cursor),L=u(()=>{const f=s.live&&s.state?.special?"s":"";return`${w.value}${f}`});function d(f){return f?/<img\b/i.test(f)?!0:f.replace(/<[^>]*>/g,"").replace(/ | /g," ").trim()!=="":!1}const N=u(()=>d(j.value?.say_html)?je(j.value?.say_html??""):""),I=u(()=>d(j.value?.notes_html)?je(j.value?.notes_html??""):""),P=u(()=>s.open==="say"?`Powiedz · slajd ${w.value}`:s.open==="notes"?`Notatki · slajd ${w.value}`:"Slajdy"),x=u(()=>s.open==="slides"?"":s.live?"Widzisz tylko Ty":`Przeglądasz na telefonie · slajd ${z.value+1} z ${_.value}`),b=u(()=>!s.live&&(s.open==="say"||s.open==="notes")),V=u(()=>z.value>0),A=u(()=>z.value<_.value-1),h=u(()=>s.deck.slides.map(f=>({number:f.number,title:ke(f),special:!!f.special})));function K(f){s.disabled||(s.open===f?r("close"):r("open",f))}function q(f){const y=s.deck.slides[z.value+f];y&&r("cursor",y.number)}const R=m(null),E=m(null);return G([L,()=>s.open],()=>{R.value&&(R.value.scrollTop=0)}),G(()=>s.open,async f=>{if(f!=="slides")return;await Re(),E.value?.querySelector('[data-current="true"]')?.scrollIntoView({block:"center"})}),(f,y)=>{const J=Fe("router-link");return t(),n("div",mt,[l.open?(t(),n("section",{key:0,id:`remote-drawer-${l.open}`,class:"sheet","aria-label":P.value},[a("header",pt,[b.value?(t(),n("button",{key:0,type:"button",class:"icon-btn","aria-label":"Poprzedni slajd na telefonie",disabled:!V.value,onClick:y[0]||(y[0]=v=>q(-1))}," ‹ ",8,kt)):k("",!0),a("div",yt,[a("p",bt,p(P.value),1),x.value?(t(),n("p",wt,p(x.value),1)):k("",!0)]),b.value?(t(),n("button",{key:1,type:"button",class:"icon-btn","aria-label":"Następny slajd na telefonie",disabled:!A.value,onClick:y[1]||(y[1]=v=>q(1))}," › ",8,ht)):k("",!0),a("button",{type:"button",class:"close-btn",onClick:y[2]||(y[2]=v=>r("close"))},"Zamknij")]),a("div",{ref_key:"body",ref:R,class:C(["sheet-body",{reading:l.open!=="slides"}])},[l.open==="say"?(t(),n(T,{key:0},[N.value?(t(),n("div",{key:0,class:"text",innerHTML:N.value},null,8,gt)):(t(),n("p",zt,"Brak tekstu do powiedzenia na tym slajdzie."))],64)):l.open==="notes"?(t(),n(T,{key:1},[I.value?(t(),n("div",{key:0,class:"text",innerHTML:I.value},null,8,_t)):(t(),n("p",$t,"Brak notatek do tego slajdu."))],64)):(t(),n(T,{key:2},[a("ol",{ref_key:"list",ref:E,class:"list"},[(t(!0),n(T,null,X(h.value,v=>(t(),n("li",{key:v.number},[a("button",{type:"button",class:"row","data-current":v.number===$.value?"true":void 0,"aria-current":v.number===$.value?"true":void 0,onClick:ie=>r("goto",v.number)},[a("span",jt,p(v.number),1),a("span",Ct,p(v.title),1),v.special?(t(),n("span",St,"+ specjalny")):k("",!0),v.number===$.value?(t(),n("span",xt,"teraz")):k("",!0)],8,Tt)]))),128))],512),a("footer",Rt,[se(J,{class:"back-link",to:{name:"my-presentations"}},{default:Ue(()=>[...y[3]||(y[3]=[xe("Wróć do moich prezentacji",-1)])]),_:1}),l.wakeLockMissing?(t(),n("p",Bt,"Ta przeglądarka nie pozwala zablokować wygaszania ekranu.")):k("",!0)])],64))],2)],8,ft)):k("",!0),a("nav",Et,[(t(),n(T,null,X(i,v=>a("button",{key:v.kind,type:"button",class:C(["tab",{open:l.open===v.kind}]),disabled:l.disabled,"aria-expanded":l.open===v.kind?"true":"false","aria-controls":`remote-drawer-${v.kind}`,onClick:ie=>K(v.kind)},p(v.label),11,Lt)),64))])])}}}),Dt=le(Pt,[["__scopeId","data-v-9f920f42"]]),Mt={key:0,class:"eyebrow"},Nt={class:"grid nav"},It=["disabled","aria-busy","onClick"],qt={key:1,class:"grid fn"},Vt=["disabled","aria-pressed","aria-busy","onClick"],At={class:"label"},Kt=oe({__name:"RemoteKeys",props:{state:{},live:{type:Boolean},busy:{},compact:{type:Boolean}},emits:["press","reset"],setup(l,{emit:S}){const s=l,r=S,i=u(()=>at(s.state,s.live)),_=u(()=>i.value.slice(0,2)),j=u(()=>i.value.slice(2));function $(w){return(s.busy[w.action]??0)>0}function z(w){w.enabled&&(w.action==="clock-reset"?r("reset"):r("press",w.action))}return(w,L)=>(t(),n("section",{class:C(["keys",{compact:l.compact}]),"aria-label":"Klawisze na komputerze"},[l.compact?k("",!0):(t(),n("p",Mt,"Klawisze na komputerze")),a("div",Nt,[(t(!0),n(T,null,X(_.value,d=>(t(),n("button",{key:d.action,type:"button",class:C(["key nav-key",d.action]),disabled:!d.enabled,"aria-busy":$(d)?"true":void 0,onClick:N=>z(d)},[d.action==="prev"?(t(),fe(Te,{key:0,class:"arrow",name:"arrow-left"})):k("",!0),a("span",null,p(d.label),1),d.action==="next"?(t(),fe(Te,{key:1,class:"arrow",name:"arrow-right"})):k("",!0)],10,It))),128))]),l.compact?k("",!0):(t(),n("div",qt,[(t(!0),n(T,null,X(j.value,d=>(t(),n("button",{key:d.action,type:"button",class:"key fn-key",disabled:!d.enabled,"aria-pressed":d.pressed===null?void 0:d.pressed?"true":"false","aria-busy":$(d)?"true":void 0,onClick:N=>z(d)},[a("span",At,p(d.label),1),a("kbd",null,p(d.kbd),1)],8,Vt))),128))]))],2))}}),Se=le(Kt,[["__scopeId","data-v-1934c940"]]),Ht={class:"top"},Wt={class:"row row-title"},Ot={class:"deck-title"},Yt={class:"row row-slide","aria-live":"polite"},Zt={class:"counter"},Ut={key:0,class:"slide-title"},Ft={key:1,class:"slide-title waiting"},Gt={class:"row row-chips","aria-label":"Na komputerze"},Xt={class:"row row-clock"},Jt={key:0,class:"idle"},Qt={key:0,class:"chip"},ea={key:2,class:"clock"},ta=oe({__name:"RemoteTopBar",props:{deckTitle:{},status:{},live:{type:Boolean},counter:{},slideTitle:{},chips:{},clock:{}},setup(l){const S=l,s=u(()=>nt(S.status));return(r,i)=>(t(),n("header",Ht,[a("div",Wt,[a("p",Ot,p(l.deckTitle),1),a("p",{class:C(["conn",{on:l.status==="live"}])},[i[0]||(i[0]=a("span",{class:"dot","aria-hidden":"true"},null,-1)),xe(p(s.value),1)],2)]),a("div",Yt,[a("p",Zt,p(l.counter),1),l.live?(t(),n("p",Ut,p(l.slideTitle),1)):(t(),n("p",Ft,"Czekam na wersję mówcy"))]),a("ul",Gt,[l.live?(t(!0),n(T,{key:0},X(l.chips,_=>(t(),n("li",{key:_,class:C(["chip",{khaki:_==="Specjalny"}])},p(_),3))),128)):k("",!0)]),a("div",Xt,[l.live&&l.clock&&l.clock.idle?(t(),n("p",Jt,"Zegar ruszy przy pierwszej zmianie slajdu")):l.live&&l.clock?(t(),n(T,{key:1},[a("p",{class:C(["clock",{paused:l.clock.paused}])},[i[2]||(i[2]=a("span",{class:"lbl"},"Slajd",-1)),a("b",{class:C({over:l.clock.slideOver})},p(l.clock.slide),3),i[3]||(i[3]=a("span",{class:"sep","aria-hidden":"true"},"·",-1)),i[4]||(i[4]=a("span",{class:"lbl"},"Całość",-1)),a("b",{class:C({over:l.clock.totalOver})},p(l.clock.total),3),l.clock.pace?(t(),n(T,{key:0},[i[1]||(i[1]=a("span",{class:"sep","aria-hidden":"true"},"·",-1)),a("span",{class:C(["pace",{late:l.clock.late}])},p(l.clock.pace),3)],64)):k("",!0)],2),l.clock.paused?(t(),n("span",Qt,"Pauza")):k("",!0)],64)):(t(),n("p",ea,[...i[5]||(i[5]=[a("b",null,"—",-1)])]))])]))}}),aa=le(ta,[["__scopeId","data-v-382e11de"]]),na={key:0,class:"remote-status remote-label"},sa={key:1,class:"remote-status"},oa={key:0,class:"remote-alert",role:"alert"},la={class:"remote-middle"},ia={key:0,class:"remote-notice"},ra={key:0,class:"remote-notice"},ca={class:"remote-dialog-body"},ua="Nie udało się wczytać prezentacji. Sprawdź połączenie z internetem i spróbuj ponownie.",da="Za dużo żądań w krótkim czasie. Odczekaj minutę i spróbuj ponownie.",F="Pilot niedostępny. Spróbuję połączyć się ponownie za 10 s.",va=oe({__name:"PresentationRemoteView",props:{slug:{}},setup(l){const S=l,s=et(),r=m("pending"),i=m(null),_=m("");let j=0,$=0,z=null,w="",L=0,d=0,N=0,I=!1,P=0,x=Ce();const b=m(null),V=m(0),A=m(Date.now()),h=m(!1),K=m("connecting"),q=m(!1),R=m(!1),E=m(!1),f=u(()=>E.value?"unavailable":h.value?"live":K.value==="connected"&&R.value?"waiting":q.value?"reconnecting":"connecting"),y=u(()=>i.value?.slides.length??0),J=u(()=>{const e=b.value;return!i.value||!e?0:pe(i.value.slides,e.number)}),v=u(()=>{const e=b.value;return h.value&&e?`${e.number} / ${e.total}`:`— / ${y.value}`}),ie=u(()=>{const e=b.value,o=i.value?.slides[J.value];return!e||!o?"":e.special&&o.special?ke(o.special):ke(o)}),Be=u(()=>b.value?lt(b.value):[]),Ee=u(()=>{const e=b.value;return!i.value||!e?null:it(rt(e,i.value.slides.map(o=>o.seconds),i.value.target_seconds,J.value,V.value,A.value))}),D=m(null),H=m(1);G(b,e=>{e&&!e.bye&&e.number>0&&(H.value=e.number)});function Le(e){y.value!==0&&(D.value=e)}function Pe(){D.value=null}function De(e){H.value=e}function Me(e){if(h.value){ue(),ce("goto",e),D.value=null;return}H.value=e,D.value="say"}function re(){A.value=Date.now(),h.value=x.live(A.value)}function Ne(e){const o=dt(e);!o||o.event!==vt||x.observe(o.payload,Date.now())&&(b.value=x.current(),V.value=x.receivedAt(),re(),o.payload.bye&&ee())}function Q(){j&&window.clearTimeout(j),j=0}const B=m("");let M=0;function ye(e,o=4e3){B.value=e,M&&window.clearTimeout(M),M=0,o>0&&(M=window.setTimeout(()=>{B.value="",M=0},o))}function W(){M&&window.clearTimeout(M),M=0,B.value=""}const O=m({});function be(e,o){const c=Math.max(0,(O.value[e]??0)+o);O.value={...O.value,[e]:c}}async function ce(e,o){const c={action:e,tab:x.actionTab()};o!==void 0&&(c.number=o),be(e,1);try{await me.remote(S.slug,c),B.value&&B.value!==F&&W()}catch(g){ye(ot(g instanceof ne?g.status:-1))}finally{be(e,-1)}}function ee(){R.value&&me.remote(S.slug,{action:"sync",tab:""}).catch(()=>{})}function Ie(){R.value=!0,E.value=!1,B.value===F&&W(),x.release(),ee()}function qe(e){K.value=e,e==="connected"?q.value=!0:R.value=!1}function Ve(e){if(R.value=!1,E.value=!0,e!==403||I){B.value===F&&W();return}I=!0,ye(F,0),P=window.setTimeout(()=>{P=0,z?.resubscribe()},ut)}function ue(){typeof navigator.vibrate=="function"&&navigator.vibrate(15)}function we(e){h.value&&(ue(),ce(e))}const Y=m(null),he=m(null);function Ae(){if(!h.value)return;ue();const e=Y.value;e&&(e.open||e.showModal(),Re(()=>he.value?.focus()))}function te(){Y.value?.open&&Y.value.close()}function Ke(){te(),h.value&&ce("clock-reset")}function He(e){e.target===Y.value&&te()}let Z=null,de=!1;const ae=m(!1);async function ge(){const e=navigator.wakeLock;if(!e||typeof e.request!="function"){ae.value=!0;return}if(!(Z&&!Z.released))try{const o=await e.request("screen");if(!de){o.release().catch(()=>{});return}Z=o,ae.value=!1}catch{ae.value=!0}}function We(){const e=Z;Z=null,e&&!e.released&&e.release().catch(()=>{})}function ze(){document.visibilityState==="visible"&&(ge(),ee())}function ve(){L+=1,z?.close(),z=null,w="",R.value=!1,K.value="connecting",q.value=!1,E.value=!1,I=!1,P&&window.clearTimeout(P),P=0,B.value===F&&W(),x=Ce(),b.value=null,V.value=0,re()}async function Oe(e){ve();const o=L;w=e;try{const c=()=>o===L,g=await ct(e,{onPublication:U=>{c()&&Ne(U)},onSubscribed:()=>{c()&&Ie()},onConnection:U=>{c()&&qe(U)},onDenied:U=>{c()&&Ve(U)},onUnavailable:()=>{c()&&(E.value=!0)}});if(o!==L){g.close();return}z=g}catch{o===L&&(E.value=!0)}}function Ye(){const e=r.value==="ready"?i.value?.remote_channel??"":"";if(e!==w){if(!e){ve();return}Oe(e)}}async function _e(e){const o=++$;Q(),r.value="pending",i.value=null,_.value="",j=window.setTimeout(()=>{o===$&&r.value==="pending"&&(r.value="loading")},200);try{const c=await me.speaker(e);if(o!==$)return;Q();const g=c.slides??[];i.value={...c,slides:g},Je(e),H.value=g[0]?.number??1,D.value=null,document.title=c.title?`Pilot · ${c.title}`:"Pilot · BM II°",r.value=g.length===0?"empty":"ready"}catch(c){if(o!==$)return;if(Q(),c instanceof ne&&c.status===404){Qe(e),await s.replace({name:"my-presentations",query:{denied:"1"}});return}if(c instanceof ne&&c.status===401)return;_.value=c instanceof ne&&c.status===429?da:ua,r.value="error"}}function Ze(){_e(S.slug)}function $e(e,o,c){if(document.querySelector(`meta[data-deck-remote="${c}"]`))return;const g=document.createElement("meta");g.name=e,g.content=o,g.dataset.deckRemote=c,document.head.appendChild(g)}return G(()=>S.slug,e=>{_e(e)},{immediate:!0}),G([i,r],()=>{Ye()}),Ge(()=>{de=!0,document.documentElement.classList.add("deck-remote"),$e("robots","noindex","robots"),$e("theme-color","#141a18","theme"),document.addEventListener("visibilitychange",ze),d=window.setInterval(()=>{document.visibilityState==="visible"&&ee()},st),N=window.setInterval(re,1e3),ge()}),Xe(()=>{de=!1,$+=1,Q(),W(),ve(),te(),We(),window.clearInterval(d),window.clearInterval(N),document.removeEventListener("visibilitychange",ze),document.documentElement.classList.remove("deck-remote"),document.querySelectorAll("meta[data-deck-remote]").forEach(e=>e.remove())}),(e,o)=>(t(),n("main",{class:C(["remote",{"remote-page":r.value==="ready"||r.value==="empty","remote-drawer-open":r.value==="ready"&&D.value}])},[r.value==="loading"?(t(),n("p",na,"Wczytywanie pilota…")):r.value==="error"?(t(),n("div",sa,[a("p",null,p(_.value),1),a("button",{type:"button",class:"remote-retry",onClick:Ze},"Spróbuj ponownie")])):(r.value==="ready"||r.value==="empty")&&i.value?(t(),n(T,{key:2},[se(aa,{class:"remote-top","deck-title":i.value.title,status:r.value==="empty"?"waiting":f.value,live:r.value==="ready"&&h.value,counter:v.value,"slide-title":ie.value,chips:Be.value,clock:Ee.value},null,8,["deck-title","status","live","counter","slide-title","chips","clock"]),B.value?(t(),n("p",oa,p(B.value),1)):k("",!0),a("div",la,[r.value==="empty"?(t(),n("div",ia,[...o[0]||(o[0]=[a("p",{class:"remote-notice-head"},"Ta prezentacja nie ma jeszcze slajdów.",-1),a("p",{class:"remote-muted"},"Dodaj slajdy w panelu administracyjnym i otwórz pilota ponownie.",-1)])])):D.value?(t(),fe(Se,{key:1,compact:"",state:b.value,live:h.value,busy:O.value,onPress:we},null,8,["state","live","busy"])):(t(),n(T,{key:2},[h.value?k("",!0):(t(),n("div",ra,[...o[1]||(o[1]=[a("p",{class:"remote-notice-head"},"Otwórz wersję mówcy na komputerze",-1),a("p",{class:"remote-muted"}," Klawisze zadziałają, gdy wersja mówcy tej prezentacji będzie otwarta na komputerze. Powiedz i notatki możesz czytać już teraz. ",-1)])])),se(Se,{state:b.value,live:h.value,busy:O.value,onPress:we,onReset:Ae},null,8,["state","live","busy"])],64))]),se(Dt,{deck:i.value,state:b.value,live:r.value==="ready"&&h.value,cursor:H.value,open:D.value,disabled:y.value===0,"wake-lock-missing":ae.value,onOpen:Le,onClose:Pe,onCursor:De,onGoto:Me},null,8,["deck","state","live","cursor","open","disabled","wake-lock-missing"])],64)):k("",!0),a("dialog",{ref_key:"resetDialog",ref:Y,class:"remote-dialog","aria-labelledby":"remote-reset-title","aria-describedby":"remote-reset-body",onClick:He},[a("div",ca,[o[2]||(o[2]=a("p",{id:"remote-reset-title",class:"remote-dialog-title"},"Wyzerować zegar?",-1)),o[3]||(o[3]=a("p",{id:"remote-reset-body",class:"remote-muted"}," Czas całości i wszystkich slajdów wróci do zera, a zegar ruszy przy następnej zmianie slajdu. ",-1)),a("button",{type:"button",class:"remote-dialog-btn remote-dialog-danger",onClick:Ke},"Zeruj zegar"),a("button",{ref_key:"resetCancel",ref:he,type:"button",class:"remote-dialog-btn",autofocus:"",onClick:te},"Anuluj",512)])],512)],2))}}),ba=le(va,[["__scopeId","data-v-534bc4ac"]]);export{ba as default};
|