summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/content_editor/components/wrappers/code_block.vue
blob: 1390b9b2daf08cd7b1d98c4f09dea8f1cee88256 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<script>
import { NodeViewWrapper, NodeViewContent } from '@tiptap/vue-2';
import { __ } from '~/locale';
import codeBlockLanguageLoader from '../../services/code_block_language_loader';

export default {
  name: 'CodeBlock',
  components: {
    NodeViewWrapper,
    NodeViewContent,
  },
  props: {
    node: {
      type: Object,
      required: true,
    },
    updateAttributes: {
      type: Function,
      required: true,
    },
  },
  async mounted() {
    const lang = codeBlockLanguageLoader.findLanguageBySyntax(this.node.attrs.language);
    await codeBlockLanguageLoader.loadLanguage(lang.syntax);

    this.updateAttributes({ language: this.node.attrs.language });
  },
  i18n: {
    frontmatter: __('frontmatter'),
  },
};
</script>
<template>
  <node-view-wrapper class="content-editor-code-block gl-relative code highlight" as="pre">
    <span
      v-if="node.attrs.isFrontmatter"
      data-testid="frontmatter-label"
      class="gl-absolute gl-top-0 gl-right-3"
      contenteditable="false"
      >{{ $options.i18n.frontmatter }}:{{ node.attrs.language }}</span
    >
    <node-view-content as="code" />
  </node-view-wrapper>
</template>