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
30 KiB
JavaScript

!function(){var t=t=>parseInt(new URLSearchParams(t).get("id"));class e{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.dom=(new DOMParser).parseFromString(t,"text/html"),this.trs=this.dom.querySelectorAll("#in_a_day_ranking_table tbody tr"),this.filters=e}isValidRow(t){return!!t&&((!this.filters.playerID||t.playerID===this.filters.playerID)&&!(this.filters.tribes&&Array.isArray(this.filters.tribes)&&!this.filters.tribes.some((e=>e===t.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 t=[];for(let e=1;e<this.trs.length;e++){const n=this.trs[e],a=this.parseRow(n);this.isValidRow(a)&&t.push(a)}return t}}const n="https://api.tribalwarshelp.com/graphql";var a=function(){let{query:t,variables:e={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return fetch(n,{method:"POST",body:JSON.stringify({query:t,variables:e}),headers:{"Content-Type":"application/json"}}).then((t=>t.json())).then((t=>{let{data:e,errors:n}=t;if(n&&Array.isArray(n)&&n.length>0)throw new Error(n[0].message);return new Promise((t=>t(e)))}))};const r={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 o={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 i=o[window.game_data.locale]||o.en_DK,l=t=>t>0?"color: #000; background-color: #0f0":t<0?"color: #000; background-color: #f00":"color: #000; background-color: #808080";const c=".popup_box",s=function(){let{html:t,id:e,title:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};Dialog.show(e,"<h3>".concat(n,"</h3>")+t);const a=document.querySelector(c);a&&(a.style.width="auto",a.style.maxWidth="1000px")},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 g="data-page",h=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if(!t instanceof HTMLElement)throw new Error("Expected HTMLElement as the first argument");if(e=parseInt(e),"number"!=typeof e||isNaN(e))throw new Error("Expected number or string as the second argument");t.setAttribute(g,e+"")},p=t=>!t instanceof HTMLElement?0:parseInt(t.getAttribute(g)),m=(t,e)=>{if("number"!=typeof t)throw new Error("Expected number as the first argument");if("number"!=typeof e)throw new Error("Expected number as the second argument");return t>0?Math.ceil(t/e):1},y=function(){let{total:t,limit:e,marginRight:n=3,currentPage:a=0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r=m(t,e),o=[];for(let t=1;t<=r;t++)t===a?o.push('<strong style="margin-right: '.concat(n,'px">>').concat(t,"<</strong>")):o.push('<a style="margin-right: '.concat(n,'px" href="#" ').concat(g,'="').concat(t,'">').concat(t,"</a>"));return o},u=(t,e)=>new Date(t).toLocaleDateString(void 0,e||{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}),b=t=>window.location.origin+TribalWars.buildURL("",{screen:"info_ally",id:t}),f=t=>window.location.origin+TribalWars.buildURL("",{screen:"info_village",id:t}),w=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:500;const a="K"+String(n)[0]+String(e)[0];return"".concat(t," (").concat(e,"|").concat(n,") ").concat(a)},k="ennoblementsPagination",D=d[window.game_data.locale]||d.en_DK,v=(t,e)=>{return t?'<td><a href="'.concat((n=t.id,window.location.origin+TribalWars.buildURL("",{screen:"info_player",id:n})),'">').concat(t.name," (").concat(e?'<a href="'.concat(b(e.id),'">').concat(e.tag,"</a>"):"-",")</a></td>"):"<td>-</td>";var n};function S(t){if(null===t||!0===t||!1===t)return NaN;var e=Number(t);return isNaN(e)?e:e<0?Math.ceil(e):Math.floor(e)}function A(t,e){if(e.length<t)throw new TypeError(t+" argument"+(t>1?"s":"")+" required, but only "+e.length+" present")}function P(t){A(1,arguments);var e=Object.prototype.toString.call(t);return t instanceof Date||"object"==typeof t&&"[object Date]"===e?new Date(t.getTime()):"number"==typeof t||"[object Number]"===e?new Date(t):("string"!=typeof t&&"[object String]"!==e||"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 T(t,e){A(2,arguments);var n=P(t),a=S(e);return isNaN(a)?new Date(NaN):a?(n.setDate(n.getDate()+a),n):n}function E(t,e){A(2,arguments);var n=S(e);return T(t,-n)}const L={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 R="historyPagination",N=L[window.game_data.locale]||L.en_DK,O=t=>t>0?"+"+t:t;var _=t=>{const e=t.split(/[_-]/);let n="";for(let t=1;t<e.length;t++)n+=e[t].charAt(0).toUpperCase()+e[t].slice(1);return e[0]+n};const x="tribalwarshelp.com",j=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"https://".concat(t,".").concat(x,"/server/").concat(e)},$=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";return"".concat(j(t,e),"/").concat(a,"/").concat(n)},M=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return $(t,e,n,"player")},C=(t,e)=>{localStorage.setItem(t,JSON.stringify(e))},H=["name"];function q(t,e){if(null==t)return{};var n,a,r=function(t,e){if(null==t)return{};var n,a,r={},o=Object.keys(t);for(a=0;a<o.length;a++)n=o[a],e.indexOf(n)>=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a<o.length;a++)n=o[a],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}const z=window.location.host.split(".")[0],I=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return t.substr(0,2)}(z);let V=t(window.location.search);const W=parseInt(game_data.player.id);!isNaN(V)&&V||(V=W);const B="kichiyaki_extended_player_profile"+V,G="tribeChangesPagination",F=document.querySelector("#player_info > tbody"),U=V===W?F:document.querySelector("#content_value > table > tbody > tr > td:nth-child(1) > table:nth-child(2) > tbody"),K=document.querySelector(V===W?"#content_value > table:nth-child(7) > tbody > tr > td:nth-child(2)":"#content_value > table > tbody > tr > td:nth-child(2)"),J=r[window.game_data.locale]||r.en_DK,Z=()=>function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=localStorage.getItem(t);let a=e;return n&&(a=JSON.parse(n)),a}(B),Q=async function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{name:a}=n,r=q(n,H);try{const n=await fetch(TribalWars.buildURL("",{screen:"ranking",mode:"in_a_day",type:t,name:a||""})),o=await n.text();if(!o)throw new Error;const i=new e(o,r).parse();if(0===i.length)throw new Error;return i[0]}catch(t){return{rank:0,playerID:0,score:0,tribeID:0,tribe:"",date:new Date}}},X=async()=>{const t=await a({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:z,id:V,limit:1,sort:["createDate DESC"],filter:{playerID:[V]}}});if(t.player){const e={},n={name:t.player.name,playerID:t.player.id};for(let t of["kill_att","kill_def","kill_sup","loot_res","loot_vil","scavenge","conquer"])e[_(t.replace("kill_",""))]=await Q(t,n);t.player.inADay=e}return function(){C(B,arguments.length>0&&void 0!==arguments[0]?arguments[0]:{})}(t),t},Y=t=>{let{player:e,dailyPlayerStats:n}=t;[{title:J.joinedAt+":",data:u(e.joinedAt),id:"joined_at"},{title:J.dailyGrowth+":",data:e.dailyGrowth.toLocaleString(),id:"dg"},{title:J.bestRank+":",data:e.bestRank+" "+"(".concat(u(e.bestRankAt),")"),id:"best_rank"},{title:J.mostPoints+":",data:e.mostPoints.toLocaleString()+" "+"(".concat(u(e.mostPointsAt),")"),id:"most_points"},{title:J.mostVillages+":",data:e.mostVillages+" "+"(".concat(u(e.mostVillagesAt),")"),id:"most_villages"}].forEach((t=>{(t=>{let{title:e,data:n,id:a}=t,r=document.querySelector("#"+a);r||(r=document.createElement("tr"),r.id=a,r.appendChild(document.createElement("td")),r.appendChild(document.createElement("td")),F.append(r)),r.children[0].innerHTML=e,r.children[1].innerHTML=n})(t)})),(t=>{let e=document.querySelector("#inADayRanks");e||(e=document.createElement("div"),e.id="inADayRanks",e.width="100%",K.prepend(e)),e.innerHTML='\n <table width="100%" class="vis">\n <tbody>\n <tr>\n <th colspan="2">\n '.concat(J.inADayBestScores,"\n </th>\n </tr>\n <tr>\n <td>\n ").concat(J.unitsDefeatedWhileAttacking,"\n </td>\n <td>\n ").concat(t.inADay.att.score.toLocaleString()," (").concat(t.inADay.att.rank,".)\n </td>\n </tr>\n <tr>\n <td>\n ").concat(J.unitsDefeatedWhileDefending,"\n </td>\n <td>\n ").concat(t.inADay.def.score.toLocaleString()," (").concat(t.inADay.def.rank,".)\n </td>\n </tr>\n <tr>\n <td>\n ").concat(J.unitsDefeatedWhileSupporting,"\n </td>\n <td>\n ").concat(t.inADay.sup.score.toLocaleString()," (").concat(t.inADay.sup.rank,".)\n </td>\n </tr>\n <tr>\n <td>\n ").concat(J.resourcesPlundered,"\n </td>\n <td>\n ").concat(t.inADay.lootRes.score.toLocaleString()," (").concat(t.inADay.lootRes.rank,".)\n </td>\n </tr>\n <tr>\n <td>\n ").concat(J.villagesPlundered,"\n </td>\n <td>\n ").concat(t.inADay.lootVil.score.toLocaleString()," (").concat(t.inADay.lootVil.rank,".)\n </td>\n </tr>\n <tr>\n <td>\n ").concat(J.resourcesGathered,"\n </td>\n <td>\n ").concat(t.inADay.scavenge.score.toLocaleString()," (").concat(t.inADay.scavenge.rank,".)\n </td>\n </tr>\n <tr>\n <td>\n ").concat(J.villagesConquered,"\n </td>\n <td>\n ").concat(t.inADay.conquer.score.toLocaleString()," (").concat(t.inADay.conquer.rank,".)\n </td>\n </tr>\n </tbody>\n </table>\n ")})(e),n&&n.items.length>0&&((t,e)=>{let n=t.querySelector("#todaysStats");n||(n=document.createElement("div"),n.id="todaysStats",n.width="100%",t.prepend(n));const a=!(null==e.rankSup);n.innerHTML='\n <table width="100%" class="vis">\n <tbody>\n <tr>\n <th colspan="2">\n '.concat(i.title,"\n </th>\n </tr>\n <tr>\n <td>\n ").concat(i.points,':\n </td>\n <td style="').concat(l(e.points),'">\n ').concat(Math.abs(e.points).toLocaleString(),"\n </td>\n </tr>\n <tr>\n <td>\n ").concat(i.rank,':\n </td>\n <td style="').concat(l(e.rank),'">\n ').concat(Math.abs(e.rank),"\n </td>\n </tr>\n <tr>\n <td>\n ").concat(i.villages,':\n </td>\n <td style="').concat(l(e.villages),'">\n ').concat(Math.abs(e.villages).toLocaleString(),"\n </td>\n </tr>\n ").concat(a?"":"<tr>\n <td>\n ".concat(i.members,':\n </td>\n <td style="').concat(l(e.members),'">\n ').concat(Math.abs(e.members),"\n </td>\n </tr>"),"\n <tr>\n <td>\n ").concat(i.oda,':\n </td>\n <td style="').concat(l(e.scoreAtt),'">\n ').concat(Math.abs(e.scoreAtt).toLocaleString(),"\n </td>\n </tr>\n <tr>\n <td>\n ").concat(i.odaRank,':\n </td>\n <td style="').concat(l(e.rankAtt),'">\n ').concat(Math.abs(e.rankAtt),"\n </td>\n </tr>\n <tr>\n <td>\n ").concat(i.odd,':\n </td>\n <td style="').concat(l(e.scoreDef),'">\n ').concat(Math.abs(e.scoreDef).toLocaleString(),"\n </td>\n </tr>\n <tr>\n <td>\n ").concat(i.oddRank,':\n </td>\n <td style="').concat(l(e.rankDef),'">\n ').concat(Math.abs(e.rankDef),"\n </td>\n </tr>\n ").concat(a?"<tr>\n <td>\n ".concat(i.ods,':\n </td>\n <td style="').concat(l(e.scoreSup),'">\n ').concat(Math.abs(e.scoreSup).toLocaleString(),"\n </td>\n </tr>\n <tr>\n <td>\n ").concat(i.odsRank,':\n </td>\n <td style="').concat(l(e.rankSup),'">\n ').concat(Math.abs(e.rankSup),"\n </td>\n </tr>"):"","\n <tr>\n <td>\n ").concat(i.od,':\n </td>\n <td style="').concat(l(e.scoreTotal),'">\n ').concat(Math.abs(e.scoreTotal).toLocaleString(),"\n </td>\n </tr>\n <tr>\n <td>\n ").concat(i.odRank,':\n </td>\n <td style="').concat(l(e.rankTotal),'">\n ').concat(Math.abs(e.rankTotal),"\n </td>\n </tr>\n </tbody>\n </table>\n ")})(K,n.items[0]),e.nameChanges.length>0&&(t=>{let e=document.querySelector("#playerOtherNames");e||(e=document.createElement("div"),e.id="playerOtherNames",e.width="100%",K.prepend(e)),e.innerHTML='\n <table width="100%" class="vis">\n <tbody>\n <tr>\n <th>\n '.concat(J.oldName,"\n </th>\n <th>\n ").concat(J.newName,"\n </th>\n <th>\n ").concat(J.date,"\n </th>\n </tr>\n ").concat(t.nameChanges.map((t=>"\n <tr>\n <td>\n ".concat(t.oldName,"\n </td>\n <td>\n ").concat(t.newName,"\n </td>\n <td>\n ").concat(u(t.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&&(t=>{let e=document.querySelector("#playerServers");e||(e=document.createElement("table"),e.id="playerServers",e.classList.add("vis"),e.width="100%",e.innerHTML="\n <tbody>\n <tr>\n <th>\n ".concat(J.playerServers,"\n </th>\n </tr>\n <tr>\n <td>\n </td>\n </tr>\n </tbody>\n "),K.prepend(e)),e.querySelector("td").innerHTML=t.servers.sort().map((e=>'<a target="_blank" style="margin-right: 5px" href="'.concat(M(I,e,t.id),'">').concat(e,"</a>"))).join("")})(e)},tt=async t=>{t.preventDefault();const e=p(t.target);if(!isNaN(e)){((t,e,n)=>{const a=y({total:n.total,limit:15,currentPage:e}),r='\n <div style="'.concat("display: flex; flex-direction: row; flex-wrap: wrap;",'" id="').concat(G,'">\n ').concat(a.join(""),'\n </div>\n <table class="vis" style="border-collapse: separate; border-spacing: 2px; width: 100%;">\n <tbody>\n <tr>\n <th>\n ').concat(J.date,"\n </th>\n <th>\n ").concat(J.newTribe,"\n </th>\n <th>\n ").concat(J.oldTribe,"\n </th>\n </tr>\n ").concat(n.items.map((t=>{let e="<tr>"+"<td>".concat(u(t.createdAt),"</td>");return t.newTribe?e+='<td><a href="'.concat(b(t.newTribe.id),'">').concat(t.newTribe.tag,"</a></td>"):e+="<td>-</td>",t.oldTribe?e+='<td><a href="'.concat(b(t.oldTribe.id),'">').concat(t.oldTribe.tag,"</a></td>"):e+="<td>-</td>",e+"</tr>"})).join(""),"\n </tbody>\n </table>\n ");s({e:t,title:J.tribeChanges,id:"tribeChanges",html:r}),document.querySelectorAll("#tribeChangesPagination a").forEach((t=>{t.addEventListener("click",tt)}))})(t,e,(await a({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:[V]},sort:["createdAt DESC"],offset:15*(e-1),limit:15,server:z}})).tribeChanges)}},et=async t=>{t.preventDefault();const e=p(t.target);if(!isNaN(e))try{const n={playerID:[V]},{playerHistory:r,dailyPlayerStats:o}=await a({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:z,playerHistoryFilter:n,offset:15*(e-1),limit:15,sort:["createDate DESC"],dailyPlayerStatsFilter:n}});!function(t,e,n){let{currentPage:a=1,limit:r=0,onPageChange:o=(()=>{}),tribe:i=!1}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};const l=y({total:e.total,limit:r,currentPage:a}),c='\n <div style="'.concat("display: flex; flex-direction: row; flex-wrap: wrap;",'" id="').concat(R,'">\n ').concat(l.join(""),'\n </div>\n <table class="vis" style="border-collapse: separate; border-spacing: 2px; width: 100%;">\n <tbody>\n <tr>\n <th>\n ').concat(N.date,"\n </th>\n ").concat(i?"":"<th>".concat(N.tribe,"</th>"),"\n <th>\n ").concat(N.points,"\n </th>\n <th>\n ").concat(N.villages,"\n </th>\n ").concat(i?"<th>".concat(N.members,"</th>"):"","\n <th>\n ").concat(N.od,"\n </th>\n <th>\n ").concat(N.oda,"\n </th>\n <th>\n ").concat(N.odd,"\n </th>\n ").concat(i?"":"<th>".concat(N.ods,"</th>"),"\n </tr>\n ").concat(e.items.map((t=>{const e=E(new Date(t.createDate),1).toISOString().split(".")[0]+"Z",a=n.items.find((t=>t.createDate===e));let r="<tr>"+"<td>".concat(u(t.createDate,{year:"numeric",month:"2-digit",day:"2-digit"}),"</td>");return!i&&t.tribe?r+='<td><a href="'.concat(b(t.tribe.id),'">').concat(t.tribe.tag,"</a></td>"):i||(r+="<td>-</td>"),r+='\n <td title="'.concat(a?O(a.points):"",'">\n ').concat(t.points.toLocaleString()," (<strong>").concat(t.rank,'</strong>)\n </td>\n <td title="').concat(a?O(a.villages):"",'">\n ').concat(t.totalVillages.toLocaleString(),"\n </td>\n ").concat(i?'\n <td title="'.concat(a?O(a.members):"",'">\n ').concat(t.totalMembers,"\n </td>\n "):"",'\n <td title="').concat(a?O(a.scoreTotal):"",'">\n ').concat(t.scoreTotal.toLocaleString()," (<strong>").concat(t.rankTotal,'</strong>)\n </td>\n <td title="').concat(a?O(a.scoreAtt):"",'">\n ').concat(t.scoreAtt.toLocaleString()," (<strong>").concat(t.rankAtt,'</strong>)\n </td>\n <td title="').concat(a?O(a.scoreDef):"",'">\n ').concat(t.scoreDef.toLocaleString()," (<strong>").concat(t.rankDef,"</strong>)\n </td>\n ").concat(i?"":'\n <td title="'.concat(a?O(a.scoreSup):"",'">\n ').concat(t.scoreSup.toLocaleString()," (<strong>").concat(t.rankSup,"</strong>)\n </td>\n "),"\n ")+"</tr>",r})).join(""),"\n </tbody>\n </table>\n ");s({e:t,title:N.title,id:"history",html:c}),document.querySelectorAll("#historyPagination a").forEach((t=>{t.addEventListener("click",o)}))}(t,r,o,{currentPage:e,limit:15,onPageChange:et,tribe:!1})}catch(t){console.log("cannot load player history",t)}},nt=async t=>{t.preventDefault();const e=p(t.target);if(!isNaN(e)){!function(t,e){let{limit:n=0,currentPage:a=1,onPageChange:r=(()=>{})}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=y({total:e.total,limit:n,currentPage:a}),i='\n <div style="'.concat("display: flex; flex-direction: row; flex-wrap: wrap;",'" id="').concat(k,'">\n ').concat(o.join(""),'\n </div>\n <table class="vis" style="border-collapse: separate; border-spacing: 2px; width: 100%;">\n <tbody>\n <tr>\n <th>\n ').concat(D.date,"\n </th>\n <th>\n ").concat(D.village,"\n </th>\n <th>\n ").concat(D.newOwner,"\n </th>\n <th>\n ").concat(D.oldOwner,"\n </th>\n </tr>\n ").concat(e.items.map((t=>{let e="<tr>"+"<td>".concat(u(t.ennobledAt),"</td>");return t.village?e+='<td><a href="'.concat(f(t.village.id),'">').concat(w(t.village.name,t.village.x,t.village.y),"</a></td>"):e+="<td>-</td>",e+=v(t.newOwner,t.newOwnerTribe),e+=v(t.oldOwner,t.oldOwnerTribe),e+"</tr>"})).join(""),"\n </tbody>\n </table>\n ");s({e:t,title:D.title,id:"ennoblements",html:i}),document.querySelectorAll("#ennoblementsPagination a").forEach((t=>{t.addEventListener("click",r)}))}(t,(await a({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:[V],newOwnerID:[V]}},offset:15*(e-1),limit:15,sort:["ennobledAt DESC"],server:z}})).ennoblements,{currentPage:e,limit:15,onPageChange:nt})}},at=t=>{t.preventDefault(),Dialog.show(J.exportedVillages,"<textarea cols=30 rows=8 readonly>".concat(document.querySelector("#villages_list").innerHTML.match(/(\d+)\|(\d+)/g).join(" "),"</textarea>"))},rt=t=>{const e=document.createElement("td");e.colSpan="2",e.append(t);const n=document.createElement("tr");return n.appendChild(e),n};!async function(){try{(()=>{const t=document.createElement("a");t.href=M(I,z,V),t.innerHTML=J.action.linkToTWHelp,U.appendChild(rt(t));const e=document.createElement("a");e.href="#",h(e,"1"),e.innerHTML=J.action.showTribeChanges,e.addEventListener("click",tt),U.appendChild(rt(e));const n=document.createElement("a");n.href="#",h(n,"1"),n.innerHTML=J.action.showHistory,n.addEventListener("click",et),U.appendChild(rt(n));const a=document.createElement("a");a.href="#",h(a,"1"),a.innerHTML=J.action.showEnnoblements,a.addEventListener("click",nt),U.appendChild(rt(a));const r=document.createElement("a");r.href="#",r.innerHTML=J.action.exportVillages,r.addEventListener("click",at),U.appendChild(rt(r))})();const t=Z();t&&t.player&&Y(t);const e=await X();e&&Y(e)}catch(t){console.log("extended player profile",t)}}()}();