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/src/extendedTribeProfile.js

125 lines
3.2 KiB
JavaScript
Raw Normal View History

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);
}
})();