@kexinWeb
2017-02-21T23:41:58.000000Z
字数 6257
阅读 6165
editor.md
富文本编辑器
当后台需要插入富文本编辑器的时候,editor.md是一个不错的选择,它是一款开源的md编辑器,编写简单,风格简洁美观,非常适合编写技术文档。
不感兴趣的可以直接跳到实战部分
a.打开项目文件件下面的examples文件夹中的full.html或者use-zepto文件
可以看到需要引入的css和js文件如下:
<link rel="stylesheet" href="css/style.css" />
<link rel="stylesheet" href="../css/editormd.css" />
<script src="js/jquery.min.js"></script>
<script src="../editormd.js"></script>
editor.md的基本配置项以及可以使用的函数:
<script type="text/javascript">
var testEditor;
$(function() {
$.get('test.md', function(md){
testEditor = editormd("test-editormd", {
width: "90%",
height: 740,
path : '../lib/',
theme : "dark",
previewTheme : "dark",
editorTheme : "pastel-on-dark",
markdown : md,
codeFold : true,
//syncScrolling : false,
saveHTMLToTextarea : true, // 保存 HTML 到 Textarea
searchReplace : true,
//watch : false, // 关闭实时预览
htmlDecode : "style,script,iframe|on*", // 开启 HTML 标签解析,为了安全性,默认不开启
//toolbar : false, //关闭工具栏
//previewCodeHighlight : false, // 关闭预览 HTML 的代码块高亮,默认开启
emoji : true,
taskList : true,
tocm : true, // Using [TOCM]
tex : true, // 开启科学公式TeX语言支持,默认关闭
flowChart : true, // 开启流程图支持,默认关闭
sequenceDiagram : true, // 开启时序/序列图支持,默认关闭,
//dialogLockScreen : false, // 设置弹出层对话框不锁屏,全局通用,默认为true
//dialogShowMask : false, // 设置弹出层对话框显示透明遮罩层,全局通用,默认为true
//dialogDraggable : false, // 设置弹出层对话框不可拖动,全局通用,默认为true
//dialogMaskOpacity : 0.4, // 设置透明遮罩层的透明度,全局通用,默认值为0.1
//dialogMaskBgColor : "#000", // 设置透明遮罩层的背景颜色,全局通用,默认为#fff
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);
}
});
});
$("#goto-line-btn").bind("click", function(){
testEditor.gotoLine(90);
});
$("#show-btn").bind('click', function(){
testEditor.show();
});
$("#hide-btn").bind('click', function(){
testEditor.hide();
});
$("#get-md-btn").bind('click', function(){
alert(testEditor.getMarkdown());
});
$("#get-html-btn").bind('click', function() {
alert(testEditor.getHTML());
});
$("#watch-btn").bind('click', function() {
testEditor.watch();
});
$("#unwatch-btn").bind('click', function() {
testEditor.unwatch();
});
$("#preview-btn").bind('click', function() {
testEditor.previewing();
});
$("#fullscreen-btn").bind('click', function() {
testEditor.fullscreen();
});
$("#show-toolbar-btn").bind('click', function() {
testEditor.showToolbar();
});
$("#close-toolbar-btn").bind('click', function() {
testEditor.hideToolbar();
});
$("#toc-menu-btn").click(function(){
testEditor.config({
tocDropdown : true,
tocTitle : "目录 Table of Contents",
});
});
$("#toc-default-btn").click(function() {
testEditor.config("tocDropdown", false);
});
});
</script>
对于配置项只说明一点,就是主题theme的设置:
打开同一目录下的theme.html(用浏览器打开),这时候你可以看到不同主题的呈现效果,选定你想要的主题,对配置项进行相应的修改。
例如我修改的配置项如下:
theme : "default",
previewTheme : "default",
editorTheme : "base16-light",
对于函数,只有两个函数与我们的需求相关,那就是getHtml()还有getMarkDown()函数,这两个函数是否符合我们的需求的,让我们接下来再看:
b.用浏览器打开use-zepto.html文件(由于full.html在非php环境中打开会出错,原因在于 $.get('test.md', function(md){});
在左边的编辑器里面编辑:(注意:要有TOC还有代码高亮区!)
然后点击Get Html
按钮,仔细观察alert内容(建议把alert改为console.log,方便对比)
打开开发者工具,定位到preview区
然后发现,你想要的html代码跟getHtml()得到的代码不一样!!!
那么关键点就在于获取容器editormd-preview-container里面的html代码了。
<link rel="stylesheet" href="css/style.css" />
<link rel="stylesheet" href="../css/editormd.css" />
<script src="js/zepto.min.js"></script>
<script src="../editormd.js"></script>
<div id="layout">
<div class="editormd" id="test-editormd">
<textarea></textarea>
</div>
<br/><input id="submit" type="button" name="submit" value="Submit" class="btn" style="margin-left: 5%;" />
<button id="preview-btn">Preview HTML (Press Shift + ESC cancel)</button>
</div>
js部分
新建一个editormd对象:
testEditor = editormd();
editormd的配置项如下:
testEditor = editormd("test-editormd", {
width: "90%",
height: 740,
path : '../lib/',
theme : "default",
previewTheme : "default",
editorTheme : "base16-light",
codeFold : true,
//syncScrolling : false,
saveHTMLToTextarea : true, // 保存 HTML 到 Textarea
searchReplace : true,
//watch : false, // 关闭实时预览
htmlDecode : "style,script,iframe|on*", // 开启 HTML 标签解析,为了安全性,默认不开启
//toolbar : false, //关闭工具栏
//previewCodeHighlight : false, // 关闭预览 HTML 的代码块高亮,默认开启
emoji : true,
taskList : true,
tocm : true, // Using [TOCM]
tex : true, // 开启科学公式TeX语言支持,默认关闭
flowChart : true, // 开启流程图支持,默认关闭
sequenceDiagram : true, // 开启时序/序列图支持,默认关闭,
//dialogLockScreen : false, // 设置弹出层对话框不锁屏,全局通用,默认为true
//dialogShowMask : false, // 设置弹出层对话框显示透明遮罩层,全局通用,默认为true
//dialogDraggable : false, // 设置弹出层对话框不可拖动,全局通用,默认为true
//dialogMaskOpacity : 0.4, // 设置透明遮罩层的透明度,全局通用,默认值为0.1
//dialogMaskBgColor : "#000", // 设置透明遮罩层的背景颜色,全局通用,默认为#fff
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);
}
});
submit函数用于获取html代码和markdown源代码:
document.getElementById("submit").onclick = function(){
let htmlCode = document.getElementsByClassName("editormd-preview-container")[0].innerHTML;
let mdCode = testEditor.getMarkdown();
console.log(htmlCode);
}
模拟用户从数据库拿到md源代码,可以修改文章:
document.getElementsByTagName('textarea')[0].innerHTML = "##HELLO keke";
<div class="markdown-body editormd-preview-container"></div>
模拟从后台获取数据
编辑后台管理(admin.html)md编辑器,按submit
按钮,把控制台打印出来的代码贴到(user.html)markdowm-body标签里面:
<div class="markdown-body editormd-preview-container">
<h2 id="h2-kek"><a name="kek" class="reference-link"></a><span class="header-link octicon octicon-link"></span>kek</h2><p>Wad</p>
<div class="markdown-toc editormd-markdown-toc"><ul class="markdown-toc-list"><li><a class="toc-level-2" href="#kek" level="2">kek</a><ul></ul></li></ul></div><pre class="prettyprint linenums prettyprinted"><ol class="linenums"><li class="L0"><code class="lang-javascript"><span class="kwd">var</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span></code></li></ol></pre>
</div>
浏览器打开,成功!