소스 검색

feat: save rendering configuration

NGPixel 5 년 전
부모
커밋
3b347f262c

+ 23 - 7
client/components/admin/admin-rendering.vue

@@ -20,7 +20,6 @@
           flat
           dark
           )
-          v-icon.mr-2 mdi-creation
           .subtitle-1 Pipeline
         v-expansion-panels.adm-rendering-pipeline(
           v-model='selectedCore'
@@ -132,6 +131,7 @@ import { get } from 'vuex-pathify'
 import { StatusIndicator } from 'vue-status-indicator'
 
 import renderersQuery from 'gql/admin/rendering/rendering-query-renderers.gql'
+import renderersSaveMutation from 'gql/admin/rendering/rendering-mutation-save-renderers.gql'
 
 export default {
   components: {
@@ -164,18 +164,34 @@ export default {
       })
     },
     async refresh () {
+      await this.$apollo.queries.renderers.refetch()
       this.$store.commit('showNotification', {
-        style: 'indigo',
-        message: `Coming soon...`,
-        icon: 'directions_boat'
+        message: 'Rendering active configuration has been reloaded.',
+        style: 'success',
+        icon: 'cached'
       })
     },
     async save () {
+      this.$store.commit(`loadingStart`, 'admin-rendering-saverenderers')
+      await this.$apollo.mutate({
+        mutation: renderersSaveMutation,
+        variables: {
+          renderers: _.reduce(this.renderers, (result, core) => {
+            result = _.concat(result, core.children.map(rd => ({
+              key: rd.key,
+              isEnabled: rd.isEnabled,
+              config: rd.config.map(cfg => ({ key: cfg.key, value: JSON.stringify({ v: cfg.value.value }) }))
+            })))
+            return result
+          }, [])
+        }
+      })
       this.$store.commit('showNotification', {
-        style: 'indigo',
-        message: `Coming soon...`,
-        icon: 'directions_boat'
+        message: 'Rendering configuration saved successfully.',
+        style: 'success',
+        icon: 'check'
       })
+      this.$store.commit(`loadingStop`, 'admin-rendering-saverenderers')
     }
   },
   apollo: {

+ 2 - 2
server/graph/resolvers/rendering.js

@@ -41,10 +41,10 @@ module.exports = {
     async updateRenderers(obj, args, context) {
       try {
         for (let rdr of args.renderers) {
-          await WIKI.models.storage.query().patch({
+          await WIKI.models.renderers.query().patch({
             isEnabled: rdr.isEnabled,
             config: _.reduce(rdr.config, (result, value, key) => {
-              _.set(result, `${value.key}`, value.value)
+              _.set(result, `${value.key}`, _.get(JSON.parse(value.value), 'v', null))
               return result
             }, {})
           }).where('key', rdr.key)

+ 0 - 1
server/graph/schemas/rendering.graphql

@@ -50,6 +50,5 @@ type Renderer {
 input RendererInput {
   isEnabled: Boolean!
   key: String!
-  mode: String!
   config: [KeyValuePairInput]
 }

+ 8 - 0
server/models/renderers.js

@@ -90,6 +90,14 @@ module.exports = class Renderer extends Model {
       } else {
         WIKI.logger.info(`No new renderers found: [ SKIPPED ]`)
       }
+
+      // -> Delete removed Renderers
+      for (const renderer of dbRenderers) {
+        if (!_.some(WIKI.data.renderers, ['key', renderer.key])) {
+          await WIKI.models.renderers.query().where('key', renderer.key).del()
+          WIKI.logger.info(`Removed renderer ${renderer.key} because it is no longer present in the modules folder: [ OK ]`)
+        }
+      }
     } catch (err) {
       WIKI.logger.error(`Failed to scan or load new renderers: [ FAILED ]`)
       WIKI.logger.error(err)

+ 0 - 9
server/modules/rendering/html-mathjax/definition.yml

@@ -1,9 +0,0 @@
-key: htmlMathjax
-title: Mathjax Processor
-description: TeX/MathML Math Equations Parser
-author: requarks.io
-icon: mdi-function-variant
-enabledDefault: false
-dependsOn: htmlCore
-step: pre
-props: {}

+ 0 - 82
server/modules/rendering/html-mathjax/mathjax.js

@@ -1,82 +0,0 @@
-const mathjax = require('mathjax-node')
-const _ = require('lodash')
-
-// ------------------------------------
-// Mathjax
-// ------------------------------------
-
-/* global WIKI */
-
-const mathRegex = [
-  {
-    format: 'TeX',
-    regex: /\\\[([\s\S]*?)\\\]/g
-  },
-  {
-    format: 'inline-TeX',
-    regex: /\\\((.*?)\\\)/g
-  },
-  {
-    format: 'MathML',
-    regex: /<math([\s\S]*?)<\/math>/g
-  }
-]
-
-module.exports = {
-  init ($, config) {
-    mathjax.config({
-      MathJax: {
-        jax: ['input/TeX', 'input/MathML', 'output/SVG'],
-        extensions: ['tex2jax.js', 'mml2jax.js'],
-        TeX: {
-          extensions: ['AMSmath.js', 'AMSsymbols.js', 'noErrors.js', 'noUndefined.js']
-        },
-        SVG: {
-          scale: 120,
-          font: 'STIX-Web'
-        }
-      }
-    })
-  },
-  async render (content) {
-    let matchStack = []
-    let replaceStack = []
-    let currentMatch
-    let mathjaxState = {}
-
-    _.forEach(mathRegex, mode => {
-      do {
-        currentMatch = mode.regex.exec(content)
-        if (currentMatch) {
-          matchStack.push(currentMatch[0])
-          replaceStack.push(
-            new Promise((resolve, reject) => {
-              mathjax.typeset({
-                math: (mode.format === 'MathML') ? currentMatch[0] : currentMatch[1],
-                format: mode.format,
-                speakText: false,
-                svg: true,
-                state: mathjaxState,
-                timeout: 30 * 1000
-              }, result => {
-                if (!result.errors) {
-                  resolve(result.svg)
-                } else {
-                  resolve(currentMatch[0])
-                  WIKI.logger.warn(result.errors.join(', '))
-                }
-              })
-            })
-          )
-        }
-      } while (currentMatch)
-    })
-
-    return (matchStack.length > 0) ? Promise.all(replaceStack).then(results => {
-      _.forEach(matchStack, (repMatch, idx) => {
-        content = content.replace(repMatch, results[idx])
-      })
-      return content
-    }) : Promise.resolve(content)
-  }
-}

+ 0 - 8
server/modules/rendering/markdown-mathjax/definition.yml

@@ -1,8 +0,0 @@
-key: markdownMathjax
-title: Mathjax Preprocessor
-description: Prepare TeX blocks for Mathjax
-author: requarks.io
-icon: mdi-function-variant
-enabledDefault: false
-dependsOn: markdownCore
-props: {}

+ 0 - 11
server/modules/rendering/markdown-mathjax/renderer.js

@@ -1,11 +0,0 @@
-const mdMathjax = require('markdown-it-mathjax')()
-
-// ------------------------------------
-// Markdown - Mathjax Preprocessor
-// ------------------------------------
-
-module.exports = {
-  init (md, conf) {
-    md.use(mdMathjax)
-  }
-}