|
1 |
| -import util from "./util.ts"; |
| 1 | +import util from './util.ts' |
2 | 2 |
|
3 | 3 | export function createHtml({
|
4 |
| - lang = "en", |
| 4 | + lang = 'en', |
5 | 5 | head = [],
|
6 | 6 | scripts = [],
|
7 | 7 | body,
|
8 |
| - minify = false, |
| 8 | + minify = false |
9 | 9 | }: {
|
10 |
| - lang?: string; |
11 |
| - head?: string[]; |
12 |
| - scripts?: |
13 |
| - (string | { |
14 |
| - id?: string; |
15 |
| - type?: string; |
16 |
| - src?: string; |
17 |
| - innerText?: string; |
18 |
| - nomodule?: boolean; |
19 |
| - async?: boolean; |
20 |
| - preload?: boolean; |
21 |
| - })[]; |
22 |
| - body: string; |
23 |
| - minify?: boolean; |
| 10 | + lang?: string, |
| 11 | + head?: string[], |
| 12 | + scripts?: (string | { id?: string, type?: string, src?: string, innerText?: string, nomodule?: boolean, async?: boolean, preload?: boolean })[], |
| 13 | + body: string, |
| 14 | + minify?: boolean |
24 | 15 | }) {
|
25 |
| - const eol = minify ? "" : "\n"; |
26 |
| - const indent = minify ? "" : " ".repeat(4); |
27 |
| - const headTags = head.map((tag) => tag.trim()) |
28 |
| - .concat(scripts.map((v) => { |
| 16 | + const eol = minify ? '' : '\n' |
| 17 | + const indent = minify ? '' : ' '.repeat(4) |
| 18 | + const headTags = head.map(tag => tag.trim()) |
| 19 | + .concat(scripts.map(v => { |
29 | 20 | if (!util.isString(v) && util.isNEString(v.src)) {
|
30 |
| - if (v.type === "module") { |
31 |
| - return `<link rel="modulepreload" href=${JSON.stringify(v.src)} />`; |
| 21 | + if (v.type === 'module') { |
| 22 | + return `<link rel="modulepreload" href=${JSON.stringify(v.src)} />` |
| 23 | + } else if (v.async === true) { |
| 24 | + return `<link rel="preload" href=${JSON.stringify(v.src)} as="script" />` |
32 | 25 | }
|
33 |
| - return `<link rel="preload" href=${JSON.stringify(v.src) |
34 |
| - } as="script" />`; |
35 | 26 | }
|
36 |
| - return ""; |
37 |
| - })) |
38 |
| - /*.concat( |
39 |
| - [ |
40 |
| - "/_aleph/-/deno.land/x/aleph/error.js", |
41 |
| - "/_aleph/-/deno.land/x/aleph/aleph.js", |
42 |
| - "/_aleph/-/deno.land/x/aleph/context.js", |
43 |
| - "/_aleph/-/deno.land/x/aleph/events.js" |
44 |
| - ].map((v) => |
45 |
| - `<link rel="modulepreload" href=${JSON.stringify(v)} as="script" />` |
46 |
| - ), |
47 |
| - )*/ |
48 |
| - .filter(Boolean); |
49 |
| - const scriptTags = scripts.map((v) => { |
| 27 | + return '' |
| 28 | + })).filter(Boolean) |
| 29 | + const scriptTags = scripts.map(v => { |
50 | 30 | if (util.isString(v)) {
|
51 |
| - return `<script>${v}</script>`; |
| 31 | + return `<script>${v}</script>` |
52 | 32 | } else if (util.isNEString(v.innerText)) {
|
53 |
| - const { innerText, ...rest } = v; |
54 |
| - return `<script${attrString(rest) |
55 |
| - }>${eol}${innerText}${eol}${indent}</script>`; |
| 33 | + const { innerText, ...rest } = v |
| 34 | + return `<script${attrString(rest)}>${eol}${innerText}${eol}${indent}</script>` |
56 | 35 | } else if (util.isNEString(v.src) && !v.preload) {
|
57 |
| - return `<script${attrString(v)}></script>`; |
| 36 | + return `<script${attrString(v)}></script>` |
58 | 37 | } else {
|
59 |
| - return ""; |
| 38 | + return '' |
60 | 39 | }
|
61 |
| - }).filter(Boolean); |
| 40 | + }).filter(Boolean) |
62 | 41 |
|
63 | 42 | return [
|
64 |
| - "<!DOCTYPE html>", |
| 43 | + '<!DOCTYPE html>', |
65 | 44 | `<html lang="${lang}">`,
|
66 |
| - "<head>", |
| 45 | + '<head>', |
67 | 46 | indent + '<meta charSet="utf-8" />',
|
68 |
| - ...headTags.map((tag) => indent + tag), |
69 |
| - "</head>", |
70 |
| - "<body>", |
| 47 | + ...headTags.map(tag => indent + tag), |
| 48 | + '</head>', |
| 49 | + '<body>', |
71 | 50 | indent + body,
|
72 |
| - ...scriptTags.map((tag) => indent + tag), |
73 |
| - "</body>", |
74 |
| - "</html>", |
75 |
| - ].join(eol); |
| 51 | + ...scriptTags.map(tag => indent + tag), |
| 52 | + '</body>', |
| 53 | + '</html>' |
| 54 | + ].join(eol) |
76 | 55 | }
|
77 | 56 |
|
78 | 57 | function attrString(v: any): string {
|
79 |
| - return Object.keys(v).map((k) => { |
| 58 | + return Object.keys(v).map(k => { |
80 | 59 | if (v[k] === true) {
|
81 |
| - return ` ${k}`; |
| 60 | + return ` ${k}` |
82 | 61 | } else {
|
83 |
| - return ` ${k}=${JSON.stringify(String(v[k]))}`; |
| 62 | + return ` ${k}=${JSON.stringify(String(v[k]))}` |
84 | 63 | }
|
85 |
| - }).join(""); |
| 64 | + }).join('') |
86 | 65 | }
|
0 commit comments