This repository has been archived on 2023-01-26. You can view files and clone it, but cannot push or open issues or pull requests.
scripts-old/src/libs/InADayParser.js

58 lines
1.6 KiB
JavaScript

import getIDFromURL from '../utils/getIDFromURL';
export default class InADayParser {
constructor(html = '', filters = {}) {
this.dom = new DOMParser().parseFromString(html, 'text/html');
this.trs = this.dom.querySelectorAll('#in_a_day_ranking_table tbody tr');
this.filters = filters;
}
isValidRow(row) {
if (!row) {
return false;
}
if (this.filters.playerID && row.playerID !== this.filters.playerID) {
return false;
}
if (
this.filters.tribes &&
Array.isArray(this.filters.tribes) &&
!this.filters.tribes.some(tribe => tribe === row.tribe)
) {
return false;
}
return true;
}
parseRow(row) {
if (!row || !row instanceof HTMLTableRowElement) {
return undefined;
}
let obj = {};
obj.rank = parseInt(row.children[0].innerText.trim());
obj.name = row.children[1].innerText.trim();
obj.playerID = getIDFromURL(
row.children[1].querySelector('a').getAttribute('href')
);
obj.tribe = row.children[2].innerText.trim();
obj.tribeID = 0;
if (obj.tribe) {
obj.tribeID = getIDFromURL(
row.children[2].querySelector('a').getAttribute('href')
);
}
obj.score = parseInt(row.children[3].innerText.trim().replace(/\./g, ''));
obj.date = row.children[4].innerText.trim();
return obj;
}
parse() {
const result = [];
for (let i = 1; i < this.trs.length; i++) {
const row = this.trs[i];
const parsed = this.parseRow(row);
if (this.isValidRow(parsed)) {
result.push(parsed);
}
}
return result;
}
}