@bookbox/view-html
Version:
Bookbox view for html
66 lines (65 loc) • 2.61 kB
JavaScript
import { BOOK_TEMPLATE_HTML } from './generated/bookTemplate';
import { getBookBoxHtmlSettings, getBookBoxHtmlSettingsTabs } from './htmlBookSettings';
import { listToHtml } from './model';
import { katexCssText } from './generated/katex_css';
import { katexFontsAllCssText } from './generated/katexFontsAll_css';
import { codeCssText } from './generated/code_css';
export const fillDocumentTemplate = ({ title, book, fontStyle, inlineHead, schema, }) => BOOK_TEMPLATE_HTML.replace('%TITLE', title)
.replace('%INLINE_HEAD', inlineHead !== null && inlineHead !== void 0 ? inlineHead : '')
.replace('%BOOK', book)
.replace('%SCHEMA', JSON.stringify({}))
.replace('%FONT_STYLE', fontStyle);
export function getBookBoxHtml({ bookData, settingsOptions, layoutOptions }) {
var _a;
const { tokens, meta, store } = bookData;
return `<div class="book-box book-box_layout">
${getBookBoxHtmlSettings({ bookData, settingsOptions, layoutOptions })}
<div class="book-box_content-container">
${getBookBoxHtmlSettingsTabs({ bookData, settingsOptions, layoutOptions })}
<div style="width: 100%">
<label for="settings-settings" class="book-box_layout-settings-item book-box_layout-settings-settings" ${((_a = settingsOptions === null || settingsOptions === void 0 ? void 0 : settingsOptions.viewItems) !== null && _a !== void 0 ? _a : true) ? '' : `style="display:none"`}></label>
<div class="book-box_content">
<div>${listToHtml(tokens)}</div>
</div>
</div>
</div>
</div>`;
}
function getFontStyle({ bookData }) {
const styles = [];
const add = (style) => styles.push(`<style>${style}</style>`);
if (exist('math')(bookData.store)) {
add(katexCssText);
add(katexFontsAllCssText);
}
if (exist('code')(bookData.store)) {
add(codeCssText);
}
return styles.join('\n');
}
export function getBookBoxHtmlDocument({ bookData, inlineHead, schema, }) {
const { meta } = bookData;
const bookHtml = getBookBoxHtml({
bookData,
});
const fontStyle = getFontStyle({ bookData });
return fillDocumentTemplate({
title: meta.contents[0].text,
book: bookHtml,
fontStyle,
inlineHead,
schema,
});
}
// TODO: create stat in core
function exist(checkName) {
return (store) => {
for (const name in store.elementsByKeys) {
if (!store.elementsByKeys.hasOwnProperty(name))
continue;
if (store.elementsByKeys[name].name === checkName)
return true;
}
return false;
};
}