diff --git a/buildModules/memo/index.ts b/buildModules/memo/index.ts new file mode 100644 index 00000000..98da8420 --- /dev/null +++ b/buildModules/memo/index.ts @@ -0,0 +1,23 @@ +import {Module} from '@nuxt/types' + +interface MemoModuleOptions { +} + +const toolConfigModule: Module = function () { + const {extendBuild} = this + + extendBuild((config) => { + if (!config.module) { + // eslint-disable-next-line no-console + console.warn('Failed to register the memo module.') + return + } + + config.module.rules.push({ + resourceQuery: /blockType=memo/, + loader: require.resolve('./loader.js') + }) + }) +} + +export default toolConfigModule diff --git a/buildModules/memo/loader.js b/buildModules/memo/loader.js new file mode 100644 index 00000000..b882d250 --- /dev/null +++ b/buildModules/memo/loader.js @@ -0,0 +1,11 @@ +const loader = function (source, map) { + this.callback( + null, + `export default function (Component) { + Component.options.__memo = ${JSON.stringify(source)} + }`, + map + ) +} + +module.exports = loader diff --git a/components/Memo.vue b/components/Memo.vue index 3d38c5ed..86f6bb2d 100644 --- a/components/Memo.vue +++ b/components/Memo.vue @@ -1,37 +1,24 @@ @@ -41,66 +28,108 @@ import {Component} from 'nuxt-property-decorator' import Tool from './Tool.vue' import {CopyableMixin} from '~/mixins/copyable.mixin' import ToolHeader from '~/components/ToolHeader.vue' - -type MemoItems = { section: string, items: { text: string, code?: string, subtitle?: string }[] }[]; +import {toc} from '~/utils/md-toc' @Component({ mixins: [CopyableMixin], components: {ToolHeader} }) export default class Memo extends Tool { - private items: MemoItems = this.$t('memo') as unknown as MemoItems + fetchOnServer = true + content: string = '' + toc: string = '' + + fetch() { + // @ts-ignore + const content: string = this.$options.__memo.trim() + + this.toc = this.$md.render(toc(content).join('\n')) + this.content = this.$md.render(content) + } } -