From 2fc085c4b3f88441c4782e6f5a0633e0dd6aac4a Mon Sep 17 00:00:00 2001 From: Kichiyaki Date: Fri, 17 Jul 2020 16:13:09 +0200 Subject: [PATCH] add 'Show tribe history' action to extendedTribeProfile.js --- dist/extendedPlayerProfile.js | 126 +++++++----- dist/extendedTribeProfile.js | 328 +++++++++++++++++++++++++++++++- src/extendedPlayerProfile.js | 141 +------------- src/extendedTribeProfile.js | 81 +++++++- src/utils/renderHistoryPopup.js | 143 ++++++++++++++ src/utils/renderTodaysStats.js | 16 +- 6 files changed, 651 insertions(+), 184 deletions(-) create mode 100644 src/utils/renderHistoryPopup.js diff --git a/dist/extendedPlayerProfile.js b/dist/extendedPlayerProfile.js index 50456d5..9f16e74 100644 --- a/dist/extendedPlayerProfile.js +++ b/dist/extendedPlayerProfile.js @@ -392,8 +392,8 @@ var _default = (container, stats) => { container.prepend(todaysStats); } - const renderODS = !(0, _isNil.default)(stats.rankSup); - todaysStats.innerHTML = "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ").concat(renderODS ? "\n \n \n \n \n \n \n ") : '', "\n \n \n \n \n \n \n \n \n \n
\n Today's stat changes\n
\n Points:\n \n ").concat(Math.abs(stats.points).toLocaleString(), "\n
\n Rank:\n \n ").concat(Math.abs(stats.rank), "\n
\n Villages:\n \n ").concat(Math.abs(stats.villages).toLocaleString(), "\n
\n ODA:\n \n ").concat(Math.abs(stats.scoreAtt).toLocaleString(), "\n
\n ODA Rank:\n \n ").concat(Math.abs(stats.rankAtt), "\n
\n ODD:\n \n ").concat(Math.abs(stats.scoreDef).toLocaleString(), "\n
\n ODD Rank:\n \n ").concat(Math.abs(stats.rankDef), "\n
\n ODS:\n \n ").concat(Math.abs(stats.scoreSup).toLocaleString(), "\n
\n ODS Rank:\n \n ").concat(Math.abs(stats.rankSup), "\n
\n OD:\n \n ").concat(Math.abs(stats.scoreTotal).toLocaleString(), "\n
\n OD Rank:\n \n ").concat(Math.abs(stats.rankTotal), "\n
\n "); + const player = !(0, _isNil.default)(stats.rankSup); + todaysStats.innerHTML = "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ").concat(!player ? "\n \n \n ") : '', "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ").concat(player ? "\n \n \n \n \n \n \n ") : '', "\n \n \n \n \n \n \n \n \n \n
\n Today's stat changes\n
\n Points:\n \n ").concat(Math.abs(stats.points).toLocaleString(), "\n
\n Rank:\n \n ").concat(Math.abs(stats.rank), "\n
\n Villages:\n \n ").concat(Math.abs(stats.villages).toLocaleString(), "\n
\n Members:\n \n ").concat(Math.abs(stats.members), "\n
\n ODA:\n \n ").concat(Math.abs(stats.scoreAtt).toLocaleString(), "\n
\n ODA Rank:\n \n ").concat(Math.abs(stats.rankAtt), "\n
\n ODD:\n \n ").concat(Math.abs(stats.scoreDef).toLocaleString(), "\n
\n ODD Rank:\n \n ").concat(Math.abs(stats.rankDef), "\n
\n ODS:\n \n ").concat(Math.abs(stats.scoreSup).toLocaleString(), "\n
\n ODS Rank:\n \n ").concat(Math.abs(stats.rankSup), "\n
\n OD:\n \n ").concat(Math.abs(stats.scoreTotal).toLocaleString(), "\n
\n OD Rank:\n \n ").concat(Math.abs(stats.rankTotal), "\n
\n "); }; exports.default = _default; @@ -772,7 +772,77 @@ var _default = function _default(e, ennoblements) { }; exports.default = _default; -},{"./pagination":"fCHX","./renderPopup":"P4rL","./formatDate":"V6Mf","./tribalwars":"fHHP"}],"DMkL":[function(require,module,exports) { +},{"./pagination":"fCHX","./renderPopup":"P4rL","./formatDate":"V6Mf","./tribalwars":"fHHP"}],"gJkK":[function(require,module,exports) { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _subDays = _interopRequireDefault(require("date-fns/subDays")); + +var _renderPopup = _interopRequireDefault(require("./renderPopup")); + +var _pagination = require("./pagination"); + +var _formatDate = _interopRequireDefault(require("./formatDate")); + +var _tribalwars = require("./tribalwars"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const HISTORY_PAGINATION_CONTAINER_ID = 'historyPagination'; + +const addMathSymbol = v => { + return v > 0 ? '+' + v : v; +}; + +var _default = function _default(e, history, daily) { + let { + currentPage = 1, + limit = 0, + onPageChange = () => {}, + tribe = false + } = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + const paginationItems = (0, _pagination.generatePaginationItems)({ + total: history.total, + limit, + currentPage + }); + const html = "\n
\n ").concat(paginationItems.join(''), "\n
\n \n \n \n \n ").concat(tribe ? '' : '', "\n \n \n ").concat(tribe ? '' : '', "\n \n \n \n ").concat(tribe ? '' : '', "\n \n ").concat(history.items.map(history => { + const subtracted = (0, _subDays.default)(new Date(history.createDate), 1).toISOString().split('.')[0] + 'Z'; + const stats = daily.items.find(stats => { + return stats.createDate === subtracted; + }); + let rowHTML = '' + ""); + + if (!tribe && history.tribe) { + rowHTML += ""); + } else if (!tribe) { + rowHTML += ''; + } + + rowHTML += "\n \n \n ").concat(!tribe ? '' : "\n \n "), "\n \n \n \n ").concat(tribe ? '' : "\n \n "), "\n ") + ''; + return rowHTML; + }).join(''), "\n \n
\n Date\n Tribe\n Points\n \n Villages\n Members\n OD\n \n ODA\n \n ODD\n ODS
".concat((0, _formatDate.default)(history.createDate, { + year: 'numeric', + month: '2-digit', + day: '2-digit' + }), "").concat(history.tribe.tag, "-\n ").concat(history.points.toLocaleString(), " (").concat(history.rank, ")\n \n ").concat(history.totalVillages.toLocaleString(), "\n \n ").concat(history.totalMembers, "\n \n ").concat(history.scoreTotal.toLocaleString(), " (").concat(history.rankTotal, ")\n \n ").concat(history.scoreAtt.toLocaleString(), " (").concat(history.rankAtt, ")\n \n ").concat(history.scoreDef.toLocaleString(), " (").concat(history.rankDef, ")\n \n ").concat(history.scoreSup.toLocaleString(), " (").concat(history.rankSup, ")\n
\n "); + (0, _renderPopup.default)({ + e, + title: "History", + id: 'history', + html + }); + document.querySelectorAll('#' + HISTORY_PAGINATION_CONTAINER_ID + ' a').forEach(el => { + el.addEventListener('click', onPageChange); + }); +}; + +exports.default = _default; +},{"date-fns/subDays":"mRRL","./renderPopup":"P4rL","./pagination":"fCHX","./formatDate":"V6Mf","./tribalwars":"fHHP"}],"DMkL":[function(require,module,exports) { "use strict"; Object.defineProperty(exports, "__esModule", { @@ -837,6 +907,8 @@ var _renderPopup = _interopRequireDefault(require("./utils/renderPopup")); var _renderEnnoblements = _interopRequireDefault(require("./utils/renderEnnoblements")); +var _renderHistoryPopup = _interopRequireDefault(require("./utils/renderHistoryPopup")); + var _pagination = require("./utils/pagination"); var _getIDFromURL = _interopRequireDefault(require("./utils/getIDFromURL")); @@ -1122,45 +1194,6 @@ const handleShowTribeChangesButtonClick = async e => { } }; -const addMathSymbol = v => { - return v > 0 ? '+' + v : v; -}; - -const renderPlayerHistory = (e, currentPage, playerHistory, playerDailyStats) => { - const paginationItems = (0, _pagination.generatePaginationItems)({ - total: playerHistory.total, - 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 subtracted = (0, _subDays.default)(new Date(playerHistory.createDate), 1).toISOString().split('.')[0] + 'Z'; - const stats = playerDailyStats.items.find(stats => { - return stats.createDate === subtracted; - }); - let rowHTML = '' + ""); - - if (playerHistory.tribe) { - rowHTML += ""); - } else { - rowHTML += ''; - } - - rowHTML += "\n \n \n \n \n \n \n ") + ''; - return rowHTML; - }).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((0, _formatDate.default)(playerHistory.createDate, { - year: 'numeric', - month: '2-digit', - day: '2-digit' - }), "").concat(playerHistory.tribe.tag, "-\n ").concat(playerHistory.points.toLocaleString(), " (").concat(playerHistory.rank, ")\n \n ").concat(playerHistory.totalVillages, "\n \n ").concat(playerHistory.scoreTotal.toLocaleString(), " (").concat(playerHistory.rankTotal, ")\n \n ").concat(playerHistory.scoreAtt.toLocaleString(), " (").concat(playerHistory.rankAtt, ")\n \n ").concat(playerHistory.scoreDef.toLocaleString(), " (").concat(playerHistory.rankDef, ")\n \n ").concat(playerHistory.scoreSup.toLocaleString(), " (").concat(playerHistory.rankSup, ")\n
\n "); - (0, _renderPopup.default)({ - e, - title: "Player history", - id: 'playerHistory', - html - }); - addPaginationListeners(PLAYER_HISTORY_PAGINATION_CONTAINER_ID, handleShowPlayerHistoryClick); -}; - const handleShowPlayerHistoryClick = async e => { e.preventDefault(); const page = (0, _pagination.getPage)(e.target); @@ -1186,7 +1219,12 @@ const handleShowPlayerHistoryClick = async e => { }) } }); - renderPlayerHistory(e, page, playerHistory, dailyPlayerStats); + (0, _renderHistoryPopup.default)(e, playerHistory, dailyPlayerStats, { + currentPage: page, + limit: PLAYER_HISTORY_PER_PAGE, + onPageChange: handleShowPlayerHistoryClick, + tribe: false + }); } catch (error) { console.log('cannot load player history', error); } @@ -1279,4 +1317,4 @@ const renderActions = () => { console.log('extended player profile', error); } })(); -},{"date-fns/subDays":"mRRL","./libs/requestCreator":"Ph2E","./utils/renderTodaysStats":"dPMc","./utils/renderPopup":"P4rL","./utils/renderEnnoblements":"vhoq","./utils/pagination":"fCHX","./utils/getIDFromURL":"tQUs","./utils/getCurrentServer":"DMkL","./utils/formatDate":"V6Mf","./utils/twstats":"Syko","./utils/tribalwars":"fHHP","./utils/localStorage":"KWxH"}]},{},["yRop"], null) \ No newline at end of file +},{"date-fns/subDays":"mRRL","./libs/requestCreator":"Ph2E","./utils/renderTodaysStats":"dPMc","./utils/renderPopup":"P4rL","./utils/renderEnnoblements":"vhoq","./utils/renderHistoryPopup":"gJkK","./utils/pagination":"fCHX","./utils/getIDFromURL":"tQUs","./utils/getCurrentServer":"DMkL","./utils/formatDate":"V6Mf","./utils/twstats":"Syko","./utils/tribalwars":"fHHP","./utils/localStorage":"KWxH"}]},{},["yRop"], null) \ No newline at end of file diff --git a/dist/extendedTribeProfile.js b/dist/extendedTribeProfile.js index de2a9f0..eeec654 100644 --- a/dist/extendedTribeProfile.js +++ b/dist/extendedTribeProfile.js @@ -739,8 +739,8 @@ var _default = (container, stats) => { container.prepend(todaysStats); } - const renderODS = !(0, _isNil.default)(stats.rankSup); - todaysStats.innerHTML = "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ").concat(renderODS ? "\n \n \n \n \n \n \n ") : '', "\n \n \n \n \n \n \n \n \n \n
\n Today's stat changes\n
\n Points:\n \n ").concat(Math.abs(stats.points).toLocaleString(), "\n
\n Rank:\n \n ").concat(Math.abs(stats.rank), "\n
\n Villages:\n \n ").concat(Math.abs(stats.villages).toLocaleString(), "\n
\n ODA:\n \n ").concat(Math.abs(stats.scoreAtt).toLocaleString(), "\n
\n ODA Rank:\n \n ").concat(Math.abs(stats.rankAtt), "\n
\n ODD:\n \n ").concat(Math.abs(stats.scoreDef).toLocaleString(), "\n
\n ODD Rank:\n \n ").concat(Math.abs(stats.rankDef), "\n
\n ODS:\n \n ").concat(Math.abs(stats.scoreSup).toLocaleString(), "\n
\n ODS Rank:\n \n ").concat(Math.abs(stats.rankSup), "\n
\n OD:\n \n ").concat(Math.abs(stats.scoreTotal).toLocaleString(), "\n
\n OD Rank:\n \n ").concat(Math.abs(stats.rankTotal), "\n
\n "); + const player = !(0, _isNil.default)(stats.rankSup); + todaysStats.innerHTML = "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ").concat(!player ? "\n \n \n ") : '', "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ").concat(player ? "\n \n \n \n \n \n \n ") : '', "\n \n \n \n \n \n \n \n \n \n
\n Today's stat changes\n
\n Points:\n \n ").concat(Math.abs(stats.points).toLocaleString(), "\n
\n Rank:\n \n ").concat(Math.abs(stats.rank), "\n
\n Villages:\n \n ").concat(Math.abs(stats.villages).toLocaleString(), "\n
\n Members:\n \n ").concat(Math.abs(stats.members), "\n
\n ODA:\n \n ").concat(Math.abs(stats.scoreAtt).toLocaleString(), "\n
\n ODA Rank:\n \n ").concat(Math.abs(stats.rankAtt), "\n
\n ODD:\n \n ").concat(Math.abs(stats.scoreDef).toLocaleString(), "\n
\n ODD Rank:\n \n ").concat(Math.abs(stats.rankDef), "\n
\n ODS:\n \n ").concat(Math.abs(stats.scoreSup).toLocaleString(), "\n
\n ODS Rank:\n \n ").concat(Math.abs(stats.rankSup), "\n
\n OD:\n \n ").concat(Math.abs(stats.scoreTotal).toLocaleString(), "\n
\n OD Rank:\n \n ").concat(Math.abs(stats.rankTotal), "\n
\n "); }; exports.default = _default; @@ -1040,7 +1040,271 @@ var _default = function _default(e, ennoblements) { }; exports.default = _default; -},{"./pagination":"fCHX","./renderPopup":"P4rL","./formatDate":"V6Mf","./tribalwars":"fHHP"}],"DMkL":[function(require,module,exports) { +},{"./pagination":"fCHX","./renderPopup":"P4rL","./formatDate":"V6Mf","./tribalwars":"fHHP"}],"VYL5":[function(require,module,exports) { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = toInteger; + +function toInteger(dirtyNumber) { + if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) { + return NaN; + } + + var number = Number(dirtyNumber); + + if (isNaN(number)) { + return number; + } + + return number < 0 ? Math.ceil(number) : Math.floor(number); +} +},{}],"kK6Q":[function(require,module,exports) { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = requiredArgs; + +function requiredArgs(required, args) { + if (args.length < required) { + throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present'); + } +} +},{}],"KYJg":[function(require,module,exports) { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = toDate; + +var _index = _interopRequireDefault(require("../_lib/requiredArgs/index.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @name toDate + * @category Common Helpers + * @summary Convert the given argument to an instance of Date. + * + * @description + * Convert the given argument to an instance of Date. + * + * If the argument is an instance of Date, the function returns its clone. + * + * If the argument is a number, it is treated as a timestamp. + * + * If the argument is none of the above, the function returns Invalid Date. + * + * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`. + * + * @param {Date|Number} argument - the value to convert + * @returns {Date} the parsed date in the local time zone + * @throws {TypeError} 1 argument required + * + * @example + * // Clone the date: + * const result = toDate(new Date(2014, 1, 11, 11, 30, 30)) + * //=> Tue Feb 11 2014 11:30:30 + * + * @example + * // Convert the timestamp to date: + * const result = toDate(1392098430000) + * //=> Tue Feb 11 2014 11:30:30 + */ +function toDate(argument) { + (0, _index.default)(1, arguments); + var argStr = Object.prototype.toString.call(argument); // Clone the date + + if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') { + // Prevent the date to lose the milliseconds when passed to new Date() in IE10 + return new Date(argument.getTime()); + } else if (typeof argument === 'number' || argStr === '[object Number]') { + return new Date(argument); + } else { + if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') { + // eslint-disable-next-line no-console + console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"); // eslint-disable-next-line no-console + + console.warn(new Error().stack); + } + + return new Date(NaN); + } +} +},{"../_lib/requiredArgs/index.js":"kK6Q"}],"lQIY":[function(require,module,exports) { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = addDays; + +var _index = _interopRequireDefault(require("../_lib/toInteger/index.js")); + +var _index2 = _interopRequireDefault(require("../toDate/index.js")); + +var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @name addDays + * @category Day Helpers + * @summary Add the specified number of days to the given date. + * + * @description + * Add the specified number of days to the given date. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date to be changed + * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. + * @returns {Date} the new date with the days added + * @throws {TypeError} 2 arguments required + * + * @example + * // Add 10 days to 1 September 2014: + * var result = addDays(new Date(2014, 8, 1), 10) + * //=> Thu Sep 11 2014 00:00:00 + */ +function addDays(dirtyDate, dirtyAmount) { + (0, _index3.default)(2, arguments); + var date = (0, _index2.default)(dirtyDate); + var amount = (0, _index.default)(dirtyAmount); + + if (isNaN(amount)) { + return new Date(NaN); + } + + if (!amount) { + // If 0 days, no-op to avoid changing times in the hour before end of DST + return date; + } + + date.setDate(date.getDate() + amount); + return date; +} +},{"../_lib/toInteger/index.js":"VYL5","../toDate/index.js":"KYJg","../_lib/requiredArgs/index.js":"kK6Q"}],"mRRL":[function(require,module,exports) { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = subDays; + +var _index = _interopRequireDefault(require("../_lib/toInteger/index.js")); + +var _index2 = _interopRequireDefault(require("../addDays/index.js")); + +var _index3 = _interopRequireDefault(require("../_lib/requiredArgs/index.js")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @name subDays + * @category Day Helpers + * @summary Subtract the specified number of days from the given date. + * + * @description + * Subtract the specified number of days from the given date. + * + * ### v2.0.0 breaking changes: + * + * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes). + * + * @param {Date|Number} date - the date to be changed + * @param {Number} amount - the amount of days to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`. + * @returns {Date} the new date with the days subtracted + * @throws {TypeError} 2 arguments required + * + * @example + * // Subtract 10 days from 1 September 2014: + * var result = subDays(new Date(2014, 8, 1), 10) + * //=> Fri Aug 22 2014 00:00:00 + */ +function subDays(dirtyDate, dirtyAmount) { + (0, _index3.default)(2, arguments); + var amount = (0, _index.default)(dirtyAmount); + return (0, _index2.default)(dirtyDate, -amount); +} +},{"../_lib/toInteger/index.js":"VYL5","../addDays/index.js":"lQIY","../_lib/requiredArgs/index.js":"kK6Q"}],"gJkK":[function(require,module,exports) { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _subDays = _interopRequireDefault(require("date-fns/subDays")); + +var _renderPopup = _interopRequireDefault(require("./renderPopup")); + +var _pagination = require("./pagination"); + +var _formatDate = _interopRequireDefault(require("./formatDate")); + +var _tribalwars = require("./tribalwars"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const HISTORY_PAGINATION_CONTAINER_ID = 'historyPagination'; + +const addMathSymbol = v => { + return v > 0 ? '+' + v : v; +}; + +var _default = function _default(e, history, daily) { + let { + currentPage = 1, + limit = 0, + onPageChange = () => {}, + tribe = false + } = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + const paginationItems = (0, _pagination.generatePaginationItems)({ + total: history.total, + limit, + currentPage + }); + const html = "\n
\n ").concat(paginationItems.join(''), "\n
\n \n \n \n \n ").concat(tribe ? '' : '', "\n \n \n ").concat(tribe ? '' : '', "\n \n \n \n ").concat(tribe ? '' : '', "\n \n ").concat(history.items.map(history => { + const subtracted = (0, _subDays.default)(new Date(history.createDate), 1).toISOString().split('.')[0] + 'Z'; + const stats = daily.items.find(stats => { + return stats.createDate === subtracted; + }); + let rowHTML = '' + ""); + + if (!tribe && history.tribe) { + rowHTML += ""); + } else if (!tribe) { + rowHTML += ''; + } + + rowHTML += "\n \n \n ").concat(!tribe ? '' : "\n \n "), "\n \n \n \n ").concat(tribe ? '' : "\n \n "), "\n ") + ''; + return rowHTML; + }).join(''), "\n \n
\n Date\n Tribe\n Points\n \n Villages\n Members\n OD\n \n ODA\n \n ODD\n ODS
".concat((0, _formatDate.default)(history.createDate, { + year: 'numeric', + month: '2-digit', + day: '2-digit' + }), "").concat(history.tribe.tag, "-\n ").concat(history.points.toLocaleString(), " (").concat(history.rank, ")\n \n ").concat(history.totalVillages.toLocaleString(), "\n \n ").concat(history.totalMembers, "\n \n ").concat(history.scoreTotal.toLocaleString(), " (").concat(history.rankTotal, ")\n \n ").concat(history.scoreAtt.toLocaleString(), " (").concat(history.rankAtt, ")\n \n ").concat(history.scoreDef.toLocaleString(), " (").concat(history.rankDef, ")\n \n ").concat(history.scoreSup.toLocaleString(), " (").concat(history.rankSup, ")\n
\n "); + (0, _renderPopup.default)({ + e, + title: "History", + id: 'history', + html + }); + document.querySelectorAll('#' + HISTORY_PAGINATION_CONTAINER_ID + ' a').forEach(el => { + el.addEventListener('click', onPageChange); + }); +}; + +exports.default = _default; +},{"date-fns/subDays":"mRRL","./renderPopup":"P4rL","./pagination":"fCHX","./formatDate":"V6Mf","./tribalwars":"fHHP"}],"DMkL":[function(require,module,exports) { "use strict"; Object.defineProperty(exports, "__esModule", { @@ -1105,6 +1369,8 @@ var _renderTodaysStats = _interopRequireDefault(require("./utils/renderTodaysSta var _renderEnnoblements = _interopRequireDefault(require("./utils/renderEnnoblements")); +var _renderHistoryPopup = _interopRequireDefault(require("./utils/renderHistoryPopup")); + var _getIDFromURL = _interopRequireDefault(require("./utils/getIDFromURL")); var _getCurrentServer = _interopRequireDefault(require("./utils/getCurrentServer")); @@ -1117,6 +1383,12 @@ var _twstats = require("./utils/twstats"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + // ==UserScript== // @name Extended Tribe Profile // @namespace https://github.com/tribalwarshelp/scripts @@ -1132,9 +1404,12 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de const SERVER = (0, _getCurrentServer.default)(); const TRIBE_ID = (0, _getIDFromURL.default)(window.location.search); const LOCAL_STORAGE_KEY = 'kichiyaki_extended_tribe_profile' + TRIBE_ID; -const TRIBE_QUERY = "\n query tribe($server: String!, $id: Int!, $playerFilter: PlayerFilter!, $dailyTribeStatsFilter: DailyTribeStatsFilter!) {\n tribe(server: $server, id: $id) {\n id\n bestRank\n bestRankAt\n mostPoints\n mostPointsAt\n mostVillages\n mostVillagesAt\n createdAt\n dominance\n }\n dailyTribeStats(server: $server, filter: $dailyTribeStatsFilter) {\n items {\n rank\n rankAtt\n rankDef\n rankTotal\n points\n scoreAtt\n scoreAtt\n scoreDef\n scoreTotal\n villages\n }\n }\n players(server: $server, filter: $playerFilter) {\n items {\n id\n rankAtt\n rankDef\n rankSup\n rankTotal\n scoreAtt\n scoreAtt\n scoreDef\n scoreSup\n scoreTotal\n dailyGrowth\n }\n }\n }\n"; +const TRIBE_QUERY = "\n query tribe($server: String!, $id: Int!, $playerFilter: PlayerFilter!, $dailyTribeStatsFilter: DailyTribeStatsFilter!) {\n tribe(server: $server, id: $id) {\n id\n bestRank\n bestRankAt\n mostPoints\n mostPointsAt\n mostVillages\n mostVillagesAt\n createdAt\n dominance\n }\n dailyTribeStats(server: $server, filter: $dailyTribeStatsFilter) {\n items {\n rank\n rankAtt\n rankDef\n rankTotal\n points\n scoreAtt\n scoreAtt\n scoreDef\n scoreTotal\n villages\n members\n }\n }\n players(server: $server, filter: $playerFilter) {\n items {\n id\n rankAtt\n rankDef\n rankSup\n rankTotal\n scoreAtt\n scoreAtt\n scoreDef\n scoreSup\n scoreTotal\n dailyGrowth\n }\n }\n }\n"; 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_PER_PAGE = 15; +const TRIBE_HISTORY_AND_TRIBE_DAILY_STATS_QUERY = "\nquery tribeHistoryAndTribeDailyStats($server: String!,\n $tribeHistoryFilter: TribeHistoryFilter!,\n $dailyTribeStatsFilter: DailyTribeStatsFilter!) {\n tribeHistory(server: $server, filter: $tribeHistoryFilter) {\n total\n items {\n totalVillages\n points\n rank\n scoreAtt\n rankAtt\n scoreDef\n rankDef\n scoreTotal\n rankTotal\n createDate\n totalMembers\n }\n }\n dailyTribeStats(server: $server, filter: $dailyTribeStatsFilter) {\n items {\n points\n scoreAtt\n scoreAtt\n scoreDef\n scoreTotal\n villages\n createDate\n members\n }\n }\n}\n"; +const TRIBE_HISTORY_PAGINATION_CONTAINER_ID = 'tribeHistoryPagination'; +const TRIBE_HISTORY_PER_PAGE = 15; const profileInfoTBody = document.querySelector('#content_value > table:nth-child(3) > tbody > tr > td:nth-child(1) > table > tbody'); const actionsContainer = profileInfoTBody; const otherElementsContainer = document.querySelector('#content_value > table:nth-child(3) > tbody > tr > td:nth-child(2)'); @@ -1316,6 +1591,43 @@ const handleShowTribeEnnoblementsClick = async e => { } }; +const handleShowTribeHistoryClick = async e => { + e.preventDefault(); + const page = (0, _pagination.getPage)(e.target); + + if (!isNaN(page)) { + try { + const filter = { + tribeID: [TRIBE_ID], + offset: TRIBE_HISTORY_PER_PAGE * (page - 1), + limit: TRIBE_HISTORY_PER_PAGE, + sort: 'createDate DESC' + }; + const { + tribeHistory, + dailyTribeStats + } = await (0, _requestCreator.default)({ + query: TRIBE_HISTORY_AND_TRIBE_DAILY_STATS_QUERY, + variables: { + server: SERVER, + tribeHistoryFilter: filter, + dailyTribeStatsFilter: _objectSpread(_objectSpread({}, filter), {}, { + offset: filter.offset + 1 + }) + } + }); + (0, _renderHistoryPopup.default)(e, tribeHistory, dailyTribeStats, { + currentPage: page, + limit: TRIBE_HISTORY_PER_PAGE, + tribe: true, + onPageChange: handleShowTribeHistoryClick + }); + } catch (error) { + console.log('cannot load tribe history', error); + } + } +}; + const wrapAction = action => { const actionWrapperTd = document.createElement('td'); actionWrapperTd.colSpan = '2'; @@ -1332,6 +1644,12 @@ const renderActions = () => { showEnnoblements.innerHTML = 'Show tribe ennoblements'; showEnnoblements.addEventListener('click', handleShowTribeEnnoblementsClick); actionsContainer.appendChild(wrapAction(showEnnoblements)); + const showHistory = document.createElement('a'); + showHistory.href = '#'; + (0, _pagination.setPage)(showHistory, '1'); + showHistory.innerHTML = 'Show tribe history'; + showHistory.addEventListener('click', handleShowTribeHistoryClick); + actionsContainer.appendChild(wrapAction(showHistory)); }; (async function () { @@ -1353,4 +1671,4 @@ const renderActions = () => { console.log('extended tribe profile', error); } })(); -},{"validator/lib/isURL":"XMVV","./libs/requestCreator":"Ph2E","./utils/pagination":"fCHX","./utils/renderTodaysStats":"dPMc","./utils/renderEnnoblements":"vhoq","./utils/getIDFromURL":"tQUs","./utils/getCurrentServer":"DMkL","./utils/localStorage":"KWxH","./utils/formatDate":"V6Mf","./utils/twstats":"Syko"}]},{},["r4nF"], null) \ No newline at end of file +},{"validator/lib/isURL":"XMVV","./libs/requestCreator":"Ph2E","./utils/pagination":"fCHX","./utils/renderTodaysStats":"dPMc","./utils/renderEnnoblements":"vhoq","./utils/renderHistoryPopup":"gJkK","./utils/getIDFromURL":"tQUs","./utils/getCurrentServer":"DMkL","./utils/localStorage":"KWxH","./utils/formatDate":"V6Mf","./utils/twstats":"Syko"}]},{},["r4nF"], null) \ No newline at end of file diff --git a/src/extendedPlayerProfile.js b/src/extendedPlayerProfile.js index 1b93e48..55ca710 100644 --- a/src/extendedPlayerProfile.js +++ b/src/extendedPlayerProfile.js @@ -3,6 +3,7 @@ import requestCreator from './libs/requestCreator'; import renderTodaysStats from './utils/renderTodaysStats'; import renderPopup from './utils/renderPopup'; import renderEnnoblements from './utils/renderEnnoblements'; +import renderHistoryPopup from './utils/renderHistoryPopup'; import { generatePaginationItems, getContainerStyles, @@ -13,13 +14,7 @@ import getIDFromURL from './utils/getIDFromURL'; import getCurrentServer from './utils/getCurrentServer'; import formatDate from './utils/formatDate'; import { formatPlayerURL } from './utils/twstats'; -import { - formatTribeURL, - formatPlayerURL as formatPlayerURLTribalWars, - formatVillageName, - formatVillageURL, - loadInADayData, -} from './utils/tribalwars'; +import { formatTribeURL, loadInADayData } from './utils/tribalwars'; import { setItem, getItem } from './utils/localStorage'; // ==UserScript== @@ -27,7 +22,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 1 +// @version 1.0.1 // @description Extended Player Profile // @author Kichiyaki http://dawid-wysokinski.pl/ // @match *://*/game.php*&screen=info_player* @@ -566,129 +561,6 @@ const handleShowTribeChangesButtonClick = async (e) => { } }; -const addMathSymbol = (v) => { - return v > 0 ? '+' + v : v; -}; - -const renderPlayerHistory = ( - e, - currentPage, - playerHistory, - playerDailyStats -) => { - const paginationItems = generatePaginationItems({ - total: playerHistory.total, - limit: PLAYER_HISTORY_PER_PAGE, - currentPage, - }); - const html = ` -
- ${paginationItems.join('')} -
- - - - - - - - - - - - - ${playerHistory.items - .map((playerHistory) => { - const subtracted = - subDays(new Date(playerHistory.createDate), 1) - .toISOString() - .split('.')[0] + 'Z'; - const stats = playerDailyStats.items.find((stats) => { - return stats.createDate === subtracted; - }); - - let rowHTML = - '' + - ``; - if (playerHistory.tribe) { - rowHTML += ``; - } else { - rowHTML += ''; - } - rowHTML += - ` - - - - - - - ` + ''; - - return rowHTML; - }) - .join('')} - -
- Date - - Tribe - - Points - - Villages - - OD - - ODA - - ODD - - ODS -
${formatDate(playerHistory.createDate, { - year: 'numeric', - month: '2-digit', - day: '2-digit', - })}${playerHistory.tribe.tag}- - ${playerHistory.points.toLocaleString()} (${ - playerHistory.rank - }) - - ${playerHistory.totalVillages} - - ${playerHistory.scoreTotal.toLocaleString()} (${ - playerHistory.rankTotal - }) - - ${playerHistory.scoreAtt.toLocaleString()} (${ - playerHistory.rankAtt - }) - - ${playerHistory.scoreDef.toLocaleString()} (${ - playerHistory.rankDef - }) - - ${playerHistory.scoreSup.toLocaleString()} (${ - playerHistory.rankSup - }) -
- `; - - renderPopup({ - e, - title: `Player history`, - id: 'playerHistory', - html, - }); - - addPaginationListeners( - PLAYER_HISTORY_PAGINATION_CONTAINER_ID, - handleShowPlayerHistoryClick - ); -}; - const handleShowPlayerHistoryClick = async (e) => { e.preventDefault(); const page = getPage(e.target); @@ -711,7 +583,12 @@ const handleShowPlayerHistoryClick = async (e) => { }, }, }); - renderPlayerHistory(e, page, playerHistory, dailyPlayerStats); + renderHistoryPopup(e, playerHistory, dailyPlayerStats, { + currentPage: page, + limit: PLAYER_HISTORY_PER_PAGE, + onPageChange: handleShowPlayerHistoryClick, + tribe: false, + }); } catch (error) { console.log('cannot load player history', error); } diff --git a/src/extendedTribeProfile.js b/src/extendedTribeProfile.js index c79af79..8311dd0 100644 --- a/src/extendedTribeProfile.js +++ b/src/extendedTribeProfile.js @@ -3,6 +3,7 @@ import requestCreator from './libs/requestCreator'; import { setPage, getPage } from './utils/pagination'; import renderTodaysStats from './utils/renderTodaysStats'; import renderEnnoblements from './utils/renderEnnoblements'; +import renderHistoryPopup from './utils/renderHistoryPopup'; import getIDFromURL from './utils/getIDFromURL'; import getCurrentServer from './utils/getCurrentServer'; import { setItem, getItem } from './utils/localStorage'; @@ -14,7 +15,7 @@ import { formatPlayerURL } from './utils/twstats'; // @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.4 +// @version 0.6 // @description Extended Tribe Profile // @author Kichiyaki http://dawid-wysokinski.pl/ // @match *://*/game.php*&screen=info_ally* @@ -50,6 +51,7 @@ const TRIBE_QUERY = ` scoreDef scoreTotal villages + members } } players(server: $server, filter: $playerFilter) { @@ -102,6 +104,42 @@ const ENNOBLEMENTS_QUERY = ` } `; const ENNOBLEMENTS_PER_PAGE = 15; +const TRIBE_HISTORY_AND_TRIBE_DAILY_STATS_QUERY = ` +query tribeHistoryAndTribeDailyStats($server: String!, + $tribeHistoryFilter: TribeHistoryFilter!, + $dailyTribeStatsFilter: DailyTribeStatsFilter!) { + tribeHistory(server: $server, filter: $tribeHistoryFilter) { + total + items { + totalVillages + points + rank + scoreAtt + rankAtt + scoreDef + rankDef + scoreTotal + rankTotal + createDate + totalMembers + } + } + dailyTribeStats(server: $server, filter: $dailyTribeStatsFilter) { + items { + points + scoreAtt + scoreAtt + scoreDef + scoreTotal + villages + createDate + members + } + } +} +`; +const TRIBE_HISTORY_PAGINATION_CONTAINER_ID = 'tribeHistoryPagination'; +const TRIBE_HISTORY_PER_PAGE = 15; const profileInfoTBody = document.querySelector( '#content_value > table:nth-child(3) > tbody > tr > td:nth-child(1) > table > tbody' ); @@ -285,6 +323,40 @@ const handleShowTribeEnnoblementsClick = async (e) => { } }; +const handleShowTribeHistoryClick = async (e) => { + e.preventDefault(); + const page = getPage(e.target); + if (!isNaN(page)) { + try { + const filter = { + tribeID: [TRIBE_ID], + offset: TRIBE_HISTORY_PER_PAGE * (page - 1), + limit: TRIBE_HISTORY_PER_PAGE, + sort: 'createDate DESC', + }; + const { tribeHistory, dailyTribeStats } = await requestCreator({ + query: TRIBE_HISTORY_AND_TRIBE_DAILY_STATS_QUERY, + variables: { + server: SERVER, + tribeHistoryFilter: filter, + dailyTribeStatsFilter: { + ...filter, + offset: filter.offset + 1, + }, + }, + }); + renderHistoryPopup(e, tribeHistory, dailyTribeStats, { + currentPage: page, + limit: TRIBE_HISTORY_PER_PAGE, + tribe: true, + onPageChange: handleShowTribeHistoryClick, + }); + } catch (error) { + console.log('cannot load tribe history', error); + } + } +}; + const wrapAction = (action) => { const actionWrapperTd = document.createElement('td'); actionWrapperTd.colSpan = '2'; @@ -301,6 +373,13 @@ const renderActions = () => { showEnnoblements.innerHTML = 'Show tribe ennoblements'; showEnnoblements.addEventListener('click', handleShowTribeEnnoblementsClick); actionsContainer.appendChild(wrapAction(showEnnoblements)); + + const showHistory = document.createElement('a'); + showHistory.href = '#'; + setPage(showHistory, '1'); + showHistory.innerHTML = 'Show tribe history'; + showHistory.addEventListener('click', handleShowTribeHistoryClick); + actionsContainer.appendChild(wrapAction(showHistory)); }; (async function () { diff --git a/src/utils/renderHistoryPopup.js b/src/utils/renderHistoryPopup.js new file mode 100644 index 0000000..dc9c073 --- /dev/null +++ b/src/utils/renderHistoryPopup.js @@ -0,0 +1,143 @@ +import subDays from 'date-fns/subDays'; +import renderPopup from './renderPopup'; +import { generatePaginationItems, getContainerStyles } from './pagination'; +import formatDate from './formatDate'; +import { formatTribeURL } from './tribalwars'; + +const HISTORY_PAGINATION_CONTAINER_ID = 'historyPagination'; + +const addMathSymbol = (v) => { + return v > 0 ? '+' + v : v; +}; + +export default ( + e, + history, + daily, + { currentPage = 1, limit = 0, onPageChange = () => {}, tribe = false } = {} +) => { + const paginationItems = generatePaginationItems({ + total: history.total, + limit, + currentPage, + }); + const html = ` +
+ ${paginationItems.join('')} +
+ + + + + ${tribe ? '' : ''} + + + ${tribe ? '' : ''} + + + + ${tribe ? '' : ''} + + ${history.items + .map((history) => { + const subtracted = + subDays(new Date(history.createDate), 1) + .toISOString() + .split('.')[0] + 'Z'; + const stats = daily.items.find((stats) => { + return stats.createDate === subtracted; + }); + + let rowHTML = + '' + + ``; + if (!tribe && history.tribe) { + rowHTML += ``; + } else if (!tribe) { + rowHTML += ''; + } + rowHTML += + ` + + + ${ + !tribe + ? '' + : ` + + ` + } + + + + ${ + tribe + ? '' + : ` + + ` + } + ` + ''; + + return rowHTML; + }) + .join('')} + +
+ Date + Tribe + Points + + Villages + Members + OD + + ODA + + ODD + ODS
${formatDate(history.createDate, { + year: 'numeric', + month: '2-digit', + day: '2-digit', + })}${ + history.tribe.tag + }- + ${history.points.toLocaleString()} (${ + history.rank + }) + + ${history.totalVillages.toLocaleString()} + + ${history.totalMembers} + + ${history.scoreTotal.toLocaleString()} (${ + history.rankTotal + }) + + ${history.scoreAtt.toLocaleString()} (${ + history.rankAtt + }) + + ${history.scoreDef.toLocaleString()} (${ + history.rankDef + }) + + ${history.scoreSup.toLocaleString()} (${ + history.rankSup + }) +
+ `; + + renderPopup({ + e, + title: `History`, + id: 'history', + html, + }); + + document + .querySelectorAll('#' + HISTORY_PAGINATION_CONTAINER_ID + ' a') + .forEach((el) => { + el.addEventListener('click', onPageChange); + }); +}; diff --git a/src/utils/renderTodaysStats.js b/src/utils/renderTodaysStats.js index d3ecdd4..1c79a27 100644 --- a/src/utils/renderTodaysStats.js +++ b/src/utils/renderTodaysStats.js @@ -21,7 +21,7 @@ export default (container, stats) => { container.prepend(todaysStats); } - const renderODS = !isNil(stats.rankSup); + const player = !isNil(stats.rankSup); todaysStats.innerHTML = ` @@ -54,6 +54,18 @@ export default (container, stats) => { ${Math.abs(stats.villages).toLocaleString()} + ${ + !player + ? ` + + + ` + : '' + } ${ - renderODS + player ? `
+ Members: + + ${Math.abs(stats.members)} +
ODA: @@ -87,7 +99,7 @@ export default (container, stats) => {
ODS: