fediverse-export-analyzer/public/js/modules/handleUpload.1.min.js

51 wiersze
4.8 KiB
JavaScript

import loadEmbedScript from"/js/modules/loadEmbedScript.min.js";import{fileInput,loadingAnimation,loadingText,introElement,resultsElement,userDescription,userAvatar,userInfo,userDataBreakdown,chartElement}from"./handleUpload";const handleUpload=()=>{fileInput&&fileInput.addEventListener("change",async e=>{loadingAnimation.classList.remove("d-none"),loadingText.classList.remove("d-none"),fileInput.disabled=!0;var s=new FormData;s.set("archive",fileInput.files[0]);s=await(await fetch("/extract-data",{method:"POST",body:s})).json();if(s&&s.data){introElement.classList.add("d-none"),resultsElement.classList.remove("d-none");s=s.data;let e="",t="",r=(s.actor?(e+=`
<p class="mb-0">
<strong>${s.actor.name||s.actor.preferredUsername}</strong>
</p>
${s.actor.summary.replaceAll('class="invisible"',"")}
`,s.actor.attachment&&(e+=`
<ul class="list-group">
${s.actor.attachment.map(e=>`
<li class="list-group-item">${e.name}: ${e.value.replace('class="invisible"',"")}</li>
`).join("")}
</ul>
`),userDescription.innerHTML=`<div>${e}</div>`,s.avatar_url?userAvatar.innerHTML=`
<img class="img-thumbnail" width="64" height="64" src="${s.avatar_url}">
`:s.avatar&&(userAvatar.innerHTML=`
<img class="img-thumbnail" width="64" height="64" src="data:image/jpg;base64,${s.avatar}">
`)):(userInfo.remove(),userDescription.remove()),[]),a;s?.outbox?.orderedItems?r=s.outbox.orderedItems:s?.outbox&&(r=s.outbox),n=r.length;let l=[],i={posts:0,replies:0,reblogs:0,total:0};if(n){const d=Math.ceil(Math.pow(r.length,.1));let s=0;a=r[0],r.forEach(t=>{let a=!1;var e=[...t.to,...t.cc];if(e.forEach(e=>{e.endsWith("/followers")&&(a=!0)}),a){if(s++,10<=r.length&&s<=d){const t=r[Math.pow(10,s)];var o=t.id.replace("/activity","");let e=!1;t.object.id||(e=!0),o={label:[Math.pow(10,s).toLocaleString()+"th post"],url:o,isBoost:e},l.push(o)}i.total++,"Create"===t.type?t.object.inReplyTo?i.replies++:i.posts++:i.reblogs++}else 0===e.length&&console.log(t.id.replace("users/","@").replace("statuses/","").replace("/activity",""))}),console.log({counter:i})}var n={weekday:"long",year:"numeric",month:"long",day:"numeric"};s.actor&&(c=moment(s.actor.published),c=moment().diff(c,"days"),t+=`
<p>
You created your account on <strong>${new Date(s.actor.published).toLocaleDateString(void 0,n)}</strong>, which is <strong>${c.toLocaleString()} day(s) ago</strong>. Since then, you posted <strong>${i.total.toLocaleString()} times</strong>, or about ${Math.round(i.total/c).toLocaleString()} time(s) a day on average.
</p>
`),(0<i.reblogs||0<i.replies)&&(t+=`
<p>
You have reblogged <strong>${i.reblogs.toLocaleString()} post(s)</strong>, replied <strong>${i.replies.toLocaleString()} time(s)</strong>, and posted <strong>${i.posts.toLocaleString()} new post(s)</strong>.
</p>
`);let o;if(a){let e;if(!["firefish","calckey","misskey"].includes(s.format)){n=a?.uri||a?.object?.id||a?.id;try{e=new URL(n)}catch(e){console.log("error parsing data file",e)}e&&e.protocol&&e.hostname&&(o=e.protocol+"//"+e.hostname),t+=`
<p>
Here's your <a href="${n}" target="_blank">first post</a>!
</p>
`,"mastodon"===s.format&&(t+=`
<iframe
src="${n}/embed"
class="mastodon-embed"
style="max-width: 100%; border: 0" width="400"
allowfullscreen="allowfullscreen"></iframe>
`),l&&l.length&&(t+=`
<p class="mt-3">
Here are more of your milestones:
</p>
<ul>
${l.map(e=>`
<li>
<a target="_blanlk" href="${e.url}">${e.label}</a>${e.isBoost?" (boost)":""}
</li>
`).join("")}
</ul>
`),t+=`
<p class="mt-4">
And this is what your posting history looks like.
</p>
`}}userDataBreakdown.innerHTML=t,"mastodon"===s.format&&loadEmbedScript(o);var c={labels:r.map(e=>moment(e.published||e.createdAt||e.created)),datasets:[{label:"Your posts in time",data:r.map((e,t)=>({x:moment(e.published||e.createdAt||e.created),y:new Date(e.published||e.createdAt||e.created).getHours()})),backgroundColor:["#ff6384"]}]};new Chart(chartElement,{type:"scatter",data:c,options:{scales:{x:{type:"time",position:"bottom",ticks:{beginAtZero:!1,stepSize:10}},y:{ticks:{beginAtZero:!1,display:!1},scaleLabel:{display:!1},minorTickInterval:null}},plugins:{tooltip:{callbacks:{label:e=>e.label}}}}})}else loadingAnimation.classList.add("d-none"),loadingText.classList.add("d-none"),fileInput.disabled=!1})};export{handleUpload};
//# sourceMappingURL=handleUpload.1.min.js.map