qusar 集成quasar-tiptap

2021-06-09  本文已影响0人  中v中

安装依赖

# required
yarn add tiptap
yarn add tiptap-extensions

# optional (required if diagram and latex formula enabled)
yarn add vue-codemirror
yarn add mermaid
yarn add katex

安装quasar-tiptap

yarn add quasar-tiptap

quasar.conf.js
Use mdi-v5 icon set and v-close-popup directive.

extras: [
  'mdi-v5'
],
framework: [
  directives: [
    'ClosePopup'
  ],
components: [
        'QLayout',
        'QHeader',
        'QDrawer',
        'QPageContainer',
        'QPage',
        'QToolbar',
        'QToolbarTitle',
        'QTooltip',
        'QBtn',
        'QBtnDropdown',
        'QBtnToggle',
        'QIcon',
        'QList',
        'QItem',
        'QExpansionItem',
        'QItemSection',
        'QItemLabel',
        'QScrollArea',
        'QScrollObserver',
        'QSeparator',
        'QMenu',
        'QAvatar',
        'QColor',
        'QInput',
        'QCheckbox',
        'QToggle',
        'QSpinner',
      ],
]

组件源码

<template>
  <div>
    <quasar-tiptap v-bind="options" @update="onUpdate" />
  </div>
</template>
<script>
import { QuasarTiptap } from 'quasar-tiptap';
import 'quasar-tiptap/lib/index.css';

export default {
  props: { context: String },
  name: 'cmsedit',
  components: {
    QuasarTiptap,
  },
  data() {
    return {
      options: {
        content: '',
        editable: true,
        showToolbar: true,
        showBubble: false,
        extensions: [
          // TipTap
          'Bold',
          'Italic',
          'Strike',
          'Underline',
          'Code',
          'CodeBlock',
          'CodeBlockHighlight',
          'BulletList',
          'OrderedList',
          'ListItem',
          'TodoList',
          'HorizontalRule',
          'Table',
          'Link',
          // QuasarTipTap
          // 'OTitle',
          // 'ODoc',
          'OParagraph',
          'OBlockquote',
          'OTodoItem',
          'OHeading',
          'OAlignment',
          'OIndent',
          'OLineHeight',
          'OForeColor',
          'OBackColor',
          'OFontFamily',
          'OIframe',
          'ODiagram',
          'OKatexBlock',
          'OKatexInline',
          'OFormatClear',
          'OPrint',
          'OImage',
          'OEmbed',
          // new Placeholder({
          //   showOnlyCurrent: false,
          //   emptyNodeText: node => {
          //     if (node.type.name === "title") {
          //       return "Title";
          //     }
          //     return "Content";
          //   }
          // })
        ],
        tableToolbar: [
          'bold',
          'italic',
          'table',
          'font-family',
          'fore-color',
          'back-color',
        ],
        toolbar: [
          // 1.name 2.object 3.component
          'bold',
          'italic',
          {
            name: 'text-format-dropdown',
            type: 'menu',
            options: {
              list: ['underline', 'strike', 'code'],
            },
          },
          'separator',
          'heading',
          'font-family',
          'fore-color',
          'back-color',
          'format_clear',
          'separator',
          'align-dropdown',
          'indent-dropdown',
          'line-height',
          'separator',
          'horizontal',
          'list-dropdown',
          'separator',
          'link',
          // OLinkBtn, // use custom component
          'photo',
          'table',
          'separator',
          'blockquote',
          'code_block',
          // 'print',
        ],
        bubble: [
          'bold',
          'italic',
          'separator',
          'font-family',
          'fore-color',
          'back-color',
          'separator',
          'link',
          'separator',
          'align-group',
        ],
      },
      json: '',
      html: '',
    };
  },

  methods: {
    onUpdate({ getJSON, getHTML }) {
      this.json = getJSON();
      this.html = getHTML();
      // console.log('html', this.html);
    },
  },
  watch: {
    context: {
      handler(newVal, oldVal) {
        this.options.content = newVal;
        // console.log(`value changed: ${newVal}`);
      },
      immediate: true,
    },
  },
  mounted() {
    this.$o.lang.set('zh-hans');
  },
};
</script>

上一篇 下一篇

猜你喜欢

热点阅读