add 'Show tribe history' action to extendedTribeProfile.js
This commit is contained in:
parent
96f6c5bc22
commit
2fc085c4b3
|
@ -392,8 +392,8 @@ var _default = (container, stats) => {
|
|||
container.prepend(todaysStats);
|
||||
}
|
||||
|
||||
const renderODS = !(0, _isNil.default)(stats.rankSup);
|
||||
todaysStats.innerHTML = "\n <table width=\"100%\" class=\"vis\">\n <tbody>\n <tr>\n <th colspan=\"2\">\n Today's stat changes\n </th>\n </tr>\n <tr>\n <td>\n Points:\n </td>\n <td style=\"".concat(getTodaysStatsTdStyle(stats.points), "\">\n ").concat(Math.abs(stats.points).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rank), "\">\n ").concat(Math.abs(stats.rank), "\n </td>\n </tr>\n <tr>\n <td>\n Villages:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.villages), "\">\n ").concat(Math.abs(stats.villages).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n ODA:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.scoreAtt), "\">\n ").concat(Math.abs(stats.scoreAtt).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n ODA Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankAtt), "\">\n ").concat(Math.abs(stats.rankAtt), "\n </td>\n </tr>\n <tr>\n <td>\n ODD:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.scoreDef), "\">\n ").concat(Math.abs(stats.scoreDef).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n ODD Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankDef), "\">\n ").concat(Math.abs(stats.rankDef), "\n </td>\n </tr>\n ").concat(renderODS ? "<tr>\n <td>\n ODS:\n </td>\n <td style=\"".concat(getTodaysStatsTdStyle(stats.scoreSup), "\">\n ").concat(Math.abs(stats.scoreSup).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n ODS Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankSup), "\">\n ").concat(Math.abs(stats.rankSup), "\n </td>\n </tr>") : '', "\n <tr>\n <td>\n OD:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.scoreTotal), "\">\n ").concat(Math.abs(stats.scoreTotal).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n OD Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankTotal), "\">\n ").concat(Math.abs(stats.rankTotal), "\n </td>\n </tr>\n </tbody>\n </table>\n ");
|
||||
const player = !(0, _isNil.default)(stats.rankSup);
|
||||
todaysStats.innerHTML = "\n <table width=\"100%\" class=\"vis\">\n <tbody>\n <tr>\n <th colspan=\"2\">\n Today's stat changes\n </th>\n </tr>\n <tr>\n <td>\n Points:\n </td>\n <td style=\"".concat(getTodaysStatsTdStyle(stats.points), "\">\n ").concat(Math.abs(stats.points).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rank), "\">\n ").concat(Math.abs(stats.rank), "\n </td>\n </tr>\n <tr>\n <td>\n Villages:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.villages), "\">\n ").concat(Math.abs(stats.villages).toLocaleString(), "\n </td>\n </tr>\n ").concat(!player ? "<tr>\n <td>\n Members:\n </td>\n <td style=\"".concat(getTodaysStatsTdStyle(stats.members), "\">\n ").concat(Math.abs(stats.members), "\n </td>\n </tr>") : '', "\n <tr>\n <td>\n ODA:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.scoreAtt), "\">\n ").concat(Math.abs(stats.scoreAtt).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n ODA Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankAtt), "\">\n ").concat(Math.abs(stats.rankAtt), "\n </td>\n </tr>\n <tr>\n <td>\n ODD:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.scoreDef), "\">\n ").concat(Math.abs(stats.scoreDef).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n ODD Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankDef), "\">\n ").concat(Math.abs(stats.rankDef), "\n </td>\n </tr>\n ").concat(player ? "<tr>\n <td>\n ODS:\n </td>\n <td style=\"".concat(getTodaysStatsTdStyle(stats.scoreSup), "\">\n ").concat(Math.abs(stats.scoreSup).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n ODS Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankSup), "\">\n ").concat(Math.abs(stats.rankSup), "\n </td>\n </tr>") : '', "\n <tr>\n <td>\n OD:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.scoreTotal), "\">\n ").concat(Math.abs(stats.scoreTotal).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n OD Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankTotal), "\">\n ").concat(Math.abs(stats.rankTotal), "\n </td>\n </tr>\n </tbody>\n </table>\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 <div style=\"".concat((0, _pagination.getContainerStyles)(), "\" id=\"").concat(HISTORY_PAGINATION_CONTAINER_ID, "\">\n ").concat(paginationItems.join(''), "\n </div>\n <table class=\"vis\" style=\"border-collapse: separate; border-spacing: 2px; width: 100%;\">\n <tbody>\n <tr>\n <th>\n Date\n </th>\n ").concat(tribe ? '' : '<th>Tribe</th>', "\n <th>\n Points\n </th>\n <th>\n Villages\n </th>\n ").concat(tribe ? '<th>Members</th>' : '', "\n <th>\n OD\n </th>\n <th>\n ODA\n </th>\n <th>\n ODD\n </th>\n ").concat(tribe ? '' : '<th>ODS</th>', "\n </tr>\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 = '<tr>' + "<td>".concat((0, _formatDate.default)(history.createDate, {
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit'
|
||||
}), "</td>");
|
||||
|
||||
if (!tribe && history.tribe) {
|
||||
rowHTML += "<td><a href=\"".concat((0, _tribalwars.formatTribeURL)(history.tribe.id), "\">").concat(history.tribe.tag, "</a></td>");
|
||||
} else if (!tribe) {
|
||||
rowHTML += '<td>-</td>';
|
||||
}
|
||||
|
||||
rowHTML += "\n <td title=\"".concat(stats ? addMathSymbol(stats.points) : '', "\">\n ").concat(history.points.toLocaleString(), " (<strong>").concat(history.rank, "</strong>)\n </td>\n <td title=\"").concat(stats ? addMathSymbol(stats.villages) : '', "\">\n ").concat(history.totalVillages.toLocaleString(), "\n </td>\n ").concat(!tribe ? '' : "\n <td title=\"".concat(stats ? addMathSymbol(stats.members) : '', "\">\n ").concat(history.totalMembers, "\n </td>\n "), "\n <td title=\"").concat(stats ? addMathSymbol(stats.scoreTotal) : '', "\">\n ").concat(history.scoreTotal.toLocaleString(), " (<strong>").concat(history.rankTotal, "</strong>)\n </td>\n <td title=\"").concat(stats ? addMathSymbol(stats.scoreAtt) : '', "\">\n ").concat(history.scoreAtt.toLocaleString(), " (<strong>").concat(history.rankAtt, "</strong>)\n </td>\n <td title=\"").concat(stats ? addMathSymbol(stats.scoreDef) : '', "\">\n ").concat(history.scoreDef.toLocaleString(), " (<strong>").concat(history.rankDef, "</strong>)\n </td>\n ").concat(tribe ? '' : "\n <td title=\"".concat(stats ? addMathSymbol(stats.scoreSup) : '', "\">\n ").concat(history.scoreSup.toLocaleString(), " (<strong>").concat(history.rankSup, "</strong>)\n </td>\n "), "\n ") + '</tr>';
|
||||
return rowHTML;
|
||||
}).join(''), "\n </tbody>\n </table>\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 <div style=\"".concat((0, _pagination.getContainerStyles)(), "\" id=\"").concat(PLAYER_HISTORY_PAGINATION_CONTAINER_ID, "\">\n ").concat(paginationItems.join(''), "\n </div>\n <table class=\"vis\" style=\"border-collapse: separate; border-spacing: 2px; width: 100%;\">\n <tbody>\n <tr>\n <th>\n Date\n </th>\n <th>\n Tribe\n </th>\n <th>\n Points\n </th>\n <th>\n Villages\n </th>\n <th>\n OD\n </th>\n <th>\n ODA\n </th>\n <th>\n ODD\n </th>\n <th>\n ODS\n </th>\n </tr>\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 = '<tr>' + "<td>".concat((0, _formatDate.default)(playerHistory.createDate, {
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit'
|
||||
}), "</td>");
|
||||
|
||||
if (playerHistory.tribe) {
|
||||
rowHTML += "<td><a href=\"".concat((0, _tribalwars.formatTribeURL)(playerHistory.tribe.id), "\">").concat(playerHistory.tribe.tag, "</a></td>");
|
||||
} else {
|
||||
rowHTML += '<td>-</td>';
|
||||
}
|
||||
|
||||
rowHTML += "\n <td title=\"".concat(stats ? addMathSymbol(stats.points) : '', "\">\n ").concat(playerHistory.points.toLocaleString(), " (<strong>").concat(playerHistory.rank, "</strong>)\n </td>\n <td title=\"").concat(stats ? addMathSymbol(stats.villages) : '', "\">\n ").concat(playerHistory.totalVillages, "\n </td>\n <td title=\"").concat(stats ? addMathSymbol(stats.scoreTotal) : '', "\">\n ").concat(playerHistory.scoreTotal.toLocaleString(), " (<strong>").concat(playerHistory.rankTotal, "</strong>)\n </td>\n <td title=\"").concat(stats ? addMathSymbol(stats.scoreAtt) : '', "\">\n ").concat(playerHistory.scoreAtt.toLocaleString(), " (<strong>").concat(playerHistory.rankAtt, "</strong>)\n </td>\n <td title=\"").concat(stats ? addMathSymbol(stats.scoreDef) : '', "\">\n ").concat(playerHistory.scoreDef.toLocaleString(), " (<strong>").concat(playerHistory.rankDef, "</strong>)\n </td>\n <td title=\"").concat(stats ? addMathSymbol(stats.scoreSup) : '', "\">\n ").concat(playerHistory.scoreSup.toLocaleString(), " (<strong>").concat(playerHistory.rankSup, "</strong>)\n </td>\n ") + '</tr>';
|
||||
return rowHTML;
|
||||
}).join(''), "\n </tbody>\n </table>\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)
|
||||
},{"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)
|
|
@ -739,8 +739,8 @@ var _default = (container, stats) => {
|
|||
container.prepend(todaysStats);
|
||||
}
|
||||
|
||||
const renderODS = !(0, _isNil.default)(stats.rankSup);
|
||||
todaysStats.innerHTML = "\n <table width=\"100%\" class=\"vis\">\n <tbody>\n <tr>\n <th colspan=\"2\">\n Today's stat changes\n </th>\n </tr>\n <tr>\n <td>\n Points:\n </td>\n <td style=\"".concat(getTodaysStatsTdStyle(stats.points), "\">\n ").concat(Math.abs(stats.points).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rank), "\">\n ").concat(Math.abs(stats.rank), "\n </td>\n </tr>\n <tr>\n <td>\n Villages:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.villages), "\">\n ").concat(Math.abs(stats.villages).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n ODA:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.scoreAtt), "\">\n ").concat(Math.abs(stats.scoreAtt).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n ODA Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankAtt), "\">\n ").concat(Math.abs(stats.rankAtt), "\n </td>\n </tr>\n <tr>\n <td>\n ODD:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.scoreDef), "\">\n ").concat(Math.abs(stats.scoreDef).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n ODD Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankDef), "\">\n ").concat(Math.abs(stats.rankDef), "\n </td>\n </tr>\n ").concat(renderODS ? "<tr>\n <td>\n ODS:\n </td>\n <td style=\"".concat(getTodaysStatsTdStyle(stats.scoreSup), "\">\n ").concat(Math.abs(stats.scoreSup).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n ODS Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankSup), "\">\n ").concat(Math.abs(stats.rankSup), "\n </td>\n </tr>") : '', "\n <tr>\n <td>\n OD:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.scoreTotal), "\">\n ").concat(Math.abs(stats.scoreTotal).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n OD Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankTotal), "\">\n ").concat(Math.abs(stats.rankTotal), "\n </td>\n </tr>\n </tbody>\n </table>\n ");
|
||||
const player = !(0, _isNil.default)(stats.rankSup);
|
||||
todaysStats.innerHTML = "\n <table width=\"100%\" class=\"vis\">\n <tbody>\n <tr>\n <th colspan=\"2\">\n Today's stat changes\n </th>\n </tr>\n <tr>\n <td>\n Points:\n </td>\n <td style=\"".concat(getTodaysStatsTdStyle(stats.points), "\">\n ").concat(Math.abs(stats.points).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rank), "\">\n ").concat(Math.abs(stats.rank), "\n </td>\n </tr>\n <tr>\n <td>\n Villages:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.villages), "\">\n ").concat(Math.abs(stats.villages).toLocaleString(), "\n </td>\n </tr>\n ").concat(!player ? "<tr>\n <td>\n Members:\n </td>\n <td style=\"".concat(getTodaysStatsTdStyle(stats.members), "\">\n ").concat(Math.abs(stats.members), "\n </td>\n </tr>") : '', "\n <tr>\n <td>\n ODA:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.scoreAtt), "\">\n ").concat(Math.abs(stats.scoreAtt).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n ODA Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankAtt), "\">\n ").concat(Math.abs(stats.rankAtt), "\n </td>\n </tr>\n <tr>\n <td>\n ODD:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.scoreDef), "\">\n ").concat(Math.abs(stats.scoreDef).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n ODD Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankDef), "\">\n ").concat(Math.abs(stats.rankDef), "\n </td>\n </tr>\n ").concat(player ? "<tr>\n <td>\n ODS:\n </td>\n <td style=\"".concat(getTodaysStatsTdStyle(stats.scoreSup), "\">\n ").concat(Math.abs(stats.scoreSup).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n ODS Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankSup), "\">\n ").concat(Math.abs(stats.rankSup), "\n </td>\n </tr>") : '', "\n <tr>\n <td>\n OD:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.scoreTotal), "\">\n ").concat(Math.abs(stats.scoreTotal).toLocaleString(), "\n </td>\n </tr>\n <tr>\n <td>\n OD Rank:\n </td>\n <td style=\"").concat(getTodaysStatsTdStyle(stats.rankTotal), "\">\n ").concat(Math.abs(stats.rankTotal), "\n </td>\n </tr>\n </tbody>\n </table>\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 <div style=\"".concat((0, _pagination.getContainerStyles)(), "\" id=\"").concat(HISTORY_PAGINATION_CONTAINER_ID, "\">\n ").concat(paginationItems.join(''), "\n </div>\n <table class=\"vis\" style=\"border-collapse: separate; border-spacing: 2px; width: 100%;\">\n <tbody>\n <tr>\n <th>\n Date\n </th>\n ").concat(tribe ? '' : '<th>Tribe</th>', "\n <th>\n Points\n </th>\n <th>\n Villages\n </th>\n ").concat(tribe ? '<th>Members</th>' : '', "\n <th>\n OD\n </th>\n <th>\n ODA\n </th>\n <th>\n ODD\n </th>\n ").concat(tribe ? '' : '<th>ODS</th>', "\n </tr>\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 = '<tr>' + "<td>".concat((0, _formatDate.default)(history.createDate, {
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit'
|
||||
}), "</td>");
|
||||
|
||||
if (!tribe && history.tribe) {
|
||||
rowHTML += "<td><a href=\"".concat((0, _tribalwars.formatTribeURL)(history.tribe.id), "\">").concat(history.tribe.tag, "</a></td>");
|
||||
} else if (!tribe) {
|
||||
rowHTML += '<td>-</td>';
|
||||
}
|
||||
|
||||
rowHTML += "\n <td title=\"".concat(stats ? addMathSymbol(stats.points) : '', "\">\n ").concat(history.points.toLocaleString(), " (<strong>").concat(history.rank, "</strong>)\n </td>\n <td title=\"").concat(stats ? addMathSymbol(stats.villages) : '', "\">\n ").concat(history.totalVillages.toLocaleString(), "\n </td>\n ").concat(!tribe ? '' : "\n <td title=\"".concat(stats ? addMathSymbol(stats.members) : '', "\">\n ").concat(history.totalMembers, "\n </td>\n "), "\n <td title=\"").concat(stats ? addMathSymbol(stats.scoreTotal) : '', "\">\n ").concat(history.scoreTotal.toLocaleString(), " (<strong>").concat(history.rankTotal, "</strong>)\n </td>\n <td title=\"").concat(stats ? addMathSymbol(stats.scoreAtt) : '', "\">\n ").concat(history.scoreAtt.toLocaleString(), " (<strong>").concat(history.rankAtt, "</strong>)\n </td>\n <td title=\"").concat(stats ? addMathSymbol(stats.scoreDef) : '', "\">\n ").concat(history.scoreDef.toLocaleString(), " (<strong>").concat(history.rankDef, "</strong>)\n </td>\n ").concat(tribe ? '' : "\n <td title=\"".concat(stats ? addMathSymbol(stats.scoreSup) : '', "\">\n ").concat(history.scoreSup.toLocaleString(), " (<strong>").concat(history.rankSup, "</strong>)\n </td>\n "), "\n ") + '</tr>';
|
||||
return rowHTML;
|
||||
}).join(''), "\n </tbody>\n </table>\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)
|
||||
},{"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)
|
|
@ -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 = `
|
||||
<div style="${getContainerStyles()}" id="${PLAYER_HISTORY_PAGINATION_CONTAINER_ID}">
|
||||
${paginationItems.join('')}
|
||||
</div>
|
||||
<table class="vis" style="border-collapse: separate; border-spacing: 2px; width: 100%;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>
|
||||
Date
|
||||
</th>
|
||||
<th>
|
||||
Tribe
|
||||
</th>
|
||||
<th>
|
||||
Points
|
||||
</th>
|
||||
<th>
|
||||
Villages
|
||||
</th>
|
||||
<th>
|
||||
OD
|
||||
</th>
|
||||
<th>
|
||||
ODA
|
||||
</th>
|
||||
<th>
|
||||
ODD
|
||||
</th>
|
||||
<th>
|
||||
ODS
|
||||
</th>
|
||||
</tr>
|
||||
${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 =
|
||||
'<tr>' +
|
||||
`<td>${formatDate(playerHistory.createDate, {
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
})}</td>`;
|
||||
if (playerHistory.tribe) {
|
||||
rowHTML += `<td><a href="${formatTribeURL(
|
||||
playerHistory.tribe.id
|
||||
)}">${playerHistory.tribe.tag}</a></td>`;
|
||||
} else {
|
||||
rowHTML += '<td>-</td>';
|
||||
}
|
||||
rowHTML +=
|
||||
`
|
||||
<td title="${stats ? addMathSymbol(stats.points) : ''}">
|
||||
${playerHistory.points.toLocaleString()} (<strong>${
|
||||
playerHistory.rank
|
||||
}</strong>)
|
||||
</td>
|
||||
<td title="${stats ? addMathSymbol(stats.villages) : ''}">
|
||||
${playerHistory.totalVillages}
|
||||
</td>
|
||||
<td title="${stats ? addMathSymbol(stats.scoreTotal) : ''}">
|
||||
${playerHistory.scoreTotal.toLocaleString()} (<strong>${
|
||||
playerHistory.rankTotal
|
||||
}</strong>)
|
||||
</td>
|
||||
<td title="${stats ? addMathSymbol(stats.scoreAtt) : ''}">
|
||||
${playerHistory.scoreAtt.toLocaleString()} (<strong>${
|
||||
playerHistory.rankAtt
|
||||
}</strong>)
|
||||
</td>
|
||||
<td title="${stats ? addMathSymbol(stats.scoreDef) : ''}">
|
||||
${playerHistory.scoreDef.toLocaleString()} (<strong>${
|
||||
playerHistory.rankDef
|
||||
}</strong>)
|
||||
</td>
|
||||
<td title="${stats ? addMathSymbol(stats.scoreSup) : ''}">
|
||||
${playerHistory.scoreSup.toLocaleString()} (<strong>${
|
||||
playerHistory.rankSup
|
||||
}</strong>)
|
||||
</td>
|
||||
` + '</tr>';
|
||||
|
||||
return rowHTML;
|
||||
})
|
||||
.join('')}
|
||||
</tbody>
|
||||
</table>
|
||||
`;
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -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 () {
|
||||
|
|
|
@ -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 = `
|
||||
<div style="${getContainerStyles()}" id="${HISTORY_PAGINATION_CONTAINER_ID}">
|
||||
${paginationItems.join('')}
|
||||
</div>
|
||||
<table class="vis" style="border-collapse: separate; border-spacing: 2px; width: 100%;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>
|
||||
Date
|
||||
</th>
|
||||
${tribe ? '' : '<th>Tribe</th>'}
|
||||
<th>
|
||||
Points
|
||||
</th>
|
||||
<th>
|
||||
Villages
|
||||
</th>
|
||||
${tribe ? '<th>Members</th>' : ''}
|
||||
<th>
|
||||
OD
|
||||
</th>
|
||||
<th>
|
||||
ODA
|
||||
</th>
|
||||
<th>
|
||||
ODD
|
||||
</th>
|
||||
${tribe ? '' : '<th>ODS</th>'}
|
||||
</tr>
|
||||
${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 =
|
||||
'<tr>' +
|
||||
`<td>${formatDate(history.createDate, {
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
})}</td>`;
|
||||
if (!tribe && history.tribe) {
|
||||
rowHTML += `<td><a href="${formatTribeURL(history.tribe.id)}">${
|
||||
history.tribe.tag
|
||||
}</a></td>`;
|
||||
} else if (!tribe) {
|
||||
rowHTML += '<td>-</td>';
|
||||
}
|
||||
rowHTML +=
|
||||
`
|
||||
<td title="${stats ? addMathSymbol(stats.points) : ''}">
|
||||
${history.points.toLocaleString()} (<strong>${
|
||||
history.rank
|
||||
}</strong>)
|
||||
</td>
|
||||
<td title="${stats ? addMathSymbol(stats.villages) : ''}">
|
||||
${history.totalVillages.toLocaleString()}
|
||||
</td>
|
||||
${
|
||||
!tribe
|
||||
? ''
|
||||
: `
|
||||
<td title="${stats ? addMathSymbol(stats.members) : ''}">
|
||||
${history.totalMembers}
|
||||
</td>
|
||||
`
|
||||
}
|
||||
<td title="${stats ? addMathSymbol(stats.scoreTotal) : ''}">
|
||||
${history.scoreTotal.toLocaleString()} (<strong>${
|
||||
history.rankTotal
|
||||
}</strong>)
|
||||
</td>
|
||||
<td title="${stats ? addMathSymbol(stats.scoreAtt) : ''}">
|
||||
${history.scoreAtt.toLocaleString()} (<strong>${
|
||||
history.rankAtt
|
||||
}</strong>)
|
||||
</td>
|
||||
<td title="${stats ? addMathSymbol(stats.scoreDef) : ''}">
|
||||
${history.scoreDef.toLocaleString()} (<strong>${
|
||||
history.rankDef
|
||||
}</strong>)
|
||||
</td>
|
||||
${
|
||||
tribe
|
||||
? ''
|
||||
: `
|
||||
<td title="${stats ? addMathSymbol(stats.scoreSup) : ''}">
|
||||
${history.scoreSup.toLocaleString()} (<strong>${
|
||||
history.rankSup
|
||||
}</strong>)
|
||||
</td>
|
||||
`
|
||||
}
|
||||
` + '</tr>';
|
||||
|
||||
return rowHTML;
|
||||
})
|
||||
.join('')}
|
||||
</tbody>
|
||||
</table>
|
||||
`;
|
||||
|
||||
renderPopup({
|
||||
e,
|
||||
title: `History`,
|
||||
id: 'history',
|
||||
html,
|
||||
});
|
||||
|
||||
document
|
||||
.querySelectorAll('#' + HISTORY_PAGINATION_CONTAINER_ID + ' a')
|
||||
.forEach((el) => {
|
||||
el.addEventListener('click', onPageChange);
|
||||
});
|
||||
};
|
|
@ -21,7 +21,7 @@ export default (container, stats) => {
|
|||
container.prepend(todaysStats);
|
||||
}
|
||||
|
||||
const renderODS = !isNil(stats.rankSup);
|
||||
const player = !isNil(stats.rankSup);
|
||||
todaysStats.innerHTML = `
|
||||
<table width="100%" class="vis">
|
||||
<tbody>
|
||||
|
@ -54,6 +54,18 @@ export default (container, stats) => {
|
|||
${Math.abs(stats.villages).toLocaleString()}
|
||||
</td>
|
||||
</tr>
|
||||
${
|
||||
!player
|
||||
? `<tr>
|
||||
<td>
|
||||
Members:
|
||||
</td>
|
||||
<td style="${getTodaysStatsTdStyle(stats.members)}">
|
||||
${Math.abs(stats.members)}
|
||||
</td>
|
||||
</tr>`
|
||||
: ''
|
||||
}
|
||||
<tr>
|
||||
<td>
|
||||
ODA:
|
||||
|
@ -87,7 +99,7 @@ export default (container, stats) => {
|
|||
</td>
|
||||
</tr>
|
||||
${
|
||||
renderODS
|
||||
player
|
||||
? `<tr>
|
||||
<td>
|
||||
ODS:
|
||||
|
|
Reference in New Issue