UNPKG

2.08 kBJavaScriptView Raw
1import html from "./components/html";
2import styles from "./components/styles";
3import frontMatter from "./components/front-matter";
4import bibliography from "./components/bibliography";
5import expandData from "./components/expand-data";
6import meta from "./components/meta";
7import banner from "./components/banner";
8import header from "./components/header";
9import byline from "./components/byline";
10import appendix from "./components/appendix";
11import footer from "./components/footer";
12import citation from "./components/citation";
13import footnote from "./components/footnote";
14import markdown from "./components/markdown";
15import code from "./components/code";
16import typeset from "./components/typeset";
17import hoverBox from "./components/hover-box-include";
18import generateCrossref from "./components/generate-crossref";
19
20function renderImmediately(dom) {
21 html(dom);
22 styles(dom);
23}
24
25function renderOnLoad(dom, data) {
26 frontMatter(dom, data);
27 bibliography(dom, data);
28 expandData(dom, data);
29 meta(dom, data);
30 header(dom, data);
31 byline(dom, data);
32 appendix(dom, data);
33 footer(dom, data);
34 markdown(dom, data);
35 code(dom, data);
36 citation(dom, data);
37 footnote(dom, data);
38 typeset(dom, data);
39 hoverBox(dom, data);
40}
41
42// If we are in a browser, render automatically...
43if(window && window.document) {
44 let data = {};
45 renderImmediately(window.document);
46 window.document.addEventListener("DOMContentLoaded", (event) => {
47 renderOnLoad(window.document, data);
48 // Add a banner if we're not on localhost.
49 if (window.location.hostname !== "localhost" && window.location.origin !== "file://") {
50 banner(window.document, data);
51 }
52 generateCrossref(data);
53 });
54}
55
56// If we are in node...
57function render(dom, data) {
58 renderImmediately(dom);
59 renderOnLoad(dom, data);
60 // Remove script tag so it doesn't run again in the client
61 let s = dom.querySelector('script[src="http://distill.pub/template.js"]');
62 if (s) { s.parentElement.removeChild(s); };
63}
64
65export {render as render};
66export {generateCrossref as generateCrossref};