make InADayParser more null safety | move loadInADayData to utils/tribalwars.js

This commit is contained in:
Dawid Wysokiński 2020-07-12 18:17:25 +02:00
parent 45637b0925
commit 895e26d605
5 changed files with 352 additions and 173 deletions

View File

@ -169,70 +169,7 @@ exports.default = void 0;
var _default = url => parseInt(new URLSearchParams(url).get('id'));
exports.default = _default;
},{}],"dSAr":[function(require,module,exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _getIDFromURL = _interopRequireDefault(require("../utils/getIDFromURL"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class InADayParser {
constructor(html) {
let filters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
this.dom = new DOMParser().parseFromString(html, 'text/html');
this.filters = filters;
}
isValidRow(row) {
if (this.filters.playerID && row.playerID !== this.filters.playerID) {
return false;
}
return true;
}
parseRow(row) {
let obj = {};
obj.rank = parseInt(row.children[0].innerText.trim());
obj.name = row.children[1].innerText.trim();
obj.playerID = (0, _getIDFromURL.default)(row.children[1].querySelector('a').getAttribute('href'));
obj.tribe = row.children[2].innerText.trim();
obj.tribeID = 0;
if (obj.tribe) {
obj.tribeID = (0, _getIDFromURL.default)(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 trs = this.dom.querySelectorAll('#in_a_day_ranking_table tbody tr');
const result = [];
for (let i = 1; i < trs.length; i++) {
const row = trs[i];
const parsed = this.parseRow(row);
if (this.isValidRow(parsed)) {
result.push(parsed);
}
}
return result;
}
}
exports.default = InADayParser;
},{"../utils/getIDFromURL":"tQUs"}],"DMkL":[function(require,module,exports) {
},{}],"DMkL":[function(require,module,exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
@ -316,13 +253,92 @@ const formatPlayerURL = function formatPlayerURL() {
};
exports.formatPlayerURL = formatPlayerURL;
},{}],"fHHP":[function(require,module,exports) {
},{}],"dSAr":[function(require,module,exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.formatVillageURL = exports.formatPlayerURL = exports.formatTribeURL = void 0;
exports.default = void 0;
var _getIDFromURL = _interopRequireDefault(require("../utils/getIDFromURL"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class InADayParser {
constructor(html) {
let filters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
this.dom = new DOMParser().parseFromString(html, 'text/html');
this.filters = filters;
}
isValidRow(row) {
if (!row) {
return false;
}
if (this.filters.playerID && row.playerID !== this.filters.playerID) {
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 = (0, _getIDFromURL.default)(row.children[1].querySelector('a').getAttribute('href'));
obj.tribe = row.children[2].innerText.trim();
obj.tribeID = 0;
if (obj.tribe) {
obj.tribeID = (0, _getIDFromURL.default)(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 trs = this.dom.querySelectorAll('#in_a_day_ranking_table tbody tr');
const result = [];
for (let i = 1; i < trs.length; i++) {
const row = trs[i];
const parsed = this.parseRow(row);
if (this.isValidRow(parsed)) {
result.push(parsed);
}
}
return result;
}
}
exports.default = InADayParser;
},{"../utils/getIDFromURL":"tQUs"}],"fHHP":[function(require,module,exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.loadInADayData = exports.formatVillageURL = exports.formatPlayerURL = exports.formatTribeURL = void 0;
var _InADayParser = _interopRequireDefault(require("../libs/InADayParser"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
const formatTribeURL = id => {
return window.location.origin + TribalWars.buildURL('', {
@ -350,7 +366,47 @@ const formatVillageURL = id => {
};
exports.formatVillageURL = formatVillageURL;
},{}],"KWxH":[function(require,module,exports) {
const loadInADayData = async function loadInADayData(type) {
let _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
{
name
} = _ref,
rest = _objectWithoutProperties(_ref, ["name"]);
try {
const response = await fetch(TribalWars.buildURL('', {
screen: 'ranking',
mode: 'in_a_day',
type,
name: name ? name : ''
}));
const html = await response.text();
if (!html) {
throw new Error();
}
const res = new _InADayParser.default(html, rest).parse();
if (res.length === 0) {
throw new Error();
}
return res[0];
} catch (error) {
return {
rank: 0,
playerID: 0,
score: 0,
tribeID: 0,
date: new Date()
};
}
};
exports.loadInADayData = loadInADayData;
},{"../libs/InADayParser":"dSAr"}],"KWxH":[function(require,module,exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
@ -381,8 +437,6 @@ exports.setItem = setItem;
var _requestCreator = _interopRequireDefault(require("./libs/requestCreator"));
var _InADayParser = _interopRequireDefault(require("./libs/InADayParser"));
var _getIDFromURL = _interopRequireDefault(require("./utils/getIDFromURL"));
var _getCurrentServer = _interopRequireDefault(require("./utils/getCurrentServer"));
@ -435,35 +489,6 @@ const cachePlayerData = function cachePlayerData() {
(0, _localStorage.setItem)(LOCAL_STORAGE_KEY, data);
};
const loadInADayRankAndScore = async (name, playerID, type) => {
try {
const response = await fetch(TribalWars.buildURL('', {
screen: 'ranking',
mode: 'in_a_day',
type,
name
}));
const html = await response.text();
const res = new _InADayParser.default(html, {
playerID
}).parse();
if (res.length === 0) {
throw new Error();
}
return res[0];
} catch (error) {
return {
rank: 0,
playerID: 0,
score: 0,
tribeID: 0,
date: new Date()
};
}
};
const loadData = async () => {
const data = await (0, _requestCreator.default)({
query: PLAYER_QUERY,
@ -480,13 +505,34 @@ const loadData = async () => {
if (data.player) {
const inADay = {};
inADay.att = await loadInADayRankAndScore(data.player.name, data.player.id, 'kill_att');
inADay.def = await loadInADayRankAndScore(data.player.name, data.player.id, 'kill_def');
inADay.sup = await loadInADayRankAndScore(data.player.name, data.player.id, 'kill_sup');
inADay.lootRes = await loadInADayRankAndScore(data.player.name, data.player.id, 'loot_res');
inADay.lootVil = await loadInADayRankAndScore(data.player.name, data.player.id, 'loot_vil');
inADay.scavenge = await loadInADayRankAndScore(data.player.name, data.player.id, 'scavenge');
inADay.conquer = await loadInADayRankAndScore(data.player.name, data.player.id, 'conquer');
inADay.att = await (0, _tribalwars.loadInADayData)('kill_att', {
name: data.player.name,
playerID: data.player.id
});
inADay.def = await (0, _tribalwars.loadInADayData)('kill_def', {
name: data.player.name,
playerID: data.player.id
});
inADay.sup = await (0, _tribalwars.loadInADayData)('kill_sup', {
name: data.player.name,
playerID: data.player.id
});
inADay.lootRes = await (0, _tribalwars.loadInADayData)('loot_res', {
name: data.player.name,
playerID: data.player.id
});
inADay.lootVil = await (0, _tribalwars.loadInADayData)('loot_vil', {
name: data.player.name,
playerID: data.player.id
});
inADay.scavenge = await (0, _tribalwars.loadInADayData)('scavenge', {
name: data.player.name,
playerID: data.player.id
});
inADay.conquer = await (0, _tribalwars.loadInADayData)('conquer', {
name: data.player.name,
playerID: data.player.id
});
data.player.inADay = inADay;
}
@ -731,4 +777,4 @@ const renderActions = () => {
console.log('extended player profile', error);
}
})();
},{"./libs/requestCreator":"Ph2E","./libs/InADayParser":"dSAr","./utils/getIDFromURL":"tQUs","./utils/getCurrentServer":"DMkL","./utils/formatDate":"V6Mf","./utils/renderPopup":"P4rL","./utils/twstats":"Syko","./utils/tribalwars":"fHHP","./utils/localStorage":"KWxH"}]},{},["yRop"], null)
},{"./libs/requestCreator":"Ph2E","./utils/getIDFromURL":"tQUs","./utils/getCurrentServer":"DMkL","./utils/formatDate":"V6Mf","./utils/renderPopup":"P4rL","./utils/twstats":"Syko","./utils/tribalwars":"fHHP","./utils/localStorage":"KWxH"}]},{},["yRop"], null)

View File

@ -227,13 +227,103 @@ var _default = (date, options) => {
};
exports.default = _default;
},{}],"fHHP":[function(require,module,exports) {
},{}],"tQUs":[function(require,module,exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.formatVillageURL = exports.formatPlayerURL = exports.formatTribeURL = void 0;
exports.default = void 0;
var _default = url => parseInt(new URLSearchParams(url).get('id'));
exports.default = _default;
},{}],"dSAr":[function(require,module,exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _getIDFromURL = _interopRequireDefault(require("../utils/getIDFromURL"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class InADayParser {
constructor(html) {
let filters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
this.dom = new DOMParser().parseFromString(html, 'text/html');
this.filters = filters;
}
isValidRow(row) {
if (!row) {
return false;
}
if (this.filters.playerID && row.playerID !== this.filters.playerID) {
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 = (0, _getIDFromURL.default)(row.children[1].querySelector('a').getAttribute('href'));
obj.tribe = row.children[2].innerText.trim();
obj.tribeID = 0;
if (obj.tribe) {
obj.tribeID = (0, _getIDFromURL.default)(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 trs = this.dom.querySelectorAll('#in_a_day_ranking_table tbody tr');
const result = [];
for (let i = 1; i < trs.length; i++) {
const row = trs[i];
const parsed = this.parseRow(row);
if (this.isValidRow(parsed)) {
result.push(parsed);
}
}
return result;
}
}
exports.default = InADayParser;
},{"../utils/getIDFromURL":"tQUs"}],"fHHP":[function(require,module,exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.loadInADayData = exports.formatVillageURL = exports.formatPlayerURL = exports.formatTribeURL = void 0;
var _InADayParser = _interopRequireDefault(require("../libs/InADayParser"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
const formatTribeURL = id => {
return window.location.origin + TribalWars.buildURL('', {
@ -261,7 +351,47 @@ const formatVillageURL = id => {
};
exports.formatVillageURL = formatVillageURL;
},{}],"KWxH":[function(require,module,exports) {
const loadInADayData = async function loadInADayData(type) {
let _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
{
name
} = _ref,
rest = _objectWithoutProperties(_ref, ["name"]);
try {
const response = await fetch(TribalWars.buildURL('', {
screen: 'ranking',
mode: 'in_a_day',
type,
name: name ? name : ''
}));
const html = await response.text();
if (!html) {
throw new Error();
}
const res = new _InADayParser.default(html, rest).parse();
if (res.length === 0) {
throw new Error();
}
return res[0];
} catch (error) {
return {
rank: 0,
playerID: 0,
score: 0,
tribeID: 0,
date: new Date()
};
}
};
exports.loadInADayData = loadInADayData;
},{"../libs/InADayParser":"dSAr"}],"KWxH":[function(require,module,exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {

View File

@ -1,11 +1,10 @@
import requestCreator from './libs/requestCreator';
import InADayParser from './libs/InADayParser';
import getIDFromURL from './utils/getIDFromURL';
import getCurrentServer from './utils/getCurrentServer';
import formatDate from './utils/formatDate';
import renderPopup from './utils/renderPopup';
import { formatPlayerURL } from './utils/twstats';
import { formatTribeURL } from './utils/tribalwars';
import { formatTribeURL, loadInADayData } from './utils/tribalwars';
import { setItem, getItem } from './utils/localStorage';
// ==UserScript==
@ -105,33 +104,6 @@ const cachePlayerData = (data = {}) => {
setItem(LOCAL_STORAGE_KEY, data);
};
const loadInADayRankAndScore = async (name, playerID, type) => {
try {
const response = await fetch(
TribalWars.buildURL('', {
screen: 'ranking',
mode: 'in_a_day',
type,
name,
})
);
const html = await response.text();
const res = new InADayParser(html, { playerID }).parse();
if (res.length === 0) {
throw new Error();
}
return res[0];
} catch (error) {
return {
rank: 0,
playerID: 0,
score: 0,
tribeID: 0,
date: new Date(),
};
}
};
const loadData = async () => {
const data = await requestCreator({
query: PLAYER_QUERY,
@ -147,41 +119,34 @@ const loadData = async () => {
});
if (data.player) {
const inADay = {};
inADay.att = await loadInADayRankAndScore(
data.player.name,
data.player.id,
'kill_att'
);
inADay.def = await loadInADayRankAndScore(
data.player.name,
data.player.id,
'kill_def'
);
inADay.sup = await loadInADayRankAndScore(
data.player.name,
data.player.id,
'kill_sup'
);
inADay.lootRes = await loadInADayRankAndScore(
data.player.name,
data.player.id,
'loot_res'
);
inADay.lootVil = await loadInADayRankAndScore(
data.player.name,
data.player.id,
'loot_vil'
);
inADay.scavenge = await loadInADayRankAndScore(
data.player.name,
data.player.id,
'scavenge'
);
inADay.conquer = await loadInADayRankAndScore(
data.player.name,
data.player.id,
'conquer'
);
inADay.att = await loadInADayData('kill_att', {
name: data.player.name,
playerID: data.player.id,
});
inADay.def = await loadInADayData('kill_def', {
name: data.player.name,
playerID: data.player.id,
});
inADay.sup = await loadInADayData('kill_sup', {
name: data.player.name,
playerID: data.player.id,
});
inADay.lootRes = await loadInADayData('loot_res', {
name: data.player.name,
playerID: data.player.id,
});
inADay.lootVil = await loadInADayData('loot_vil', {
name: data.player.name,
playerID: data.player.id,
});
inADay.scavenge = await loadInADayData('scavenge', {
name: data.player.name,
playerID: data.player.id,
});
inADay.conquer = await loadInADayData('conquer', {
name: data.player.name,
playerID: data.player.id,
});
data.player.inADay = inADay;
}
cachePlayerData(data);

View File

@ -6,12 +6,18 @@ export default class InADayParser {
this.filters = filters;
}
isValidRow(row) {
if (!row) {
return false;
}
if (this.filters.playerID && row.playerID !== this.filters.playerID) {
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();

View File

@ -1,3 +1,5 @@
import InADayParser from '../libs/InADayParser';
export const formatTribeURL = (id) => {
return (
window.location.origin +
@ -27,3 +29,33 @@ export const formatVillageURL = (id) => {
})
);
};
export const loadInADayData = async (type, { name, ...rest } = {}) => {
try {
const response = await fetch(
TribalWars.buildURL('', {
screen: 'ranking',
mode: 'in_a_day',
type,
name: name ? name : '',
})
);
const html = await response.text();
if (!html) {
throw new Error();
}
const res = new InADayParser(html, rest).parse();
if (res.length === 0) {
throw new Error();
}
return res[0];
} catch (error) {
return {
rank: 0,
playerID: 0,
score: 0,
tribeID: 0,
date: new Date(),
};
}
};