epubinator
Version:
NPM package to generate epub files out of url
84 lines (83 loc) • 3.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateSinglePageBook = exports.generateBookChapters = void 0;
var tslib_1 = require("tslib");
var ramda_1 = require("ramda");
var html_parser_1 = require("./html-parser");
var stripper_1 = require("./stripper");
var paginator_1 = require("./paginator");
var jsdom_1 = require("jsdom");
var jsdom_2 = require("./util/jsdom");
var logger_1 = require("./logger");
var generateBookChapters = function (url_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([url_1], tslib_1.__read(args_1), false), void 0, function (url, chapters) {
var dom, main, title, article, nextPageHref;
if (chapters === void 0) { chapters = []; }
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!url)
return [2 /*return*/, chapters];
(0, logger_1.log)((0, logger_1.info)('Downloading page for'), (0, logger_1.emphasizedInfo)(url));
return [4 /*yield*/, (0, html_parser_1.getDom)(url)];
case 1:
dom = _a.sent();
main = (0, html_parser_1.getMain)(dom, {
url: url,
});
title = (0, ramda_1.compose)(stripper_1.stripNbsp, stripper_1.stripHtmlAttributes)((0, html_parser_1.getTitle)(main));
article = (0, html_parser_1.getBodyHtmlFromDom)((0, ramda_1.compose)(html_parser_1.getArticle, html_parser_1.removeTitle)(main));
return [4 /*yield*/, (0, paginator_1.getNextPageLink)(dom)];
case 2:
nextPageHref = _a.sent();
return [4 /*yield*/, (0, exports.generateBookChapters)((0, html_parser_1.generateLink)(url, nextPageHref), chapters.concat([
{
title: title,
data: article,
},
]))];
case 3: return [2 /*return*/, _a.sent()];
}
});
});
};
exports.generateBookChapters = generateBookChapters;
var generateSinglePageBook = function (url) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var dom, main, title, toc, article, data;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, (0, html_parser_1.getDom)(url)];
case 1:
dom = _a.sent();
main = (0, html_parser_1.getMain)(dom, {
url: url,
});
title = (0, html_parser_1.getTitle)(dom, { url: url });
toc = (0, html_parser_1.getBodyHtmlFromDom)(generateToc(main, { id: 'toc' }));
article = (0, html_parser_1.getBodyHtmlFromDom)((0, ramda_1.compose)(html_parser_1.getArticle, html_parser_1.removeToc, html_parser_1.removeTitle)(main));
data = toc.concat(article);
return [2 /*return*/, {
title: title && (0, ramda_1.compose)(stripper_1.stripNbsp, stripper_1.stripHtmlAttributes)(title),
content: [
{
data: data,
},
],
}];
}
});
}); };
exports.generateSinglePageBook = generateSinglePageBook;
// TODO write specific function
function generateToc(dom, context) {
if (context === void 0) { context = {}; }
var document = (0, jsdom_2.getDocument)(dom);
var tableOfContent = document.querySelector("#".concat(context.id));
if (!tableOfContent)
return;
return new jsdom_1.JSDOM(tableOfContent.outerHTML);
}