summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/vue_shared/components/markdown/header.vue
blob: 36d2d1dc1641c6477fba9637b8e4d8cf04f46dc9 (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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<script>
  import tooltip from '../../directives/tooltip';
  import toolbarButton from './toolbar_button.vue';
  import icon from '../icon.vue';

  export default {
    props: {
      previewMarkdown: {
        type: Boolean,
        required: true,
      },
    },
    directives: {
      tooltip,
    },
    components: {
      toolbarButton,
      icon,
    },
    methods: {
      isMarkdownForm(form) {
        return form && !form.find('.js-vue-markdown-field').length;
      },

      previewMarkdownTab(event, form) {
        if (event.target.blur) event.target.blur();
        if (this.isMarkdownForm(form)) return;

        this.$emit('preview-markdown');
      },

      writeMarkdownTab(event, form) {
        if (event.target.blur) event.target.blur();
        if (this.isMarkdownForm(form)) return;

        this.$emit('write-markdown');
      },
    },
    mounted() {
      $(document).on('markdown-preview:show.vue', this.previewMarkdownTab);
      $(document).on('markdown-preview:hide.vue', this.writeMarkdownTab);
    },
    beforeDestroy() {
      $(document).off('markdown-preview:show.vue', this.previewMarkdownTab);
      $(document).off('markdown-preview:hide.vue', this.writeMarkdownTab);
    },
  };
</script>

<template>
  <div class="md-header">
    <ul class="nav-links clearfix">
      <li
        class="md-header-tab"
        :class="{ active: !previewMarkdown }">
        <a
          class="js-write-link"
          href="#md-write-holder"
          tabindex="-1"
          @click.prevent="writeMarkdownTab($event)">
          Write
        </a>
      </li>
      <li
        class="md-header-tab"
        :class="{ active: previewMarkdown }">
        <a
          class="js-preview-link"
          href="#md-preview-holder"
          tabindex="-1"
          @click.prevent="previewMarkdownTab($event)">
          Preview
        </a>
      </li>
      <li
        class="md-header-toolbar"
        :class="{ active: !previewMarkdown }">
        <toolbar-button
          tag="**"
          button-title="Add bold text"
          icon="bold" />
        <toolbar-button
          tag="*"
          button-title="Add italic text"
          icon="italic" />
        <toolbar-button
          tag="> "
          :prepend="true"
          button-title="Insert a quote"
          icon="quote" />
        <toolbar-button
          tag="`"
          tag-block="```"
          button-title="Insert code"
          icon="code" />
        <toolbar-button
          tag="* "
          :prepend="true"
          button-title="Add a bullet list"
          icon="list-bulleted" />
        <toolbar-button
          tag="1. "
          :prepend="true"
          button-title="Add a numbered list"
          icon="list-numbered" />
        <toolbar-button
          tag="* [ ] "
          :prepend="true"
          button-title="Add a task list"
          icon="task-done" />
        <button
          v-tooltip
          aria-label="Go full screen"
          class="toolbar-btn toolbar-fullscreen-btn js-zen-enter"
          data-container="body"
          tabindex="-1"
          title="Go full screen"
          type="button">
          <icon
            name="screen-full">
          </icon>
        </button>
      </li>
    </ul>
  </div>
</template>