diff --git a/dist/extendedPlayerProfile.js b/dist/extendedPlayerProfile.js index 939a969..f5342f2 100644 --- a/dist/extendedPlayerProfile.js +++ b/dist/extendedPlayerProfile.js @@ -597,7 +597,7 @@ exports.default = InADayParser; Object.defineProperty(exports, "__esModule", { value: true }); -exports.loadInADayData = exports.formatVillageURL = exports.formatPlayerURL = exports.formatTribeURL = void 0; +exports.loadInADayData = exports.formatVillageName = exports.formatVillageURL = exports.formatPlayerURL = exports.formatTribeURL = void 0; var _InADayParser = _interopRequireDefault(require("../libs/InADayParser")); @@ -634,6 +634,16 @@ const formatVillageURL = id => { exports.formatVillageURL = formatVillageURL; +const formatVillageName = function formatVillageName() { + let n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + let x = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500; + let y = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500; + const continent = 'K' + String(y)[0] + String(x)[0]; + return "".concat(n, " (").concat(x, "|").concat(y, ") ").concat(continent); +}; + +exports.formatVillageName = formatVillageName; + const loadInADayData = async function loadInADayData(type) { let _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, { @@ -735,7 +745,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope // @namespace https://github.com/tribalwarshelp/scripts // @updateURL https://raw.githubusercontent.com/tribalwarshelp/scripts/master/dist/extendedPlayerProfile.js // @downloadURL https://raw.githubusercontent.com/tribalwarshelp/scripts/master/dist/extendedPlayerProfile.js -// @version 0.61 +// @version 0.7 // @description Extended Player Profile // @author Kichiyaki http://dawid-wysokinski.pl/ // @match *://*/game.php*&screen=info_player* @@ -758,6 +768,9 @@ const TRIBE_CHANGES_PER_PAGE = 15; const PLAYER_HISTORY_AND_PLAYER_DAILY_STATS_QUERY = "\nquery playerHistoryAndPlayerDailyStats($server: String!,\n $playerHistoryFilter: PlayerHistoryFilter!,\n $dailyPlayerStatsFilter: DailyPlayerStatsFilter!) {\n playerHistory(server: $server, 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, filter: $dailyPlayerStatsFilter) {\n items {\n points\n scoreAtt\n scoreAtt\n scoreDef\n scoreSup\n scoreTotal\n villages\n createDate\n }\n }\n}\n"; const PLAYER_HISTORY_PAGINATION_CONTAINER_ID = 'playerHistoryPagination'; const PLAYER_HISTORY_PER_PAGE = 15; +const ENNOBLEMENTS_QUERY = "\n query ennoblements($server: String!, $filter: EnnoblementFilter!) {\n ennoblements(server: $server, 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"; +const ENNOBLEMENTS_PAGINATION_CONTAINER_ID = 'ennoblementsPagination'; +const ENNOBLEMENTS_PER_PAGE = 15; const profileInfoTBody = document.querySelector('#player_info > tbody'); const actionsContainer = PLAYER_ID === CURRENT_PLAYER_ID ? profileInfoTBody : document.querySelector('#content_value > table > tbody > tr > td:nth-child(1) > table:nth-child(2) > tbody'); const otherElementsContainer = document.querySelector(PLAYER_ID === CURRENT_PLAYER_ID ? '#content_value > table:nth-child(7) > tbody > tr > td:nth-child(2)' : '#content_value > table > tbody > tr > td:nth-child(2)'); @@ -952,9 +965,9 @@ const render = (_ref2) => { } }; -const addTribeChangesListeners = () => { - document.querySelectorAll('#' + TRIBE_CHANGES_PAGINATION_CONTAINER_ID + ' a').forEach(el => { - el.addEventListener('click', handleShowTribeChangesButtonClick); +const addPaginationListeners = (id, fn) => { + document.querySelectorAll('#' + id + ' a').forEach(el => { + el.addEventListener('click', fn); }); }; @@ -964,7 +977,7 @@ const renderTribeChanges = (e, currentPage, tribeChanges) => { limit: TRIBE_CHANGES_PER_PAGE, currentPage }); - const html = "\n
\n ").concat(paginationItems.join(''), "\n
\n \n \n \n \n \n \n \n ").concat(tribeChanges.items.map(tribeChange => { + const html = "\n
\n ").concat(paginationItems.join(''), "\n
\n
\n Date\n \n New tribe\n \n Old tribe\n
\n \n \n \n \n \n \n ").concat(tribeChanges.items.map(tribeChange => { let rowHTML = '' + ""); if (tribeChange.newTribe) { @@ -979,7 +992,7 @@ const renderTribeChanges = (e, currentPage, tribeChanges) => { rowHTML += ''; } - return rowHTML; + return rowHTML + ''; }).join(''), "\n \n
\n Date\n \n New tribe\n \n Old tribe\n
".concat((0, _formatDate.default)(tribeChange.createdAt), "-
\n "); (0, _renderPopup.default)({ e, @@ -987,7 +1000,7 @@ const renderTribeChanges = (e, currentPage, tribeChanges) => { id: 'tribeChanges', html }); - addTribeChangesListeners(); + addPaginationListeners(TRIBE_CHANGES_PAGINATION_CONTAINER_ID, handleShowTribeChangesButtonClick); }; const handleShowTribeChangesButtonClick = async e => { @@ -1011,12 +1024,6 @@ const handleShowTribeChangesButtonClick = async e => { } }; -const addPlayerHistoryListeners = () => { - document.querySelectorAll('#' + PLAYER_HISTORY_PAGINATION_CONTAINER_ID + ' a').forEach(el => { - el.addEventListener('click', handleShowPlayerHistoryClick); - }); -}; - const addMathSymbol = v => { return v > 0 ? '+' + v : v; }; @@ -1027,7 +1034,7 @@ const renderPlayerHistory = (e, currentPage, playerHistory, playerDailyStats) => limit: PLAYER_HISTORY_PER_PAGE, currentPage }); - const html = "\n
\n ").concat(paginationItems.join(''), "\n
\n \n \n \n \n \n \n \n \n \n \n \n \n ").concat(playerHistory.items.map(playerHistory => { + const html = "\n
\n ").concat(paginationItems.join(''), "\n
\n
\n Date\n \n Tribe\n \n Points\n \n Villages\n \n OD\n \n ODA\n \n ODD\n \n ODS\n
\n \n \n \n \n \n \n \n \n \n \n \n ").concat(playerHistory.items.map(playerHistory => { const subtracted = (0, _subDays.default)(new Date(playerHistory.createDate), 1).toISOString().split('.')[0] + 'Z'; const stats = playerDailyStats.items.find(stats => { return stats.createDate === subtracted; @@ -1053,7 +1060,7 @@ const renderPlayerHistory = (e, currentPage, playerHistory, playerDailyStats) => id: 'playerHistory', html }); - addPlayerHistoryListeners(); + addPaginationListeners(PLAYER_HISTORY_PAGINATION_CONTAINER_ID, handleShowPlayerHistoryClick); }; const handleShowPlayerHistoryClick = async e => { @@ -1088,6 +1095,67 @@ const handleShowPlayerHistoryClick = async e => { } }; +const renderPlayerEnnoblements = (e, currentPage, ennoblements) => { + const paginationItems = (0, _pagination.generatePaginationItems)({ + total: ennoblements.total, + limit: ENNOBLEMENTS_PER_PAGE, + currentPage + }); + + const getPlayerTd = (player, tribe) => { + if (player) { + return ""); + } + + return ''; + }; + + const html = "\n
\n ").concat(paginationItems.join(''), "\n
\n
\n Date\n \n Tribe\n \n Points\n \n Villages\n \n OD\n \n ODA\n \n ODD\n \n ODS\n
").concat(player.name, " (").concat(tribe ? "").concat(tribe.tag, "") : '-', ")-
\n \n \n \n \n \n \n \n ").concat(ennoblements.items.map(ennoblement => { + let rowHTML = '' + ""); + + if (ennoblement.village) { + rowHTML += ""); + } else { + rowHTML += ''; + } + + rowHTML += getPlayerTd(ennoblement.newOwner, ennoblement.newOwnerTribe); + rowHTML += getPlayerTd(ennoblement.oldOwner, ennoblement.oldOwnerTribe); + return rowHTML + ''; + }).join(''), "\n \n
\n Date\n \n Village\n \n New Owner\n \n Old Owner\n
".concat((0, _formatDate.default)(ennoblement.ennobledAt), "").concat((0, _tribalwars.formatVillageName)(ennoblement.village.name, ennoblement.village.x, ennoblement.village.y), "-
\n "); + (0, _renderPopup.default)({ + e, + title: "Ennoblements", + id: 'ennoblements', + html + }); + addPaginationListeners(ENNOBLEMENTS_PAGINATION_CONTAINER_ID, handleShowPlayerEnnoblementsClick); +}; + +const handleShowPlayerEnnoblementsClick = async e => { + e.preventDefault(); + const page = (0, _pagination.getPage)(e.target); + + if (!isNaN(page)) { + const data = await (0, _requestCreator.default)({ + query: ENNOBLEMENTS_QUERY, + variables: { + filter: { + or: { + oldOwnerID: [PLAYER_ID], + newOwnerID: [PLAYER_ID] + }, + offset: ENNOBLEMENTS_PER_PAGE * (page - 1), + limit: ENNOBLEMENTS_PER_PAGE, + sort: 'ennobledAt DESC' + }, + server: SERVER + } + }); + renderPlayerEnnoblements(e, page, data.ennoblements); + } +}; + const handleExportPlayerVillagesButtonClick = e => { e.preventDefault(); Dialog.show('Exported villages', "")); @@ -1115,6 +1183,12 @@ const renderActions = () => { showPlayerHistory.innerHTML = 'Show player history'; showPlayerHistory.addEventListener('click', handleShowPlayerHistoryClick); actionsContainer.appendChild(wrapAction(showPlayerHistory)); + const showEnnoblements = document.createElement('a'); + showEnnoblements.href = '#'; + (0, _pagination.setPage)(showEnnoblements, '1'); + showEnnoblements.innerHTML = 'Show player ennoblements'; + showEnnoblements.addEventListener('click', handleShowPlayerEnnoblementsClick); + actionsContainer.appendChild(wrapAction(showEnnoblements)); const exportPlayerVillages = document.createElement('a'); exportPlayerVillages.href = '#'; exportPlayerVillages.innerHTML = "Export player's villages"; diff --git a/dist/latestEnnoblements.js b/dist/latestEnnoblements.js index 608bc83..6548462 100644 --- a/dist/latestEnnoblements.js +++ b/dist/latestEnnoblements.js @@ -315,7 +315,7 @@ exports.default = InADayParser; Object.defineProperty(exports, "__esModule", { value: true }); -exports.loadInADayData = exports.formatVillageURL = exports.formatPlayerURL = exports.formatTribeURL = void 0; +exports.loadInADayData = exports.formatVillageName = exports.formatVillageURL = exports.formatPlayerURL = exports.formatTribeURL = void 0; var _InADayParser = _interopRequireDefault(require("../libs/InADayParser")); @@ -352,6 +352,16 @@ const formatVillageURL = id => { exports.formatVillageURL = formatVillageURL; +const formatVillageName = function formatVillageName() { + let n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + let x = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500; + let y = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500; + const continent = 'K' + String(y)[0] + String(x)[0]; + return "".concat(n, " (").concat(x, "|").concat(y, ") ").concat(continent); +}; + +exports.formatVillageName = formatVillageName; + const loadInADayData = async function loadInADayData(type) { let _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, { @@ -445,7 +455,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope // @namespace https://github.com/tribalwarshelp/scripts // @updateURL https://raw.githubusercontent.com/tribalwarshelp/scripts/master/dist/latestEnnoblements.js // @downloadURL https://raw.githubusercontent.com/tribalwarshelp/scripts/master/dist/latestEnnoblements.js -// @version 0.51 +// @version 0.52 // @description Show the latest ennoblements // @author Kichiyaki http://dawid-wysokinski.pl/ | Icon author *GD* // @match *://*/game.php* @@ -559,8 +569,7 @@ const formatPlayerHTML = player => { }; const formatVillageHTML = village => { - const continent = 'K' + String(village.y)[0] + String(village.x)[0]; - return "").concat(village.name, " (").concat(village.x, "|").concat(village.y, ") ").concat(continent, ""); + return "").concat((0, _tribalwars.formatVillageName)(village.name, village.x, village.y), ""); }; const formatEnnoblementRows = ennoblements => { diff --git a/src/extendedPlayerProfile.js b/src/extendedPlayerProfile.js index ece971b..4edb9fe 100644 --- a/src/extendedPlayerProfile.js +++ b/src/extendedPlayerProfile.js @@ -6,7 +6,13 @@ import getCurrentServer from './utils/getCurrentServer'; import formatDate from './utils/formatDate'; import renderPopup from './utils/renderPopup'; import { formatPlayerURL } from './utils/twstats'; -import { formatTribeURL, loadInADayData } from './utils/tribalwars'; +import { + formatTribeURL, + formatPlayerURL as formatPlayerURLTribalWars, + formatVillageName, + formatVillageURL, + loadInADayData, +} from './utils/tribalwars'; import { setItem, getItem } from './utils/localStorage'; // ==UserScript== @@ -14,7 +20,7 @@ import { setItem, getItem } from './utils/localStorage'; // @namespace https://github.com/tribalwarshelp/scripts // @updateURL https://raw.githubusercontent.com/tribalwarshelp/scripts/master/dist/extendedPlayerProfile.js // @downloadURL https://raw.githubusercontent.com/tribalwarshelp/scripts/master/dist/extendedPlayerProfile.js -// @version 0.61 +// @version 0.7 // @description Extended Player Profile // @author Kichiyaki http://dawid-wysokinski.pl/ // @match *://*/game.php*&screen=info_player* @@ -128,6 +134,40 @@ query playerHistoryAndPlayerDailyStats($server: String!, `; const PLAYER_HISTORY_PAGINATION_CONTAINER_ID = 'playerHistoryPagination'; const PLAYER_HISTORY_PER_PAGE = 15; +const ENNOBLEMENTS_QUERY = ` + query ennoblements($server: String!, $filter: EnnoblementFilter!) { + ennoblements(server: $server, filter: $filter) { + total + items { + village { + id + name + x + y + } + oldOwner { + id + name + } + oldOwnerTribe { + id + tag + } + newOwner { + id + name + } + newOwnerTribe { + id + tag + } + ennobledAt + } + } + } +`; +const ENNOBLEMENTS_PAGINATION_CONTAINER_ID = 'ennoblementsPagination'; +const ENNOBLEMENTS_PER_PAGE = 15; const profileInfoTBody = document.querySelector('#player_info > tbody'); const actionsContainer = @@ -552,12 +592,10 @@ const render = ({ player, dailyPlayerStats }) => { } }; -const addTribeChangesListeners = () => { - document - .querySelectorAll('#' + TRIBE_CHANGES_PAGINATION_CONTAINER_ID + ' a') - .forEach((el) => { - el.addEventListener('click', handleShowTribeChangesButtonClick); - }); +const addPaginationListeners = (id, fn) => { + document.querySelectorAll('#' + id + ' a').forEach((el) => { + el.addEventListener('click', fn); + }); }; const renderTribeChanges = (e, currentPage, tribeChanges) => { @@ -570,7 +608,7 @@ const renderTribeChanges = (e, currentPage, tribeChanges) => {
${paginationItems.join('')}
- +
'; } - return rowHTML; + return rowHTML + ''; }) .join('')} @@ -615,7 +653,10 @@ const renderTribeChanges = (e, currentPage, tribeChanges) => { html, }); - addTribeChangesListeners(); + addPaginationListeners( + TRIBE_CHANGES_PAGINATION_CONTAINER_ID, + handleShowTribeChangesButtonClick + ); }; const handleShowTribeChangesButtonClick = async (e) => { @@ -638,14 +679,6 @@ const handleShowTribeChangesButtonClick = async (e) => { } }; -const addPlayerHistoryListeners = () => { - document - .querySelectorAll('#' + PLAYER_HISTORY_PAGINATION_CONTAINER_ID + ' a') - .forEach((el) => { - el.addEventListener('click', handleShowPlayerHistoryClick); - }); -}; - const addMathSymbol = (v) => { return v > 0 ? '+' + v : v; }; @@ -665,7 +698,7 @@ const renderPlayerHistory = (
${paginationItems.join('')}
-
@@ -601,7 +639,7 @@ const renderTribeChanges = (e, currentPage, tribeChanges) => { } else { rowHTML += '-
+
`; + } + return ''; + }; + const html = ` +
+ ${paginationItems.join('')} +
+
@@ -763,7 +796,10 @@ const renderPlayerHistory = ( html, }); - addPlayerHistoryListeners(); + addPaginationListeners( + PLAYER_HISTORY_PAGINATION_CONTAINER_ID, + handleShowPlayerHistoryClick + ); }; const handleShowPlayerHistoryClick = async (e) => { @@ -795,6 +831,110 @@ const handleShowPlayerHistoryClick = async (e) => { } }; +const renderPlayerEnnoblements = (e, currentPage, ennoblements) => { + const paginationItems = generatePaginationItems({ + total: ennoblements.total, + limit: ENNOBLEMENTS_PER_PAGE, + currentPage, + }); + const getPlayerTd = (player, tribe) => { + if (player) { + return `${ + player.name + } (${ + tribe ? `${tribe.tag}` : '-' + })-
+ + + + + + + + ${ennoblements.items + .map((ennoblement) => { + let rowHTML = + '' + ``; + if (ennoblement.village) { + rowHTML += ``; + } else { + rowHTML += ''; + } + + rowHTML += getPlayerTd( + ennoblement.newOwner, + ennoblement.newOwnerTribe + ); + rowHTML += getPlayerTd( + ennoblement.oldOwner, + ennoblement.oldOwnerTribe + ); + + return rowHTML + ''; + }) + .join('')} + +
+ Date + + Village + + New Owner + + Old Owner +
${formatDate(ennoblement.ennobledAt)}${formatVillageName( + ennoblement.village.name, + ennoblement.village.x, + ennoblement.village.y + )}-
+ `; + + renderPopup({ + e, + title: `Ennoblements`, + id: 'ennoblements', + html, + }); + + addPaginationListeners( + ENNOBLEMENTS_PAGINATION_CONTAINER_ID, + handleShowPlayerEnnoblementsClick + ); +}; + +const handleShowPlayerEnnoblementsClick = async (e) => { + e.preventDefault(); + const page = getPage(e.target); + if (!isNaN(page)) { + const data = await requestCreator({ + query: ENNOBLEMENTS_QUERY, + variables: { + filter: { + or: { + oldOwnerID: [PLAYER_ID], + newOwnerID: [PLAYER_ID], + }, + offset: ENNOBLEMENTS_PER_PAGE * (page - 1), + limit: ENNOBLEMENTS_PER_PAGE, + sort: 'ennobledAt DESC', + }, + server: SERVER, + }, + }); + renderPlayerEnnoblements(e, page, data.ennoblements); + } +}; + const handleExportPlayerVillagesButtonClick = (e) => { e.preventDefault(); @@ -831,6 +971,13 @@ const renderActions = () => { showPlayerHistory.addEventListener('click', handleShowPlayerHistoryClick); actionsContainer.appendChild(wrapAction(showPlayerHistory)); + const showEnnoblements = document.createElement('a'); + showEnnoblements.href = '#'; + setPage(showEnnoblements, '1'); + showEnnoblements.innerHTML = 'Show player ennoblements'; + showEnnoblements.addEventListener('click', handleShowPlayerEnnoblementsClick); + actionsContainer.appendChild(wrapAction(showEnnoblements)); + const exportPlayerVillages = document.createElement('a'); exportPlayerVillages.href = '#'; exportPlayerVillages.innerHTML = `Export player's villages`; diff --git a/src/latestEnnoblements.js b/src/latestEnnoblements.js index b334c5f..ec615b2 100644 --- a/src/latestEnnoblements.js +++ b/src/latestEnnoblements.js @@ -6,6 +6,7 @@ import { formatTribeURL, formatPlayerURL, formatVillageURL, + formatVillageName, } from './utils/tribalwars'; import { setItem, getItem } from './utils/localStorage'; @@ -14,7 +15,7 @@ import { setItem, getItem } from './utils/localStorage'; // @namespace https://github.com/tribalwarshelp/scripts // @updateURL https://raw.githubusercontent.com/tribalwarshelp/scripts/master/dist/latestEnnoblements.js // @downloadURL https://raw.githubusercontent.com/tribalwarshelp/scripts/master/dist/latestEnnoblements.js -// @version 0.51 +// @version 0.52 // @description Show the latest ennoblements // @author Kichiyaki http://dawid-wysokinski.pl/ | Icon author *GD* // @match *://*/game.php* @@ -172,10 +173,11 @@ const formatPlayerHTML = (player) => { }; const formatVillageHTML = (village) => { - const continent = 'K' + String(village.y)[0] + String(village.x)[0]; - return `${village.name} (${ - village.x - }|${village.y}) ${continent}`; + return `${formatVillageName( + village.name, + village.x, + village.y + )}`; }; const formatEnnoblementRows = (ennoblements) => { diff --git a/src/utils/tribalwars.js b/src/utils/tribalwars.js index 9f8f014..7164e35 100644 --- a/src/utils/tribalwars.js +++ b/src/utils/tribalwars.js @@ -30,6 +30,11 @@ export const formatVillageURL = (id) => { ); }; +export const formatVillageName = (n = '', x = 500, y = 500) => { + const continent = 'K' + String(y)[0] + String(x)[0]; + return `${n} (${x}|${y}) ${continent}`; +}; + export const loadInADayData = async (type, { name, ...rest } = {}) => { try { const response = await fetch(