opus-submitter/polylan_submitter/static_source/vite/assets/noita-Cj8fTuxL.js
2026-05-10 23:09:42 +02:00

2 lines
12 KiB
JavaScript

import{k as M,r as u,c as z,I,l,p as a,s as t,u as c,A as d,v as n,q as f,F as L,x as E,C as Y,G as q,O as G}from"./style-iP6anD9B.js";const H={class:"min-h-screen bg-base-200"},Q={class:"container mx-auto px-4 py-8"},J={class:"grid grid-cols-1 lg:grid-cols-3 gap-8"},K={class:"lg:col-span-1"},W={class:"card bg-base-100 shadow-lg sticky top-8"},X={class:"card-body"},Z={class:"text-center mb-6"},tt={class:"text-3xl font-bold"},et={key:0,class:"flex justify-center py-8"},st={key:1,class:"space-y-4"},ot={class:"text-center"},lt={key:0,class:"text-4xl font-bold text-primary"},at={key:1,class:"text-2xl text-base-content/50"},nt={class:"text-center"},rt={class:"text-2xl font-bold"},it={class:"text-center"},dt={class:"text-2xl font-bold"},ct={class:"lg:col-span-2"},ut={class:"card bg-base-100 shadow-lg"},bt={class:"card-body"},mt={for:"file-upload",class:"cursor-pointer flex flex-col items-center gap-3"},pt={key:0,class:"mb-6"},vt={class:"space-y-2"},ft={class:"flex-1 min-w-0"},gt={class:"font-medium truncate"},xt={class:"text-xs text-base-content/70"},ht=["onClick"],yt={class:"flex gap-3"},kt=["disabled"],_t={key:0,class:"mdi mdi-send mr-2"},wt={class:"card bg-base-100 shadow-lg mt-8"},jt={class:"card-body"},St={key:0,class:"text-center py-8"},Ct={key:1,class:"space-y-4"},Dt={class:"text-sm text-base-content/70"},Pt={key:0,class:"overflow-x-auto"},Lt={class:"table table-zebra w-full"},Et={class:"font-medium"},Ft=["href"],Ot={class:"text-right font-bold text-success"},$t={key:1,class:"text-center py-8"},Nt={key:0,class:"modal modal-open"},Rt={class:"modal-box max-w-4xl"},Tt={class:"flex justify-between items-center mb-4"},Ut={class:"overflow-x-auto"},Bt={class:"table table-zebra w-full"},Vt={class:"font-bold"},At={key:0,class:"badge badge-warning badge-lg"},Mt={key:1,class:"badge badge-lg"},zt={key:2,class:"badge badge-lg"},It={key:3},Yt={class:"font-medium"},qt={key:0,class:"badge badge-primary badge-sm ml-2"},Gt={class:"text-right"},Ht={class:"text-right font-bold"},Qt={key:0,class:"text-center py-8"},Jt=M({__name:"Noita",setup(Xt){const r=u({username:"Player",rank:null,score:0,runsSubmitted:0,isStaff:!1}),b=u([]),p=u(!1),g=u(!1),x=u([]),S=u(""),h=u("id"),m=u(!1),C=u(!1),_=u([]),w=u(!1),j=z(()=>{const s=S.value.toLowerCase();let e=x.value;return s&&(e=e.filter(i=>i.objectiv_id.toLowerCase().includes(s)||i.count.toString().includes(s))),[...e].sort((i,v)=>{let y,k;switch(h.value){case"points_per":y=i.points_per_objectiv||0,k=v.points_per_objectiv||0;break;case"total_points":y=i.total_points||0,k=v.total_points||0;break;case"id":default:y=i.objectiv_id.toLowerCase(),k=v.objectiv_id.toLowerCase()}return y<k?m.value?1:-1:y>k?m.value?-1:1:0})}),F=s=>{h.value===s?m.value=!m.value:(h.value=s,m.value=!1)},$=s=>{const e=s.target;e.files&&(b.value=Array.from(e.files))},N=s=>{s.preventDefault(),s.stopPropagation(),g.value=!0},R=s=>{s.preventDefault(),s.stopPropagation(),g.value=!1},T=s=>{s.preventDefault(),s.stopPropagation(),g.value=!1,s.dataTransfer?.files&&(b.value=Array.from(s.dataTransfer.files))},U=async()=>{if(b.value.length!==0){p.value=!0;try{for(const s of b.value){const e=new FormData;e.append("file",s);const o=await fetch("/api/noita/submit",{method:"POST",body:e});if(!o.ok){const v=await o.json();alert(`Error submitting ${s.name}: ${v.detail||"Unknown error"}`);return}const i=await o.json();console.log("Submission successful:",i)}b.value=[],alert("Run submitted successfully!"),await Promise.all([D(),P()])}catch(s){console.error("Error submitting run:",s),alert("Error submitting run. Please try again.")}finally{p.value=!1}}},B=()=>{window.location.href="/"},D=async()=>{try{const s=await fetch("/api/noita/results");if(!s.ok)throw new Error("Failed to fetch results");const e=await s.json();r.value.score=e.total_score,r.value.runsSubmitted=e.objectives.length,x.value=e.objectives}catch(s){console.error("Error fetching results:",s)}},P=async()=>{C.value=!0;try{const s=await fetch("/api/noita/leaderboard");if(!s.ok)throw new Error("Failed to fetch leaderboard");const e=await s.json();_.value=e.leaderboard;const o=_.value.find(i=>i.username===r.value.username);o&&(r.value.rank=o.rank,r.value.score=o.total_score)}catch(s){console.error("Error fetching leaderboard:",s)}finally{C.value=!1}},V=async()=>{try{const s=await fetch("/api/cache/clear",{method:"POST"});if(s.ok)alert("Cache cleared successfully!"),await Promise.all([D(),P()]);else{const e=await s.json();alert(`Error clearing cache: ${e.detail||"Unknown error"}`)}}catch(s){console.error("Error clearing cache:",s),alert("Error clearing cache. Please try again.")}},A=async()=>{try{const s=await fetch("/api/user");if(s.ok){const e=await s.json();e.is_authenticated&&(r.value.username=e.username,r.value.isStaff=e.is_staff||!1)}}catch(s){console.error("Error fetching user info:",s)}await Promise.all([D(),P()])};return I(()=>{A()}),(s,e)=>(a(),l("div",H,[t("div",{class:"navbar bg-base-100 shadow-lg"},[t("div",{class:"container mx-auto w-full flex items-center gap-4"},[t("button",{onClick:B,class:"btn btn-primary btn-sm"},[...e[6]||(e[6]=[t("i",{class:"mdi mdi-arrow-left"},null,-1),d(" Back ",-1)])]),e[7]||(e[7]=t("h1",{class:"text-xl font-bold"},"Noita Submitter",-1)),e[8]||(e[8]=t("div",{class:"flex-1"},null,-1)),e[9]||(e[9]=t("a",{href:"/api/docs",class:"btn btn-xs"},"API docs",-1)),e[10]||(e[10]=t("a",{href:"/admin",class:"btn btn-xs btn-warning"},"Admin panel",-1))])]),t("div",Q,[t("div",J,[t("div",K,[t("div",W,[e[19]||(e[19]=t("div",{class:"bg-gradient-to-br from-purple-600 to-purple-400 p-6 text-white rounded-t-2xl"},[t("i",{class:"mdi mdi-trophy text-4xl"}),t("h2",{class:"text-2xl font-bold mt-2"},"Your Ranking")],-1)),t("div",X,[t("div",Z,[e[11]||(e[11]=t("p",{class:"text-sm text-base-content/70"},"Player",-1)),t("p",tt,n(r.value.username),1)]),e[18]||(e[18]=t("div",{class:"divider"},null,-1)),C.value?(a(),l("div",et,[...e[12]||(e[12]=[t("span",{class:"loading loading-spinner loading-lg"},null,-1)])])):(a(),l("div",st,[t("div",ot,[e[13]||(e[13]=t("p",{class:"text-sm text-base-content/70 mb-1"},"Current Rank",-1)),r.value.rank!==null?(a(),l("p",lt," #"+n(r.value.rank),1)):(a(),l("p",at,"No rank yet"))]),t("div",nt,[e[14]||(e[14]=t("p",{class:"text-sm text-base-content/70 mb-1"},"Total Score",-1)),t("p",rt,n(r.value.score.toLocaleString()),1)]),t("div",it,[e[15]||(e[15]=t("p",{class:"text-sm text-base-content/70 mb-1"},"Objectives Completed",-1)),t("p",dt,n(r.value.runsSubmitted),1)])])),t("button",{onClick:e[0]||(e[0]=o=>w.value=!0),class:"btn btn-outline btn-sm w-full mt-6"},[...e[16]||(e[16]=[t("i",{class:"mdi mdi-trophy mr-1"},null,-1),d(" View Full Leaderboard ",-1)])]),r.value.isStaff?(a(),l("button",{key:2,onClick:V,class:"btn btn-error btn-sm w-full mt-3"},[...e[17]||(e[17]=[t("i",{class:"mdi mdi-cache-clear mr-1"},null,-1),d(" Clear Cache ",-1)])])):c("",!0)])])]),t("div",ct,[t("div",ut,[t("div",bt,[e[25]||(e[25]=t("h2",{class:"card-title text-2xl mb-6"},[t("i",{class:"mdi mdi-cloud-upload text-purple-500 mr-2"}),d(" Submit Your Run ")],-1)),t("div",{onDragover:N,onDragleave:R,onDrop:T,class:f(["border-2 border-dashed rounded-lg p-8 text-center transition-colors cursor-pointer bg-base-200/50 mb-6",g.value?"border-primary bg-primary/10":"border-base-300 hover:border-primary"])},[t("input",{type:"file",multiple:"",onChange:$,class:"hidden",id:"file-upload",accept:"text/plain,text/x-log"},null,32),t("label",mt,[t("i",{class:f(["mdi text-4xl",g.value?"mdi-cloud-check text-primary":"mdi-file-upload text-base-content/50"])},null,2),e[20]||(e[20]=t("div",null,[t("p",{class:"font-semibold"},"Click to upload or drag and drop"),t("p",{class:"text-sm text-base-content/70"},[d("The log file "),t("code",null,"polylan_mod_log.txt")])],-1))])],34),b.value.length>0?(a(),l("div",pt,[e[23]||(e[23]=t("p",{class:"font-semibold mb-3"},"Selected Files:",-1)),t("div",vt,[(a(!0),l(L,null,E(b.value,(o,i)=>(a(),l("div",{key:i,class:"flex items-center gap-3 bg-base-200 p-3 rounded-lg"},[e[22]||(e[22]=t("i",{class:"mdi mdi-file text-primary"},null,-1)),t("div",ft,[t("p",gt,n(o.name),1),t("p",xt,n((o.size/1024/1024).toFixed(2))+" MB",1)]),t("button",{onClick:v=>b.value.splice(i,1),class:"btn btn-ghost btn-xs"},[...e[21]||(e[21]=[t("i",{class:"mdi mdi-close"},null,-1)])],8,ht)]))),128))])])):c("",!0),t("div",yt,[e[24]||(e[24]=t("label",{for:"file-upload",class:"btn btn-outline flex-1"},[t("i",{class:"mdi mdi-folder-open mr-2"}),d(" Choose Files ")],-1)),t("button",{onClick:U,disabled:b.value.length===0||p.value,class:f(["btn btn-primary flex-1",{loading:p.value}])},[p.value?c("",!0):(a(),l("i",_t)),d(" "+n(p.value?"Submitting...":"Submit Run"),1)],10,kt)]),e[26]||(e[26]=t("p",{class:"text-xs text-base-content/70 text-center mt-4"}," Maximum file size: 256 MB per file ",-1))])]),t("div",wt,[t("div",jt,[e[33]||(e[33]=t("h2",{class:"card-title text-2xl mb-6"},[t("i",{class:"mdi mdi-view-list text-purple-500 mr-2"}),d(" Your Objectives ")],-1)),x.value.length===0?(a(),l("div",St,[...e[27]||(e[27]=[t("p",{class:"text-base-content/70 mb-2"},"No objectives completed yet",-1),t("p",{class:"text-sm text-base-content/50"},"Submit your runs to unlock objectives!",-1)])])):c("",!0),x.value.length>0?(a(),l("div",Ct,[Y(t("input",{"onUpdate:modelValue":e[1]||(e[1]=o=>S.value=o),type:"text",placeholder:"Search objectives...",class:"input input-bordered w-full"},null,512),[[q,S.value]]),t("div",Dt," Showing "+n(j.value.length)+" of "+n(x.value.length)+" objectives ",1),j.value.length>0?(a(),l("div",Pt,[t("table",Lt,[t("thead",null,[t("tr",null,[t("th",{class:"cursor-pointer hover:bg-base-300",onClick:e[2]||(e[2]=o=>F("id"))},[e[28]||(e[28]=d(" Objective ID ",-1)),h.value==="id"?(a(),l("i",{key:0,class:f(["mdi ml-2",m.value?"mdi-arrow-down":"mdi-arrow-up"])},null,2)):c("",!0)]),t("th",{class:"text-right cursor-pointer hover:bg-base-300",onClick:e[3]||(e[3]=o=>F("total_points"))},[e[29]||(e[29]=d(" Total Points ",-1)),h.value==="total_points"?(a(),l("i",{key:0,class:f(["mdi ml-2",m.value?"mdi-arrow-down":"mdi-arrow-up"])},null,2)):c("",!0)])])]),t("tbody",null,[(a(!0),l(L,null,E(j.value,o=>(a(),l("tr",{key:o.objectiv_id},[t("td",Et,[t("a",{href:`https://noita.wiki.gg/wiki/${o.objectiv_id}`,target:"_blank"},[d(n(o.objectiv_id)+" ",1),e[30]||(e[30]=t("i",{class:"mdi mdi-open-in-new"},null,-1))],8,Ft)]),t("td",Ot,n(o.total_points||0),1),e[31]||(e[31]=t("td",{class:"text-right"},null,-1))]))),128))])])])):c("",!0),j.value.length===0?(a(),l("div",$t,[...e[32]||(e[32]=[t("p",{class:"text-base-content/70"},"No objectives match your search",-1)])])):c("",!0)])):c("",!0)])])])])]),w.value?(a(),l("div",Nt,[t("div",Rt,[t("div",Tt,[e[35]||(e[35]=t("h3",{class:"font-bold text-lg"},[t("i",{class:"mdi mdi-trophy text-yellow-500 mr-2"}),d(" Global Leaderboard ")],-1)),t("button",{onClick:e[4]||(e[4]=o=>w.value=!1),class:"btn btn-sm btn-circle btn-ghost"},[...e[34]||(e[34]=[t("i",{class:"mdi mdi-close"},null,-1)])])]),t("div",Ut,[t("table",Bt,[e[36]||(e[36]=t("thead",null,[t("tr",null,[t("th",null,"Rank"),t("th",null,"Username"),t("th",{class:"text-right"},"Objectives"),t("th",{class:"text-right"},"Score")])],-1)),t("tbody",null,[(a(!0),l(L,null,E(_.value,o=>(a(),l("tr",{key:o.username,class:f({"bg-primary/20":o.username===r.value.username})},[t("td",Vt,[o.rank===1?(a(),l("span",At," 🏆 #"+n(o.rank),1)):o.rank===2?(a(),l("span",Mt," 🥈 #"+n(o.rank),1)):o.rank===3?(a(),l("span",zt," 🥉 #"+n(o.rank),1)):(a(),l("span",It,"#"+n(o.rank),1))]),t("td",Yt,[d(n(o.username)+" ",1),o.username===r.value.username?(a(),l("span",qt," You ")):c("",!0)]),t("td",Gt,n(o.objectives_count),1),t("td",Ht,n(o.total_score.toLocaleString()),1)],2))),128))])])]),_.value.length===0?(a(),l("div",Qt,[...e[37]||(e[37]=[t("p",{class:"text-base-content/70"},"No entries yet",-1)])])):c("",!0)]),t("div",{class:"modal-backdrop",onClick:e[5]||(e[5]=o=>w.value=!1)})])):c("",!0)]))}}),O="#app",Kt=document.querySelector(O),Wt=G(Jt,{...Kt?.dataset});Wt.mount(O);