epubinator
Version:
NPM package to generate epub files out of url
54 lines (53 loc) • 2.2 kB
JavaScript
;
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'));
}