markdown在线编辑器 editor.md 二次开发

需求

经常需要在网络论坛发布文章进行宣传,但每个论坛的编写格式存在差异,给发布带来了很大的障碍。

最近markdown格式的兴起,给广大发布者带来了福音,一种文档格式大部分网站都支持,一次编写即可在多个论坛上发布。

如何在线编写markdown就成为一种需求。

markdown编辑器调研

经过查找和对比,发现editor.md是一款开源的markdown编辑器,非常的不错,实例丰富,使用比较简单。

editor.md 经过实际测试,发现几个小需求:

  • 自定义工具栏
    添加自己需要的内容非常有帮助
  • 无法快速移动光标到文档尾
    如果文档比较大,想要移动到文档尾部,比较麻烦
  • 无法上传图片
    需要配置服务端php才能支持
  • 无法复制粘贴图片进行上传
    这个功能非常的有用
  • 定期保存内容到浏览器
    一旦电脑崩溃了,编写的内容就全没了

打造在线markdown编辑器

自定义工具栏

index.html文件 增加如下三个配置,即可在工具栏增加html代码

toolbarIcons : function() {var toolBarIconArray=editormd.toolbarModes["full"];toolBarIconArray.push("aboutus");return toolBarIconArray;},

自定义html代码

toolbarCustomIcons : {aboutus   :"<a href=\"http://u.720life.cn/s/75244496\" target=\"_blank\"  onclick=\"window.location.href='http://u.720life.cn/s/75244496'\">交流Q群:1142802013 </a>" },

editor.md 快速移动光标

在研究editor.md功能后,发现有移动光标功能,可以指定移动光标到多少行,使用起来稍微复杂一些,需要用户自己输入

