UNPKG

epubinator

Version:

NPM package to generate epub files out of url

54 lines (53 loc) 2.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getNextPageLink = void 0; var tslib_1 = require("tslib"); var getNextPageLink = function (dom_1) { var args_1 = []; for (var _i = 1; _i < arguments.length; _i++) { args_1[_i - 1] = arguments[_i]; } return tslib_1.__awaiter(void 0, tslib_1.__spreadArray([dom_1], tslib_1.__read(args_1), false), void 0, function (dom, context) { var document, next, link; if (context === void 0) { context = {}; } return tslib_1.__generator(this, function (_a) { document = dom.window.document; next = document.querySelector('[rel="next"]') || document.querySelector('.next') || document.querySelector('[name="next"]') || document.querySelector('[name="NEXT"]') || document.querySelector('[name="Next"]') || linkWithInnerTextNext(document); if (!next) { return [2 /*return*/]; } if (!next.href) { console.log('cannot find next page'); return [2 /*return*/]; } link = next.href; if (!link) return [2 /*return*/]; return [2 /*return*/, link]; }); }); }; exports.getNextPageLink = getNextPageLink; var linkWithInnerTextNext = function (document) { var nextElement = Array.from(document.querySelectorAll('p, a, span, div')).find(elementWithNextInTree); return nextElement && nextElement.closest('a'); }; var leafHasNext = function (node) { var hasText = function (nodeCur) { return /next/i.test(nodeCur.textContent); }; var nodeHasText = hasText(node); var childrenDontHaveText = Array.from(node.children).every(function (child) { return !hasText(child); }); return nodeHasText && childrenDontHaveText; }; function elementWithNextInTree(element) { return (leafHasNext(element) && element.textContent .split(' ') .find(function (text) { return text.toLowerCase() === 'next'; }) && element.textContent.split(' ').length < 4 && element.closest('a')); }