Răsfoiți Sursa

fix: use frontmatter format for metadata in storage

Nick 6 ani în urmă
părinte
comite
37556399b6

+ 1 - 1
Makefile

@@ -24,7 +24,7 @@ test: ## Run code linting tests
 	pug-lint server/views && jest
 
 docker-dev-up: ## Run dockerized dev environment
-	docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . up -d
+	docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . up -d --remove-orphans
 	docker-compose -f ./dev/docker-${DEVDB}/docker-compose.yml -p wiki --project-directory . exec wiki yarn dev
 
 docker-dev-down: ## Shutdown dockerized dev environment

+ 21 - 0
server/models/pages.js

@@ -114,6 +114,27 @@ module.exports = class Page extends Model {
     })
   }
 
+  /**
+   * Inject page metadata into contents
+   */
+  injectMetadata () {
+    let meta = [
+      ['title', this.title],
+      ['description', this.description],
+      ['published', this.isPublished.toString()],
+      ['date', this.updatedAt],
+      ['tags', '']
+    ]
+    switch (this.contentType) {
+      case 'markdown':
+        return '---\n' + meta.map(mt => `${mt[0]}: ${mt[1]}`).join('\n') + '\n---\n\n' + this.content
+      case 'html':
+        return '<!--\n' + meta.map(mt => `${mt[0]}: ${mt[1]}`).join('\n') + '\n-->\n\n' + this.content
+      default:
+        return this.content
+    }
+  }
+
   static async createPage(opts) {
     await WIKI.models.pages.query().insert({
       authorId: opts.authorId,

+ 2 - 25
server/modules/storage/disk/storage.js

@@ -15,29 +15,6 @@ const getFileExtension = (contentType) => {
   }
 }
 
-/**
- * Inject page metadata into contents
- */
-const injectMetadata = (page) => {
-  let meta = [
-    ['title', page.title],
-    ['description', page.description]
-  ]
-  let metaFormatted = ''
-  switch (page.contentType) {
-    case 'markdown':
-      metaFormatted = meta.map(mt => `[//]: # ${mt[0]}: ${mt[1]}`).join('\n')
-      break
-    case 'html':
-      metaFormatted = meta.map(mt => `<!-- ${mt[0]}: ${mt[1]} -->`).join('\n')
-      break
-    default:
-      metaFormatted = meta.map(mt => `#WIKI ${mt[0]}: ${mt[1]}`).join('\n')
-      break
-  }
-  return `${metaFormatted}\n\n${page.content}`
-}
-
 module.exports = {
   async activated() {
     // not used
@@ -56,12 +33,12 @@ module.exports = {
   async created(page) {
     WIKI.logger.info(`(STORAGE/DISK) Creating file ${page.path}...`)
     const filePath = path.join(this.config.path, `${page.path}.${getFileExtension(page.contentType)}`)
-    await fs.outputFile(filePath, injectMetadata(page), 'utf8')
+    await fs.outputFile(filePath, page.injectMetadata(), 'utf8')
   },
   async updated(page) {
     WIKI.logger.info(`(STORAGE/DISK) Updating file ${page.path}...`)
     const filePath = path.join(this.config.path, `${page.path}.${getFileExtension(page.contentType)}`)
-    await fs.outputFile(filePath, injectMetadata(page), 'utf8')
+    await fs.outputFile(filePath, page.injectMetadata(), 'utf8')
   },
   async deleted(page) {
     WIKI.logger.info(`(STORAGE/DISK) Deleting file ${page.path}...`)

+ 2 - 25
server/modules/storage/git/storage.js

@@ -17,29 +17,6 @@ const getFileExtension = (contentType) => {
   }
 }
 
-/**
- * Inject page metadata into contents
- */
-const injectMetadata = (page) => {
-  let meta = [
-    ['title', page.title],
-    ['description', page.description]
-  ]
-  let metaFormatted = ''
-  switch (page.contentType) {
-    case 'markdown':
-      metaFormatted = meta.map(mt => `[//]: # ${mt[0]}: ${mt[1]}`).join('\n')
-      break
-    case 'html':
-      metaFormatted = meta.map(mt => `<!-- ${mt[0]}: ${mt[1]} -->`).join('\n')
-      break
-    default:
-      metaFormatted = meta.map(mt => `#WIKI ${mt[0]}: ${mt[1]}`).join('\n')
-      break
-  }
-  return `${metaFormatted}\n\n${page.content}`
-}
-
 module.exports = {
   git: null,
   repoPath: path.join(process.cwd(), 'data/repo'),
@@ -131,7 +108,7 @@ module.exports = {
     WIKI.logger.info(`(STORAGE/GIT) Committing new file ${page.path}...`)
     const fileName = `${page.path}.${getFileExtension(page.contentType)}`
     const filePath = path.join(this.repoPath, fileName)
-    await fs.outputFile(filePath, injectMetadata(page), 'utf8')
+    await fs.outputFile(filePath, page.injectMetadata(), 'utf8')
 
     await this.git.add(`./${fileName}`)
     await this.git.commit(`docs: create ${page.path}`, fileName, {
@@ -142,7 +119,7 @@ module.exports = {
     WIKI.logger.info(`(STORAGE/GIT) Committing updated file ${page.path}...`)
     const fileName = `${page.path}.${getFileExtension(page.contentType)}`
     const filePath = path.join(this.repoPath, fileName)
-    await fs.outputFile(filePath, injectMetadata(page), 'utf8')
+    await fs.outputFile(filePath, page.injectMetadata(), 'utf8')
 
     await this.git.add(`./${fileName}`)
     await this.git.commit(`docs: update ${page.path}`, fileName, {