@cpany/app
Version:
CPany web app
2 lines (1 loc) • 12.9 kB
JavaScript
import{V as O,P as B}from"./enum-BMqTPKYK.js";import{M as at,m as Y,o as s,c as o,a as i,d as x,D as L,z as A,i as e,N as k,O as U,t as m,P as $,Q as M,R as S,h as b,w as T,k as V,r as Z,S as tt,j as N,T as P,U as rt,l as J,V as ot,x as ct,E as it,y as j,G as lt,F as ut}from"./index-DQ3P2Jm7.js";import{l as z}from"./load-Bav7-mWT.js";import{c as mt}from"./codeforces-De0leWJ9.js";import{C as D,a as dt}from"./c-table-BNgV5wWB.js";import{_ as H}from"./user-link-C8lYDapJ.js";import{_ as Q}from"./cf-rating-color-Ef-Eicum.js";function ft(){const t=at("loading");return{start(){t.value=!0},end(){t.value=!1}}}const pt=z(mt),et=new Map;for(const t of pt)t.type.startsWith("codeforces")&&et.set(t.id,t);function ht(t){return et.get(+t)??null}const _t=[],K=z(_t),yt=new Map(K.map(t=>[t.h,t.n])),bt=new Map(K.map(t=>[t.h,t.r]));function vt(t){return yt.get(t)??t}function q(t){return bt.get(t)}const X="https://codeforces.com/api/",gt={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},$t=i("path",{fill:"currentColor",d:"M17.65 6.35A7.96 7.96 0 0 0 12 4a8 8 0 0 0-8 8a8 8 0 0 0 8 8c3.73 0 6.84-2.55 7.73-6h-2.08A5.99 5.99 0 0 1 12 18a6 6 0 0 1-6-6a6 6 0 0 1 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z"},null,-1),kt=[$t];function Ct(t,h){return s(),o("svg",gt,kt)}const Tt=Y({name:"mdi-refresh",render:Ct}),Nt={viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},xt=i("path",{fill:"currentColor",d:"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.62L12 2L9.19 8.62L2 9.24l5.45 4.73L5.82 21z"},null,-1),Ft=[xt];function St(t,h){return s(),o("svg",Nt,Ft)}const At=Y({name:"mdi-star",render:St}),Rt={class:"space-left"},It={key:1},wt=x({__name:"TeamName",props:{author:null},setup(t){const h=t,{author:a}=L(h),n=A(()=>{var l;return((l=a==null?void 0:a.value)==null?void 0:l.teamUrl)??""}),u=()=>{n.value!==""&&window.open(n.value,"_blank")};return(l,v)=>e(k)(e(a).teamName)?(s(),o($,{key:0},[i("div",null,[i("span",{class:U(e(n)!==""&&"cursor-pointer"),onClick:u},m(e(a).teamName),3)]),i("div",Rt,[(s(!0),o($,null,M(e(a).members,(g,F)=>(s(),S(H,{class:U(F>0&&"ml-2"),key:g,name:g},null,8,["class","name"]))),128))])],64)):(s(),o("span",It,m(e(a).members[0]),1))}}),Bt={class:"space-left"},Ut=["href"],Et={class:"space-left"},Ot=["href"],Mt={key:2},Dt=x({__name:"CfHandles",props:{author:null},setup(t){return(h,a)=>e(k)(t.author.teamName)&&t.author.members.length<=1?(s(),o($,{key:0},[b(H,{name:t.author.teamName},null,8,["name"]),i("span",Bt,[(s(!0),o($,null,M(t.author.members,(n,u)=>(s(),o("a",{key:u,class:"ml-2",href:`https://codeforces.com/profile/${n}`,target:"_blank"},[b(e(Q),{rating:e(q)(n)},{default:T(()=>[V(m(n),1)]),_:2},1032,["rating"])],8,Ut))),128))])],64)):e(k)(t.author.teamName)?(s(),o($,{key:1},[i("div",null,[b(H,{name:t.author.teamName},null,8,["name"])]),i("div",Et,[(s(!0),o($,null,M(t.author.members,(n,u)=>(s(),o("a",{key:u,class:U(u>0&&"ml-2"),href:`https://codeforces.com/profile/${n}`,target:"_blank"},[b(e(Q),{rating:e(q)(n)},{default:T(()=>[V(m(n),1)]),_:2},1032,["rating"])],10,Ot))),128))])],64)):(s(),o("span",Mt,m(t.author.members[0]),1))}}),Ht=x({__name:"at-rating-color",props:{color:null,rating:null},setup(t){const h=t,{rating:a,color:n}=L(h),u=A(()=>{if(k(n==null?void 0:n.value))return n==null?void 0:n.value;const l=a==null?void 0:a.value;return k(l)?l<400?"#808080":l<800?"#804000":l<1200?"#008000":l<1600?"#00C0C0":l<2e3?"#0000FF":l<2400?"#C0C000":l<2800?"#FF8000":"#FF0000":null});return(l,v)=>(s(),o("span",{style:tt({color:e(u)})},[Z(l.$slots,"default")],4))}}),Lt=[],nt=z(Lt);new Map(nt.map(t=>[t.h,t.n]));const Pt=new Map(nt.map(t=>[t.h,t.r]));function jt(t){return Pt.get(t)}const Vt={class:"space-left"},zt=["href"],Kt={key:1},Wt=x({__name:"AtHandles",props:{author:null},setup(t){return(h,a)=>e(k)(t.author.teamName)?(s(),o($,{key:0},[b(H,{name:t.author.teamName},null,8,["name"]),i("span",Vt,[(s(!0),o($,null,M(t.author.members,(n,u)=>(s(),o("a",{key:u,class:"ml-2 font-bold",href:`https://atcoder.jp/users/${n}`,target:"_blank"},[b(e(Ht),{rating:e(jt)(n)},{default:T(()=>[V(m(n),1)]),_:2},1032,["rating"])],8,zt))),128))])],64)):(s(),o("span",Kt,m(t.author.members[0]),1))}}),Gt=x({__name:"nc-rating-color",props:{color:null,rating:null},setup(t){const h=t,{rating:a,color:n}=L(h),u=A(()=>{if(k(n==null?void 0:n.value))return n==null?void 0:n.value;const l=a==null?void 0:a.value;return!k(l)||l<700?"#b4b4b4":l<1200?"#c177e7":l<1500?"#5ea1f4":l<2200?"#25bb9b":l<2800?"#fc6":"red"});return(l,v)=>(s(),o("span",{style:tt({color:e(u)})},[Z(l.$slots,"default")],4))}}),Jt=[],st=z(Jt);new Map(st.map(t=>[t.hn,t.n]));const Qt=new Map(st.map(t=>[t.hn,t.r]));function qt(t){return Qt.get(t)}const Xt=["href"],Yt={class:"space-left"},Zt=["href"],te={key:1},ee=x({__name:"NcHandles",props:{author:null},setup(t){return(h,a)=>e(k)(t.author.teamName)?(s(),o($,{key:0},[i("div",null,[i("a",{href:t.author.teamUrl},[b(e(Gt),{rating:e(qt)(t.author.teamName)},{default:T(()=>[V(m(t.author.teamName),1)]),_:1},8,["rating"])],8,Xt)]),i("div",Yt,[(s(!0),o($,null,M(t.author.members,(n,u)=>(s(),o("span",{key:n,class:U(u>0&&"ml-2")},[/^\d+$/.test(n)?(s(),o("a",{key:0,href:`https://ac.nowcoder.com/acm/contest/profile/${n}`},m(n),9,Zt)):(s(),S(H,{key:1,name:n},null,8,["name"]))],2))),128))])],64)):(s(),o("span",te,m(t.author.members[0]),1))}}),ne=i("span",null,"+",-1),se={key:0},ae={key:0,class:"text-sm text-gray-400"},re={key:1},oe={class:"text-center font-bold text-red-500"},ce=i("span",null,"-",-1),ie=x({__name:"StandingResult",props:{result:null,practice:{type:Boolean}},setup(t){const h=t,{result:a}=L(h),n=A(()=>{var v;return((v=a==null?void 0:a.value)==null?void 0:v.submissionUrl)??""}),u=()=>{n.value!==""&&window.open(n.value,"_blank")};function l(v){function g(R){return(R<10?"0":"")+R}const F=Math.floor(v/3600),I=Math.floor(v%3600/60);return`${F}:${g(I)}`}return(v,g)=>e(a)?(s(),o($,{key:0},[e(a).verdict===e(O).OK?(s(),o("div",{key:0,class:U(e(n)!==""&&"cursor-pointer"),onClick:u},[i("div",{class:U(["text-center","font-bold",t.practice?"text-blue-500":"text-green-500"])},[ne,e(a).dirty?(s(),o("span",se,m(e(a).dirty),1)):N("",!0)],2),t.practice?N("",!0):(s(),o("div",ae,[i("span",null,m(l(e(a).relativeTime)),1)]))],2)):e(a).dirty?(s(),o("div",re,[i("div",oe,[ce,i("span",null,m(e(a).dirty),1)])])):N("",!0)],64)):N("",!0)}}),le={key:0,class:"mt-4 box"},ue={key:0,class:"font-600"},me={key:1,class:"font-600"},de={class:"flex items-center"},fe={key:0},pe=x({__name:"ContestStandings",props:{contest:null},setup(t){const h=t,{contest:a}=L(h),n=A(()=>a.value.type.startsWith("codeforces")),u=A(()=>a.value.type.startsWith("atcoder")),l=A(()=>a.value.type.startsWith("nowcoder")),v=_=>_.author.participantType===B.OUT_OF_COMPETITION,g=_=>_.author.participantType===B.PRACTICE,F=_=>typeof _=="string"?_:String.fromCharCode(65+_),I=A(()=>{var _;return((_=a.value.problems)==null?void 0:_.sort((d,c)=>{const f=typeof d.index=="string"?d.index.charCodeAt(0)-65:d.index,p=typeof c.index=="string"?c.index.charCodeAt(0)-65:c.index;return f-p}))??[]}),R=A(()=>{var d,c;if(P(a.value.problems))return{standings:[],firstBlood:[]};if(P(a.value.standings))return{standings:[],firstBlood:[]};const _=Array((d=a.value.problems)==null?void 0:d.length);for(const f of a.value.standings){const p=Array((c=a.value.problems)==null?void 0:c.length);for(const r of f.submissions){const C=r.problemIndex;if(r.verdict===O.OK&&!g(f)&&(P(_[C])||_[C].relativeTime>r.relativeTime)&&(_[C]=r),P(p[C]))p[C]=r;else{const w=p[C];((w==null?void 0:w.verdict)??O.FAILED)!==O.OK&&(p[C]=r)}}Reflect.set(f,"result",p)}return{standings:a.value.standings,firstBlood:_}});return(_,d)=>e(a).standings?(s(),o("div",le,[b(e(dt),{data:e(R).standings,mobile:1023},{columns:T(({row:c})=>[b(e(D),{label:"#",align:"center",width:"4em"},{default:T(()=>[g(c)?(s(),o("span",me,"-")):(s(),o("span",ue,m(c.rank),1))]),_:2},1024),b(e(D),{label:e(n)?"Handle":""},{default:T(()=>[i("div",de,[v(c)?(s(),S(e(At),{key:0,class:"mr-1 text-sm text-yellow-300 inline-block"})):N("",!0),i("div",null,[e(n)?(s(),S(Dt,{key:0,author:c.author},null,8,["author"])):e(u)?(s(),S(Wt,{key:1,author:c.author},null,8,["author"])):e(l)?(s(),S(ee,{key:2,author:c.author},null,8,["author"])):(s(),S(wt,{key:3,author:c.author},null,8,["author"]))])])]),_:2},1032,["label"]),b(e(D),{label:"解决",align:"center",width:"4em"},{default:T(()=>[i("span",null,m(c.solved),1)]),_:2},1024),b(e(D),{label:"罚时",align:"center",width:"4em"},{default:T(()=>[g(c)?N("",!0):(s(),o("span",fe,m(e(rt)(c.penalty).value),1))]),_:2},1024),(s(!0),o($,null,M(e(I),(f,p)=>{var r;return s(),S(e(D),{key:f.index,label:F(f.index),center:"",class:U(e(k)(c)&&e(k)(e(R).firstBlood[p])&&e(k)(c.result[p])&&c.result[p].verdict===e(O).OK&&c.result[p].relativeTime<=(((r=e(R).firstBlood[p])==null?void 0:r.relativeTime)??Number.MIN_SAFE_INTEGER)&&"bg-[#E0FFE4]")},{default:T(()=>[b(ie,{result:c.result[p],practice:g(c)},null,8,["result","practice"])]),_:2},1032,["label","class"])}),128))]),_:1},8,["data"])])):N("",!0)}}),he={class:"mb-4 flex items-center"},_e={class:"info-box border-left"},ye={key:0},be=["href"],ve=["href"],ge=x({__name:"Contest",props:{contest:null,dynamic:{type:Boolean}},emits:["refresh"],setup(t,{emit:h}){return(a,n)=>(s(),o("div",null,[i("h2",he,[i("span",null,m(t.contest.name),1),t.dynamic?(s(),S(e(Tt),{key:0,class:"ml-4 h-8 w-8 p-1 border rounded-full cursor-pointer hover:bg-light-700",onClick:n[0]||(n[0]=u=>h("refresh"))})):N("",!0)]),i("div",_e,[i("p",null," 时间:"+m(e(J)(t.contest.startTime).value)+" 至 "+m(e(J)(t.contest.startTime+t.contest.duration).value),1),i("p",null,"时长:"+m(e(ot)(t.contest.duration).value),1),i("p",null,"人数:"+m(t.contest.participantNumber)+" 人",1),t.contest.contestUrl||t.contest.standingsUrl?(s(),o("p",ye,[i("a",{href:t.contest.contestUrl,target:"_blank"},"比赛主页",8,be),i("a",{href:t.contest.standingsUrl,target:"_blank",class:"ml-2"},"完整榜单",8,ve)])):N("",!0)]),b(pe,{contest:t.contest},null,8,["contest"])]))}}),$e={key:0},ke={key:1,class:"divide-y"},Ce=i("h2",{class:"mb-2"},"错误",-1),Te={class:"pt-2"},we=x({__name:"Codeforces",setup(t){const h=ct(),a=it(),n=j(null),u=j(!1),l=j(!1),{start:v,end:g}=ft(),F=j(!1),I=async d=>{if(F.value)return;F.value=!0;const c=new URL(X+"contest.standings");c.searchParams.append("contestId",""+d.id),c.searchParams.append("handles",K.map(({h:r})=>r).join(";")),c.searchParams.append("showUnofficial","true");const{result:f}=await(await fetch(c.toString())).json();let p=0;d.problems=f.problems;for(const r of f.problems)r.problemUrl=`https://codeforces.com/contest/${r.contestId}/problem/${r.index}`;d.standings=[];for(const r of f.rows){if(r.party.participantType!==B.CONTESTANT&&r.party.participantType!==B.VIRTUAL&&r.party.participantType!==B.OUT_OF_COMPETITION&&r.party.participantType!==B.PRACTICE)continue;r.party.participantType!==B.PRACTICE&&p++;const C=r.problemResults.reduce((y,E)=>E.points===0?y:y+(E.bestSubmissionTimeSeconds??0)+20*(E.rejectedAttemptCount??0),0),w=r.party.participantTime??d.startTime;d.standings.push({author:{members:r.party.members.map(y=>y.handle),teamName:r.party.teamName??vt(r.party.members[0].handle),participantTime:w,participantType:r.party.participantType},rank:r.rank,solved:r.problemResults.filter(y=>y.points>0).length,penalty:C,submissions:r.problemResults.map((y,E)=>{const W=y.bestSubmissionTimeSeconds+w,G=y.bestSubmissionTimeSeconds;return y.points>0?{id:-1,creationTime:W,relativeTime:G,problemIndex:E,verdict:O.OK,dirty:y.rejectedAttemptCount}:y.rejectedAttemptCount>0?{id:-1,creationTime:W,relativeTime:G,problemIndex:E,dirty:y.rejectedAttemptCount}:null}).filter(y=>y!==null)})}d.participantNumber=p,F.value=!1},R=async d=>{const c=new URL(X+"contest.list"),f="codeforces/contest.list",{result:p}=sessionStorage.getItem(f)?{result:JSON.parse(sessionStorage.getItem(f))}:await(await fetch(c.toString())).json();sessionStorage.getItem(f)||sessionStorage.setItem(f,JSON.stringify(p));for(const r of p)if(r.id===d)return{type:"codeforces",name:r.name,startTime:r.startTimeSeconds,duration:r.durationSeconds,participantNumber:0,id:r.id,phase:r.phase,contestUrl:`https://codeforces.com/contest/${r.id}`,standingsUrl:`https://codeforces.com/contest/${r.id}/standings`}},_=()=>{I(n.value)};return lt(()=>h.params,async d=>{if(d.id){v();const c=ht(+d.id);if(c!==null)n.value=c,await I(n.value),document.title=`${c.name} - CPany`;else{const f=await R(+d.id);if(f)l.value=!0,n.value=f,await I(n.value),document.title=`${f.name} - CPany`;else{u.value=!0;const r=setTimeout(()=>a.replace({name:"Home"}),3e3);ut(()=>clearTimeout(r))}}g()}},{immediate:!0}),(d,c)=>(s(),o("div",null,[n.value&&!u.value?(s(),o("div",$e,[b(ge,{contest:n.value,dynamic:l.value,onRefresh:_},null,8,["contest","dynamic"])])):u.value?(s(),o("div",ke,[Ce,i("p",Te,"未找到 ID 为 "+m(e(h).params.id)+" 的 Codeforces 比赛",1)])):N("",!0)]))}});export{we as default};