美文网首页
editor.md #js markdown编辑器

editor.md #js markdown编辑器

作者: IamaStupid | 来源:发表于2020-07-13 16:49 被阅读0次

    文档: editor.md.ipandao.com

    editor.md编辑器

    1. 需要依赖 jquery.js 或者 zepto.js
    2. 引入editormd.min.css,editormd.min.js
    3. 除此之外,editor.md项目中的lib/plugins/fonts/images/languages 几个文件夹也不能删除,因为代码运行时,会引入里面的文件
      代码:
     <button onclick="handleEditormdUnWatch()">关闭实时预览</button>
     <button onclick="handleEditormdWatch()">实时预览</button>
     <button onclick="getMarkdown()">getMarkdown</button>
     <button onclick="getHTML()">getHTML</button>
    <div id="editor-md">
        <textarea style="display:none;" class="content-markdown" name="content-markdown"></textarea>
    </div>
    
    <script type="text/javascript">
    
            var editor = editormd("editor-md", {
                width  : "100%",            //宽度,不填为100%
                height : "500px",           //高度,不填为100%
                //theme : "dark",             //主题,不填为默认主题
                path   : "editormd/lib/",   //editor.md插件的lib目录地址
                saveHTMLToTextarea : true, // 保存 HTML 到 Textarea
                toolbarAutoFixed:true,      //工具栏自动固定定位的开启与禁用
                watch : false,                // 关闭实时预览
                toolbar  : false,             //关闭工具栏
                emoji : true,
                taskList : true,
                tocm            : true,         // Using [TOCM]
                tex : true,                   // 开启科学公式TeX语言支持,默认关闭
                flowChart : true,             // 开启流程图支持,默认关闭
                sequenceDiagram : true,       // 开启时序/序列图支持,默认关闭,
                imageUpload : true,
                imageFormats : ["jpg", "jpeg", "gif", "png", "bmp", "webp"],
                imageUploadURL : "./php/upload.php",
                onload : function() {
                    // console.log('onload', this);
                    //this.fullscreen();
                    //this.unwatch();
                    //this.watch().fullscreen();
                    //this.setMarkdown("#PHP");
                    //this.width("100%");
                    //this.height(480);
                    //this.resize("100%", 640);
                }
            });
            
            editormd.katexURL = {
                js  : "./editormd/plugins/KaTeX/katex.min",  // default: //cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min
                css : "./editormd/plugins/KaTeX/katex.min"   // default: //cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min
            };
            
            // editor.gotoLine(90);//转到第90行
     
            // editor.show();//显示编辑器
    
            // editor.hide();//隐藏编辑器
    
            // alert(testEditor.getMarkdown());//获取编辑器内容(不含html)
    
            // alert(editor.getHTML());//获取编辑器html内容
        
            // editor.watch();//开启双窗口对比
                        
            // editor.unwatch();//取消双窗口对比
                    
            // editor.previewing();//预览效果
            
            // editor.fullscreen();//全屏(按ESC取消)
            
            // editor.showToolbar();//显示工具栏
    
            // editor.hideToolbar();//隐藏工具栏
        
            // editor.config({
            //         tocDropdown   : true,
            //         tocTitle      : "目录 Table of Contents",
            // });//TOC下拉菜单
            
            // editor.config("tocDropdown", false);//TOC默认 
            function handleEditormdWatch () {
                editor.watch()
            }
            function handleEditormdUnWatch() {
                editor.unwatch()
            }
            function getMarkdown() {
                console.log(editor.getMarkdown())
            }
            function getHTML() {
                console.log(editor.getHTML())
            }
    </script>
    

    vue 集成editor.md:

    image.png
    // src/components/EditorMd.vue
    <template>
      <div :id="id">
        <!-- Tips: Editor.md can auto append a `<textarea>` tag -->
        <textarea style="display:none;" v-model="contentMd"></textarea>
    </div>
    </template>
    <script>
    import '/public/editormd/css/editormd.min.css'
    if (typeof window !== 'undefined') {
        var $s = require('scriptjs');
    }
    export default {
      name: 'editor.md',
      props: {
        id: {
          type: String,
          default: 'editor-md'
        },
        content: {
          type: String,
          default: '### Hello Editor.md !'
        },
        editorPath: {
          type: String,
          default: '/editormd',
        },
        editorConfig: {
          type: Object,
          default() {
            return {
              width: this.width,
              height: window.innerHeight > 400 ? (window.innerHeight - 100) : 380,
              path: '/editormd/lib/',
              codeFold: true,
              saveHTMLToTextarea: true,
              searchReplace: true,
              htmlDecode: 'style,script,iframe|on*',
              emoji: true,
              onchange : ()=>{
                this.$emit('change',this.instance.getPreviewedHTML(),this.instance.getMarkdown())
              }
            }
          }
        }
      },
      data() {
        return {
          instance: null,
          contentMd: ''
        };
      },
      mounted () {
        //加载依赖
          $s([
            `${this.editorPath}/jquery.min.js`,
            `${this.editorPath}/lib/marked.min.js`,
            `${this.editorPath}/lib/prettify.min.js`,
            `${this.editorPath}/lib/underscore.min.js`,
            `${this.editorPath}/lib/raphael.min.js`,
            // `${this.editorPath}/lib/flowchart.min.js`,
            // `${this.editorPath}/lib/jquery.flowchart.min.js`,
            // `${this.editorPath}/lib/sequence-diagram.min.js`
          ], () => {
            $s(`${this.editorPath}/editormd.js`, () => {
              let editorMD = window.editormd
             this.$nextTick(() => {
                if (editorMD) {
                    this.instance = editorMD(this.id, this.editorConfig);
                }
              });
            });
          });
      },
      watch: {
        content: {
          handler(newVal) {
            console.log(newVal)
            this.contentMd = newVal
          },
          immediate: true
        }
      }
    }
    </script>
    
    <!-- Add "scoped" attribute to limit CSS to this component only -->
    <style scoped lang="less">
    </style>
    
    // src/views/About.vue
    <template>
      <editor-md :content="content" @change="handleChange"></editor-md>
    </template>
    <script>
    // @ is an alias to /src
    import EditorMd from '@/components/EditorMd.vue'
    export default {
      name: 'About',
      components: {
        EditorMd
      },
      data () {
        return {
          content: '',
          editorPath: '/editormd'
        }
      },
      created () {
        this.fileMd()
      },
      methods: {
        fileMd () {
          let demo = `### Hello Editor.md !!!!!!`
          this.content = demo
        },
        handleChange (html, md) {
          console.log('handleChange: >>>>')
          console.log(html)
          console.log(md)
          console.log('handleChange: <<<<')
        }
      }
    }
    </script>
    

    相关文章

      网友评论

          本文标题:editor.md #js markdown编辑器

          本文链接:https://www.haomeiwen.com/subject/asfzcktx.html