UNPKG

4chan-full

Version:

www.4chan.org non-official read only api. That supports cool things!

63 lines (47 loc) 1.42 kB
const { File } = require("../types/File"); const sizeRegex = /\((\d+(?:\.\d+)* (?:KB|MB|GB)), (?:(\d+)x(\d+))\)/i; /** * @param {HTMLElement} e * * @returns {File?} */ function parseFile(e) { if (!e) return null; const _file = new File(); const isSpoiler = Boolean(e.querySelector(".imgspoiler")); const fileText = e.querySelector(".fileText"); const fileTextA = e.querySelector(".fileText a"); _file.spoiler = isSpoiler; _file.name = isSpoiler ? fileText.getAttribute("title") : fileTextA.hasAttribute("title") ? fileTextA.getAttribute("title") : fileTextA.textContent; _file.url = fileTextA.href; const sizeRegexMatch = fileText.textContent.match(sizeRegex); _file.size = parseFileSize(sizeRegexMatch[1]); _file.width = parseInt(sizeRegexMatch[2]); _file.height = parseInt(sizeRegexMatch[3]); return _file; } /** * @returns {number} Eg. 1.23 GB or 12 kb */ function parseFileSize(fileSizeText = "0 GB") { let splitted = fileSizeText.split(" "); let factor = NaN; switch ((splitted[1] || "").toLowerCase()) { case "kb": factor = 1; break; case "mb": factor = 1000; break; case "gb": factor = 1000000; break; } let sizeInKB = parseFloat(splitted[0]) * factor; return sizeInKB; } module.exports = { parseFile, parseFileSize };