2
0
Эх сурвалжийг харах

feat: code highlighting client-side

Nicolas Giard 6 жил өмнө
parent
commit
d393a95495

+ 5 - 1
client/themes/default/components/app.vue

@@ -49,7 +49,7 @@
               .headline.grey--text.text--darken-3 {{title}}
               .caption.grey--text.text--darken-1 {{description}}
           v-divider
-          .contents
+          .contents(ref='container')
             slot(name='contents')
 
         v-flex(lg3, xl2, fill-height, v-if='$vuetify.breakpoint.lgAndUp')
@@ -111,6 +111,7 @@
 
 <script>
 import { StatusIndicator } from 'vue-status-indicator'
+import Prism from '@/libs/prism/prism.js'
 
 export default {
   components: {
@@ -206,6 +207,9 @@ export default {
       }
     }
   },
+  mounted () {
+    Prism.highlightAllUnder(this.$refs.container)
+  },
   methods: {
     toggleNavigation () {
       this.navOpen = !this.navOpen

+ 18 - 68
client/themes/default/scss/app.scss

@@ -77,75 +77,25 @@
     }
   }
 
-  .hljs{
-    display: block;
-    overflow-x: auto;
-    padding: 1rem;
-    background: #232323;
-    color: #e6e1dc;
+  .prismjs{
+    border: none;
+    border-radius: 5px;
+    box-shadow: initial;
+    background-color: mc('grey', '900');
+    padding: 1rem 1rem 1rem 3rem;
     margin: 1rem 24px;
-    border-radius: .5rem;
-  }
-  .hljs-comment,.hljs-quote{
-      color:#bc9458;
-      font-style:italic
-  }
-  .hljs-keyword,.hljs-selector-tag{
-      color:#c26230
-  }
-  .hljs-string,.hljs-number,.hljs-regexp,.hljs-variable,.hljs-template-variable{
-      color:#a5c261
-  }
-  .hljs-subst{
-      color:#519f50
-  }
-  .hljs-tag,.hljs-name{
-      color:#e8bf6a
-  }
-  .hljs-type{
-      color:#da4939
-  }
-  .hljs-symbol,.hljs-bullet,.hljs-built_in,.hljs-builtin-name,.hljs-attr,.hljs-link{
-      color:#6d9cbe
-  }
-  .hljs-params{
-      color:#d0d0ff
-  }
-  .hljs-attribute{
-      color:#cda869
-  }
-  .hljs-meta{
-      color:#9b859d
-  }
-  .hljs-title,.hljs-section{
-      color:#ffc66d
-  }
-  .hljs-addition{
-      background-color:#144212;
-      color:#e6e1dc;
-      display:inline-block;
-      width:100%
-  }
-  .hljs-deletion{
-      background-color:#600;
-      color:#e6e1dc;
-      display:inline-block;
-      width:100%
-  }
-  .hljs-selector-class{
-      color:#9b703f
-  }
-  .hljs-selector-id{
-      color:#8b98ab
-  }
-  .hljs-emphasis{
-      font-style:italic
-  }
-  .hljs-strong{
-      font-weight:bold
-  }
-  .hljs-link{
-      text-decoration:underline
+
+    > code {
+      box-shadow: initial;
+      display: block;
+      font-size: .85rem;
+      font-family: 'Source Code Pro', monospace;
+
+      &:after, &:before {
+        content: initial;
+        letter-spacing: initial;
+      }
+    }
   }
 
 }

+ 2 - 2
server/modules/rendering/html-codehighlighter/definition.yml

@@ -1,6 +1,6 @@
 key: htmlCodehighlighter
-title: Code Highlighting
-description: Syntax highlighter for programming code
+title: Code Highlighting Post-Processor
+description: Syntax detector for programming code
 author: requarks.io
 icon: palette
 enabledDefault: true

+ 4 - 7
server/modules/rendering/html-codehighlighter/renderer.js

@@ -3,15 +3,12 @@ const hljs = require('highlight.js')
 module.exports = {
   async init($, config) {
     $('pre > code').each((idx, elm) => {
-      const lang = $(elm).attr('lang')
-      if (lang) {
-        $(elm).html(hljs.highlight(lang, $(elm).text(), true).value)
-      } else {
+      const codeClasses = $(elm).attr('class') || ''
+      if (codeClasses.indexOf('language-') < 0) {
         const result = hljs.highlightAuto($(elm).text())
-        $(elm).html(result.value)
-        $(elm).attr('lang', result.language)
+        $(elm).addClass('language-', result.language)
       }
-      $(elm).parent().addClass('hljs')
+      $(elm).parent().addClass('prismjs line-numbers')
     })
   }
 }

+ 1 - 1
server/modules/rendering/markdown-core/renderer.js

@@ -25,7 +25,7 @@ module.exports = {
       typographer: this.config.typographer,
       quotes: _.get(quoteStyles, this.config.quotes, quoteStyles.English),
       highlight(str, lang) {
-        return `<pre><code lang="${lang}">${_.escape(str)}</code></pre>`
+        return `<pre><code class="language-${lang}">${_.escape(str)}</code></pre>`
       }
     })
 

+ 2 - 2
server/modules/rendering/markdown-mathjax/definition.yml

@@ -1,6 +1,6 @@
 key: markdownMathjax
-title: Mathjax Pre-Processor
-description: Pre-parse TeX blocks for Mathjax
+title: Mathjax Preprocessor
+description: Prepare TeX blocks for Mathjax
 author: requarks.io
 icon: functions
 enabledDefault: false