opus-submitter/polylan_submitter/static_source/vite/assets/noita-Dc59M1_A.js

2 lines
10 KiB
JavaScript

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