125 lines
3.2 KiB
JavaScript
125 lines
3.2 KiB
JavaScript
|
import requestCreator from './libs/requestCreator';
|
||
|
import getIDFromURL from './utils/getIDFromURL';
|
||
|
import getCurrentServer from './utils/getCurrentServer';
|
||
|
import { setItem, getItem } from './utils/localStorage';
|
||
|
import formatDate from './utils/formatDate';
|
||
|
|
||
|
// ==UserScript==
|
||
|
// @name Extended Tribe Profile
|
||
|
// @namespace https://github.com/tribalwarshelp/scripts
|
||
|
// @updateURL https://raw.githubusercontent.com/tribalwarshelp/scripts/master/dist/extendedTribeProfile.js
|
||
|
// @downloadURL https://raw.githubusercontent.com/tribalwarshelp/scripts/master/dist/extendedTribeProfile.js
|
||
|
// @version 0.1
|
||
|
// @description Extended Tribe Profile
|
||
|
// @author Kichiyaki http://dawid-wysokinski.pl/
|
||
|
// @match *://*/game.php*&screen=info_ally*
|
||
|
// @grant none
|
||
|
// @run-at document-end
|
||
|
// ==/UserScript==
|
||
|
|
||
|
const SERVER = getCurrentServer();
|
||
|
const TRIBE_ID = getIDFromURL(window.location.search);
|
||
|
const LOCAL_STORAGE_KEY = 'kichiyaki_extended_tribe_profile' + TRIBE_ID;
|
||
|
const TRIBE_QUERY = `
|
||
|
query tribe($server: String!, $id: Int!) {
|
||
|
tribe(server: $server, id: $id) {
|
||
|
id
|
||
|
bestRank
|
||
|
bestRankAt
|
||
|
mostPoints
|
||
|
mostPointsAt
|
||
|
mostVillages
|
||
|
mostVillagesAt
|
||
|
createdAt
|
||
|
dominance
|
||
|
}
|
||
|
}
|
||
|
`;
|
||
|
const profileInfoTBody = document.querySelector(
|
||
|
'#content_value > table:nth-child(3) > tbody > tr > td:nth-child(1) > table > tbody'
|
||
|
);
|
||
|
|
||
|
const loadDataFromCache = () => {
|
||
|
return getItem(LOCAL_STORAGE_KEY);
|
||
|
};
|
||
|
|
||
|
const cacheTribeData = (data = {}) => {
|
||
|
setItem(LOCAL_STORAGE_KEY, data);
|
||
|
};
|
||
|
|
||
|
const loadData = async () => {
|
||
|
const data = await requestCreator({
|
||
|
query: TRIBE_QUERY,
|
||
|
variables: {
|
||
|
server: SERVER,
|
||
|
id: TRIBE_ID,
|
||
|
},
|
||
|
});
|
||
|
cacheTribeData(data);
|
||
|
return data;
|
||
|
};
|
||
|
|
||
|
const renderTr = ({ title, data, id }) => {
|
||
|
let tr = document.querySelector('#' + id);
|
||
|
if (!tr) {
|
||
|
tr = document.createElement('tr');
|
||
|
tr.id = id;
|
||
|
tr.appendChild(document.createElement('td'));
|
||
|
tr.appendChild(document.createElement('td'));
|
||
|
profileInfoTBody.append(tr);
|
||
|
}
|
||
|
tr.children[0].innerHTML = title;
|
||
|
tr.children[1].innerHTML = data;
|
||
|
};
|
||
|
|
||
|
const render = ({ tribe }) => {
|
||
|
[
|
||
|
{
|
||
|
title: 'Created at:',
|
||
|
data: formatDate(tribe.createdAt),
|
||
|
id: 'created_at',
|
||
|
},
|
||
|
{
|
||
|
title: 'Dominance:',
|
||
|
data: tribe.dominance.toFixed(2) + '%',
|
||
|
id: 'dominance',
|
||
|
},
|
||
|
{
|
||
|
title: 'Best rank:',
|
||
|
data: tribe.bestRank + ' ' + `(${formatDate(tribe.bestRankAt)})`,
|
||
|
id: 'best_rank',
|
||
|
},
|
||
|
{
|
||
|
title: 'Most points:',
|
||
|
data:
|
||
|
tribe.mostPoints.toLocaleString() +
|
||
|
' ' +
|
||
|
`(${formatDate(tribe.mostPointsAt)})`,
|
||
|
id: 'most_points',
|
||
|
},
|
||
|
{
|
||
|
title: 'Most villages:',
|
||
|
data: tribe.mostVillages + ' ' + `(${formatDate(tribe.mostVillagesAt)})`,
|
||
|
id: 'most_villages',
|
||
|
},
|
||
|
].forEach((data) => {
|
||
|
renderTr(data);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
(async function () {
|
||
|
try {
|
||
|
const dataFromCache = loadDataFromCache();
|
||
|
if (dataFromCache && dataFromCache.tribe) {
|
||
|
render(dataFromCache);
|
||
|
}
|
||
|
|
||
|
const dataFromAPI = await loadData();
|
||
|
if (dataFromAPI) {
|
||
|
render(dataFromAPI);
|
||
|
}
|
||
|
} catch (error) {
|
||
|
console.log('extended tribe profile', error);
|
||
|
}
|
||
|
})();
|