基于若依框架实现markdown在线编辑

5 篇文章 0 订阅
2 篇文章 0 订阅

基于若依框架实现markdown在线编辑

1. 下载mavon-editor

npm install mavon-editor --save

2. 打开main.js文件, 添加如下

// markdown组件
import { mavonEditor } from "mavon-editor";
import "mavon-editor/dist/css/index.css";

// markdown组件
Vue.component("mavon-editor", mavonEditor);

3. 打开package.json, 找到 “dependencies”

// 添加
"mavon-editor": "^2.10.4",

4. 新建vue页面

<template>
  <div>
    <mavon-editor class="markdown"
                  :value="get_mark_data()"
                  :subfield="true"
                  :defaultOpen="prop.defaultOpen"
                  :toolbarsFlag="prop.toolbarsFlag"
                  :editable="prop.editable"
                  :scrollStyle="prop.scrollStyle"
                  :toolbars="toolbars"
                  :code-style="prop.codeStyle"
                  @change="changeFn"
                  @save="saveFn"
                  @imgAdd="imgAddFn"
                  language="zh"
                  navigation
                  ishljs
                  ref="md"
    >
      <!-- 左工具栏后加入自定义按钮  -->
      <template slot="left-toolbar-after">
        <button
          type="button"
          @click="downFile()"
          class="op-icon fa fa-mavon-align-left"
          aria-hidden="true"
          title="下载"
        ></button>
      </template>
    </mavon-editor>
</template>

<script>
import { saveAs } from 'file-saver'
import { saveFileAndData } from '@/utils/util'

export default {
  data() {
    return {
      fileInfo: '',
      context: '',//输入的数据
      html: '',
      toolbars: {
        bold: true, // 粗体
        italic: true, // 斜体
        header: true, // 标题
        underline: true, // 下划线
        strikethrough: true, // 中划线
        mark: true, // 标记
        superscript: true, // 上角标
        subscript: true, // 下角标
        quote: true, // 引用
        ol: true, // 有序列表
        ul: true, // 无序列表
        link: true, // 链接
        imagelink: true, // 图片链接
        code: true, // code
        table: true, // 表格
        fullscreen: true, // 全屏编辑
        readmodel: true, // 沉浸式阅读
        htmlcode: true, // 展示html源码
        help: true, // 帮助
        /* 1.3.5 */
        undo: true, // 上一步
        redo: true, // 下一步
        trash: true, // 清空
        save: true, // 保存(触发events中的save事件)
        /* 1.4.2 */
        navigation: true, // 导航目录
        /* 2.1.8 */
        alignleft: true, // 左对齐
        aligncenter: true, // 居中
        alignright: true, // 右对齐
        /* 2.2.1 */
        subfield: true, // 单双栏模式
        preview: true // 预览
      }
    }
  },
  created() {
    
  },
  computed: {
    prop() {
      let data = {
        subfield: false,// 单双栏模式
        defaultOpen: 'preview',//edit: 默认展示编辑区域 , preview: 默认展示预览区域
        editable: true,
        toolbarsFlag: true,
        scrollStyle: true,
        bold: false,
        codeStyle: 'code-github'
      }
      return data
    }
  },

  methods: {
    // 编辑区域内容改变
    changeFn(value, render) {
      console.log('编辑改变数据====')
      this.fileInfo = render
      this.html = render
    },
    // 保存的时候的事件
    saveFn(e) {
      this.fileInfo = e
    },
    // 下载.md文件
    downFile() {
      console.log('下载文件')
      let name = new Date()+'.md'
      let str = new Blob([this.fileInfo], {type: 'application/x-genesis-rom'});
      // 注意这里要手动写上文件的后缀名
      saveAs(str, name );
    },
    // 添加上传图片事件
    imgAddFn(pos, imgfile) {
      var formdata = new FormData()
      formdata.append('file', imgfile)
      // 第一步.将图片上传到服务器.
      saveFileAndData('yizhi-note', formdata).then(res => {
        // 第二步.将返回的url替换到文本原位置![...](0) -> ![...](url)
        /**
         * $vm 指为mavonEditor实例,可以通过如下两种方式获取
         * 1. 通过引入对象获取: `import {mavonEditor} from ...` 等方式引入后,`$vm`为`mavonEditor`
         * 2. 通过$refs获取: html声明ref : `<mavon-editor ref=md ></mavon-editor>,`$vm`为 `this.$refs.md`
         */
        // 第一种不知道为什么$vm不好使,未解决
        // $vm.$img2Url(pos, res);
        // 第二种 需要在上方添加 添加 ref = md,然后才可以使用
        this.$refs.md.$img2Url(pos, res.data.url)
      })
    },

    get_mark_data() {
      // return 'asd'
    }
  }
}
</script>
<style scoped>
.markdown {
  /*width: 700px;*/
  width: 100%;
  /* 暂时未限制高度 height: 500px;*/
  margin: 0 auto;
}
</style>

解析:

  1. changeFn():监听编辑区域改变数据,根据需要完善功能
  1. saveFn():保存事件,根据需要完善功能

  2. 自定义添加按钮

    <!-- 左工具栏后加入自定义按钮  -->
          <template slot="left-toolbar-after">
            <button
              type="button"
              @click="downFile()"
              class="op-icon fa fa-mavon-align-left"
              aria-hidden="true"
              title="下载"
            ></button>
          </template>
    

    downFile():下载.md文件到本地

  3. imgAddFn():上传文件事件,这里集成了自己的oss服务器,最后用的是图片路径
    在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Markdown是一种轻量级的标记语言,可以方便地将文本转换为HTML等格式。在Python中,有很多支持Markdown的库和工具,可以用来在线编辑文档。 其中比较常用的是Flask框架,结合Markdown库和模板引擎,可以很方便地实现一个简单的在线编辑器。 以下是一个基于Flask和Markdown在线编辑器示例: ```python from flask import Flask, render_template, request import markdown app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/preview', methods=['POST']) def preview(): md_text = request.form['md_text'] html_text = markdown.markdown(md_text) return html_text if __name__ == '__main__': app.run(debug=True) ``` 上述代码中,`index`函数返回一个包含Markdown编辑器和预览区域的HTML模板,`preview`函数接收POST请求,将Markdown文本转换为HTML并返回。 在`templates`文件夹下创建`index.html`模板文件: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Markdown编辑器</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vditor@3.6.5/dist/index.css"> </head> <body> <div> <textarea id="md_text" style="width: 50%; height: 500px;"></textarea> <button onclick="preview()">预览</button> </div> <div> <div id="preview"></div> </div> <script src="https://cdn.jsdelivr.net/npm/vditor@3.6.5/dist/index.min.js"></script> <script> var vditor = new Vditor("md_text", { cache: { enable: false }, height: 500, mode: "sv", toolbarConfig: { pin: true } }); function preview() { var md_text = vditor.getValue(); var xhr = new XMLHttpRequest(); xhr.open('POST', '/preview', true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function() { if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { var html_text = xhr.responseText; document.getElementById('preview').innerHTML = html_text; } }; xhr.send('md_text=' + encodeURIComponent(md_text)); } </script> </body> </html> ``` 在模板中引入了`vditor`库,实现了一个简单的Markdown编辑器和预览区域。 启动应用后,访问`http://localhost:5000`即可开始在线编辑Markdown文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yizhi-w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值