Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add an example of using with Prism.js #117

Open
dominik-korsa opened this issue Mar 13, 2020 · 4 comments
Open

Add an example of using with Prism.js #117

dominik-korsa opened this issue Mar 13, 2020 · 4 comments

Comments

@dominik-korsa
Copy link

Hi! I've been trying to add Syntax Highlighting to my app, but I haven't found any resources describing how you are supposed to do this.

Could you show me an example of using this vue-markdown with Prism.js (or any other syntax highlighter)? I also think it would be a great idea to add an example to the README.md file.

@0w0zzzzzz
Copy link

I add it by referenced to #21

<template>
    <textarea v-model="input"></v-textarea>
    <vue-markdown :source="input" @rendered="update"></vue-markdown>
</template>

<script>
import VueMarkdown from "vue-markdown";
import Prism from "prismjs";
import "prismjs/themes/prism-okaidia.css";  // theme
import 'prismjs/components/prism-go.min';  // language

export default {
  components: {
    VueMarkdown
  },
  data: () => ({
    input: `\`\`\`go
    func test() int {
      return 0
    }
    \`\`\``
  }),
  methods: {
    update: function() {
      this.$nextTick(() => {
        Prism.highlightAll();
      });
    }
  }
};
</script>

And you may check whether prism-language.js extend other language like cpp.
I haven't tried babel-plugin-prismjs to configure Prism. You can test it if you want a lot of language and line number.

@dominik-korsa
Copy link
Author

Thank you very much! I also recommend you add an example and explanation to README.md for other people.

@dib-nhnl
Copy link

dib-nhnl commented Apr 28, 2020

I tried babel-plugin-prismjs

in babel.config.js:

"plugins": [
  ["prismjs", {
    "languages": ["javascript", "css", "markup", "json"],
    "plugins": ["line-numbers"],
    "theme": "okaidia",
    "css": true
  }]
]

It will be smarter, there is no need to have :

import "prismjs/themes/prism-okaidia.css";  // theme
import 'prismjs/components/prism-go.min';  // language

in your vue component, and more configurable.

@jaysalvat
Copy link

jaysalvat commented May 29, 2020

Hello.

The best solution to me was to create a wrapper component. Eg: MyMarkdown.vue

<template>
  <VueMarkdown v-bind="$props" />
</template>

<script>
  import VueMarkdown from 'vue-markdown'
  import Prism from 'prismjs'
  import 'prismjs/themes/prism-dark.css'

  export default {
    components: {
      VueMarkdown
    },

    props: {
      ...VueMarkdown.props,
      emoji: {
        default: false,
        type: Boolean
      },
      html: {
        default: false,
        type: Boolean
      }
    },

    mounted() {
      this.$nextTick(() => {
        Prism.highlightAll()
      });
    }
  }
</script>

And use this wrapper <MyMarkdown /> instead of VueMarkdown in other components.

Hope it helps.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants