UNPKG

epub-maker2

Version:
243 lines 10.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.builder = exports.Builder = exports.EPUB_TEMPLATES_TPL = exports.EPUB_TEMPLATES_PATH = void 0; const tslib_1 = require("tslib"); const zip_1 = tslib_1.__importStar(require("../../epubtpl-lib/zip")); const handlebar_helpers_1 = require("../../epubtpl-lib/handlebar-helpers"); const ajax_1 = require("../../epubtpl-lib/ajax"); const postcss_1 = require("../../epubtpl-lib/postcss"); const upath2_1 = tslib_1.__importDefault(require("upath2")); const util_1 = require("../../lib/util"); const config_1 = require("../../config"); exports.EPUB_TEMPLATES_PATH = upath2_1.default.join(__dirname); exports.EPUB_TEMPLATES_TPL = upath2_1.default.join(exports.EPUB_TEMPLATES_PATH, 'tpl'); var Builder; (function (Builder) { Builder.templates = { //mimetype: 'mimetype', //container: 'META-INF/container.xml', opf: 'EPUB/content.opf', ncx: 'EPUB/toc.ncx', nav: 'EPUB/nav.xhtml', css: 'EPUB/css/main.css', content: 'EPUB/content.xhtml', autoToc: 'EPUB/auto-toc.xhtml', sectionsNavTemplate: 'EPUB/sections-nav-template.html', sectionsNCXTemplate: 'EPUB/sections-ncx-template.xml', sectionsOPFManifestTemplate: 'EPUB/sections-opf-manifest-template.xml', sectionsOPFSpineTemplate: 'EPUB/sections-opf-spine-template.xml', coverPage: 'EPUB/CoverPage.xhtml', tableOfContents: 'EPUB/TableOfContents.xhtml', sectionsInfo: 'EPUB/sections-info.html', sectionsScript: 'EPUB/sections-script.html', contents: 'EPUB/contents.xhtml', }; for (let i in Builder.templates) { Builder.templates[i] = `\{\{import \'${upath2_1.default.join(exports.EPUB_TEMPLATES_TPL, Builder.templates[i])}'\}\}`; } let playOrder = 0; Builder.staticFiles = { 'mimetype': 'mimetype', 'META-INF/container.xml': 'META-INF/container.xml', }; for (let i in Builder.staticFiles) { Builder.staticFiles[i] = upath2_1.default.join(exports.EPUB_TEMPLATES_TPL, Builder.staticFiles[i]); } function make(epub, options) { //let epubConfig = epub.epubConfig; options = Object.assign({}, { templates: Builder.templates, }, options); //console.debug('[building epub]', epub.epubConfig); //console.debug('[building epub]', options); let zip = new zip_1.JSZip(); //await addAditionalInfo(zip, epub, options); handlebar_helpers_1.Handlebars.registerPartial('sectionsInfo', options.templates.sectionsInfo); handlebar_helpers_1.Handlebars.registerPartial('sectionsScript', options.templates.sectionsScript); return util_1.BPromise .mapSeries([ addStaticFiles, addAditionalInfo, //zipLib.addMimetype, //zipLib.addContainerInfo, addCover, zip_1.default.addFiles, addStylesheets, addManifestOpf, addEpub2Nav, addEpub3Nav, addContent, tableOfContents, ], async function (fn, index) { if (fn === zip_1.default.addFiles) { return fn(zip, epub, options) .then(function (ls) { return ls; }); } return fn(zip, epub, options); }) .tap(function () { //console.log(epub.epubConfig.cover); }) .then(function () { return zip; }); } Builder.make = make; function addStaticFiles(zip, epub, options) { let ls = Object.keys(Builder.staticFiles).reduce(function (a, key) { let b = { name: key, ext: '', file: Builder.staticFiles[key], }; a.push(b); return a; }, []); return zip_1.default.addStaticFiles(zip, ls); } Builder.addStaticFiles = addStaticFiles; async function tableOfContents(zip, epub, options) { zip .folder('EPUB') .file('TableOfContents.xhtml', (0, handlebar_helpers_1.compileTpl)(options.templates.tableOfContents, epub.epubConfig)); zip .folder('EPUB') .file('contents.xhtml', (0, handlebar_helpers_1.compileTpl)(options.templates.contents, epub.epubConfig)); } Builder.tableOfContents = tableOfContents; async function addCover(zip, epub, options) { let bool = await zip_1.default.addCover(zip, epub, options); if (bool) { zip .folder('EPUB') .file('CoverPage.xhtml', (0, handlebar_helpers_1.compileTpl)(options.templates.coverPage, epub.epubConfig)); } else { epub.epubConfig.cover = null; } } Builder.addCover = addCover; function addInfoSection(section, titlePrefix, namePrefix) { let c = '_'; if (!section.content) { section.content = {}; } if (titlePrefix) { titlePrefix = section.content.fullTitle = titlePrefix + ' - ' + section.content.title; namePrefix = section.name = namePrefix + c + section.rank; } else { titlePrefix = section.content.fullTitle = section.content.title; namePrefix = section.name = section.rank; } if (section.content.content || section.content.renderTitle || section.epubType == 'auto-toc') { section.needPage = true; } section.playOrder = playOrder++; if (!section.id) { section.id = (section.epubType || '').toString().replace('/\W/g', '') + (0, util_1.shortid)(); } for (let i = 0; i < section.subSections.length; i++) { section.subSections[i].rank = i.toString().padStart(3, '0'); addInfoSection(section.subSections[i], titlePrefix, namePrefix); } } Builder.addInfoSection = addInfoSection; function addAditionalInfo(zip, epub, options) { //Default options // @ts-ignore epub.epubConfig.options.tocName = epub.epubConfig.options.tocName || 'Menu'; //Generate name and full title for each section/subsection for (let i = 0; i < epub.epubConfig.sections.length; i++) { epub.epubConfig.sections[i].rank = i.toString().padStart(3, '0'); addInfoSection(epub.epubConfig.sections[i]); } } Builder.addAditionalInfo = addAditionalInfo; function addManifestOpf(zip, epub, options) { handlebar_helpers_1.Handlebars.registerPartial('sectionsOPFManifestTemplate', options.templates.sectionsOPFManifestTemplate); handlebar_helpers_1.Handlebars.registerPartial('sectionsOPFSpineTemplate', options.templates.sectionsOPFSpineTemplate); zip.folder('EPUB').file('content.opf', (0, handlebar_helpers_1.compileTpl)(options.templates.opf, epub.epubConfig)); } Builder.addManifestOpf = addManifestOpf; function addEpub2Nav(zip, epub, options) { handlebar_helpers_1.Handlebars.registerPartial('sectionsNCXTemplate', options.templates.sectionsNCXTemplate); zip.folder('EPUB').file('toc.ncx', (0, handlebar_helpers_1.compileTpl)(options.templates.ncx, epub.epubConfig)); } Builder.addEpub2Nav = addEpub2Nav; function addEpub3Nav(zip, epub, options) { handlebar_helpers_1.Handlebars.registerPartial('sectionsNavTemplate', options.templates.sectionsNavTemplate); zip.folder('EPUB').file('nav.xhtml', (0, handlebar_helpers_1.compileTpl)(options.templates.nav, epub.epubConfig)); } Builder.addEpub3Nav = addEpub3Nav; async function addStylesheets(zip, epub, options) { if (epub.epubConfig.vertical === config_1.EnumEpubConfigVertical.VERTICAL_RL) { try { const fs = require('fs'); let data = fs.readFileSync(upath2_1.default.join(__dirname, './tpl/EPUB/css/vertical-rl.css')); let file = await (0, ajax_1.fetchFile)({ data, }); epub.epubConfig.stylesheet.styles += "\n" + file.data.toString(); } catch (e) { console.error(e); } } if (epub.epubConfig.stylesheet.url || epub.epubConfig.stylesheet.file) { let file = await (0, ajax_1.fetchFile)(epub.epubConfig.stylesheet); epub.epubConfig.stylesheet.styles += "\n" + file.data.toString(); } return compileAndAddCss(); async function compileAndAddCss() { let styles = { original: epub.epubConfig.stylesheet.replaceOriginal ? '' : options.templates.css, custom: epub.epubConfig.stylesheet.styles || '', }; let css = await (0, handlebar_helpers_1.compileTpl)(`${styles.original}\n${styles.custom}`, styles, true); css = await (0, postcss_1.compileCss)(css); return zip.folder('EPUB') .folder('css') .file('main.css', css); } } Builder.addStylesheets = addStylesheets; function addSection(zip, section, epub, options) { return zip_1.default.addSubSections(zip, section, function (zip, section, epubConfig, options) { if (section.needPage) { let name = section.name + '.xhtml'; if (section.epubType == 'auto-toc') { return zip .folder('EPUB') .file(name, (0, handlebar_helpers_1.compileTpl)(options.templates.autoToc, section)); } else { return zip .folder('EPUB') .file(name, (0, handlebar_helpers_1.compileTpl)(options.templates.content, section)); } } return false; }, epub, options); } Builder.addSection = addSection; function addContent(zip, epub, options) { return util_1.BPromise.mapSeries(epub.epubConfig.sections, function (section) { return addSection(zip, section, epub, options); }); } Builder.addContent = addContent; })(Builder || (exports.Builder = Builder = {})); // @ts-ignore exports.builder = Builder; exports.default = exports.builder; /* if (typeof window !== 'undefined') { // @ts-ignore window.epubMaker = builder; } */ //# sourceMappingURL=index.js.map