diff --git a/packages/webdoc-cli/src/config.js b/packages/webdoc-cli/src/config.js index 59dc6c52..0212aa71 100644 --- a/packages/webdoc-cli/src/config.js +++ b/packages/webdoc-cli/src/config.js @@ -33,6 +33,7 @@ type ConfigSchema = { import?: string[], }, template: { + assets: Array, alias: { [string]: string; }, @@ -96,6 +97,7 @@ const defaultConfig: ConfigSchema = { template: "@webdoc/default-template", }, template: { + assets: [], alias: {}, appBar: { items: {}, diff --git a/packages/webdoc-default-template/helper/renderer-plugins/preprocess.js b/packages/webdoc-default-template/helper/renderer-plugins/preprocess.js new file mode 100644 index 00000000..e24df8d5 --- /dev/null +++ b/packages/webdoc-default-template/helper/renderer-plugins/preprocess.js @@ -0,0 +1,15 @@ +const path = require("path"); + +// Regex for matching element with a capturing group for src attribute +const IMG_REGEX = /()/g; + +exports.preprocessMarkupPlugin = ({ + assetsDir, +}) => function preprocessMarkup( + markup /*: string */, +) /*: string */ { + return markup.replace(IMG_REGEX, + function(_, prefix /*: string */, src /*: string */, suffix /*: string */) { + return `${prefix}/${path.join(assetsDir, String(src).trim())}${suffix}`; + }); +}; diff --git a/packages/webdoc-default-template/publish.js b/packages/webdoc-default-template/publish.js index 650088ec..b53ee487 100644 --- a/packages/webdoc-default-template/publish.js +++ b/packages/webdoc-default-template/publish.js @@ -15,7 +15,8 @@ const { Sitemap, TemplateRenderer, TemplatePipeline, - TemplateTagsResolver, RepositoryPlugin, + TemplateTagsResolver, + RepositoryPlugin, } = require("@webdoc/template-library"); const {linker, prepareLinker} = require("./helper/linker"); const _ = require("lodash"); @@ -24,7 +25,7 @@ const _ = require("lodash"); const {indexSorterPlugin} = require("./helper/renderer-plugins/index-sorter"); const {signaturePlugin} = require("./helper/renderer-plugins/signature"); const {categoryFilterPlugin} = require("./helper/renderer-plugins/category-filter"); - +const {preprocessMarkupPlugin} = require("./helper/renderer-plugins/preprocess"); /*:: import type { Doc, @@ -74,6 +75,7 @@ exports.publish = async function publish(options /*: PublishOptions */) { const docTree = options.documentTree; const outDir = path.normalize(options.config.opts.destination); + const assetsDir = path.join(outDir, "./assets"); const index = config.template.readme ? linker.createURI("index") : null; const indexRelative = index ? index.replace(`/${linker.siteRoot}/`, "") : null; @@ -123,6 +125,9 @@ exports.publish = async function publish(options /*: PublishOptions */) { .installPlugin("categoryFilter", categoryFilterPlugin) .installPlugin("relations", RelationsPlugin) .installPlugin("hljs", hljs) + .installPlugin("preprocess", preprocessMarkupPlugin({ + assetsDir: path.relative(outDir, assetsDir), + })) .setGlobalTemplateData({ appBar: { items: appBarItems, @@ -158,7 +163,7 @@ exports.publish = async function publish(options /*: PublishOptions */) { idToDoc.set(doc.id, doc); }); - await outStaticFiles(outDir, config); + await outStaticFiles(outDir, assetsDir, config); await Promise.all([ outSource(outDir, pipeline, options.config, source, options.cmdLine.mainThread || false), outExplorerData(outDir, crawlData), @@ -174,6 +179,7 @@ exports.publish = async function publish(options /*: PublishOptions */) { // Copy the contents of ./static to the output directory async function outStaticFiles( outDir /*: string */, + assetsDir /*: string */, config /*: ConfigSchema */, ) /*: Promise */ { if (config.template.variant !== "plain") { @@ -214,6 +220,20 @@ async function outStaticFiles( config.template.stylesheets = resolved; + return Promise.all(copyPromises); + })(), + (() => { + const assets = typeof config.template.assets === "string" ? + [config.template.assets] : config.template.assets; + const copyPromises = []; + + for (const asset of assets) { + copyPromises.push(fse.copy( + path.join(process.cwd(), asset), + assetsDir, + )); + } + return Promise.all(copyPromises); })(), ]); diff --git a/packages/webdoc-default-template/tmpl/components/content/text.tmpl b/packages/webdoc-default-template/tmpl/components/content/text.tmpl new file mode 100644 index 00000000..e871606c --- /dev/null +++ b/packages/webdoc-default-template/tmpl/components/content/text.tmpl @@ -0,0 +1,5 @@ + + diff --git a/packages/webdoc-default-template/tmpl/components/member/index.tmpl b/packages/webdoc-default-template/tmpl/components/member/index.tmpl index a4ced7c0..31195b4a 100644 --- a/packages/webdoc-default-template/tmpl/components/member/index.tmpl +++ b/packages/webdoc-default-template/tmpl/components/member/index.tmpl @@ -57,8 +57,8 @@ const modifiers = [ -
-
+
+
diff --git a/packages/webdoc-default-template/tmpl/components/member/params.tmpl b/packages/webdoc-default-template/tmpl/components/member/params.tmpl index 95163203..e2055ce0 100644 --- a/packages/webdoc-default-template/tmpl/components/member/params.tmpl +++ b/packages/webdoc-default-template/tmpl/components/member/params.tmpl @@ -55,7 +55,7 @@ params.forEach((param) => { - + diff --git a/packages/webdoc-default-template/tmpl/components/member/returns.tmpl b/packages/webdoc-default-template/tmpl/components/member/returns.tmpl index 6a4eb4dd..045bbdf9 100644 --- a/packages/webdoc-default-template/tmpl/components/member/returns.tmpl +++ b/packages/webdoc-default-template/tmpl/components/member/returns.tmpl @@ -18,7 +18,9 @@ const returns = obj || []; - + + + diff --git a/packages/webdoc-default-template/tmpl/document.tmpl b/packages/webdoc-default-template/tmpl/document.tmpl index c7f0c040..ec865ea9 100644 --- a/packages/webdoc-default-template/tmpl/document.tmpl +++ b/packages/webdoc-default-template/tmpl/document.tmpl @@ -38,8 +38,8 @@ -
-
+
+