This repository has been archived on 2023-01-26. You can view files and clone it, but cannot push or open issues or pull requests.
scripts-old/dist/quickbar/extendedPlayerProfile.js

1 line
27 KiB
JavaScript

!function(){function e(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var t=e=>parseInt(new URLSearchParams(e).get("id"));class n{isValidRow(e){return!!e&&((!this.filters.playerID||e.playerID===this.filters.playerID)&&!(this.filters.tribes&&Array.isArray(this.filters.tribes)&&!this.filters.tribes.some((t=>t===e.tribe))))}parseRow(e){if(!e||!e instanceof HTMLTableRowElement)return;let n={};return n.rank=parseInt(e.children[0].innerText.trim()),n.name=e.children[1].innerText.trim(),n.playerID=t(e.children[1].querySelector("a").getAttribute("href")),n.tribe=e.children[2].innerText.trim(),n.tribeID=0,n.tribe&&(n.tribeID=t(e.children[2].querySelector("a").getAttribute("href"))),n.score=parseInt(e.children[3].innerText.trim().replace(/\./g,"")),n.date=e.children[4].innerText.trim(),n}parse(){const e=[];for(let t=1;t<this.trs.length;t++){const n=this.trs[t],r=this.parseRow(n);this.isValidRow(r)&&e.push(r)}return e}constructor(e="",t={}){this.dom=(new DOMParser).parseFromString(e,"text/html"),this.trs=this.dom.querySelectorAll("#in_a_day_ranking_table tbody tr"),this.filters=t}}var r=({query:e,variables:t={}}={})=>fetch("https://api.tribalwarshelp.com/graphql",{method:"POST",body:JSON.stringify({query:e,variables:t}),headers:{"Content-Type":"application/json"}}).then((e=>e.json())).then((({data:e,errors:t})=>{if(t&&Array.isArray(t)&&t.length>0)throw new Error(t[0].message);return new Promise((t=>t(e)))}));const a={pl_PL:{date:"Data",newTribe:"Nowe plemię",oldTribe:"Poprzednie plemię",joinedAt:"Dołączył",dailyGrowth:"Dzienny przyrost",bestRank:"Najlepszy ranking",mostPoints:"Najwięcej punktów",mostVillages:"Najwięcej wiosek",oldName:"Poprzedni nick",newName:"Nowy nick",playerServers:"Serwery gracza",inADayBestScores:"Dzienne rankingi",unitsDefeatedWhileAttacking:"Jako atakujący",unitsDefeatedWhileDefending:"Jako obrońca",unitsDefeatedWhileSupporting:"Jako wspierający",resourcesPlundered:"Sfarmione surowce",villagesPlundered:"Splądrowane wioski",resourcesGathered:"Zebrane surowce",villagesConquered:"Podbite wioski",exportedVillages:"Wyeksportowane wioski",tribeChanges:"Zmiany plemion",action:{linkToTWHelp:"Akta gracza (TWHelp)",showTribeChanges:"Pokaż zmiany plemion",showEnnoblements:"Pokaż przejęcia",exportVillages:"Wyeksportuj wioski",showHistory:"Pokaż historię"}},en_DK:{date:"Date",newTribe:"New tribe",oldTribe:"Old tribe",joinedAt:"Joined at",dailyGrowth:"Daily growth",bestRank:"Best rank",mostPoints:"Most points",mostVillages:"Most villages",oldName:"Old name",newName:"New name",playerServers:"Player's servers",inADayBestScores:"'In a day' best scores",unitsDefeatedWhileAttacking:"Units defeated while attacking",unitsDefeatedWhileDefending:"Units defeated while defending",unitsDefeatedWhileSupporting:"Units defeated while supporting",resourcesPlundered:"Resources plundered",villagesPlundered:"Villages plundered",resourcesGathered:"Resources gathered",villagesConquered:"Villages conquered",exportedVillages:"Exported villages",tribeChanges:"Tribe changes",action:{linkToTWHelp:"User file (TWHelp)",showTribeChanges:"Show tribe changes",showEnnoblements:"Show ennoblements",exportVillages:"Export villages",showHistory:"Show history"}},de_DE:{date:"Datum",newTribe:"Neuer Stamm",oldTribe:"Alter Stamm",joinedAt:"Beigetreten am",dailyGrowth:"Tägl. Wachstum",bestRank:"Bester Rang",mostPoints:"Meiste Punkte",mostVillages:"Meiste Dörfer",oldName:"Alter Name",newName:"Neuer Name",playerServers:"Spieler Server",inADayBestScores:"'An einem Tag' Bestwerte",unitsDefeatedWhileAttacking:"Besiegte Gegner als Angreifer",unitsDefeatedWhileDefending:"Besiegte Gegner als Verteidiger",unitsDefeatedWhileSupporting:"Besiegte Gegner als Unterstützer",resourcesPlundered:"Geplünderte Rohstoffe",villagesPlundered:"Geplünderte Dörfer",resourcesGathered:"Gesammelte Rohstoffe",villagesConquered:"Eroberte Dörfer",exportedVillages:"Exportierte Dörfer",tribeChanges:"Stammeswechsel",action:{linkToTWHelp:"Spielerakte (TWHelp)",showTribeChanges:"Zeige Stammeswechsel",showEnnoblements:"Zeige Adelungen",exportVillages:"Dörfer exportieren",showHistory:"Zeige Verlauf"}}};const i={pl_PL:{title:"Dzisiejsze zmiany w statystykach",points:"Punkty",rank:"Ranking",villages:"Liczba wiosek",members:"Liczba członków",oda:"Pokonani przeciwnicy jako agresor",odaRank:"RA",odd:"Pokonani przeciwnicy jako obrońca",oddRank:"RO",ods:"Pokonani przeciwnicy jako wspierający",odsRank:"RW",od:"Pokonani przeciwnicy",odRank:"Pokonani przeciwnicy razem ranking"},en_DK:{title:"Today's stat changes",points:"Points",rank:"Rank",villages:"Villages",members:"Members",oda:"ODA",odaRank:"ODA Rank",odd:"ODD",oddRank:"ODD Rank",ods:"ODS",odsRank:"ODS Rank",od:"OD",odRank:"OD Rank"},de_DE:{title:"Heutige Werte Änderungen",points:"Punkte",rank:"Rang",villages:"Dörfer",members:"Mitglieder",oda:"BGA",odaRank:"BGA Rang",odd:"BGD",oddRank:"BGD Rang",ods:"BGS",odsRank:"BGS Rang",od:"BP",odRank:"BP Rang"}};const o=i[window.game_data.locale]||i.en_DK,l=e=>e>0?"color: #000; background-color: #0f0":e<0?"color: #000; background-color: #f00":"color: #000; background-color: #808080";var s=({html:e,id:t,title:n}={})=>{Dialog.show(t,`<h3>${n}</h3>`+e);const r=document.querySelector(".popup_box");r&&(r.style.width="auto",r.style.maxWidth="1000px")};const d={pl_PL:{date:"Data",newOwner:"Nowy właściciel",oldOwner:"Poprzedni właściciel",village:"Wioska",title:"Przejęcia"},en_DK:{date:"Date",newOwner:"New owner",oldOwner:"Old owner",village:"Village",title:"Ennoblements"},de_DE:{date:"Datum",newOwner:"Neuer Besitzer",oldOwner:"Alter Besitzer",village:"Dorf",title:"Adelungen"}};const c="data-page",g=(e,t=1)=>{if(!e instanceof HTMLElement)throw new Error("Expected HTMLElement as the first argument");if("number"!=typeof(t=parseInt(t))||isNaN(t))throw new Error("Expected number or string as the second argument");e.setAttribute(c,t+"")},h=e=>!e instanceof HTMLElement?0:parseInt(e.getAttribute(c)),p=({total:e,limit:t,marginRight:n=3,currentPage:r=0}={})=>{const a=((e,t)=>{if("number"!=typeof e)throw new Error("Expected number as the first argument");if("number"!=typeof t)throw new Error("Expected number as the second argument");return e>0?Math.ceil(e/t):1})(e,t),i=[];for(let e=1;e<=a;e++)e===r?i.push(`<strong style="margin-right: ${n}px">>${e}<</strong>`):i.push(`<a style="margin-right: ${n}px" href="#" data-page="${e}">${e}</a>`);return i},m=(e,t)=>new Date(e).toLocaleDateString(void 0,t||{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}),y=e=>window.location.origin+TribalWars.buildURL("",{screen:"info_ally",id:e}),u=d[window.game_data.locale]||d.en_DK,b=(e,t)=>{return e?`<td><a href="${n=e.id,window.location.origin+TribalWars.buildURL("",{screen:"info_player",id:n})}">${e.name} (${t?`<a href="${y(t.id)}">${t.tag}</a>`:"-"})</a></td>`:"<td>-</td>";var n};var $=(e,t,{limit:n=0,currentPage:r=1,onPageChange:a=(()=>{})}={})=>{const i=`\n <div style="display: flex; flex-direction: row; flex-wrap: wrap;" id="ennoblementsPagination">\n ${p({total:t.total,limit:n,currentPage:r}).join("")}\n </div>\n <table class="vis" style="border-collapse: separate; border-spacing: 2px; width: 100%;">\n <tbody>\n <tr>\n <th>\n ${u.date}\n </th>\n <th>\n ${u.village}\n </th>\n <th>\n ${u.newOwner}\n </th>\n <th>\n ${u.oldOwner}\n </th>\n </tr>\n ${t.items.map((e=>{let t=`<tr><td>${m(e.ennobledAt)}</td>`;var n;return e.village?t+=`<td><a href="${n=e.village.id,window.location.origin+TribalWars.buildURL("",{screen:"info_village",id:n})}">${((e="",t=500,n=500)=>`${e} (${t}|${n}) ${"K"+String(n)[0]+String(t)[0]}`)(e.village.name,e.village.x,e.village.y)}</a></td>`:t+="<td>-</td>",t+=b(e.newOwner,e.newOwnerTribe),t+=b(e.oldOwner,e.oldOwnerTribe),t+"</tr>"})).join("")}\n </tbody>\n </table>\n `;s({e:e,title:u.title,id:"ennoblements",html:i}),document.querySelectorAll("#ennoblementsPagination a").forEach((e=>{e.addEventListener("click",a)}))};function w(e){if(null===e||!0===e||!1===e)return NaN;var t=Number(e);return isNaN(t)?t:t<0?Math.ceil(t):Math.floor(t)}function f(e,t){if(t.length<e)throw new TypeError(e+" argument"+(e>1?"s":"")+" required, but only "+t.length+" present")}function k(e){f(1,arguments);var t=Object.prototype.toString.call(e);return e instanceof Date||"object"==typeof e&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}function D(e,t){f(2,arguments);var n=k(e),r=w(t);return isNaN(r)?new Date(NaN):r?(n.setDate(n.getDate()+r),n):n}const S={pl_PL:{title:"Historia",date:"Data",tribe:"Plemię",points:"Punkty",rank:"Ranking",villages:"Liczba wiosek",members:"Liczba członków",oda:"Pokonani przeciwnicy jako agresor",odd:"Pokonani przeciwnicy jako obrońca",ods:"Pokonani przeciwnicy jako wspierający",od:"Pokonani przeciwnicy"},en_DK:{title:"History",date:"Date",tribe:"Tribe",points:"Points",villages:"Villages",members:"Members",oda:"ODA",odd:"ODD",ods:"ODS",od:"OD"},de_DE:{title:"Verlauf",date:"Datum",tribe:"Stamm",points:"Punkte",villages:"Dörfer",members:"Mitglieder",oda:"BGA",odd:"BGV",ods:"BGS",od:"BP"}};const v=S[window.game_data.locale]||S.en_DK,A=e=>e>0?"+"+e:e;var P=(e,t,n,{currentPage:r=1,limit:a=0,onPageChange:i=(()=>{}),tribe:o=!1}={})=>{const l=`\n <div style="display: flex; flex-direction: row; flex-wrap: wrap;" id="historyPagination">\n ${p({total:t.total,limit:a,currentPage:r}).join("")}\n </div>\n <table class="vis" style="border-collapse: separate; border-spacing: 2px; width: 100%;">\n <tbody>\n <tr>\n <th>\n ${v.date}\n </th>\n ${o?"":`<th>${v.tribe}</th>`}\n <th>\n ${v.points}\n </th>\n <th>\n ${v.villages}\n </th>\n ${o?`<th>${v.members}</th>`:""}\n <th>\n ${v.od}\n </th>\n <th>\n ${v.oda}\n </th>\n <th>\n ${v.odd}\n </th>\n ${o?"":`<th>${v.ods}</th>`}\n </tr>\n ${t.items.map((e=>{const t=function(e,t){f(2,arguments);var n=w(t);return D(e,-n)}(new Date(e.createDate),1).toISOString().split(".")[0]+"Z",r=n.items.find((e=>e.createDate===t));let a=`<tr><td>${m(e.createDate,{year:"numeric",month:"2-digit",day:"2-digit"})}</td>`;return!o&&e.tribe?a+=`<td><a href="${y(e.tribe.id)}">${e.tribe.tag}</a></td>`:o||(a+="<td>-</td>"),a+=`\n <td title="${r?A(r.points):""}">\n ${e.points.toLocaleString()} (<strong>${e.rank}</strong>)\n </td>\n <td title="${r?A(r.villages):""}">\n ${e.totalVillages.toLocaleString()}\n </td>\n ${o?`\n <td title="${r?A(r.members):""}">\n ${e.totalMembers}\n </td>\n `:""}\n <td title="${r?A(r.scoreTotal):""}">\n ${e.scoreTotal.toLocaleString()} (<strong>${e.rankTotal}</strong>)\n </td>\n <td title="${r?A(r.scoreAtt):""}">\n ${e.scoreAtt.toLocaleString()} (<strong>${e.rankAtt}</strong>)\n </td>\n <td title="${r?A(r.scoreDef):""}">\n ${e.scoreDef.toLocaleString()} (<strong>${e.rankDef}</strong>)\n </td>\n ${o?"":`\n <td title="${r?A(r.scoreSup):""}">\n ${e.scoreSup.toLocaleString()} (<strong>${e.rankSup}</strong>)\n </td>\n `}\n </tr>`,a})).join("")}\n </tbody>\n </table>\n `;s({e:e,title:v.title,id:"history",html:l}),document.querySelectorAll("#historyPagination a").forEach((e=>{e.addEventListener("click",i)}))},T=e=>{const t=e.split(/[_-]/);let n="";for(let e=1;e<t.length;e++)n+=t[e].charAt(0).toUpperCase()+t[e].slice(1);return t[0]+n};const E=(e="",t="",n=0,r="")=>`${((e="",t="")=>`https://${e}.tribalwarshelp.com/server/${t}`)(e,t)}/${r}/${n}`,L=(e="",t="",n=0)=>E(e,t,n,"player"),R=window.location.host.split(".")[0],N=((e="")=>e.substr(0,2))(R);let O=t(window.location.search);const _=parseInt(game_data.player.id);!isNaN(O)&&O||(O=_);const x="kichiyaki_extended_player_profile"+O,j=document.querySelector("#player_info > tbody"),M=O===_?j:document.querySelector("#content_value > table > tbody > tr > td:nth-child(1) > table:nth-child(2) > tbody"),C=document.querySelector(O===_?"#content_value > table:nth-child(7) > tbody > tr > td:nth-child(2)":"#content_value > table > tbody > tr > td:nth-child(2)"),H=a[window.game_data.locale]||a.en_DK,q=()=>((e,t={})=>{const n=localStorage.getItem(e);let r=t;return n&&(r=JSON.parse(n)),r})(x),z=(e={})=>{var t,n;t=x,n=e,localStorage.setItem(t,JSON.stringify(n))},I=async(t,r={})=>{var{name:a}=r,i=e(r,["name"]);try{const e=await fetch(TribalWars.buildURL("",{screen:"ranking",mode:"in_a_day",type:t,name:a||""})),r=await e.text();if(!r)throw new Error;const o=new n(r,i).parse();if(0===o.length)throw new Error;return o[0]}catch(e){return{rank:0,playerID:0,score:0,tribeID:0,tribe:"",date:new Date}}},V=({player:e,dailyPlayerStats:t})=>{[{title:H.joinedAt+":",data:m(e.joinedAt),id:"joined_at"},{title:H.dailyGrowth+":",data:e.dailyGrowth.toLocaleString(),id:"dg"},{title:H.bestRank+":",data:e.bestRank+" "+`(${m(e.bestRankAt)})`,id:"best_rank"},{title:H.mostPoints+":",data:e.mostPoints.toLocaleString()+" "+`(${m(e.mostPointsAt)})`,id:"most_points"},{title:H.mostVillages+":",data:e.mostVillages+" "+`(${m(e.mostVillagesAt)})`,id:"most_villages"}].forEach((e=>{(({title:e,data:t,id:n})=>{let r=document.querySelector("#"+n);r||(r=document.createElement("tr"),r.id=n,r.appendChild(document.createElement("td")),r.appendChild(document.createElement("td")),j.append(r)),r.children[0].innerHTML=e,r.children[1].innerHTML=t})(e)})),(e=>{let t=document.querySelector("#inADayRanks");t||(t=document.createElement("div"),t.id="inADayRanks",t.width="100%",C.prepend(t)),t.innerHTML=`\n <table width="100%" class="vis">\n <tbody>\n <tr>\n <th colspan="2">\n ${H.inADayBestScores}\n </th>\n </tr>\n <tr>\n <td>\n ${H.unitsDefeatedWhileAttacking}\n </td>\n <td>\n ${e.inADay.att.score.toLocaleString()} (${e.inADay.att.rank}.)\n </td>\n </tr>\n <tr>\n <td>\n ${H.unitsDefeatedWhileDefending}\n </td>\n <td>\n ${e.inADay.def.score.toLocaleString()} (${e.inADay.def.rank}.)\n </td>\n </tr>\n <tr>\n <td>\n ${H.unitsDefeatedWhileSupporting}\n </td>\n <td>\n ${e.inADay.sup.score.toLocaleString()} (${e.inADay.sup.rank}.)\n </td>\n </tr>\n <tr>\n <td>\n ${H.resourcesPlundered}\n </td>\n <td>\n ${e.inADay.lootRes.score.toLocaleString()} (${e.inADay.lootRes.rank}.)\n </td>\n </tr>\n <tr>\n <td>\n ${H.villagesPlundered}\n </td>\n <td>\n ${e.inADay.lootVil.score.toLocaleString()} (${e.inADay.lootVil.rank}.)\n </td>\n </tr>\n <tr>\n <td>\n ${H.resourcesGathered}\n </td>\n <td>\n ${e.inADay.scavenge.score.toLocaleString()} (${e.inADay.scavenge.rank}.)\n </td>\n </tr>\n <tr>\n <td>\n ${H.villagesConquered}\n </td>\n <td>\n ${e.inADay.conquer.score.toLocaleString()} (${e.inADay.conquer.rank}.)\n </td>\n </tr>\n </tbody>\n </table>\n `})(e),t&&t.items.length>0&&((e,t)=>{let n=e.querySelector("#todaysStats");n||(n=document.createElement("div"),n.id="todaysStats",n.width="100%",e.prepend(n));const r=!(null==t.rankSup);n.innerHTML=`\n <table width="100%" class="vis">\n <tbody>\n <tr>\n <th colspan="2">\n ${o.title}\n </th>\n </tr>\n <tr>\n <td>\n ${o.points}:\n </td>\n <td style="${l(t.points)}">\n ${Math.abs(t.points).toLocaleString()}\n </td>\n </tr>\n <tr>\n <td>\n ${o.rank}:\n </td>\n <td style="${l(t.rank)}">\n ${Math.abs(t.rank)}\n </td>\n </tr>\n <tr>\n <td>\n ${o.villages}:\n </td>\n <td style="${l(t.villages)}">\n ${Math.abs(t.villages).toLocaleString()}\n </td>\n </tr>\n ${r?"":`<tr>\n <td>\n ${o.members}:\n </td>\n <td style="${l(t.members)}">\n ${Math.abs(t.members)}\n </td>\n </tr>`}\n <tr>\n <td>\n ${o.oda}:\n </td>\n <td style="${l(t.scoreAtt)}">\n ${Math.abs(t.scoreAtt).toLocaleString()}\n </td>\n </tr>\n <tr>\n <td>\n ${o.odaRank}:\n </td>\n <td style="${l(t.rankAtt)}">\n ${Math.abs(t.rankAtt)}\n </td>\n </tr>\n <tr>\n <td>\n ${o.odd}:\n </td>\n <td style="${l(t.scoreDef)}">\n ${Math.abs(t.scoreDef).toLocaleString()}\n </td>\n </tr>\n <tr>\n <td>\n ${o.oddRank}:\n </td>\n <td style="${l(t.rankDef)}">\n ${Math.abs(t.rankDef)}\n </td>\n </tr>\n ${r?`<tr>\n <td>\n ${o.ods}:\n </td>\n <td style="${l(t.scoreSup)}">\n ${Math.abs(t.scoreSup).toLocaleString()}\n </td>\n </tr>\n <tr>\n <td>\n ${o.odsRank}:\n </td>\n <td style="${l(t.rankSup)}">\n ${Math.abs(t.rankSup)}\n </td>\n </tr>`:""}\n <tr>\n <td>\n ${o.od}:\n </td>\n <td style="${l(t.scoreTotal)}">\n ${Math.abs(t.scoreTotal).toLocaleString()}\n </td>\n </tr>\n <tr>\n <td>\n ${o.odRank}:\n </td>\n <td style="${l(t.rankTotal)}">\n ${Math.abs(t.rankTotal)}\n </td>\n </tr>\n </tbody>\n </table>\n `})(C,t.items[0]),e.nameChanges.length>0&&(e=>{let t=document.querySelector("#playerOtherNames");t||(t=document.createElement("div"),t.id="playerOtherNames",t.width="100%",C.prepend(t)),t.innerHTML=`\n <table width="100%" class="vis">\n <tbody>\n <tr>\n <th>\n ${H.oldName}\n </th>\n <th>\n ${H.newName}\n </th>\n <th>\n ${H.date}\n </th>\n </tr>\n ${e.nameChanges.map((e=>`\n <tr>\n <td>\n ${e.oldName}\n </td>\n <td>\n ${e.newName}\n </td>\n <td>\n ${m(e.changeDate,{year:"numeric",month:"2-digit",day:"2-digit"})}\n </td>\n </tr>\n `)).join("")}\n </tbody>\n </table>\n `})(e),e.servers.length>0&&(e=>{let t=document.querySelector("#playerServers");t||(t=document.createElement("table"),t.id="playerServers",t.classList.add("vis"),t.width="100%",t.innerHTML=`\n <tbody>\n <tr>\n <th>\n ${H.playerServers}\n </th>\n </tr>\n <tr>\n <td>\n </td>\n </tr>\n </tbody>\n `,C.prepend(t)),t.querySelector("td").innerHTML=e.servers.sort().map((t=>`<a target="_blank" style="margin-right: 5px" href="${L(N,t,e.id)}">${t}</a>`)).join("")})(e)},W=async e=>{e.preventDefault();const t=h(e.target);if(!isNaN(t)){((e,t,n)=>{const r=`\n <div style="display: flex; flex-direction: row; flex-wrap: wrap;" id="tribeChangesPagination">\n ${p({total:n.total,limit:15,currentPage:t}).join("")}\n </div>\n <table class="vis" style="border-collapse: separate; border-spacing: 2px; width: 100%;">\n <tbody>\n <tr>\n <th>\n ${H.date}\n </th>\n <th>\n ${H.newTribe}\n </th>\n <th>\n ${H.oldTribe}\n </th>\n </tr>\n ${n.items.map((e=>{let t=`<tr><td>${m(e.createdAt)}</td>`;return e.newTribe?t+=`<td><a href="${y(e.newTribe.id)}">${e.newTribe.tag}</a></td>`:t+="<td>-</td>",e.oldTribe?t+=`<td><a href="${y(e.oldTribe.id)}">${e.oldTribe.tag}</a></td>`:t+="<td>-</td>",t+"</tr>"})).join("")}\n </tbody>\n </table>\n `;s({e:e,title:H.tribeChanges,id:"tribeChanges",html:r}),document.querySelectorAll("#tribeChangesPagination a").forEach((e=>{e.addEventListener("click",W)}))})(e,t,(await r({query:"\n query tribeChanges($server: String!, $limit: Int, $offset: Int, $sort: [String!], $filter: TribeChangeFilter!) {\n tribeChanges(server: $server, limit: $limit, offset: $offset, sort: $sort, filter: $filter) {\n total\n items {\n oldTribe {\n id\n tag\n }\n newTribe {\n id\n tag\n }\n createdAt\n }\n }\n }\n",variables:{filter:{playerID:[O]},sort:["createdAt DESC"],offset:15*(t-1),limit:15,server:R}})).tribeChanges)}},B=async e=>{e.preventDefault();const t=h(e.target);if(!isNaN(t))try{const n={playerID:[O]},{playerHistory:a,dailyPlayerStats:i}=await r({query:"\nquery playerHistoryAndPlayerDailyStats($server: String!,\n $playerHistoryFilter: PlayerHistoryFilter!,\n $dailyPlayerStatsFilter: DailyPlayerStatsFilter!,\n $limit: Int,\n $offset: Int,\n $sort: [String!]) {\n playerHistory(server: $server, limit: $limit, offset: $offset, sort: $sort, filter: $playerHistoryFilter) {\n total\n items {\n totalVillages\n points\n rank\n scoreAtt\n rankAtt\n scoreDef\n rankDef\n scoreSup\n rankSup\n scoreTotal\n rankTotal\n tribe {\n id\n tag\n }\n createDate\n }\n }\n dailyPlayerStats(server: $server, limit: $limit, offset: $offset, sort: $sort, filter: $dailyPlayerStatsFilter) {\n items {\n points\n scoreAtt\n scoreAtt\n scoreDef\n scoreSup\n scoreTotal\n villages\n createDate\n }\n }\n}\n",variables:{server:R,playerHistoryFilter:n,offset:15*(t-1),limit:15,sort:["createDate DESC"],dailyPlayerStatsFilter:n}});P(e,a,i,{currentPage:t,limit:15,onPageChange:B,tribe:!1})}catch(e){console.log("couldnt load player history",e)}},G=async e=>{e.preventDefault();const t=h(e.target);if(!isNaN(t)){const n=await r({query:"\n query ennoblements($server: String!, $limit: Int, $offset: Int, $sort: [String!], $filter: EnnoblementFilter!) {\n ennoblements(server: $server, limit: $limit, offset: $offset, sort: $sort, filter: $filter) {\n total\n items {\n village {\n id\n name\n x\n y\n }\n oldOwner {\n id\n name\n }\n oldOwnerTribe {\n id\n tag\n }\n newOwner {\n id\n name\n }\n newOwnerTribe {\n id\n tag\n }\n ennobledAt\n }\n }\n }\n",variables:{filter:{or:{oldOwnerID:[O],newOwnerID:[O]}},offset:15*(t-1),limit:15,sort:["ennobledAt DESC"],server:R}});$(e,n.ennoblements,{currentPage:t,limit:15,onPageChange:G})}},F=e=>{e.preventDefault(),Dialog.show(H.exportedVillages,`<textarea cols=30 rows=8 readonly>${document.querySelector("#villages_list").innerHTML.match(/(\d+)\|(\d+)/g).join(" ")}</textarea>`)},U=e=>{const t=document.createElement("td");t.colSpan="2",t.append(e);const n=document.createElement("tr");return n.appendChild(t),n};!async function(){try{(()=>{const e=document.createElement("a");e.href=L(N,R,O),e.innerHTML=H.action.linkToTWHelp,M.appendChild(U(e));const t=document.createElement("a");t.href="#",g(t,"1"),t.innerHTML=H.action.showTribeChanges,t.addEventListener("click",W),M.appendChild(U(t));const n=document.createElement("a");n.href="#",g(n,"1"),n.innerHTML=H.action.showHistory,n.addEventListener("click",B),M.appendChild(U(n));const r=document.createElement("a");r.href="#",g(r,"1"),r.innerHTML=H.action.showEnnoblements,r.addEventListener("click",G),M.appendChild(U(r));const a=document.createElement("a");a.href="#",a.innerHTML=H.action.exportVillages,a.addEventListener("click",F),M.appendChild(U(a))})();const e=q();e&&e.player&&V(e);const t=await(async()=>{const e=await r({query:"\n query player($server: String!, $id: Int!, $limit: Int, $sort: [String!], $filter: DailyPlayerStatsFilter) {\n player(server: $server, id: $id) {\n id\n name\n bestRank\n bestRankAt\n mostPoints\n mostPointsAt\n mostVillages\n mostVillagesAt\n servers\n joinedAt\n nameChanges {\n oldName\n newName\n changeDate\n }\n dailyGrowth\n }\n dailyPlayerStats(server: $server, limit: $limit, sort: $sort, filter: $filter) {\n items {\n rank\n rankAtt\n rankDef\n rankSup\n rankTotal\n points\n scoreAtt\n scoreAtt\n scoreDef\n scoreSup\n scoreTotal\n villages\n }\n }\n }\n",variables:{server:R,id:O,limit:1,sort:["createDate DESC"],filter:{playerID:[O]}}});if(e.player){const t={},n={name:e.player.name,playerID:e.player.id};for(let e of["kill_att","kill_def","kill_sup","loot_res","loot_vil","scavenge","conquer"])t[T(e.replace("kill_",""))]=await I(e,n);e.player.inADay=t}return z(e),e})();t&&V(t)}catch(e){console.log("extended player profile",e)}}()}();