添加插件的步骤
定义插件
在插件目录下创建一个名为你插件名称的目录:
[root@liqiang.io]# tree
editor.md/
plugins/
hello-world/
....
编写插件框架
然后在插件目录下创建一个你插件名称 plugin-name.js
的文件,理论上这个文件名是随意的,但是,按照习惯,我们保持这个文件名和插件名相同,同时复制以下框架内容:
[root@liqiang.io]# cat hello-world.js
(function() {
var factory = function (exports) {
var $ = jQuery; // if using module loader(Require.js/Sea.js).
var pluginName = "helloworld-dialog";
exports.fn.helloWorld = function() {
var _this = this;
var lang = this.lang;
var editor = this.editor;
var settings = this.settings;
var path = settings.pluginPath + pluginName + "/";
var classPrefix = this.classPrefix;
var dialogName = classPrefix + pluginName, dialog;
if (editor.find("." + dialogName).length < 1)
{
var dialogContent = "<div class=\"markdown-body\" style=\"font-family:微软雅黑, Helvetica, Tahoma, STXihei,Arial;height:390px;overflow:auto;font-size:14px;border-bottom:1px solid #ddd;padding:0 20px 20px 0;\"></div>";
dialog = this.createDialog({
name : dialogName,
title : "Hello world",
width : 840,
height : 540,
mask : settings.dialogShowMask,
drag : settings.dialogDraggable,
content : dialogContent,
lockScreen : settings.dialogLockScreen,
maskStyle : {
opacity : settings.dialogMaskOpacity,
backgroundColor : settings.dialogMaskBgColor
},
buttons : {
close : [lang.buttons.close, function() {
this.hide().lockScreen(false).hideMask();
return false;
}]
}
});
}
dialog = editor.find("." + dialogName);
this.dialogShowMask(dialog);
this.dialogLockScreen();
dialog.show();
};
};
// CommonJS/Node.js
if (typeof require === "function" && typeof exports === "object" && typeof module === "object")
{
module.exports = factory;
}
else if (typeof define === "function") // AMD/CMD/Sea.js
{
if (define.amd) { // for Require.js
define(["editormd"], function(editormd) {
factory(editormd);
});
} else { // for Sea.js
define(function(require) {
var editormd = require("./../../editormd");
factory(editormd);
});
}
}
else
{
factory(window.editormd);
}
})();
现在这个插件其实已经可以开始使用了,因为我们没有实现任何逻辑,所以这个插件的弹出窗口不会有什么内容,就是一个空白页:
使用插件
要将插件集成到我们的 editor 里面去,那么:
- 你需要将你的插件文件引入到 html 中(这里以常规的 html/js 来说,没有包含打包工具等)
- 调用你插件的名字,例如:
[root@liqiang.io]# cat test.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Hello Editor.md!</title>
</head>
<body>
<link rel="stylesheet" href="editor.md/css/editormd.min.css" />
<div>
<button id="btn">click me</button>
</div>
<div id="editor" style="width: 90%; height: 720px">
<!-- Tips: Editor.md can auto append a `<textarea>` tag -->
<textarea style="display: none">### Hello Editor.md !</textarea>
</div>
<script src="js/jquery.min.js"></script>
<script src="editor.md/editormd.min.js"></script>
<script src="editor.md/plugins/hello-world/hello-world.js"></script>
<script type="text/javascript">
var mdEditor = 0;
$(function () {
mdEditor = editormd("editor", {
width: "100rem",
height: "50rem",
markdown: "xxxx", // dynamic set Markdown text
path: "editor.md/lib/", // Autoload modules mode, codemirror, marked... dependents libs path
});
});
</script>
<script>
$("#btn").click(function () {
mdEditor.helloWorld();
});
</script>
</body>
</html>
这里设置了一个 button 的点击响应函数,当你点击了 button 之后,就会执行你的插件,然后弹出这个窗口了。
自定义窗口
增加按钮
Dialog 的按钮是通过插件的 buttons 属性控制的,你可以设置 ”确认“、”取消“的按钮,当然这些都不是强制的名字,你可以自定义自己想要的按钮。一个示例:
buttons : {
enter : [lang.buttons.enter, function() {
this.hide().lockScreen(false).hideMask();
this.remove(); //删除对话框
return false;
}],
cancel : [lang.buttons.cancel, function() {
this.hide().lockScreen(false).hideMask();
this.remove(); //删除对话框
return false;
}]
}