1.editormd.js 中增加gfirst,glast

  full: ["undo","redo","|","gfirst", //新添加"glast",  //新添加"|",

2.添加描述信息,鼠标放上去时的说明

     toolbar: {undo: "撤销(Ctrl+Z)",redo: "重做(Ctrl+Y)",gfirst: "回到顶端",glast: "到底端",bold: "粗体",

3.图标的定义

    toolbarIconsClass: {undo: "fa-undo",redo: "fa-repeat",gfirst: "fa-arrow-up",glast: "fa-arrow-down",bold: "fa-bold",

4.具体实现功能代码

     editormd.toolbarHandlers = {undo: function() {this.cm.undo()},redo: function() {this.cm.redo()},gfirst: function() {this.gotoLine("first")},glast: function() {this.gotoLine("last")},

注意: 最开始以为 gotoLine是 this.cm.gotoLine的函数,但这样总报错,最终发现cm下的函数应该是 \lib\codemirror\lib\codemirror.js 下面的,因此直接写this.gotoLine即可

文件上传功能修改

  • 支持绝对路径返回
    php/upload.php
 $path     = getcwd() . DIRECTORY_SEPARATOR;//$url      = dirname($_SERVER['PHP_SELF']) . '/';$url = $_SERVER["REQUEST_SCHEME"] .'://'.$_SERVER['HTTP_HOST'] . '/';//按照月份进行记录$_time = date('Ym');//用户是否是免费用户 免费用户free 付费用户pay_token$savePath = $path . '../../uploads/free/';// 创建images 目录if (!file_exists($savePath)) mkdir($savePath);$savePath = $savePath . $_time.DIRECTORY_SEPARATOR;// 创建月份 目录if (!file_exists($savePath)) mkdir($savePath);$saveURL  = $url . 'uploads/free/'.$_time.DIRECTORY_SEPARATOR;
  • 保存文件路径失败的修改
    php/upload.php
$imageUploader = new EditorMdUploader($savePath, $saveURL, $formats['image'],  1, 'H_i_s');

浏览器js读取剪切板图片 上传到服务器

document.addEventListener("paste", function (e) {var cbd = e.clipboardData;var ua = window.navigator.userAgent;// 如果是 Safari 直接 returnif ( !(e.clipboardData && e.clipboardData.items) ) {return;}// Mac平台下Chrome49版本以下 复制Finder中的文件的Bug Hack掉if(cbd.items && cbd.items.length === 2 && cbd.items[0].kind === "string" && cbd.items[1].kind === "file" &&cbd.types && cbd.types.length === 2 && cbd.types[0] === "text/plain" && cbd.types[1] === "Files" &&ua.match(/Macintosh/i) && Number(ua.match(/Chrome\/(\d{2})/i)[1]) < 49){return;}for(var i = 0; i < cbd.items.length; i++) {var item = cbd.items[i];if(item.kind == "file"){var blob = item.getAsFile();if (blob.size === 0) {return;}// blob 就是从剪切板获得的文件 可以进行上传或其他操作var data = new FormData();data.append("blob", blob);$.ajax({url : "php/blob_upload.php",type : 'POST',cache : false,data : data,processData : false,contentType : false,success : function(result){var   json = (typeof JSON.parse !== "undefined") ? JSON.parse(result) : eval("(" + result + ")");if(json.success == 1){//上传成功testEditor.cm.replaceSelection("![](" + json.url + ")");}}});}}
}, false);      

将代码放入到html页面 即可实现功能,目前确认chrome和火狐是可以支持的,可以使用微信、QQ、win7 自带截图 进行截图复制,在页面上直接粘贴

每30秒保存当前文档到本地

index.html设置一个30秒的定时器,将当前内容保存到本地localstorge,代码如下:

function save_content(){if (localStorage) {localStorage["content"] =$(".editormd-markdown-textarea").val();}
}
setInterval("save_content()",30000);  // 30s执行一次

打开网页时,首先判断是否有localStorage,代码如下:

 $(document).ready(function(){var isHave = false;if (localStorage) {if(localStorage.content && localStorage.content.length > 0) {md = localStorage.content;isHave = true;}}if(!isHave){                 $.ajax({url : 'test.md',cache : false,async : false,type : "GET",dataType : 'html',success : function (result){md = result;}});} // endif isHave

部署方案

由于本项目大部分都是静态资源,只有3个API接口,因此建议将3个API接口独立出来,静态文档托管到云上

可以放到七牛云或gitee等托管仓库

markdown在线文档编辑器

在线markdown文档编辑器

工具适合人群

目前使用该工具的几个场景:

  • 临时在线编写markdown格式记录表
    比如编写本周工作计划,执行完一条删除一条,非常方便, 没30秒自动保存
  • 编写一篇markdown推广文章,进行效果预览

官方QQ交流

如大家有问题,欢迎加入官方交流Q群讨论

官方交流Q群:1142802013

致谢

感谢editor.md 项目,非常的优秀

TODO

  • 首次打开页面时,随机显示一篇markdown文档
  • 加快加载速度

markdown在线编辑器 editor.md 二次开发详细教程相关推荐

  1. 大数据管理神器:Ambari自定义stack和服务二次开发详细教程

    背景 Ambari 是 Apache Software Foundation 的一个顶级开源项目,是一个集中部署.管理.监控 Hadoop 分布式集群的工具. 部署:自动化部署 Hadoop 软件,能 ...

  2. 转载-大数据管理神器:Ambari自定义stack和服务二次开发详细教程

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/ZYC88888/article/det ...

  3. Dobot机械臂 Arduino二次开发详细教程

    0.前言 这篇文章来源于计算机概论老师布置的Arduino实验作业(一个小组做的),我整理一下当时交的报告以凑一篇博客,也算对自己作业的一个总结. 机械臂用的是我们老师给的Dobot机械臂,某宝上有吧 ...

  4. php 手机cms系统,思途CMS系统手机版二次开发详细教程

    1.系统结构 思途CMS系统手机5.0版在框架kohana3.2基础上开发,思途根据自身需求对底层代码进行了一定的改动并集成了思途自己的模板机制,客户在进行模板开发之前需要熟悉kohana框架的基础知 ...

  5. 显示catispecobject_CATIA CAA 二次开发 详细教程

    1)创建三个点(参见教程5) 2) 将点连成线(参见教程6) 3) 通过三点创建一个参考平面,后面进行圆弧倒角时要用到该平面. CATIGSMPlane3Points_var Supportplane ...

  6. 基于JavaWeb的MarkDown编辑器editor.md的使用

    1.简介 editor.md是国内开发的开源项目,单纯基于前端JavaScript,可以实现markdown编辑器的所有功能. 主要特性 支持通用 Markdown / CommonMark 和 GF ...

  7. 自己开发的MarkDown在线编辑器越来越完善了,心里感到高兴。

    先晒一下它的样子.当然,我一开始就企图做到这四点:随时随地可以自动保存草稿内容到服务器:键盘快捷键进行Markdown格式编辑:可以分段编辑(万一文章比较长呢):还有就是手机上也能用大部分功能.现在这 ...

  8. 基于百度编辑器Ueditor的二次开发

    基于百度编辑器Ueditor的二次开发 官网下载 基本配置 简化后端配置,不请求后端配置项 后端接口规范 修改图片上传 说明及修改 新增按钮及弹窗(自定义附件上传) 按钮文案修改 在业务开发的时候,曾 ...

  9. markdown学习1:推荐的MarkDown在线编辑器 StackEdit

    文章转载自:推荐的MarkDown在线编辑器 StackEdit 一.介绍 简介 这款在线markdown编辑器,是一款很赞的应用.如果你是markdown的用户,那么你要试一下这款应用:如果你是ch ...

最新文章

  1. 优先级队列(小顶堆)的dijkstra算法
  2. 无协议脱欧将有损英国未来?议员吁支持二次公投
  3. c 异常 java异常_C ++和Java中异常处理的比较
  4. Apache(httpd)配置--防盗链配置和访问控制
  5. JS重点语法及常用对象总结
  6. vue循环渲染子组件视图不更新问题
  7. Zeppelin 可视化操作spark sql
  8. 想用 Python3 破冰人工智能?首先你得懂这些数学方法!
  9. 测测实际带宽,预防使用“假带宽”
  10. iOSQuartz2D-04-手动剪裁图片并保存到相册
  11. 同花顺 sendmessage python_进程通信-SendMessage使用方法
  12. 安全教育平台账号后四位_安全教育平台账号登录入口https://www.xueanquan.com/
  13. 冰点下载:数据解析错误
  14. 2021电赛预测—手把手带你玩转DDS模块AD9833
  15. 1386 - Cellular Automaton
  16. 计算机音乐名词解释,音乐常见名词解释
  17. 用python祝福父亲节_python 计算 父亲节
  18. stack.peek
  19. 如何在中国电子专利申请网缴纳专利年费
  20. Java字节码文件和二进制文件的区别与联系

热门文章

  1. MISRA-C 2012修改指南介绍及示例
  2. 常用金属材料牌号表示方法
  3. 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试六十题(10.12)
  4. 【 Vue全家桶 · Vue CLI(四)】Vue项目的详细目录结构解析
  5. digg bt_Digg很遗憾找到最新消息
  6. linux 限制带宽命令,怎样在 Linux 中限制网络带宽使用
  7. PLUSE论文阅读笔记
  8. Elasticsearch 又双叒发生数据泄露了,近 200 万条“禁飞名单”被泄露
  9. GDB或delve调试Go程序查看变量显示<optimized out>解决办法
  10. 华为服务ITR变革经验分享!ITR流程该如何打造?服务该如何转型升级?