百度umeditor富文本编辑器插件扩展
富文本编辑器在WEB开发中经常用到,个人比较喜欢用百度出的ueditor这款,ueditor这款本身支持插件扩展的,但是ueditor的mini版本 umeditor 就没有那么方便了,不过找了很多资料根据这些资料琢磨出了如果给umeditor添加插件,这个案例中将实现增加代码和附件插入.
准备工作:
1.umeditor下载:
https://github.com/fex-team/umeditor/releases
2.插件弹窗使用的是 layer:
http://layer.layui.com/?alone
如何创建插件?
第一步:我们在编辑器umeditor目录下创建一个plugins的文件夹,这里用来存放我们自定义的插件,如上图,我们定义了一个代码(code)以及附件(attachment)插件
第二步:创建plugins.js文件,这里用来封装我们插件的信息,代码如下
//定义插件容器 var plugins = new Array(); //注册插件 function registerPlugins() { //添加代码插件 plugins['code'] = new function () { //注册界面事件 var result = new Object(); result.CodeObj = {}; //注册指定事件 UM.registerUI('code', function (name) { var me = this; var $btn = $.eduibutton({ icon: 'source', click: function () { var layIndex = layer.open({ type: 2, title: '源代码', maxmin: false, shadeClose: true, //点击遮罩关闭层 area: ['620px', '380px'], content: '/lib/umeditor/plugins/code/code.html', btn: ['确定', '取消'], btn1: function (index) { if (result.CodeObj.codeContent != '') { //把内容插入编辑器 var html = '<pre class="prettyprint"><code class="language-' + result.CodeObj.codeType + '">' + result.CodeObj.codeContent + '</code></pre>'; me.execCommand('insertHtml', html); } //关闭弹窗并且清空当次内容 layer.close(layIndex); result.CodeObj = {}; //UM.getEditor('container').setContent(html, true); }, btn2: function (index) { //关闭当前弹窗 并且清空当前数据容器 layer.close(layIndex); result.CodeObj = {}; } }); }, title: '源代码' }); me.addListener('selectionchange', function () { //切换为不可编辑时,把自己变灰 var state = this.queryCommandState(name); $btn.edui().disabled(state == -1).active(state == 1) }); return $btn; } ); return result; }; //添加代码插件 plugins['attachment'] = new function () { //注册界面事件 var result = new Object(); result.DataObj = {}; //注册指定事件 UM.registerUI('attachment', function (name) { var me = this; var $btn = $.eduibutton({ icon: 'attachment', click: function () { var layIndex = layer.open({ type: 2, title: '附件', maxmin: false, shadeClose: true, //点击遮罩关闭层 area: ['600px', '320px'], content: '/lib/umeditor/plugins/attachment/attachment.html', btn: ['确定', '取消'], btn1: function (index) { if (result.DataObj.title != "" && result.DataObj.url != "") { var html = '<div class="card" style="margin-bottom:5px;padding:0px;">'; html += '<div class="col-lg-12" style = "margin-top:10px;padding-left: 0px;">'; html += '<div class="col-lg-3" style="width:55px;">'; html += '<img src="/images/download.png" />'; html += '</div>'; html += '<div class="col-lg-8">'; html += '<div class="row">'; html += result.DataObj.title; html += '</div>'; html += '<div class="row">'; html += '提取密码:<strong>' + (result.DataObj.password != "" ? result.DataObj.password:"")+'</strong>'; html += '</div>'; html += '</div>'; html += '<div class="col-sm-1">'; html += '<a href="' + result.DataObj.url + '" _href="' + result.DataObj.url + '" class="btn btn-link" target="_blank"> <i class="icon icon-download-alt icon-2x"></i></a>'; html += '</div>'; html += '</div>'; html += '</div>'; me.execCommand('insertHtml', html); } //关闭当前弹窗 并且清空当前数据容器 layer.close(layIndex); result.DataObj = {}; }, btn2: function (index) { //关闭当前弹窗 并且清空当前数据容器 layer.close(layIndex); result.DataObj = {}; } }); }, title: '附件' }); me.addListener('selectionchange', function () { //切换为不可编辑时,把自己变灰 var state = this.queryCommandState(name); $btn.edui().disabled(state == -1).active(state == 1) }); return $btn; } ); return result; }; }
第三步:因为例子中的插件是需要弹窗的,所以我们需要借助layer这个弹窗组建来实现,这里就以插入代码为说明吧
a.创建code文件夹
b.创建code.html文件
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="/lib/jquery/jquery-3.2.0.min.js"></script> <link href="/style/css/zui.min.css" rel="stylesheet" /> </head> <body> <div class="container-fluid"> <form class="form-horizontal form-condensed" method="post"> <div class="form-group"> <div class="col-md-4" style="width:620px;margin-top:10px;"> <select class="form-control" onchange="MonitorTypeChanage()" style="height:30px;font-size:16px;" id="CodeType"> <option value="csharp">C#</option> <option value="javascript">JavaScript</option> <option value="html">HTML</option> <option value="css">CSS</option> <option value="SQL">SQL</option> </select> </div> </div> <div class="form-group"> <div class="col-md-12"> <textarea style="height:210px;width:600px;" oninput="MonitorContentsInput()" id="CodeContents" name="CodeContents" placeholder="请输入代码内容..."></textarea> </div> </div> </form> </div> <script type="text/javascript" src="code.js"></script> </body> </html>
c.创建code.js文文件
var result = { codeType: 'csharp', codeContent:'' } window.onload = function () { parent.plugins['code'].CodeObj = result; } //监听代码内容输入事件 function MonitorContentsInput() { result.codeContent = html2Escape($("#CodeContents").val()); parent.plugins['code'].CodeObj = result; } //监听代码类型选择事件 function MonitorTypeChanage() { result.codeType = $("#CodeType").val(); parent.plugins['code'].CodeObj = result; } function html2Escape(sHtml) { return sHtml.replace(/[<>&"]/g, function (c) { return { '<': '<', '>': '>', '&': '&', '"': '"' }[c]; }); }
d.弹窗组件中的功能写完了,我们需要在plugins.js文件中把刚刚增加的功能组件注册到umeditor对象中,完成这一步就完成一个插件功能,代码如下(plugins.js所有组件代码在第一步中)
plugins['code'] = new function () { //注册界面事件 var result = new Object(); result.CodeObj = {}; //注册指定事件 UM.registerUI('code', function (name) { var me = this; var $btn = $.eduibutton({ icon: 'source', click: function () { var layIndex = layer.open({ type: 2, title: '源代码', maxmin: false, shadeClose: true, //点击遮罩关闭层 area: ['620px', '380px'], content: '/lib/umeditor/plugins/code/code.html', btn: ['确定', '取消'], btn1: function (index) { if (result.CodeObj.codeContent != '') { //把内容插入编辑器 var html = '<pre class="prettyprint"><code class="language-' + result.CodeObj.codeType + '">' + result.CodeObj.codeContent + '</code></pre>'; me.execCommand('insertHtml', html); } //关闭弹窗并且清空当次内容 layer.close(layIndex); result.CodeObj = {}; //UM.getEditor('container').setContent(html, true); }, btn2: function (index) { //关闭当前弹窗 并且清空当前数据容器 layer.close(layIndex); result.CodeObj = {}; } }); }, title: '源代码' }); me.addListener('selectionchange', function () { //切换为不可编辑时,把自己变灰 var state = this.queryCommandState(name); $btn.edui().disabled(state == -1).active(state == 1) }); return $btn; } ); return result; };
如何使用?
准备工作准备好以后我们新建一个页面,引入相关的样式以及JS文件,代码如下:
@{ ViewData["Title"] = "umeditor富文本编辑器插件扩展案例"; } @section Style{ <link href="~/lib/umeditor/themes/default/css/umeditor.min.css" rel="stylesheet" /> } <div class="container-fixed-md"> <textarea style="height:300px;width:700px;" id="Contents" name="Contents" placeholder=""></textarea> </div> @section Scripts{ <script src="~/lib/layer/layer.min.js"></script> <script src="~/lib/umeditor/umeditor.config.js"></script> <script src="~/lib/umeditor/umeditor.min.js"></script> <!--自定义插件文件导入--> <script src="~/lib/umeditor/plugins/plugins.js"></script> <script type="text/javascript"> var um = UM.getEditor('Contents', { toolbar: [ ' bold italic underline | insertorderedlist removeformat |', 'link unlink | emotion image attachment code', '| fullscreen', 'formula' ] }); //注册插件 registerPlugins(); </script> }
运营效果?
示例代码如何下载?
码云下载:https://gitee.com/dotnet_51core/aspnetcoremvc
放一张示例截图(其他几个示例的博文会在这个月内全部更新上去):
写BUG我们是认真的!
哦,不,写示例我们是认真的!
百度umeditor富文本编辑器插件扩展的更多相关文章
- 使用百度UMeditor富文本编辑器,修改自定义图片上传,修改源码
富文本编辑器,不多说了,这个大家应该都用到过,至于用到的什么版本,那就分很多种 CKEditor:很早以前叫FCK,那个时候也用过,现在改名了,比较流行的一个插件,国外很多公司在用 UEDITOR:百 ...
- ASP.NET MVC5 中百度ueditor富文本编辑器的使用
随着网站信息发布内容越来越多,越来越重视美观,富文本编辑就是不可缺少的了,众多编辑器比较后我选了百度的ueditor富文本编辑器. 百度ueditor富文本编辑器分为两种一种是完全版的ueditor, ...
- 百度Web富文本编辑器ueditor在ASP.NET MVC3项目中的使用说明
====================================================================== [百度Web富文本编辑器ueditor在ASP.NET M ...
- 百度ueditor富文本编辑器的使用
百度ueditor富文本编辑器的使用 //以下为我在官网下载的ueditor v1.3.5 php版的大楷配置步骤第一步: //配置文件的引入应该比功能文件先引入,最后设置语言类型.即:editor. ...
- PHP如何搭建百度Ueditor富文本编辑器
本文为大家分享了PHP搭建百度Ueditor富文本编辑器的方法,供大家参考,具体内容如下 下载UEditor 官网:下载地址 将下载好的文件解压到thinkphp项目中,本文是解压到PUBLIC目录下 ...
- 关于百度Editor富文本编辑器 自定义上传位置
因为要在网站上编辑富文本数据,所以直接采用百度的富文本编辑器,但是这个编辑器有个缺点,默认情况下,文件只能上传到网站的根目录,不能自定义路径. 而且json配置文件只能和controller.jsp在 ...
- django之百度Ueditor富文本编辑器后台集成
Python3 + Django2.0 百度Ueditor 富文本编辑器的集成 百度富文本编辑器官网地址:http://fex.baidu.com/ueditor/ 疑问:为什么要二次集成? 答案:因 ...
- JSP嵌入ueditor、umeditor富文本编辑器
一.下载: 1.什么是富文本编辑器?就是: 或者是这个: 其中第一个功能比较详尽,其主要用来编写文章,名字叫做udeitor. 第二个就相对精简,是第一个的MINI版,其主要用来编辑即时聊天或者发帖, ...
- vue集成百度UEditor富文本编辑器
在前端开发的项目中.难免会遇到需要在页面上集成一个富文本编辑器.那么.如果你有这个需求.希望可以帮助到你 vue是前端开发者所追捧的框架,简单易上手,但是基于vue的富文本编辑器大多数太过于精简.于是 ...
随机推荐
- jquery 判断 元素是否具有某个class
两种方法如下: 1.hasClass(‘classname’) 2.is(‘.classname’) 例子: 1.使用is(‘.classname’)的方法 $('div').is('.redColo ...
- SQL SERVER中LIKE在Char和nChar输出结果不一致解惑
一同事在写脚本时,遇到一个关于LIKE里面使用不同的变量类型导致查询结果不一致的问题,因为这个问题被不同的人问过好几次,索性总结一下,免得每次都要解释一遍,直接丢一篇博客岂不是更方便!其实看似有点让人 ...
- Android 常用RGB值以及中英文名称
Android 常用RGB值以及中英文名称 Android 常用 RGB值以及中英文名称 颜 色 RGB 值 英文名 中文名 #FFB6C1 LightPink 浅 ...
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记二十一之铭文升级版
铭文一级: DataV功能说明1)点击量分省排名/运营商访问占比 Spark SQL项目实战课程: 通过IP就能解析到省份.城市.运营商 2)浏览器访问占比/操作系统占比 Hadoop项目:userA ...
- Delphi fmx控件在手机滑动与单击的问题
Delphi fmx控件在手机滑动与单击的问题 (2016-03-08 10:52:00) 转载▼ 标签: it delphi 分类: Delphi10 众所周知,fmx制作的app,对于象TEdit ...
- Media Queries 媒体查询常见设备断点
按需调整断点 一.谷歌后摘抄的一部分媒体查询 /*#region SmartPhones */ /* SmartPhones */@media only screen and (min-device- ...
- vue keep-alive解决关闭标签动态缓存问题
直接上代码: <keep-alive :include='topNavMentNames'> <router-view ></router-view> </k ...
- 2019-4-22 linux学习
linux 一.linux的目录结构 / 挂载目录:为所有目录的根目录 home 家目录: 用户的根目录 存放普通用户的文件 例如:创建一个jack用户,就会产生一个Jack ...
- 仿今日头条横向滚动导航栏--原生js
咳咳!先打一波小广告,在上一篇里忘记了,那啥……我的那个个人博客做好了-->(我的博客)<--.嘿嘿 好嘞,言归正传,说说我们的效果. 其实就是实现横向滑动,进行选择. 原理: 鼠标按下, ...
- Android框架式编程之MVP架构
MVP(Model-View-Presenter)模式.是将APP的结构分为三层:View - Presenter - Model. View 1. 提供UI交互 2. 在presenter的控制下修 ...